Madgwick AHRS算法笔记

Madgwick AHRS算法笔记

  • Madgwick AHRS算法笔记
    • 引言
    • 坐标系
      • 1. 地理坐标系
      • 2. 载体坐标系
    • 四元数
      • 1. 四元数基本理论
        • 1.1 定义
        • 1.2 运算
      • 2. 四元数表示旋转
      • 3. 四元数表示姿态
    • 姿态解算
      • 1. 姿态的角速度更新方法
        • 1.1 利用姿态求解线速度
        • 1.2 利用角速度求解线速度
        • 1.3 姿态更新方程
      • 2. 姿态的向量观测更新方法
        • 2.1 姿态最优化问题
        • 2.2 姿态更新方程
      • 3. 融合算法
        • 3.1 磁场畸变补偿
        • 3.2 陀螺仪偏置漂移补偿
        • 3.3 滤波器增益系数
    • 参考文献

引言

最近项目需要搞AHRS,重新读了一下Madgwick的AHRS算法论文[1],在这里把笔记整理如下,如有错误,欢迎指正。

坐标系

1. 地理坐标系

地理坐标系原点位于载体质心,通常选取东北天坐标系,即其 x x 轴指向水平东方,其 y y 轴指向水平北方,其 z z 轴沿地垂线向上。

2. 载体坐标系

载体坐标系原点位于载体质心,通常选取右前上坐标系,即其 x x 轴沿载体横轴向右,其 y y 轴沿载体纵轴向前, 其 z z 轴沿载体竖轴向上。

四元数

1. 四元数基本理论

1.1 定义

四元数是一种四维超复数,由一个实数单位加上三个虚数单位 i i j j k k 组成,其数学表达式如下:

q̂ =q1+q2i+q3j+q4k=[q1q2q3q4],i2=j2=k2=ijk=1(1) (1) q ^ = q 1 + q 2 i + q 3 j + q 4 k = [ q 1 q 2 q 3 q 4 ] , i 2 = j 2 = k 2 = i j k = − 1

其中实数部分为四元数中的标量部分,虚数部分为四元数的矢量部分。

1.2 运算

  • 模值

    q̂ =q21+q22+q23+q24(2) (2) | q ^ | = q 1 2 + q 2 2 + q 3 2 + q 4 2

  • 共轭

    q̂ =[q1q2q3q4](3) (3) q ^ ∗ = [ q 1 − q 2 − q 3 − q 4 ]

  • 叉乘

    â b̂ =a1b1a2b2a3b3a4b4a1b2+a2b1+a3b4a4b3a1b3a2b4+a3b1+a4b2a1b4+a2b3a3b2+a4b1T(4) (4) a ^ ⨂ b ^ = [ a 1 b 1 − a 2 b 2 − a 3 b 3 − a 4 b 4 a 1 b 2 + a 2 b 1 + a 3 b 4 − a 4 b 3 a 1 b 3 − a 2 b 4 + a 3 b 1 + a 4 b 2 a 1 b 4 + a 2 b 3 − a 3 b 2 + a 4 b 1 ] T

    四元数叉乘并不满足交换律,但当 â  a ^ b̂  b ^ 为纯矢量,即 a1=0 a 1 = 0 b1=0 b 1 = 0 时,四元数叉乘等价于矢量叉乘,满足反交换律。

2. 四元数表示旋转

归一化的四元数可以用于表示三维空间中刚体或坐标系的旋转。假设空间任意向量 v̂  v ^ 在坐标系 A A 和坐标系 B B 中的投影分别为 [AvxAvyAvz] [ v A v x v A v y v A v z ] [BvxBvyBvz] [ v B v x v B v y v B v z ] ,在坐标系 A A 中可以找到这样的转轴 Ar̂  A r ^ 和转角 θ θ ,使得向量 v̂  v ^ 绕转轴旋转后的向量 v̂  v ^ ′ 在坐标系 A A 中的投影为 [BvxBvyBvz] [ v B v x v B v y v B v z ] 。这种旋转过程可以使用四元数 ABq̂  q ^ B A q ^ 表示,其数学表达式如下:

ABq̂ =[cosθ2rxsinθ2rysinθ2rzsinθ2](5) (5) q ^ B A q ^ = [ c o s θ 2 − r x s i n θ 2 − r y s i n θ 2 − r z s i n θ 2 ]

其中上标 A A 表示参考坐标系,下标 B B 表示目标坐标系, rx r x ry r y rz r z 表示转轴 Ar̂  A r ^ 在坐标系 A A 中的投影。对于逆向旋转,可用四元数的共轭表示:

