GCOP
1.0
|
00001 #ifndef GCOP_IMUMANIFOLD_H 00002 #define GCOP_IMUMANIFOLD_H 00003 00004 #include "manifold.h" 00005 00006 namespace gcop { 00007 00008 using namespace std; 00009 using namespace Eigen; 00010 00011 typedef Matrix<double, 6, 1> Vector6d; 00012 typedef Matrix<double, 9, 1> Vector9d; 00013 typedef Matrix<double, 9, 9> Matrix9d; 00014 00015 struct ImuState { 00016 ImuState() : 00017 R(Matrix3d::Identity()), 00018 bg(Vector3d::Zero()), 00019 ba(Vector3d::Zero()), 00020 P(Matrix9d::Identity()) { 00021 } 00022 00023 Matrix3d R; 00024 Vector3d bg; 00025 Vector3d ba; 00026 00027 Matrix9d P; 00028 }; 00029 00030 // typedef pair<Matrix3d, Vector6d> ImuState; 00031 00032 class ImuManifold : public Manifold<ImuState, 9> { 00033 00034 public: 00035 static ImuManifold& Instance(); 00036 00037 void Lift(Vector9d &v, 00038 const ImuState &xa, 00039 const ImuState &xb); 00040 00041 void Retract(ImuState &xb, 00042 const ImuState &xa, 00043 const Vector9d &v); 00044 00045 void dtau(Matrix9d &M, const Vector9d &v); 00046 00047 void Adtau(Matrix9d &M, const Vector9d &v); 00048 00049 private: 00050 ImuManifold(); 00051 }; 00052 } 00053 00054 00055 #endif