这讲主要是讲三维几何空间中刚体的运动方程。
a'=Ra+t
其中R为旋转矩阵,t为平移矩阵
将R和t融合到一个矩阵中,将上式变为线性方程
那么编程如何实现上式呢?用Eigen开源库。
Eigen使用方法:添加头文件,编写程序。
旋转向量与旋转矩阵之间的变换:,其中n为旋转向量,R为旋转矩阵
旋转向量只需要三个变量,比旋转矩阵三维矩阵的9个变量要简洁,节省运算成本。
由旋转向量到四元数:由于旋转矩阵的冗余,加上旋转向量和角度的奇异性,引入四元数,即用复数来表示旋转从而避免了奇异性。
用四元数来表示旋转:设空间点p=[x,y,z],以及一个由旋转轴和角度指定的旋转,那么旋转后的点p'用四元数怎么表示呢?我们知道使用矩阵描述的话p'=Rp。而用四元数表达:
1. 把三维空间点用一个虚四元数描述:
p=[0, x, y, z]=[0, v]
这相当于我们把四元数的三个虚部与空间中的三个轴相对应。用四元数q表示这个旋转:
q=[cos(θ/2), ncos(θ/2)]
那么旋转后的点p'即可表示为这样的乘积:
p'=qpq^(-1)
2. 四元数到旋转矩阵的转换
那么用Eigen演示如何进行各种旋转变换。在Eigen中使用四元数、欧拉角和旋转矩阵,演示它们三者之间的变换关系。
Eigen中各个数据类型总结如下:
- 旋转矩阵(3×3):Eigen::Matrix3d。
- 旋转向量(3×1):Eigen::AngleAxisd。
- 欧拉角(3×1):Eigen::Vector3d。
- 四元数(4×1):Eigen::Quaterniond。
- 欧氏变换矩阵(4×4):Eigen::Isometry3d。
- 仿射变换(4×4):Eigen::Affine3d。
- 射影变换(4×4):Eigen::Perspective3d。
本讲结束。