BAq̂ =ABq̂ =[q1q2q3q4](6) (6) q ^ A B q ^ = q ^ B A q ^ ∗ = [ q 1 − q 2 − q 3 − q 4 ]

向量 v̂  v ^ 由坐标系 A A 转换到坐标系 B B 的投影公式如下:

Bv̂ =ABq̂ Av̂ ABq̂ (7) (7) v ^ B v ^ = q ^ B A q ^ ⁡ ⨂ v ^ A v ^ ⁡ ⨂ q ^ B A q ^ ∗

四元数 ABq̂  q ^ B A q ^ 所描述的旋转过程可以用旋转矩阵 ABR R B A R 表示,其数学公式如下:

Bv̂ =Av̂ ABRT=[Av̂ xAv̂ yAv̂ z]2q211+2q222(q2q3q1q4)2(q2q4+q1q3)2(q2q3+q1q4)2q211+2q232(q3q4q1q2)2(q2q4q1q3)2(q3q4+q1q2)2q211+2q24T(8) (8) v ^ B v ^ = v ^ A v ^ ⋅ R T B A R T = [ v ^ A v ^ x v ^ A v ^ y v ^ A v ^ z ] [ 2 q 1 2 − 1 + 2 q 2 2 2 ( q 2 q 3 + q 1 q 4 ) 2 ( q 2 q 4 − q 1 q 3 ) 2 ( q 2 q 3 − q 1 q 4 ) 2 q 1 2 − 1 + 2 q 3 2 2 ( q 3 q 4 + q 1 q 2 ) 2 ( q 2 q 4 + q 1 q 3 ) 2 ( q 3 q 4 − q 1 q 2 ) 2 q 1 2 − 1 + 2 q 4 2 ] T

3. 四元数表示姿态

四元数可以表示刚体姿态,这里的姿态是指载体坐标系相对于地理坐标系的旋转。这种旋转过程在本文中使用四元数 SEq̂  q ^ E S q ^ 表示,其中上标 S S 表示载体坐标系即参考坐标系,下标 E E 表示地理坐标系即目标坐标系。

姿态解算

1. 姿态的角速度更新方法

1.1 利用姿态求解线速度

考虑载体坐标系下的空间任意一定点 SR R S R ,将其映射到地理坐标系中,其数学表达如下:

ER=SEq̂ SRSEq̂ (9) (9) R E R = q ^ E S q ^ ⁡ ⨂ R S R ⁡ ⨂ q ^ ∗ E S q ^ ∗

对时间 t t 求导,可得点 ER R E R 在地理坐标系中的线速度 Ev v E v ,其数学表达式如下:

Ev=ER˙=SEq˙SRSEq̂ +SEq̂ SRSEq˙(10) (10) v E v = R ˙ E R ˙ = q ˙ E S q ˙ ⁡ ⨂ R S R ⁡ ⨂ q ^ ∗ E S q ^ ∗ + q ^ E S q ^ ⁡ ⨂ R S R ⁡ ⨂ q ˙ ∗ E S q ˙ ∗

其中上标一点表示对时间 t t 求微分。

由式 (9) ( 9 ) 可得:

SEq̂ ER=SRSEq̂ (11) (11) q ^ ∗ E S q ^ ∗ ⁡ ⨂ R E R = R S R ⁡ ⨂ q ^ ∗ E S q ^ ∗

ERSEq̂ =SEq̂ SR(12) (12) R E R ⁡ ⨂ q ^ E S q ^ = q ^ E S q ^ ⁡ ⨂ R S R

将式 (11)(12) ( 11 ) ( 12 ) 带入式 (10) ( 10 ) 可得:

Ev=SEq˙SEq̂ ER+ERSEq̂ SEq˙(13) (13) v E v = q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ ⁡ ⨂ R E R + R E R ⁡ ⨂ q ^ E S q ^ ⁡ ⨂ q ˙ ∗ E S q ˙ ∗

考查 SEq̂ SEq̂  q ^ E S q ^ ⁡ ⨂ q ^ ∗ E S q ^ ∗ 可得:

SEq̂ SEq̂ =[1000](14) (14) q ^ E S q ^ ⁡ ⨂ q ^ ∗ E S q ^ ∗ = [ 1 0 0 0 ]

由式 (14) ( 14 ) 可得:

SEq˙SEq̂ +SEq̂ SEq˙=0(15) (15) q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ + q ^ E S q ^ ⁡ ⨂ q ˙ ∗ E S q ˙ ∗ = 0

