eigen
学习资源链接:
1. Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Friends | Related Functions | List of all members
2. Tutorial 2/3 - Geometry
3. Class Members
4. Eigen使用教程之旋转变换矩阵、向量等
插入一条链接:vector 详细用法 C++
template<typename _Scalar, int _Dim, int _Mode, int _Options>
模板参数:_Scalar(数据、标量类型) _Dim(空间尺寸) _Mode(变换的类型)
class Eigen::Transform< _Scalar, _Dim, _Mode, _Options >
Represents an homogeneous transformation in a N dimensional space.
表示N维空间的齐次变换,在Geometry中定义的
This is defined in the Geometry module.
#include <Eigen/Geometry>
enum Eigen::TransformTraits
枚举用于指定特定的的转换如何存储在矩阵中
Enum used to specify how a particular transformation is stored in a matrix.
Isometry 等距变换矩阵
Transformation is an isometry.
Eigen::Transform< Scalar,Dim,Mode,Options >::inverse( TransformTraits hint = ( TransformTraits )Mode) const
Isometry是 TransformTraits 中枚举的值之一
Isometry :if the transformation is only a concatenations of translations and rotations. The default is the template class parameter Mode.
//如果变换矩阵只是 平移t 和 旋转R 的联合。默认值是模板类参数Mode。
#include "Transfrom.h"
typedef Transform<double,3,Isometry> Isometry3d;
//------------------------------------------------------------------
Eigen::Isometry3d speed = Eigen::Isometry3d::Identity();
在线gdb调试的时候观察到speed存储的值为
1000010000100001(1:这里其实包括旋转+平移)
(1:这里其实包括旋转+平移)
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
这里通过
Eigen::Isometry3d
定义的是变换矩阵T,其中旋转矩阵R是三维,平移向量t也是三维
R0t1(2)
(2)
R
t
0
1
static const Transform Identity ()
Returns an identity transformation.
//返回一个单位变换矩阵
template<typename Scalar, int Dim, int Mode, int Options>
Transform<Scalar,Dim,Mode,Options>
Transform<Scalar,Dim,Mode,Options>::inverse(TransformTraits hint) const
//返回根据关于 *this 的某些已知知识的逆变换。
学习疑问记录:
在《SLAM十四讲》中曾讲到两两帧的Vo,书上是用求pnp的方法示例,并且提到:
当前帧的变换矩阵 Tcw = 姿态变换阵T * 参考帧的变换矩阵 Trw
;这样去求待估计的运动
然后之前修改高博rgbd-slam-tutor2
的代码里的VO:
里面也是求解Pnp;
主函数里写的是
bool result = pnp.solvePnPLazy( refFrame, currFrame, info, true );
//。。。。。。
currFrame->T_f_w = info.T * refFrame->T_f_w;
但是pnp.c里求解pnp用的g2o模块优化,其表述为
//这里的T_f_w是从当前帧到世界坐标系的变换
Eigen::Isometry3d init_transform = frame1->T_f_w.inverse() * frame2->T_f_w;
bool b = solvePnP( img, obj, frame1->camera, inliersIndex, init_transform );