GCOP  1.0
imumanifold.h
Go to the documentation of this file.
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