00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00032 #include <mtt/motionModel.h>
00033
00034 MotionModel::MotionModel()
00035 {
00036 _x = Vector5d::Zero();
00037 _xp = Vector5d::Zero();
00038 _z = Vector3d::Zero();
00039 _P = Matrix5d::Zero();
00040 }
00041
00042 void MotionModel::initEstimator(Vector5d& x,Matrix5d& P)
00043 {
00044
00045 _estimator.InitFilter(x,P);
00046 }
00047
00048 void MotionModel::initEstimator(Vector3d& z)
00049 {
00050
00051
00052 Vector5d x_init;
00053
00054 x_init(0)=z(0);
00055 x_init(1)=z(1);
00056 x_init(2)=0;
00057 x_init(3)=z(2);
00058 x_init(4)=0;
00059
00060 _x=x_init;
00061 _xp=_x;
00062 _z=z;
00063
00064 _estimator.InitFilter(x_init);
00065
00066 kMatrix P = _estimator.calculateP();
00067
00068 _P(0,0)=P(0,0);
00069 _P(0,1)=P(0,1);
00070 _P(0,2)=P(0,2);
00071 _P(0,3)=P(0,3);
00072 _P(0,4)=P(0,4);
00073
00074 _P(1,0)=P(1,0);
00075 _P(1,1)=P(1,1);
00076 _P(1,2)=P(1,2);
00077 _P(1,3)=P(1,3);
00078 _P(1,4)=P(1,4);
00079
00080 _P(2,0)=P(2,0);
00081 _P(2,1)=P(2,1);
00082 _P(2,2)=P(2,2);
00083 _P(2,3)=P(2,3);
00084 _P(2,4)=P(2,4);
00085
00086 _P(3,0)=P(3,0);
00087 _P(3,1)=P(3,1);
00088 _P(3,2)=P(3,2);
00089 _P(3,3)=P(3,3);
00090 _P(3,4)=P(3,4);
00091
00092 _P(4,0)=P(4,0);
00093 _P(4,1)=P(4,1);
00094 _P(4,2)=P(4,2);
00095 _P(4,3)=P(4,3);
00096 _P(4,4)=P(4,4);
00097 }
00098
00099 void MotionModel::stepEstimator(Vector3d z)
00100 {
00101 kVector u(0);
00102
00103 _estimator.z_measured=z;
00104 _z=z;
00105
00106 _estimator.inovation_error=_estimator.z_measured-_estimator.x_predicted.head(3);
00107
00108
00109 kVector z_(3);
00110 z_(0)=z(0);
00111 z_(1)=z(1);
00112 z_(2)=z(2);
00113
00114
00115 _estimator.step(u,z_);
00116
00117
00118
00119
00120
00121
00122
00123 kVector x_(5);
00124 x_ = _estimator.getX();
00125
00126
00127 _x(0)=x_(0);
00128 _x(1)=x_(1);
00129 _x(2)=x_(2);
00130 _x(3)=x_(3);
00131 _x(4)=x_(4);
00132
00133
00134
00135
00136 kMatrix P=_estimator.calculateP();
00137
00138
00139 _P(0,0)=P(0,0);
00140 _P(0,1)=P(0,1);
00141 _P(0,2)=P(0,2);
00142 _P(0,3)=P(0,3);
00143 _P(0,4)=P(0,4);
00144
00145 _P(1,0)=P(1,0);
00146 _P(1,1)=P(1,1);
00147 _P(1,2)=P(1,2);
00148 _P(1,3)=P(1,3);
00149 _P(1,4)=P(1,4);
00150
00151 _P(2,0)=P(2,0);
00152 _P(2,1)=P(2,1);
00153 _P(2,2)=P(2,2);
00154 _P(2,3)=P(2,3);
00155 _P(2,4)=P(2,4);
00156
00157 _P(3,0)=P(3,0);
00158 _P(3,1)=P(3,1);
00159 _P(3,2)=P(3,2);
00160 _P(3,3)=P(3,3);
00161 _P(3,4)=P(3,4);
00162
00163 _P(4,0)=P(4,0);
00164 _P(4,1)=P(4,1);
00165 _P(4,2)=P(4,2);
00166 _P(4,3)=P(4,3);
00167 _P(4,4)=P(4,4);
00168
00169
00170
00171
00172 kVector xp=_estimator.predict(u);
00173
00174
00175 _xp(0)=xp(0);
00176 _xp(1)=xp(1);
00177 _xp(2)=xp(2);
00178 _xp(3)=xp(3);
00179 _xp(4)=xp(4);
00180
00181
00182
00183
00184
00185
00186 _estimator.x_predicted=_xp;
00187 }