GCOP  1.0
insmanifold.h
Go to the documentation of this file.
00001 #ifndef GCOP_INSMANIFOLD_H
00002 #define GCOP_INSMANIFOLD_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, 15, 1> Vector15d;
00013   typedef Matrix<double, 15, 15> Matrix15d;
00014 
00015   struct InsState {
00016   InsState() : 
00017     R(Matrix3d::Identity()), 
00018       bg(Vector3d::Zero()), 
00019       ba(Vector3d::Zero()), 
00020       p(Vector3d::Zero()),
00021       v(Vector3d::Zero()),
00022       P(Matrix15d::Identity()) {
00023     }
00024     
00025     Matrix3d R;   
00026     Vector3d bg;  
00027     Vector3d ba;  
00028 
00029     Vector3d p;   
00030     Vector3d v;   
00031     
00032     Matrix15d P;   
00033   };
00034   
00035   //  typedef pair<Matrix3d, Vector6d> InsState;
00036   
00037   class InsManifold : public Manifold<InsState, 15> {
00038     
00039   public:
00040     static InsManifold& Instance();
00041 
00042     void Lift(Vector15d &v,
00043               const InsState &xa,
00044               const InsState &xb);      
00045 
00046     void Retract(InsState &xb, 
00047                  const InsState &xa,
00048                  const Vector15d &v);
00049 
00050     void dtau(Matrix15d &M, const Vector15d &v);
00051 
00052     void Adtau(Matrix15d &M, const Vector15d &v);
00053 
00054   private:
00055     InsManifold();
00056   };  
00057 }
00058 
00059 
00060 #endif