GCOP  1.0
se3.h
Go to the documentation of this file.
00001 #ifndef GCOP_SE3_H
00002 #define GCOP_SE3_H
00003 
00004 #include "group.h"
00005 #include "so3.h"
00006 
00007 namespace gcop {
00008 
00009   using namespace Eigen;
00010 
00011   typedef Matrix<double, 6, 1> Vector6d;
00012   typedef Matrix<double, 7, 1> Vector7d;
00013   typedef Matrix<double, 4, 4> Matrix4d;
00014   typedef Matrix<double, 6, 6> Matrix6d;
00015 
00016   class SE3 : public Group<6, 4> {
00017   public:
00018 
00019     SE3();
00020 
00021     static SE3& Instance();
00022   
00023     void inv(Matrix4d &gi, const Matrix4d &g) const;
00024 
00025     void hat(Matrix4d &vh, const Vector6d &v) const;
00026 
00027     void hatinv(Vector6d &v, const Matrix4d &vh) const;
00028 
00029     void Tg(Matrix6d &M, const Matrix4d &g) const;
00030     
00031     void Ad(Matrix6d &M, const Matrix4d &g) const;
00032 
00033     void ad(Matrix6d &M, const Vector6d &v) const;
00034 
00035     void adt(Matrix6d &M, const Vector6d &mu) const;
00036 
00037     void adinv(Vector6d& v, const Matrix6d& m) const;
00038 
00039     void exp(Matrix4d &g, const Vector6d &v) const;
00040 
00041     void log(Vector6d& v, const Matrix4d& g) const;
00042 
00043     //    void plog(Vector6d& v, const Matrix4d& m) const;
00044 
00045     void cay(Matrix4d& g, const Vector6d &v) const;
00046     
00047     // use the default cayinv
00048     // void cayinv(Vector3d& v, const Matrix4d& m) const;
00049 
00050     void dcay(Matrix6d& M, const Vector6d& v) const;
00051     
00052     void dcayinv(Matrix6d& M, const Vector6d& v) const;
00053 
00054     void tlnmu(Vector6d& mup, const Vector6d& v, const Vector6d &mu) const;
00055 
00056     void tln(Matrix6d &M, const Vector6d &v) const;
00057 
00058     void q2g(Matrix4d &g, const Vector6d &q) const;
00059 
00060     void quatxyz2g(Matrix4d &g, const Vector7d &wquatxyz) const;
00061 
00062     void g2quatxyz(Vector7d &wquatxyz, const Matrix4d &g) const;
00063 
00064     void g2q(Vector6d &q, const Matrix4d &g) const;
00065 
00066     void rpyxyz2g(Matrix4d &g, const Vector3d &rpy, const Vector3d &xyz) const;
00067 
00068     void g2rpyxyz(Vector3d &rpy, Vector3d &xyz, const Matrix4d &g) const;
00069 
00070 
00071     double tol;     
00072 
00073     SO3 &so3;       
00074   };
00075 }
00076 
00077 #endif