空间数学与刚体运动

单位四元数(用于旋转)

单位四元数是一种把三维旋转存成「仅仅四个数」的办法,而这四个数合在一起表现得非常乖巧。你可以把它看作对轴角思想的一次精心重新打包:它悄悄编码了“绕哪根轴转、转多远”,却把这份信息摊到四个数值上,从而让数学变得平滑而可靠。“单位”二字意味着这四个数经过缩放,使它们合起来的大小恰好为一——正是这个条件,让该四元数描述的是一次纯粹的旋转,而不掺杂其他东西。

机器人和游戏引擎之所以钟爱四元数,是因为它绕开了那些更简单方案的毛病。和欧拉角不同,四元数永远不会发生万向锁,因此没有任何朝向会让控制系统卡死。和需要九个数的旋转矩阵不同,四元数只需要四个数,存储和传递都更省。而且它在数值上很稳定:当许多次转动被合成之后,微小的舍入误差只需把这四个数重新缩放回大小为一即可清除,而不会让旋转慢慢失真。

代价是四元数很难用肉眼读懂,因为那四个数并不对应任何人能直接想象的东西;它还有个怪癖——一个旋转和它的“双重覆盖”孪生体描述的是同一个物理姿态。所以工程师通常在底层用四元数来计算和混合朝向,只在需要让人理解结果时,才换算成横滚-俯仰-偏航或一根轴加一个角度。在两个朝向之间平滑地过渡,这个操作叫球面线性插值(slerp),是动画和机器人运动里四元数的日常任务。

飞控用四元数上的球面线性插值,把无人机当前的朝向平滑地过渡到目标朝向,得到一次没有突兀翻转、也不会卡死的顺滑转动。

四元数让两个朝向之间的平滑、无故障过渡成为家常便饭。

只有大小恰好为一的四元数才代表旋转;一旦四元数偏离了这个大小,就必须重新归一化——正是这个低成本的维护小技巧,让长长的旋转链条始终保持干净。

又称
quaternionversor四元数四元數