木上虫儿飞

木木的小屋

学习小记-eigen

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存储的值为

(1:这里其实包括旋转+平移)1000010000100001

这里通过Eigen::Isometry3d定义的是变换矩阵T,其中旋转矩阵R是三维,平移向量t也是三维
(2)Rt01

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 );
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linwantian/article/details/79969200
个人分类: learning journal
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

学习小记-eigen

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