学习小记-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存储的值为

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 );
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值