GCOP
1.0
|
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