运动基座惯导初始对准Kalman滤波算法实现
项目简介
本项目是一个基于MATLAB环境的惯性导航系统(INS)仿真与初始对准工程。项目旨在完全通过原生代码(不依赖MATLAB内置的导航工具箱)实现一套适用于运动基座(如船舶、飞机)的捷联惯导(SINS)与GPS组合导航算法。核心在于设计了一个15维误差状态的Kalman滤波器(ESKF),在载体运动过程中动态估计姿态失准角及传感器零部件误差,并通过闭环反馈机制完成系统的高精度初始对准。
功能特性
- 自主底层实现:全流程自主编写,包括轨迹生成、惯导解算、矩阵运算及滤波算法,便于深入理解惯导机制及向嵌入式C/C++代码移植。
- 高维误差建模:建立了包含姿态误差、速度误差、位置误差、陀螺仪零偏及加速度计零偏在内的15维状态空间模型。
- 运动基座对准:专为动态环境设计,支持在载体存在机动(如划船、圆锥运动)和传感器噪声环境下的精确对准。
- 闭环反馈校正:实现了Kalman滤波的闭环反馈架构,实时修正INS系统的姿态四元数、速度和位置,并动态补偿IMU传感器的常值零偏。
- 完整仿真链路:包含从IMU数据构造、误差注入、捷联解算到滤波收敛分析的全套仿真流程。
算法与实现细节
本项目主要通过 main.m 脚本实现,其核心算法逻辑与数学模型如下:
1. 坐标系与地球模型
采用WGS-84参考椭球模型,定义了地球长半轴、扁率、地球自转角速度及重力参数。导航坐标系采用北-东-地(N-E-D)地理坐标系。
2. 仿真数据生成与误差注入
系统首先根据预设的初始状态(经纬高、速度、姿态)生成理论轨迹。在此基础上,向理想的IMU数据(角速度和比力)中注入以下误差源,以模拟真实传感器特性:
- 常值零偏:陀螺仪和加速度计的固定偏差。
- 随机噪声:角度随机游走和速度随机游走噪声。
此外,在初始导航状态中人为加入姿态失准角(如水平0.1度,方位1度)和速度误差,用于验证算法的收敛能力。
3. 捷联惯导解算 (SINS Utilities)
在每一个采样周期(dt)内,执行捷联惯导更新算法:
- 数据预处理:扣除当前估计的传感器零偏。
- 速度更新:基于比力方程,考虑有害加速度(哥氏力及地球自转引起)和重力分量,更新速度矢量。
- 位置更新:利用更新后的速度,通过欧拉积分更新经度、纬度和高度。
- 姿态更新:采用四元数更新算法。计算地球自转和载体运动引起的导航系旋转矢量,利用四元数乘法完成姿态矩阵(方向余弦矩阵 $C_{bn}$)的递推及归一化。
4. 误差状态Kalman滤波 (ESKF) 设计
滤波器设计为反馈模式,旨在估计SINS的误差并进行清零。
* 姿态误差 (3维)
* 速度误差 (3维)
* 位置误差 (3维)
* 陀螺仪零偏残差 (3维)
* 加速度计零偏残差 (3维)
根据惯导误差方程构建状态转移矩阵 $F$。矩阵包含了姿态、速度、位置之间的交叉耦合项(如速度误差引起的姿态变化、比力投影引起的加速度误差等)。状态协方差矩阵 $P$ 随时间递推,并叠加过程噪声 $Q$。
利用GPS提供的速度和位置作为观测基准。
*
量测向量:构建
SINS计算值 - GPS观测值 的差值向量。
*
更新频率:模拟GPS低频特性(如1Hz),仅在特定周期触发量测更新。
*
增益计算:计算Kalman增益 $K$,更新状态估计值 $X$ 和协方差矩阵 $P$。
5. 闭环反馈机制
当滤波器完成一次量测更新后,立即执行闭环校正:
- 姿态修正:根据估计的失准角构建修正四元数,左乘当前姿态四元数。
- 状态修正:直接从当前速度和位置中减去估计误差。
- 传感器补偿:将估计出的陀螺和加计零偏累加到全局补偿变量中,用于后续周期的IMU数据预处理。
- 状态重置:反馈完成后,将滤波器中的误差状态向量清零(协方差矩阵保持),防止重复扣除。
代码逻辑流程
代码执行流程主要分为以下四个阶段:
- 参数初始化:设置仿真时长(600秒)、采样率(100Hz)、初始AVP(姿态速度位置)及传感器误差参数。
- 轨迹与数据准备:调用轨迹生成函数,产生带有噪声的IMU数据和GPS参考数据。
- 主循环迭代:
* 读取当前时刻IMU数据,减去累计估计的零偏。
* 计算地球曲率半径及指令角速度。
* 执行SINS机械编排(速度、位置、姿态四元数更新)。
* 构建卡尔曼滤波的一阶线性化系数矩阵 $F$。
* 执行KF时间更新。
* (条件触发)若有GPS数据,执行KF量测更新,并立即进行闭环反馈修正SINS状态和传感器零偏,随后重置误差状态。
* 记录残差数据用于后续分析。
- 结果分析与绘图:
* 计算并绘制姿态误差(俯仰、横滚、航向)收敛曲线。
* 计算并绘制速度误差(北、东、地)收敛曲线。
* 绘制陀螺仪和加速度计零偏的在线估计值与真值对比图,验证系统的辨识能力。
系统要求
- MATLAB R2016b 或更高版本。
- 不需要任何附加工具箱(如Navigation Toolbox或Sensor Fusion Toolbox),依靠基础矩阵运算库即可运行。
使用说明
直接运行主脚本文件即可启动仿真。程序将在命令窗口输出当前的仿真时间进度,并在计算完成后自动弹出三个图形窗口,分别展示姿态误差收敛情况、速度误差情况以及惯性传感器零偏的估计过程。可以通过修改脚本头部的参数区域来调整仿真时长、传感器噪声水平或初始失准角大小。