前言


【资料图】

之前的一次推送介绍了Mahony姿态解算算法(IMU姿态滤波算法——Mahony算法:原理与代码),这次介绍另一个经典的滤波算法:Madgwick滤波。

Madgwick滤波算法根据加速度计、陀螺仪、以及磁力计,融合计算机体四元数,计算速度快、精度较高。本文详细介绍六轴融合,即根据加速度计和陀螺仪数据,计算IMU的姿态。

算法

2.1 重力方向对齐优化

2.2 角速度融合

2.3 权重取值

代码

Matlab完整代码[3]如下:

function obj = UpdateIMU(obj, Gyroscope, Accelerometer)   q = obj.Quaternion;   if(norm(Accelerometer) == 0), return; end    Accelerometer = Accelerometer / norm(Accelerometer); % 归一化加速度计数据      % 式(2)和(3)   F = [2*(q(2)*q(4) - q(1)*q(3)) - Accelerometer(1)           2*(q(1)*q(2) + q(3)*q(4)) - Accelerometer(2)              2*(0.5 - q(2)^2 - q(3)^2) - Accelerometer(3)];   J = [-2*q(3), 2*q(4),    -2*q(1), 2*q(2)                   2*q(2),     2*q(1),     2*q(4), 2*q(3)                      0,         -4*q(2),    -4*q(3), 0    ];  step = (J'*F);     step = step / norm(step); % 式(1)中的减号后面的部分,即修正量    % 式(8)中的修正角速度  qDot = 0.5 * quaternProd(q, [0 Gyroscope(1) Gyroscope(2) Gyroscope(3)]) - obj.Beta * step';  % 式(7)(8),即迭代到下一步。    q = q + qDot * obj.SamplePeriod;  obj.Quaternion = q / norm(q); % normalise quaternionend

与Mahony算法的比较

Madgwick算法与Mahony算法相比,最大的不同之处是如何对待加速度计估计的误差。Mahony是利用叉乘,Madgwick是利用优化;

Mahony可以视作一个PI(比例-积分)控制器,Madgwick是一个P(比例)控制器;

Madgwick比Mahony的精度稍高一丢丢,但Mahony的计算速度略快[4];

Mahony与Madgwick都需要假设加速度测的只是重力,因此在加速度变化剧烈情况下表现不佳。

参考资料

[1] Madgwick算法提出的report:An ecient orientation lter for inertial and inertial/magnetic sensor arrays (https://x-io.co.uk/downloads/madgwick_internal_report.pdf)

[2] Madgwick算法在ICRR会议的论文:Estimation of IMU and MARG orientation using a gradient descent algorithm

[3] Madgwick本人实现的Matlab/C/C#代码:https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/

[4] Comparison of Attitude and Heading Reference Systems using Foot Mounted MIMU Sensor Data: Basic, Madgwick and Mahony

推荐内容