将式 (15) ( 15 ) 带入式 (13) ( 13 ) 可得:

Ev=SEq˙SEq̂ ERERSEq̂ ˙SEq(16) (16) v E v = q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ ⁡ ⨂ R E R − R E R ⁡ ⨂ q ^ ˙ E S q ^ ˙ ⁡ ⨂ q ∗ E S q ∗

考查 SEq˙SEq̂  q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ 标量部分可得:

Scale(SEq˙SEq̂ )=q0˙q0+q1˙q1+q2˙q2+q3˙q3=12ddt(q20+q21+q22+q23)=0(17) (17) S c a l e ( q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ ) = q 0 ˙ q 0 + q 1 ˙ q 1 + q 2 ˙ q 2 + q 3 ˙ q 3 = 1 2 d d t ( q 0 2 + q 1 2 + q 2 2 + q 3 2 ) = 0

由式 (17) ( 17 ) 可知 SEq˙SEq̂  q ˙ E S q ˙ ⁡ ⨂ q ^ E S q ^ ∗ 为纯矢量, Ev v E v 为矢量叉乘相减,而矢量叉乘又满足反交换律,因此式 (16) ( 16 ) 可重写为:

Ev=2SEq˙SEq̂ ER(18) (18) v E v = 2 q ˙ E S q ˙ ⁡ ⨂ q ^ ∗ E S q ^ ∗ ⁡ ⨂ R E R

1.2 利用角速度求解线速度

另一方面,线速度可以由角速度叉乘位移得到,其数学表达如下:

Ev=Eω̂ ER(19) (19) v E v = ω ^ E ω ^ ⁡ ⨂ R E R

考虑到载体坐标系下的角速度 Sω ω S ω ,式 (19) ( 19 ) 可重写为:

Ev=SEq̂ Sω̂ SEq̂ ER(20) (20) v E v = q ^ E S q ^ ⁡ ⨂ ω ^ S ω ^ ⁡ ⨂ q ^ ∗ E S q ^ ∗ ⁡ ⨂ R E R

1.3 姿态更新方程

对比式 (18) ( 18 ) (20) ( 20 ) 可得:

SEq˙=12SEq̂ Sω̂ (21) (21) q ˙ E S q ˙ = 1 2 q ^ E S q ^ ⁡ ⨂ ω ^ S ω ^

因此结合角速度,通过数值积分,可以求解角速度姿态四元数 SEqω,t q ω , t E S q ω , t

SEqω,t=SEq̂ est,t1+12SEq̂ est,t1Sω̂ Δt=SEq̂ est,t1+SEq˙ω,tΔt(22) (22) q ω , t E S q ω , t ⁡ = q ^ e s t , t − 1 E S q ^ e s t , t − 1 + 1 2 q ^ e s t , t − 1 E S q ^ e s t , t − 1 ⁡ ⨂ ω ^ S ω ^ ⁡ Δ t = q ^ e s t , t − 1 E S q ^ e s t , t − 1 + q ˙ ω , t E S q ˙ ω , t ⁡ Δ t

其中下标 est e s t 表示估计值,是融合角速度和向量观测求解的四元数,下标 t t 表示采样序号。

2. 姿态的向量观测更新方法

2.1 姿态最优化问题

假设 Ed̂  d ^ E d ^ 是大地坐标系下的某一参考矢量, Sŝ  s ^ S s ^ 是该向量在载体坐标系下的测量矢量。参考矢量 Ed̂  d ^ E d ^ 可以通过姿态四元数 SEq̂  q ^ E S q ^ 投影到载体坐标系下,其数学表达如下:

Sd̂ =SEq̂ Ed̂ SEq̂ (23) (23) d ^ S d ^ = q ^ ∗ E S q ^ ∗ ⁡ ⨂ d ^ E d ^ ⁡ ⨂ q ^ E S q ^

四元数共轭表示逆向旋转

投影矢量 Sd̂  d ^ S d ^ 与测量矢量 Sŝ  s ^ S s ^ 理论上相一致,因此姿态四元数 SEq̂  q ^ E S q ^ 应该满足如下条件:

minSEq̂ 4f(SEq̂ ,Ed̂ ,Sŝ )(24) (24) m i n q ^ E S q ^ ∈ R 4 f ( q ^ E S q ^ , d ^ E d ^ , s ^ S s ^ )

f(SEq̂ ,Ed̂ ,Sŝ )=S

你可能感兴趣的:(惯导算法,Madgwick,AHRS,梯度法)