一、刚体旋转的表示方法有如下四种:
- 旋转矩阵(R3x3) ——旋转矩阵R为正交阵(行或列向量都是两两正交的单位向量)。
- 四元数(Quaternion)—— 四元数可以只用四个元素就能表示旋转,在使用四元数进行旋转变换之前需要对四元数进行归一化。
- 旋转向量V ——-也称:轴角,由一个旋转轴向量和旋转角组成。旋转轴向量需要标准化为单位向量。
- 欧拉角(Vector3d) ——-常用于飞机等人机交互的界面,不常用于SLAM中。在eigen库中,其常用轴角来进行模拟X,Y,Z轴的旋转情况。
二、各种旋转之间的转换关系如下:
- 四元数—->旋转向量: v_rotate = AngleAxisd (q)
- 旋转向量—–>四元数: q = Quaterniond (v_rotate)
- 旋转向量—–>旋转矩阵: R = v_rotate.matrix() 或 R = v_rotate.toRotationMatrix()
- 旋转矩阵—–>旋转向量: v_rotate = AngleAxisd (R)
- 四元数——>旋转矩阵: R = Matrix3d (q)
- 旋转矩阵—–>四元数: q = Quaterniond (R)
- 四元数—–>变换矩阵: T.rotate(q) , T.pretranslate(t) , T.matrix()
- 旋转矩阵—–>欧拉角: euler_angle = R.eulerAngles(0,0,1)
- 欧拉角——>旋转矩阵: 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/
[6] Eigen实现坐标转换
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容