Madgwick算法能够综合多种传感器参数得到传感器的姿态。传感器可以采用以下两种配置:
- IMU:包含三轴线加速度计,测量物体坐标系下的三轴线加速度;三轴角速度计,测量物体坐标系下的三轴欧拉角变化率。
- MARG或AHRS:除了前述两类,还包含三轴磁力计,测量地球磁力线在物体坐标系下投影。
以下从原始传感器参数逐步推导出物体姿态。在推导过程中,大量使用四元数(quaternion)来表示旋转和姿态,不熟悉的同学可以参看这篇文章。
本文分上下两篇,上篇讲解各个传感器独立结果,下篇讲解融合方法、对误差的处理,以及标定实验。
本篇公式较多,可以直接关注各分段结尾处的“结论”。
欧拉角变化率和角速度(gyro → ω \to \omega →ω)
问题:已知欧拉角变化率,求角速度。
二维空间中的角速度 ω \omega ω是一个伪标量(pseudoscale)。其大小为单位时间转动过的弧度,其方向垂直于所在平面符合,和旋转方向符合右手定则,换言之,其方向为旋转轴。
三维空间中的角速度 ω \omega ω是一个伪矢量(pseudovector),其大小为单位时间转动过的弧度,其方向和旋转方向符合右手定则。
用矢量表示角速度时,可以直接使用矢量加法表示角速度的叠加。
绕 x x x轴旋转的角速度为 ω x i \omega_x i ωxi,其中 i i i表示旋转轴 [ 1 , 0 , 0 ] [1,0,0] [1,0,0];类似地,绕 y , z y,z y,z轴旋转的角速度为$ \omega_y j,\omega_z k $。
总体角速度和欧拉角变化率具有以下关系:
ω = ω x i + ω y j + ω z k \omega = \omega_x i + \omega_y j+\omega_z k ω=ωxi+ωyj+ωzk
其中, i , j , k i,j,k i,j,k为三个轴单位矢量。
完整的证明较为繁琐,可以定性地考察一下这个结论。
考虑绕 x x x轴的旋转,该旋转发生在 y z yz yz平面内,旋转矢量和 y z yz yz平面垂直,即和 x x x轴平行。
ω \omega ω在 x x x轴投影为 ω x \omega_x ωx,就是绕 x x x轴的旋转速度。
角速度 ω \omega ω的旋转轴(归一化长度)为:
[ ω x , ω y , ω z ] ω x 2 + ω y 2 + ω z 2 \frac{[\omega_x,\omega_y,\omega_z]}{\sqrt {\omega_x^2+\omega_y^2+\omega_z^2} } ωx2+ωy2+ωz2[ωx,ωy,ωz]
旋转速度(单位时间旋转的角度)为:
ω x 2 + ω y 2 + ω z 2 \sqrt {\omega_x^2+\omega_y^2+\omega_z^2} ωx2+ωy2+ωz2
此部分证明原文可以参看维基百科角速度词条。
结论: ω = [ 0 , ω x , ω y , ω z ] \omega = [0, \omega_x, \omega_y ,\omega_z] ω=[0,ωx,ωy,ωz]。
角速度和姿态四元数( ω → q \omega \to q ω→q)
问题:已知传感器坐标系下角速度和当前姿态四元数,求姿态四元数变化率,进而求姿态四元数。
首先考虑一个稍简单的情况,已知世界坐标系下角速度 ω ˉ \bar{\omega} ωˉ,以及当前姿态四元数 q q q,求 q ˙ \dot{q} q˙。(上标一点表示对时间的一次微分)。
考虑空间中任意一点 R 0 = [ 0 , x 0 , y 0 , z 0 ] R_0=[0,x_0,y_0,z_0] R0=[0,x0,y0,z0],当前时刻的位置为 R t R_t Rt,以下通过两个方面来写出当前线速度 R t ˙ \dot{R_t} Rt˙的表达。
第一方面,由于 R t R_t Rt是 R 0 R_0 R0经过变换 q q q得到的,故:
R t = q × R 0 × q − 1 ( 1 ) R_t = q\times R_0 \times q^{-1}\ \ \ \ \ \ \ \ \ (1) Rt=q×R0×q−1 (1)
对时间 t t t求导,注意只有 q q q是 t t t的函数, R 0 R_0 R0常量:
R t ˙ = q ˙ × R 0 × q − 1 + q × R 0 × q − 1 ˙ ( 2 ) \dot{R_t} = \dot{q}\times R_0 \times q^{-1} + q \times R_0 \times \dot{q^{-1}}\ \ \ \ \ \ \ \ \ (2) Rt˙=q˙×R0×q−1+q×R0×q−1˙ (2)
根据式(1)(此处存疑,叉乘不满足结合律?),有:
q − 1 × R t = R 0 × q − 1 q^{-1}\times R_t = R_0 \times q^{-1} q−1×Rt=R0×q−1
R t × q = q × R 0 R_t \times q = q \times R_0 Rt×q=q×R0
代入式(2):
R t ˙ = q ˙ × q − 1 × R t + R t × q × q − 1 ˙ ( 3 ) \dot{R_t} = \dot{q}\times q^{-1}\times R_t + R_t\times q\times \dot{q^{-1}}\ \ \ \ \ \ \ \ \ (3) Rt˙=q˙×q−1×Rt+Rt×q×q−1˙ (3)
考察 q q q和其反变换 q − 1 q^{-1}