SINS姿态更新中四元数是鸡肋
相继多次的定点转动问题可用一系列的姿态变化量(变化四元数Q或变化矩阵C)相乘来描述,每个姿态变化量与对应转动的等效旋转矢量rv之间存在转换公式(1)和(2),使用等效旋转矢量计算姿态变化量不存在任何原理上的误差。SINS姿态更新算法的关键在于如何利用陀螺输出构造等效旋转矢量,之后由等效旋转矢量计算姿态变化量再进行四元数或矩阵更新就轻而易举了,如式(3)和(4)。
Q = [ cos(|rv|/2); sin(|rv|/2)/|rv|*rv ] (1) 3次乘法(不计三角函数和除法)
C = I + sin(|rv|)/|rv|*(rvx) + [1-cos(|rv|)]/|rv|^2*(rvx)^2 (2) 15次乘法
where rvx is the askew matrix or rv.
Qk = Qk_1 * Q (3) 16次乘法
Ck = Ck_1 * C (4) 27次乘法
显然,(2)+(4)的乘法运算量比(1)+(3)大些,约2倍。如果考虑到求解姿态欧拉角,或者速度更新时要进行比力坐标系变换,四元数得先转换成姿态变换阵(q2mat),这需要16次乘法运算。所以,四元数更新和矩阵更新两者的运算量相近,即(3+16+16=35)~=(15+27=42)。
四元数归一化比矩阵归一化简单、计算量小,但如果式(3)或(4)中在做乘法之前保证乘数都是归一化的,则理论上结果也是天然归一化的。所以,姿态更新过程中没必要经常性做归一化处理,仅仅是由于双精度数值计算精度的影响,每隔一定更新时间归一化一下就足够了(感觉几小时内不归一化都问题不大)。
四元数表示方法简洁,但初学者还是不容易理解,只有使用多了才会慢慢习惯的。如果不想使用四元数,而完全改用姿态矩阵,对SINS算法的理解和设计是毫无影响的。矩阵描述姿态同样不存在任何的奇异问题,只有欧拉角描述才存在奇异点。
不过,要是想学习和研究捷联惯导系统,不懂四元数概念还真不行,因为大多数文献中都是使用四元数表示的。