欢迎光临散文网 会员登陆 & 注册

IMU基于互补滤波的姿态解算探究

2023-12-11 17:45 作者:西湖大学空中机器人  | 我要投稿

IMU的用途和姿态解算的必要性

随着科技的迅猛发展,惯性测量单元(IMU)在许多领域中扮演着关键的角色,从智能手机到无人机,再到虚拟现实设备。IMU通过测量加速度和角速度等信息,为设备提供姿态解算的基础数据,使得设备能够更准确地感知和响应外部环境。

图片参考链接:https://m.sohu.com/a/393777218_487646/

物体的姿态即物体在三维空间中的朝向和旋转状态。这包括了物体相对于某个参考坐标系的方向,通常通过旋转角度或者其他合适的参数来表示。姿态可以用于描述物体的姿势、方向或者整体的朝向,在三维坐标系中,通常采用欧拉角、四元数或旋转矩阵等方式来表示物体的姿态,欧拉角会更加直观一点,那什么是欧拉角呢?欧拉角是一种用于描述物体在三维空间中姿态的表示方法,它通过三个旋转角度来定义物体相对于某个参考坐标系的旋转状态。这三个角度分别是:

  • 滚转角(Roll) 指物体绕X轴的旋转,在飞行器中,滚转角影响机身左右倾斜的程度。

  • 俯仰角(Pitch)指物体绕Y轴的旋转,在飞行器中,俯仰角影响机身前后倾斜的程度。

  • 偏航角(Yaw) 指物体绕Z轴的旋转,在飞行器中,偏航角影响飞行器左右方向的旋转。

这三个维度的组合,形成了一个完整的姿态描述,让我们更直观地理解物体在空间中的朝向。

动图参考链接:https://zhuanlan.zhihu.com/p/626258420


IMU广泛应用于导航、运动控制、虚拟现实、机器人等领域。在导航中,IMU与其他传感器(如GPS)联合使用,以提供即时的姿态信息,从而提高导航的准确性。在运动控制方面,IMU可以用于检测设备的倾斜、旋转等状态,实现更灵活和精确的运动控制。

姿态解算是从IMU测量的原始数据中推导出设备在三维空间中的方向和位置的过程。由于IMU测量的是加速度和角速度,而非直接的姿态信息,因此需要进行姿态解算以获取设备的准确姿态。互补滤波是一种常用的姿态解算方法,通过整合加速度计和陀螺仪的数据,提供相对精确的姿态估计,同时减小系统误差。

卡尔曼滤波与互补滤波的对比

卡尔曼滤波的优缺点

卡尔曼滤波是一种利用状态估计和观测数据的最优估计滤波方法。其优点在于能够处理系统噪声和不确定性,并提供较为精确的姿态解算。然而,卡尔曼滤波的实现相对较为复杂,包括状态空间模型、协方差矩阵等概念,对计算资源要求较高。在资源受限的嵌入式系统中,可能不太适合使用卡尔曼滤波。

互补滤波的优缺点

互补滤波是一种简单而有效的姿态解算方法。它通过加权融合加速度计和陀螺仪的测量数据,以减小姿态解算的漂移误差。互补滤波具有实现简单、计算开销小的优点,适用于实时性要求高的应用。然而,对于动态环境或快速运动的场景,互补滤波可能会受到积累误差的影响,导致姿态解算的不稳定。

互补滤波的实现过程和推导

互补滤波基于两个传感器——加速度计和陀螺仪。加速度计测量物体的加速度,而陀螺仪测量物体的角速度。这两个传感器提供了关于物体运动的不同方面的信息。互补滤波通过结合这两种信息,以减小姿态解算的误差。

1.加速度计数据的处理

加速度计提供了物体的倾斜信息。然而,由于重力的存在,加速度计同时还测量到了重力加速度。为了获取物体的真实倾斜信息,需要进行重力加速度的补偿。

补偿过程可以通过使用低通滤波器来滤除加速度计输出中的高频噪声,并提取出与物体倾斜相关的信息。

2. 陀螺仪数据的处理

陀螺仪提供了关于物体角速度的信息。然而,陀螺仪的测量会随时间积累误差,导致姿态解算的漂移。

为了减小漂移误差,将陀螺仪输出的角速度与加速度计提供的倾斜信息结合。这种结合的方式通常采用互补的原理,即通过加权平均的方式,使两种传感器的输出相互补充。

3.互补滤波公式的推导

对于陀螺仪测量值 gx, gy, gz 和误差项 ex, ey, ez,以及相应的积分项 exInt, eyInt, ezInt,互补滤波的推导可以表示为:

其中,α 的取值范围一般在 0.98 到 0.99 之间,根据实际场景和硬件特性进行调整。Kp 是比例增益,用于调整误差项对陀螺仪测量值的影响。ex, ey, ez 是误差项,表示估计的重力方向与加速度计测量值的叉乘。exInt, eyInt, ezInt 是误差项的积分项。

4.整体实现流程

1) 输入转换

将角速度转换为弧度/秒:

2) 加速度计测量值归一化

计算加速度计测量值的模:

归一化加速度计测量值:

3) 估计重力方向

根据当前四元数估计重力方向:

4) 计算误差项

误差项定义为估计的重力方向与加速度计测量值的叉乘:

5) 误差项积分

对误差项进行积分:

6) 调整陀螺仪测量值

调整陀螺仪测量值,对每个轴进行互补滤波:

7) 四元数积分更新

使用互补滤波后的角速度进行四元数的积分更新:

8) 四元数归一化

对四元数进行归一化处理:

9) 欧拉角计算

根据更新后的四元数计算欧拉角:

通过上述过程,互补滤波可以有效地结合加速度计和陀螺仪的信息,提供相对准确的姿态解算,其中的一些参数需要根据实际情况进行调整,比如加入一些低通滤波器滤除加速度计输出中的高频噪声,提高解算稳定性,gyro和acc在实际使用中的坐标轴对齐等。以下为展示视频,结尾附代码。

视频详见知乎链接:https://zhuanlan.zhihu.com/p/671601632

void IMUupdate(double gx, double gy, double gz, double ax, double ay, double az, double alpha, float dt)
{

 double norm;
   double vx, vy, vz;
   double ex, ey, ez; 
   double exInt,eyInt,ezInt;
   double fusion_angular_rate;
  
   // 将角速度转换为弧度/秒 
   gx = gx * 0.01745329f;
   gy = gy * 0.01745329f;
   gz = gz * 0.01745329f;
    
   // 归一化加速度计测量值
   norm = sqrt(ax * ax + ay * ay + az * az);
   ax = ax / norm;
   ay = ay / norm;
   az = az / norm;
 
   // 估计重力方向
   vx = 2.0f * (q1 * q3 - q0 * q2);
   vy = 2.0f * (q0 * q1 + q2 * q3);
   vz = q0 * q0 - q1 * q1 - q2 * q2 + q3 * q3;
 
   // 计算误差项
   ex = (ay * vz - az * vy);
   ey = (az * vx - ax * vz);
   ez = (ax * vy - ay * vx);
 
   // 误差项积分
   exInt = exInt + ex * Ki * dt;
   eyInt = eyInt + ey * Ki * dt;
   ezInt = ezInt + ez * Ki * dt;
 
    // 调整陀螺仪测量值,对每个轴进行互补滤波
    gx = alpha * (gx) + (1 - alpha) * (Kp * (*ex) + (*exInt));
    gy = alpha * (gy) + (1 - alpha) * (Kp * (*ey) + (*eyInt));
    gz = alpha * (gz) + (1 - alpha) * (Kp * (*ez) + (*ezInt));
  
   // 四元数积分更新
   q0 = q0 + (-q1 * gx - q2 * gy - q3 * gz) * 0.5f * dt;
   q1 = q1 + ( q0 * gx + q2 * gz - q3 * gy) * 0.5f * dt;
   q2 = q2 + ( q0 * gy - q1 * gz + q3 * gx) * 0.5f * dt;
   q3 = q3 + ( q0 * gz + q1 * gy - q2 * gx) * 0.5f * dt;
 
   // 四元数归一化
   norm = sqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
   q0 = q0 / norm;
   q1 = q1 / norm;
   q2 = q2 / norm;
   q3 = q3 / norm;
  
   // 欧拉角计算
   pitch = asin(-2 * q1 * q3 + 2 * q0 * q2) * 57.29577951f; 
   roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2 * q2 + 1) * 57.29577951f; 
   yaw = atan2(2 * (q1 * q2 + q0 * q3), q0 * q0 + q1 * q1 - q2 * q2 - q3 * q3) * 57.29577951f;
}

总结

互补滤波的实现过程包括对加速度计和陀螺仪数据的处理,误差项的计算与积分,以及通过互补滤波算法调整陀螺仪测量值。最终,通过四元数积分更新和归一化,计算出欧拉角,提供设备的姿态信息。

在选择姿态解算方法时,需要综合考虑应用的需求、硬件资源以及对精度的要求。互补滤波作为一种轻量级、实时性强的姿态解算方法,在许多应用中得到广泛应用。通过巧妙地整合传感器数据,互补滤波平衡了简单性和准确性之间的权衡,为许多设备提供了可靠的姿态解算功能。

申请文章授权请联系后台运营人员 



IMU基于互补滤波的姿态解算探究的评论 (共 条)

分享到微博请遵守国家法律