新手也能搞懂:用严恭敏PSINS工具箱对比纯惯导(INS)和航位推算(DR)的实战演练
从零开始用PSINS工具箱实战对比惯性导航与航位推算第一次打开严恭敏教授的PSINS工具箱时我完全被那些密密麻麻的MATLAB函数搞晕了。作为一个刚接触惯性导航的工程师我既想理解INS和DR的核心差异又希望能快速上手实验验证。经过几周的摸索我总结出这套最适合新手的实战指南——不需要深厚的数学背景只要跟着步骤操作你就能直观看到两种导航方式的性能差异。1. 实验准备认识工具与数据在开始对比实验前我们需要先准备好PSINS工具箱和MATLAB环境。这个开源工具箱包含了惯性导航领域最常用的算法实现特别适合快速验证理论。1.1 环境配置首先确保你的MATLAB版本在R2016b以上然后下载最新版PSINS工具箱目前最新是v3.0。解压后将工具箱文件夹添加到MATLAB路径addpath(genpath(你的本地路径/PSINS-v3.0)); savepath % 永久保存路径设置小技巧运行psinsinit命令可以快速验证工具箱是否安装成功。如果看到欢迎信息说明环境已经就绪。1.2 理解测试数据工具箱自带的trj10ms.mat是一个典型的飞行器轨迹仿真数据包含IMU数据三轴加速度计和陀螺仪测量值真实轨迹位置、速度和姿态的参考值气压高度计用于高度辅助测量我们可以用以下命令预览数据内容load trj10ms.mat; whos % 查看工作区变量注意所有角度单位默认使用弧度制但可视化时会自动转为度数显示2. 实验设计控制变量对比法为了公平比较INS和DR的性能我们需要确保两者在相同条件下运行。这包括使用相同的初始误差设置相同的IMU噪声参数相同的时间跨度2.1 误差参数设置导航系统的误差主要来自三个方面误差类型参数说明典型值影响系统IMU零偏陀螺仪0.01°/h加速度计50μgimuerrset(0.01,50)INS/DR初始对准姿态0.5速度0.1m/s位置10mavperrset([0.5;0.5;5],0.1,[10;10;10])INS/DRDR特定安装角偏差[15;0;10]里程计刻度5%[15;0;10]*glv.min, 0.05仅DR在代码中统一设置这些参数% 公共参数 imuerr imuerrset(0.01, 50, 0.001, 5); davp avperrset([0.5;0.5;5], 0.1, [10;10;10]); % DR特有参数 dinst [15;0;10]*glv.min; dkod 0.05;2.2 数据仿真流程完整的对比实验包含以下步骤加载基准轨迹作为真值参考添加IMU噪声模拟真实传感器生成DR数据仿真里程计测量分别解算运行INS和DR算法结果可视化误差曲线对比关键函数说明bhsimu生成气压高度计数据odsimu仿真里程计测量值inspure纯惯性导航解算drpure航位推算解算3. 代码实现分步解析让我们拆解完整的对比脚本理解每个模块的作用。3.1 初始化设置close all; clear; clc; glvs; % 加载全局变量 trj1 trjfile(trj10ms.mat); % 加载轨迹 insplot(trj1.avp); subtitle(TRUE轨迹); % 绘制真实轨迹这段代码初始化环境并显示参考轨迹。glvs定义了工具箱常用的常量如地球半径、重力加速度等。3.2 传感器数据仿真% 生成气压高度数据 trj bhsimu(trj1, 1, 10, 3, trj1.ts); % 生成里程计数据含噪声 inst [3;60;10]*glv.min; % 安装角偏差 kod 1; qe 0; dT 0; % 里程计参数 trjod odsimu(trj, inst, kod, qe, dT, 0);关键点odsimu的第二个参数inst表示IMU到里程计的安装偏差角这是DR系统特有的误差源。3.3 添加噪声和初始误差% 为IMU数据添加噪声 imu1 imuadderr(trj.imu, imuerr); % 设置初始状态误差 avp00 avpadderr(trjod.avp0, davp); avp01 avpadderr(trj.avp0, davp);这里我们刻意保持INS和DR的初始误差一致确保对比的公平性。3.4 执行导航解算% DR解算 avpd drpure([imu1(:,1:6), trjod.od], avp00, instdinst, kod*(1dkod)); % INS解算 avp inspure(imu1, avp01, trj.bh, 1);注意drpure需要同时传入IMU和里程计数据而inspure仅使用IMU数据。4. 结果分析与可视化真正的价值在于理解这些曲线背后的物理意义。我们将从姿态、速度和位置三个维度进行对比。4.1 姿态误差对比运行以下代码生成姿态误差图insavperr avpcmpplot(trj1.avp, avp); dravperr avpcmpplot(trj1.avp,[avpd(:,1:9),avpd(:,end)]);典型现象INS姿态误差稳定在初始误差水平0.5左右DR姿态误差随时间缓慢增长但受里程计修正原理说明纯惯性导航的姿态误差主要取决于初始对准精度而DR系统会受到里程计安装偏差的影响。4.2 速度误差对比速度误差是最能体现两者差异的指标指标INS表现DR表现原因分析水平速度随时间发散保持稳定里程计提供速度观测垂直速度相对稳定相对稳定都使用气压高度辅助实际测试中DR的水平速度误差通常能比INS小一个数量级4.3 位置误差对比使用trjsee函数可以直观看到轨迹差异trjsee(trj1.avp,avp,[avpd(:,1:9),avpd(:,end)]) legend(True, INS, DR);观察要点经度方向INS呈现振荡发散DR相对稳定纬度方向两者都会发散但DR速度较慢高度方向由于气压计辅助两者表现相当5. 深入讨论何时选择DR通过实验我们已经看到DR在速度估计上的优势但它也有自己的局限。以下是选择导航方案时的决策矩阵考虑因素推荐方案理由短时高精度INS不受里程计误差影响长时间导航DR速度误差不累积安装条件差INS不需要里程计成本敏感DR低精度IMU里程计组合在实际项目中我通常会采用INS/DR组合导航方案。初期使用INS保证精度当检测到车辆运动后逐步引入DR修正这样能兼顾两者的优势。