基于四元数法的捷联惯性导航姿态解算仿真工具
项目介绍
本项目是一个用于捷联惯性导航系统(SINS)姿态解算研究的MATLAB数学仿真工具。该项目旨在通过数值模拟验证四元数算法在处理连续旋转运动时的准确性与稳定性。程序通过预设的动态角速度输入,模拟载体在三维空间中的复合运动,并实时计算其横滚角(Roll)、俯仰角(Pitch)和航向角(Yaw)。相比于传统的欧拉角微分方程解算法,本项目采用的四元数法有效避免了“万向节死锁”这种数学奇异性问题,非常适合无人机、机器人及各类自主移动平台的导航算法演示与原型设计。
功能特性
- 全姿态覆盖:采用四元数作为姿态描述参数,能够实现全空间范围内的姿态解算,不受俯仰角90度奇异点限制。
- 高阶积分更新:内置四阶龙格-库塔(Runge-Kutta 4, RK4)算法进行四元数状态更新,相比单步欧拉法具有更高的数值逼近精度及收敛性。
- 误差自补偿:集成了四元数归一化算法,通过在每一采样时刻对状态变量进行范数约束,有效抵消由于离散化计算和数值舍入引发的数学漂移。
- 综合可视化:程序自动生成包含姿态角时程曲线、四元数分量演变、归一化约束误差分析以及三维坐标轴空间投影在内的多维度图表。
- 典型运动模拟:内置了三轴非对称正弦与常数复合成角运动模型,可直接观察在该复杂动力学输入下解算算法的表现。
系统要求
- 软件平台:MATLAB R2016b 或更高版本。
- 硬件要求:通用计算机,无需特殊计算卡支持。
- 依赖项:仅需MATLAB基础数学工具箱,无需安装额外的航空航天或导航专业模块。
核心实现逻辑
程序按以下逻辑流程顺序执行:
- 参数初始化:设定100Hz的采样频率与20秒的仿真时长,定义载体初始姿态(10°横滚, 5°俯仰, 30°航向)。
- 输入数据构造:生成三轴角速度模拟数据,其中X轴和Y轴采用谐波函数模拟摆动,Z轴设为常值模拟旋转。
- 状态预处理:通过三角变换将初始欧拉角转换为初始四元数状态向量。
- 姿态解算循环:
- 提取当前时刻角速度矢量。
- 使用四阶龙格-库塔迭代逻辑,对四元数微分方程进行积分。
- 执行归一化处理,确保四元数范数始终为1。
- 将更新后的四元数重新映射为欧拉角,以便直观输出。
- 数据后处理与绘图:对采集到的历史轨迹进行批量绘图。
关键函数与算法说明
- 欧拉角与四元数双向转换(euler2quat / quat2euler):
程序实现了基于Z-Y-X旋转顺序(航向-俯仰-横滚)的转换矩阵。在四元数转欧拉角的过程中,采用了atan2函数以确保在四象限内获得正确的角度范围。
- 四元数微分方程建模(quat_mult_vec):
该算法实现了核心导数计算。它利用当前四元数与载体坐标系下的三轴角速度构造反对称矩阵(Omega矩阵),通过矩阵乘法计算出四元数的导数(dq = 0.5 * Omega * q),为数值积分提供斜率信息。
该功能实现了从四元数到机体系-导航系转换矩阵(Cb2n)的映射,用于将载体自身的坐标轴矢量投影至全局导航参考系。
程序通过计算四元数四个分量的平方和平方根与1之间的残差,实时监控算法运行过程中的数值稳定性。
利用四元数转换后的方向余弦矩阵,每隔一定步长绘制一次机体系X轴在导航坐标系中的三维指向,展示载体运动的几何轨迹。