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 }