aboutsummaryrefslogtreecommitdiff
path: root/apps/position_estimator_mc/positionKalmanFilter1D_dT.m
diff options
context:
space:
mode:
authorSimon Wilks <sjwilks@gmail.com>2013-04-22 20:54:41 +0200
committerSimon Wilks <sjwilks@gmail.com>2013-04-22 20:54:41 +0200
commita3b3879302c80aa439d636c55ed0a6e2710323b4 (patch)
treedaebd1ec136d53c00479bb395932ff99c1c03c83 /apps/position_estimator_mc/positionKalmanFilter1D_dT.m
parentad212ee628cd08c5c063757e4a5a2edc82392f3b (diff)
parentd62058eccf7d3801a752aac11fb2c37f198a239c (diff)
downloadpx4-firmware-a3b3879302c80aa439d636c55ed0a6e2710323b4.tar.gz
px4-firmware-a3b3879302c80aa439d636c55ed0a6e2710323b4.tar.bz2
px4-firmware-a3b3879302c80aa439d636c55ed0a6e2710323b4.zip
Merge remote-tracking branch 'upstream/master' into eagletree
Diffstat (limited to 'apps/position_estimator_mc/positionKalmanFilter1D_dT.m')
-rwxr-xr-xapps/position_estimator_mc/positionKalmanFilter1D_dT.m26
1 files changed, 26 insertions, 0 deletions
diff --git a/apps/position_estimator_mc/positionKalmanFilter1D_dT.m b/apps/position_estimator_mc/positionKalmanFilter1D_dT.m
new file mode 100755
index 000000000..f94cce1fb
--- /dev/null
+++ b/apps/position_estimator_mc/positionKalmanFilter1D_dT.m
@@ -0,0 +1,26 @@
+function [x_aposteriori,P_aposteriori]=positionKalmanFilter1D_dT(dT,x_aposteriori_k,P_aposteriori_k,u,z,gps_update,Q,R,thresh,decay)
+ %dynamics
+ A = [1 dT -0.5*dT*dT;
+ 0 1 -dT;
+ 0 0 1];
+ B = [0.5*dT*dT; dT; 0];
+ C = [1 0 0];
+ %prediction
+ x_apriori=A*x_aposteriori_k+B*u;
+ P_apriori=A*P_aposteriori_k*A'+Q;
+ if abs(u)<thresh
+ x_apriori(2)=decay*x_apriori(2);
+ end
+ %update
+ if gps_update==1
+ y=z-C*x_apriori;
+ S=C*P_apriori*C'+R;
+ K=(P_apriori*C')/S;
+ x_aposteriori=x_apriori+K*y;
+ P_aposteriori=(eye(size(P_apriori))-K*C)*P_apriori;
+ else
+ x_aposteriori=x_apriori;
+ P_aposteriori=P_apriori;
+ end
+end
+