【运动传感器】Madgwick算法(上)

Madgwick算法能够综合多种传感器参数得到传感器的姿态。传感器可以采用以下两种配置:

  1. IMU:包含三轴线加速度计,测量物体坐标系下的三轴线加速度;三轴角速度计,测量物体坐标系下的三轴欧拉角变化率。
  2. 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×q1         (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×q1+q×R0×q1˙         (2)

根据式(1)(此处存疑,叉乘不满足结合律?),有:

q − 1 × R t = R 0 × q − 1 q^{-1}\times R_t = R_0 \times q^{-1} q1×Rt=R0×q1

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˙×q1×Rt+Rt×q×q1˙         (3)

考察 q q q和其反变换 q − 1 q^{-1}

  • 25
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值