点与坐标系、旋转矩阵、旋转向量和欧拉角、四元数
以及我们要学习一个很重要的库:矩阵运算库Eigen
Eigen
主要会用到 Core、Dense、Geometry
Core:主要做矩阵的表达、矩阵
Dense:支持关于稠密矩阵的计算、求逆、矩阵分解,关于算法在这里
Geomery:旋转矩阵、欧拉角、四元数和三维几何有关的部分,给予支持
1.点与坐标系
2D的情况:两个坐标+旋转角
3D:不同的表达方式
右手系的判断方法。
内积(点积)
内积后得到一个常量。两个向量正交,内积=0
外积(叉积)
外积后得到一个向量,垂直于两个分量。
可以写成系数矩阵与b做矩阵乘法。a^b=a叉乘b
当a,b平行,最后将会得到0向量。
2.旋转矩阵
问题:
如何描述坐标系与坐标系之间的变化?
如何计算同一个向量在不同坐标系里的坐标?
SLAM中: • 固定的世界坐标系和移动的机器人坐标系 • 不同的传感器坐标系
2.1描述平移:v2=v1+v
2.2用旋转矩阵描述旋转
由于向量是不变的,可以得到等式1,通过两边同乘,就可以得到式2. 其中3x3为旋转矩阵R。
两个坐标系间的运动可用R,t完全描述
欧拉定理(Euler’s rotation theorem):刚体在三维空间里的一般运动,可分解为刚体上方某一点的平移,以及绕经过此点的旋转轴的转动。
2.3 齐次坐标和变换矩阵
引入齐次坐标是为了能够方便的运用矩阵乘法。
扩展矩阵,把平移加入矩阵中。
齐次坐标乘任意非零常数时仍表达同一坐标
3.旋转向量和欧拉角
欧拉角直观,能看出怎么转的。分解成三个方向的转动。
YPR p=90
由于万向锁,所以欧拉角不适合插值或者迭代,适合人交互。