基于互补滤波的无人机姿态解算仿真系统
1. 项目介绍
本项目是一个用于无人机飞行控制系统核心算法研究的仿真工具,主要基于MATLAB平台开发。系统专注于解决低成本IMU(惯性测量单元)在姿态解算中的常见问题:加速度计容易受到高频振动干扰,而陀螺仪容易随时间产生积分累计误差(漂移)。
通过构建数学模型并应用互补滤波算法(Complementary Filter),本项目利用加速度计的低频稳定特性和陀螺仪的高频动态响应特性,实现了对无人机俯仰角(Pitch)和滚转角(Roll)的高精度实时估计。该系统不仅模拟了真实的传感器噪声环境,还提供了详细的可视化图表,用于评估不同工况下的算法性能。
2. 功能特性
- 轨迹生成 (Ground Truth):能够生成符合物理运动规律的无人机正弦摆动轨迹,作为验证算法准确性的“真值”。
- 传感器物理建模:
*
陀螺仪模拟:模拟了动态响应,并叠加了零点漂移(Bias)和高斯白噪声。
*
加速度计模拟:基于重力投影原理生成数据,并叠加了高幅度的测量噪声以模拟机体振动。
- 互补滤波融合:实现了经典的线性互补滤波算法,权重系数可调,有效结合两类传感器数据。
- 多维度对比分析:同时计算纯加速度计解算、纯陀螺仪积分、互补滤波融合三种结果进行对比。
- 可视化与评估:通过多子图展示角度跟踪效果、漂移发散现象及误差分析曲线,并自动计算RMSE(均方根误差)指标。
3. 系统要求
- 软件环境:MATLAB R2016a 及以上版本
- 依赖工具箱:基础MATLAB功能(无需额外专业工具箱)
4. 使用方法
- 确保MATLAB环境已按照。
- 将包含代码的
.m 文件放置于MATLAB当前工作路径下。 - 在命令窗口输入
main 并回车,或直接点击编辑器中的“运行”按钮。 - 程序运行结束后,将自动弹出包含5个分析图表的图形窗口,并在命令行窗口输出各类算法的RMSE误差统计数据。
5. 代码逻辑与实现细节
本项目的核心逻辑封装在 main 函数中,具体的实现流程完全依据代码逻辑划分为以下五个阶段:
第一阶段:参数配置
系统首先定义了仿真环境的基础参数。采样时间
dt 设定为 0.01秒(即100Hz),总仿真时长为20秒。核心参数互补滤波系数
alpha 设定为 0.96,这意味着算法将96%的权重赋予陀螺仪积分结果(信任其动态特性),4%的权重赋予加速度计测量值(信任其长期静态参考)。
第二阶段:真值轨迹生成
为了验证算法,代码通过正弦函数模拟了无人机的真实姿态:
- Roll (滚转):设定频率为0.2Hz,幅度为15度的正弦波。
- Pitch (俯仰):设定频率为0.1Hz,幅度为10度的余弦波。
- 真实角速度:通过对真值角度求导(小角度假设下)计算出理想的陀螺仪读数。
第三阶段:传感器数据模拟(含噪声与漂移)
这是仿真的关键部分,旨在还原真实的硬件缺陷:
- 陀螺仪数据:在真实角速度基础上,人为加入了恒定的零点漂移(X轴0.05 rad/s, Y轴-0.03 rad/s)以及标准差为0.02的高斯白噪声。这会导致直接积分的结果随时间线性发散。
- 加速度计数据:根据欧拉角将重力加速度
g 反向投影到机体坐标系轴上(计算 true_acc)。随后加入了标准差高达 1.0 的高斯白噪声,模拟电机高频振动对加速度计严重影响。
第四阶段:姿态解算算法循环
程序使用
for 循环逐点处理时间序列数据,包含三个核心计算步骤:
- 加速度计姿态计算:利用反正切函数
atan2,根据重力加速度在三个轴上的分量计算当前的 Roll 和 Pitch 角度。该结果无漂移,但含有剧烈的高频噪声。 - 陀螺仪纯积分:利用公式
角度 = 上一时刻角度 + 角速度 × dt 进行累加。该结果平滑,但由于传感器存在Bias,结果会迅速偏离真值。 - 互补滤波融合:
*
预测步骤:利用上一时刻的融合角度加上陀螺仪测得的角增量,得到预测角度。
*
校正步骤:将预测角度与当前加速度计测得的角度进行加权平均。
*
公式:
融合角度 = alpha * (上刻融合角 + 陀螺仪角增量) + (1 - alpha) * 加速度计观测角。
第五阶段:可视化与性能评估
最终代码将所有弧度数据转换为角度制,并绘制图表:
- 子图1 & 2:展示加速度计的高噪声特性与互补滤波后的平滑跟踪效果。
- 子图3 & 4:展示纯陀螺仪积分产生的严重漂移现象与互补滤波后的纠正效果。
- 子图5:绘制三种解算方法相对于真值的误差曲线,直观展示互补滤波如何将误差控制在极小范围内。
- 终端输出:计算并打印 Roll 轴的均方根误差 (RMSE),量化展示加速度计(噪声大)、陀螺仪(漂移大)和互补滤波(精度高)的性能差异。
6. 关键算法分析
加速度计倾角计算
代码中利用重力矢量解算姿态,虽然简单但在非高机动飞行下有效:
- Pitch 计算利用了 X 轴分量与 YZ 平面合矢量的反正切关系。
- Roll 计算利用了 Y 轴与 Z 轴分量的反正切关系。
- 这种方法的前提是假设机体运动加速度远小于重力加速度。
互补滤波器设计
代码采用了这种结构:
Filter = HighPass * Gyro_Integration + LowPass * Accel。
- 高通部分:
alpha * (Angle_prev + Gyro * dt)。这实际上是对陀螺仪积分结果进行衰减,由 alpha 控制,不仅利用了积分的高频响应,还抑制了低频漂移的累积。 - 低通部分:
(1 - alpha) * Accel_Angle。这部分允许加速度计提供的低频(重力方向)信息缓慢修正姿态,同时由 1-alpha 的小权重滤除高频振动噪声。 - 参数 alpha:取值 0.96,是一个典型的时间常数平衡点,在保证动态响应速度的同时,提供了足够的噪声抑制能力。