针对三维空间刚体运动的描述和个人的理解
三维空间刚体运动
欧式变化
旋转矩阵
先考虑旋转变化中的旋转矩阵。若某个单位正交基
两边左乘
对于
同时,也正是因为是单位基底,所以旋转矩阵是一个行列式为1的正交矩阵,他的逆矩阵描述了相反的旋转变化。
平移变换
另外,欧式变换还包括平移变化,若将上式加上平移向量
这里
如果单独把上式中的
另外,
因为由2指向1的那个向量在世界坐标系下是固定的,而坐标系2可以自由旋转,所以其在坐标系2下的取值是会发生改变的。如图。
变换矩阵
对于
可以引入齐次坐标与变换矩阵,重写成以下形式
其中矩阵
旋转向量和欧拉角
旋转向量
旋转向量就是一个三维向量,它的方向为旋转轴,而模长为旋转角
旋转向量
从第二个式子可以看出,旋转轴
欧拉角
另一个描述旋转的东西为欧拉角,这个用的很多,也有著名的万向死锁问题,即第二次变换为±90°时,会导致第一次和第三次的旋转轴重合。
将三次变化依次记作
通过把每次变化的旋转矩阵写出来,令第二次变化的角度为90°,最后乘完了之后就能发现少一个维度,这个过程打起来不方便,就不再赘诉了。
显然这时
四元数
旋转矩阵用9个量描述3自由度的旋转,具有冗余性;欧拉角和旋转向量是紧凑的,但是带有奇异性。(所有三维向量描述都带有奇异性)
四元数来描述旋转既是紧凑的,又不带有奇异性。即
其中
它的加减乘除运算跟复数的运算相似。
四元数表示旋转
在二维平面,将一个向量乘上
同理,用四元数表示旋转时,它有3个虚部和一个实部,虚部表示三维坐标系中的xyz,而实部是一个位于四维中的坐标平面,它和三维中每个坐标平面都垂直。
构造三维旋转的四元数向量为
而待旋转的向量为
那么旋转后的向量为
取出虚部对应的三个系数即为旋转后的坐标
个人的理解是这样的
考虑旋转为
若三维向量
两者相乘,按照运算规则,显然
可以看出,此时x、y轴确实是发生了旋转90°(由[1,2]旋转为[-2,1]),但是z轴也被旋转到了四维空间的实轴上去了,如果是对一个空间物体施加这个旋转运动,那么旋转后的物体的z轴信息全部丢失了。也就是,仅仅左乘的旋转会导致真实物体一部分被映射到4维的超平面去,或者说,左乘四元数旋转向量会导致畸变。
既然左乘会引入畸变,导致一部分坐标被映射到四元数的实轴上去,那么自然会想到再成一个四元数向量来把抵消这个畸变。
如果仅仅是右乘一个同样的四元数,按照运算规则我们可以得到
既然左乘是旋转,同时会把旋转轴正向映射到四维空间中;右乘是逆旋转,同时会把四维空间负向映射到旋转轴。那么只要右乘一个逆矩阵,不就是同向旋转,且同时把四维空间正向映射到旋转轴了嘛!
再次计算
所以既然左乘和右乘都会旋转一次,在最初构造旋转矩阵时就要把目标旋转角度除以2才行。即
总结一下规律
- 左乘四元数会正旋转,但是同时会把旋转轴正向映射到四维空间的实轴上,导致畸变
- 右乘四元数会逆旋转,同时会把四维空间的实轴反向映射到旋转轴上,左右同乘可以消除畸变
- 右乘四元数的逆会正旋转,同时会把四维空间的实轴正向映射到旋转轴上
- 所以通过左乘四元数和右乘四元数的逆,可以在不产生畸变的情况下旋转两次
- 所以在构造表示旋转的四元数时,需要把旋转角设置为1/2
四元数与其他表示形式的转换关系
若四元数表示为
定义
那么有
这样就可以分理
按照定义化简得到四元数到旋转矩阵的关系
由于旋转矩阵和旋转向量之间是存在迹的关系,所以两边取tr得到
结合之前的公式有
即
所以有四元数与旋转向量的关系
这个表达式正是之前我们用于构造出旋转的四元数,理论与实例得到了一致验证