Eigen库中进行矩阵间的变换

一、刚体旋转的表示方法有如下四种:

  1. 旋转矩阵(R3x3) ——旋转矩阵R为正交阵(行或列向量都是两两正交的单位向量)。
  2. 四元数(Quaternion)—— 四元数可以只用四个元素就能表示旋转,在使用四元数进行旋转变换之前需要对四元数进行归一化。
  3. 旋转向量V ——-也称:轴角,由一个旋转轴向量和旋转角组成。旋转轴向量需要标准化为单位向量。
  4. 欧拉角(Vector3d) ——-常用于飞机等人机交互的界面,不常用于SLAM中。在eigen库中,其常用轴角来进行模拟X,Y,Z轴的旋转情况。

二、各种旋转之间的转换关系如下:

         

  1. 四元数—->旋转向量:     v_rotate = AngleAxisd (q)
  2. 旋转向量—–>四元数:    q = Quaterniond (v_rotate)
  3. 旋转向量—–>旋转矩阵: R = v_rotate.matrix() 或 R = v_rotate.toRotationMatrix()
  4. 旋转矩阵—–>旋转向量: v_rotate = AngleAxisd (R)
  5. 四元数——>旋转矩阵:    R = Matrix3d (q)
  6. 旋转矩阵—–>四元数:     q = Quaterniond (R)
  7. 四元数—–>变换矩阵:     T.rotate(q) , T.pretranslate(t) , T.matrix()
  8. 旋转矩阵—–>欧拉角:      euler_angle = R.eulerAngles(0,0,1)
  9. 欧拉角——>旋转矩阵:     R = AngleAxisd(M_PI/4 , Vector3d::UnitX())*AngleAxisd(M_PI/2 ,           Vector3d::UnitY())*AngleAxisd(M_PI/3 , Vector3d::UnitZ())

 

 

 

 

 

参考资料:

[1]     旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现

[2]     Eigen中欧拉角,旋转向量,旋转矩阵,四元数的转换

[3]     Eigen库使用教程之旋转矩阵,旋转向量和四元数的初始化和相互转换的实现

[4]     http://eigen.tuxfamily.org/dox/

[5]     三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换

[6]     Eigen实现坐标转换

[7]    旋转矩阵(Rotate Matrix)的性质分析

© 版权声明
THE END
喜欢就支持一下吧
点赞693 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容