做组合导航这几年,被问得最多的问题就是:INS自己也能算姿态和位置,GPS单独也能定位,为什么非要把它俩绑在一起?这个问题其实是理解INS/GPS组合导航体系的钥匙,也是这个系列文章走到第八篇时最值得展开的一次。
先说结论:INS更像短跑选手,起跑快、瞬间速度快,但跑久了就偏航;GPS更像长跑选手,绝对路线准,但步子慢还容易受天气和遮挡打扰。INS/GPS组合导航的核心价值,就是让这两个各有缺陷的系统互相弥补——用GPS的长期稳定性去压制INS的累积漂移,用INS的高频连续输出去填补GPS的低速率和信号中断。这套思想几乎覆盖了所有惯组加卫导组合导航方案,从飞机导弹到自动驾驶、无人机、手持测绘设备,底层框架都是同一套。
这篇文章会把INS/GPS组合导航从原理到落地讲透,内容包括系统架构选型、误差建模、卡尔曼滤波器的工程实现,以及坐标转换、天线设计、信号失效保护这些容易被忽略的实战细节。适合正在做车载定位、机器人导航、无人机飞控的朋友参考。
1. 组合导航整体思路与架构选择
1.1 为什么必须把INS和GPS绑在一起
前面已经点过一句:这俩系统各自的优点恰好是对方的缺点。但到底差到什么程度,还是用数字说话更直观。
一个典型的MEMS级惯性导航单元,陀螺零偏稳定性做到0.5°/h算不错了,加速度计零偏做到1mg也算主流水平。这个指标下,纯惯性导航跑1分钟,位置误差大约在几十米级别;跑10分钟,误差可能已经到了公里级。温度变化、振动冲击、启动时刻的初始对准误差,都会让结果进一步恶化。而GPS单点定位的典型精度是2到5米,虽然不算高,但它不会随时间漂移——你开机半小时之后测的位置,和开机1秒时测的位置,精度基本是一样的。
这两条误差曲线一对比,组合的必要性就很直观了:用GPS的绝对位置去“咬住”INS的漂移,同时用INS的高频信息去平滑GPS的跳变和多径噪声。实际效果是,松组合状态下水平位置精度通常能稳定在GPS单点精度附近,姿态精度比单独用INS更好,而且输出频率能维持在200Hz以上,不会因为GPS更新慢导致控制环路抖动。
1.2 松组合、紧组合与深组合,到底选哪种
组合导航的架构一般分成三档,很多新手一上来就纠结选哪个,其实先搞清楚每档的边界就简单了。
松组合是把INS和GPS分别解算,然后把它们的位置差和速度差送给卡尔曼滤波。优点是实现快,调试方便,适合验证算法、做初期原型。缺点是GPS解算结果本身已经是接收机内部滤波后的值,观测噪声有“色彩”,而且GPS一旦少于4颗星,整套系统就失去约束,只能回到纯惯性模式。
紧组合不再用GPS的定位结果,而是直接用伪距、伪距率这些原始观测量进滤波器。即使可见卫星只有2到3颗,也能对位置形成部分约束,城市峡谷里比松组合抗遮挡能力强很多。代价是状态维数升高、伪距误差模型的复杂度上升,调参工作量明显变大。
深组合更激进,把INS信息直接馈送到GPS接收机的码环和载波环,用惯性辅助跟踪环路,换来的好处是在高动态、强干扰条件下依然能保持信号跟踪。但深组合基本要把接收机底层完全打开,市面上现成方案少,多数是自己写FPGA或DSP,工程量大,如果不是有硬需求,民用产品不建议碰。
从我的经验看,量产车载定位和无人机导航,紧组合是性价比最高的选择;如果团队刚从零起步,先用松组合跑通整条链路,再逐步往紧组合迁移,这个路线最稳。
2. 核心原理:误差模型是组合的“共同语言”
2.1 INS误差为什么随时间累积
很多初学者对INS误差的第一印象是“漂”,但到底怎么漂的,往往说不清楚。这里拆开看就明白了。
惯导解算的本质是积分:加速度计测比力,积分一次得到速度,再积分一次得到位置;陀螺仪测角速度,积分得到姿态。问题在于,每个环节都叠加了误差。加速度计的常值零偏在二次积分之后,位置误差随时间平方增长;陀螺仪的零偏会导致姿态角缓慢漂移,姿态误差又会让重力加速度分解到水平轴上,进一步加速位置发散。所以惯导的误差不是匀速增长的,而是越到后面越失控。
这个过程用数学描述,惯导位置误差大致有随时间线性增长的项,也有随时间平方增长甚至立方增长的项。实际设计时,我们用“等效东向或北向陀螺漂移”来判断一套惯导系统能维持多长时间的可用精度——比如0.01°/h的光纤级惯导能撑住几分钟到十几分钟的纯惯性导航,0.5°/h的MEMS能撑住的往往只有几十秒到几分钟。
2.2 GPS误差来源到底有哪些
GPS误差是组合导航里另一个必须吃透的点。它不是单一错误,而是一堆误差源叠加在一起的结果。
首先是卫星端的误差:星历误差和卫星钟差,这部分可以通过广播星历参数校正到一定程度,但无法完全消除,最终等效到伪距上大约剩1到2米。然后是传播路径误差:电离层延迟和对流层延迟。电离层影响最大,白天和太阳活动期尤其明显,双频接收机可以大幅削弱它,单频接收机则主要靠模型修正。再就是接收机端误差:多径效应、热噪声、天线相位中心变化等。多径效应在市区和高架场景里特别头疼,信号反射后叠加,轻则定位抖动,重则出现几米甚至几十米的偏差。
还有一个工程上特别容易忽略的点:观测几何的影响。同样的测量噪声,卫星几何分布好(DOP值小)和几何分布差(DOP值大)时,最终定位精度能差好几倍。所以GPS误差不是单纯“测距测准了就能定位准”,几何构型同样关键。
搞懂这些误差,是为了在组合导航的滤波模型里给GPS观测设置合理的噪声方差。给得太自信,GPS一跳变就会把整个系统带偏;给得太保守,GPS又起不到修正INS的作用,这是一个需要实践去平衡的权重问题。
2.3 误差状态在滤波模型里怎么用
组合导航的主流实现方式,是把INS的误差作为状态量来估计,而不是直接估计位置姿态本身。这个思路很妙,但新手往往要绕一阵才转过弯来。
原理是这样的:INS解算出来的位置、速度、姿态作为一个“标称轨迹”,我们假设它是大方向正确的,然后建立一个小误差模型,状态向量包括姿态误差、速度误差、位置误差,以及陀螺零偏和加速度计零偏等。卡尔曼滤波每收到一次GPS量测,就估计出这一组误差量,然后反馈到INS解算结果上做修正。也就是说,滤波器不是直接告诉你“你现在在哪里”,而是告诉你“你的惯导结果错在哪里、错多少”。
这种做法有个明显的好处:误差随时间是慢变量,比起位置姿态这些快变量,动态模型更容易建立,滤波器也更稳定。工程上几乎所有INS/GPS组合导航产品用的都是这种“间接法”误差模型。
3. 卡尔曼滤波融合的工程实现
3.1 状态量与量测量的经典配置
一个标准的松组合滤波器,状态量通常这样配置:15维状态包括三维姿态误差、三维速度误差、三维位置误差、三轴陀螺零偏、三轴加速度计零偏。有的方案还会扩展维度,加上陀螺比例因子、加速度计比例因子、杆臂误差等,但那是后话,先把15维做通已经很能说明问题。
量测量怎么选?松组合最常用的是GPS输出的位置和速度,直接和INS解算的位置速度做差,得到的残差序列就是滤波器的观测输入。这里要注意一个细节:GPS天线和INS的质心通常不在同一个物理点上,它们之间存在一个杆臂。车辆转弯或者姿态变化时,杆臂会导致GPS和INS的测量不一致,必须在量测方程里把杆臂补偿项写进去,否则转弯工况下位置和姿态都会被带出一个固定偏差。
紧组合的量测设计就复杂得多:通常以GPS接收机输出的伪距、伪距率以及卫星位置、卫星钟差作为输入,构建关于误差状态的观测方程。它的好处是,即使在卫星数不足的情况下也能“挤”出约束信息,但观测方程的雅可比矩阵需要根据每个时刻的卫星方位角、俯仰角实时计算,工程实现量比松组合大一截。
3.2 初始对准与滤波参数初值
组合导航一开始的几步特别关键,第一步就是初始对准。对INS/GPS组合系统来说,对准的主要任务是确定初始姿态。水平姿态可以用加速度计在静止时测量重力方向来估计,但航向角需要陀螺感应地球自转或借助外部参考。低精度MEMS陀螺感应不到地球自转,通常需要靠GPS速度航向或磁力计来辅助初始航向对准。
滤波器的初始协方差矩阵也不能随便填。如果填得太小,滤波器会“过度自信”,后面遇到真实量测偏差时修正力度不足,误差收敛慢;如果填得太大,滤波器前期容易跟着噪声跑,输出抖动明显。实际工程里,初始协方差一般按照器件手册的零偏稳定性和GPS定位精度来折算,再通过跑车数据微调。
过程噪声协方差Q矩阵和量测噪声协方差R矩阵的整定,是组合导航调参里最花时间的部分。Q太大表示你信任INS不足,滤波结果会高频抖动;Q太小表示你太相信INS,GPS的作用被压下去,长时间后误差还是会缓慢漂出来。R矩阵的标定相对简单一些,可以用一段静态GPS数据的标准差来估计,但动态环境下的多径误差会显著改变实际噪声特性,所以R也要留有余量。
3.3 调参路上的血泪经验
调卡尔曼滤波参数这件事,我觉得最大的坑就是“在仿真里调出来的参数拿到实车上完全失效”。仿真环境里误差模型是已知的、高斯噪声是干净的、观测是理想的,Q和R可以调到性能图表非常漂亮。但到了实车,温度变化导致零偏漂移、振动导致加速度计噪声增大、高楼反射导致GPS误差不再干净,之前的参数必然要重新整定。
我的习惯是分三步走:第一步静态测试,车静止不动,看滤波输出的位置和姿态噪声是否合理,这一步主要调R和初始P矩阵;第二步低速直线和转弯测试,重点观察转弯时杆臂补偿和GPS多径的影响;第三步高速和高动态测试,跑高架、隧道、林荫道等场景,看GPS短期中断后INS的维持能力和重收敛速度。
还有个细节,滤波器容易出现“数值病态”问题。比如位置误差的量级是米,姿态误差的量级是弧度,速度误差的量级是米每秒,三者差异很大,如果直接放进同一个矩阵不加缩放,很容易出现数值精度问题,严重的会导致协方差矩阵失去正定性,滤波器发散。工程上一般会对状态量做归一化处理,或者用双精度浮点并定期对协方差矩阵做对称性修整。
4. 工程落地必踩的坑
4.1 坐标系不统一,坑到怀疑人生
组合导航领域有个老生常谈但永远有人犯错的点:坐标系。INS的姿态角通常定义在地理系或导航系里,位置在经纬高坐标系里表示,速度在北东地(NED)或者东北天(ENU)框架下解算,而GPS输出的是WGS84坐标系下的经纬度和高程。这些坐标体系之间的转换,只要一个符号搞错,整个系统就会跑偏。
实际项目里最常用到的几个转换,包括经纬度与本地笛卡尔坐标之间的转换、WGS84与ECEF(地心地固系)之间的转换、以及WGS84与国内常用地图坐标系之间的转换。例如你拿到了GPS的WGS84经纬度,要画到高德地图上,就需要先经过坐标系偏移转换,否则你在地图上看到的点会偏离实际位置几十米到几百米。这个偏移是固定的非线性映射,工程上使用的是公开的GCJ-02坐标偏移算法,Python里手写几十行就能完成,但要注意转换方向,拿高德坐标反推WGS84时要用对应的逆变换。
我见过最典型的错误是,有人把经纬高直接当成了平面坐标来算速度,结果在北纬某个纬度上,1度经度对应的地面距离比赤道附近短了很多,定位结果出来的行驶轨迹全部变形。处理这类问题的标准做法是先用WGS84椭球参数把经纬度投影到局部切平面坐标系,再做后续的融合和轨迹计算。
4.2 天线选型:无源陶瓷天线与有源天线
GPS信号到达地面时已经很弱,天线设计的差距会直接反映到定位质量上。很多新手买模块时,看到板子上预留了一个陶瓷天线引脚,就直接焊了个无源陶瓷天线上去,结果在室内或者树荫下完全收不到星,还以为是GPS模块坏了。其实不是模块不行,而是信号链路的增益预算不够。
无源陶瓷天线本身没有放大器,优点是体积小、成本低、功耗低,适合信号条件好、馈线短、GPS模块灵敏度高的场景。有源天线内部集成了一个LNA低噪声放大器,通常还要配合供电线路,通过同轴馈线给天线供电。这样能把信号在进入接收机之前先放大,补偿馈线损耗,适合车载安装时天线在车顶、接收机在舱内的长馈线场景,也适合隧道口、树荫、高楼峡谷这种弱信号环境。
怎么把一个无源天线改成有源天线?设计上关键点是增加一个低噪声放大器级、合适的带通滤波器,以及天线供电的偏置电路。电源要经过电感馈入RF路径,RF信号经过隔直电容输出,避免直流与射频互相干扰。LNA需要选择噪声系数尽量低的管子,1dB左右的NF比较理想,增益控制在20dB上下就够了——增益不是越高越好,太高了反而容易压掉后级接收机的动态范围,导致强信号饱和。
另外一个容易忽略的坑是天线接地。陶瓷贴片天线的地平面大小直接影响天线的效率和辐射方向图,设计PCB时一定要在天线下方预留足够大的完整地平面,不能把走线铺铜穿过去,否则天线效率下降会让定位成功率明显变差。
4.3 GPS失效、欺骗与失效保护
GPS信号受攻击或干扰时,如果没有失效保护机制,整个组合导航系统会被带偏,甚至在用户无感知的情况下给出错误位置。这部分越来越重要,尤其是涉及车辆或者无人设备安全运营时。
先区分两种失效模式:阻塞和欺骗。阻塞是信号被干扰源压制,接收机收不到星或者信噪比骤降,这时候系统通常会直接降级到纯惯性模式,问题相对容易判断。欺骗是攻击者生成一套伪造的GPS信号,让接收机以为自己在某个虚假的位置、跟着错误的轨迹走。欺骗信号比真实信号功率可以做得更高,接收机如果完全信任信号,就很难察觉。
组合导航里应对欺骗的失效保护有几个工程方向:第一,在接收机内部做信号质量监控,比如观测量一致性检验、载噪比异常检测、多普勒一致性检查;第二,在组合导航层面,用INS预测的轨迹与GPS解算结果做一致性校验,如果两者偏差明显且持续时间超过阈值,就判定GPS不可信,自动切换到惯性导航模式;第三,引入额外传感器源,例如里程计、视觉、RTK服务端信息,交叉验证降低单一信号源风险。
这里要特别强调,失效保护不是等出事之后再做,而是在系统设计阶段就要准备好降级策略。比如GPS信号连续异常3秒、5秒、30秒时,分别应该采取什么动作,切换逻辑优先级如何,都要提前定好。我们实际测试时,专门用过卫星信号模拟器来注入欺骗场景,验证组合导航系统能不能自动识别并隔离异常GPS量测。
4.4 时间同步是隐蔽的精度杀手
INS输出时刻和GPS输出时刻可能天然不同步,这个问题在毫秒级就会造成厘米到米级的位置误差。尤其车辆高速行驶时,50毫秒的时间偏差对应车速80km/h时就是1米多的位置偏差,对于要求车道级定位的导航系统来说已经不可接受了。
工程上有两个层面的时间同步:一是硬件层面的PPS秒脉冲。GPS接收机通常输出PPS信号,表示整秒时刻,惯性测量单元可以和PPS对齐采样时刻,把时间戳做到亚毫秒级。二是软件层面的时间戳对齐。如果硬件来不及改造,也可以在软件上通过线性插值或者拟合来补偿两个传感器之间的时间偏移。能硬同步就硬同步,软同步只能作为兜底方案。
我遇到过一个很隐蔽的问题是,GPS输出数据是通过串口传输的,接收机发送的时刻和数据实际采样时刻不是同一个时刻,中间有协议封装和传输延迟。第一次做融合时没注意这个延迟,结果车辆转弯时轨迹总有一条固定偏差,排查了很久才发现是时间戳引用错了。
5. 测试评估方法与实战笔记
5.1 实车测试的流程设计
组合导航系统的测试不能只跑一圈看看轨迹漂不漂就完事,至少要有标准化的流程来覆盖主要风险点。
我会把测试分成几个阶段。第一个阶段是静态测试,把车停在开阔场地,系统上电后持续采集30分钟以上数据,主要看位置漂移速度、姿态噪声、滤波器是否收敛。第二个阶段是动态基本测试,覆盖低速、匀速、加减速、急转弯、八字绕行等工况,急转弯对杆臂补偿和GPS多径的影响特别能暴露问题。第三个阶段是挑战场景,把车开到高架路、隧道、地下车库、林荫道、高楼密集的市区,跑完这些路线,系统的定位可用率和最大误差基本就心中有数了。
每一轮测试都必须全程记录原始数据,包括GPS原始观测量、惯导原始数据、滤波中间量、最终输出。要知道,很多问题事后分析时才发现,如果当时没存原始数据,根本无从查起。测试数据的回放系统也非常值得提前搭建,做参数调优时,用同一段数据反复跑,才能公平对比修改前后的效果。
5.2 性能评估指标怎么看
组合导航评估不能只看一个绝对误差,需要结合场景和数据去看一组指标。
位置误差指标里,常见的有RMSE(均方根误差)、CEP(圆概率误差)、95分位绝对误差、最大误差。RMSE和95分位误差更贴近真实体验,最大误差对偶发多径和遮挡特别敏感。姿态误差通常用角度统计误差,翻滚和俯仰角误差往往比航向角误差小一个量级,因为航向误差和陀螺的方位漂移强相关,更难约束。
车速高动态工况下,速度和航向误差尤其值得关注,因为它们直接反映了INS与GPS融合的动态响应能力。评估时还要分开统计GPS可用时段和GPS中断时段的表现,因为这两个阶段的误差特性完全不同。GPS中断30秒时组合导航的位置漂移量,是衡量系统“纯惯性维持能力”的核心指标,这个值在很多项目验收时都会被拿来做硬指标。
5.3 常见问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 静止时位置漂移大 | INS初始对准未完成或零偏未估计 | 查看滤波器是否收敛,检查初始协方差与噪声参数 |
| 转弯后航向误差突然增大 | 杆臂补偿缺失或设置错误 | 核对天线与IMU杆臂值,检查量测方程 |
| GPS中断后重收敛慢 | R矩阵设置过小,滤波器状态协方差被压缩 | 增大R或加入自适应因子,检查时间同步 |
| 隧道出口轨迹跳变 | GPS快速重定位叠加多径反射 | 延长GPS量测确认窗口,用连续一致性检验 |
| 长时间运行后位置缓慢漂出 | 零偏估计不充分或温度补偿不足 | 检查陀螺与加速度计零偏估计值,补充温度标定 |
| 地图画出来点偏了几十米 | 坐标系转换未处理 | 确认WGS84到GCJ-02等偏移转换的方向和参数正确 |
这张表里的问题,我基本都在项目里真实遇到过。拿“GPS中断后重收敛慢”来说,我踩过一次很深的坑。那时候滤波器的量测噪声R矩阵给得很小,GPS信号好的时候位置输出确实非常平滑。但一进隧道,GPS中断,滤波器状态协方差因为没有观测更新就慢慢涨大。出隧道瞬间,GPS信号恢复,但多径效应让第一个量测残差很大,而滤波器因为前面协方差已经涨大了,就直接把这个异常残差当作真实误差吸收进去,结果位置被拉偏了好几十米。后来加了一个“新息检测”逻辑,当残差超过根据协方差推算的阈值时就降低GPS权重,或者直接拒绝这一帧量测,问题才解决。
这类问题在测试中特别常见,如果不把原始数据记录下来,很难定位到是“滤波器发散了”还是“GPS量测本身有问题”。
6. 写在后面的个人体会
这套INS/GPS组合导航框架,看起来公式很多、矩阵很大,但真正决定系统好坏的往往是数据质量、参数标定和故障处理策略这些工程细节。我自己做了这么多年组合导航,最大的体会是:先保证传感器数据干净可信,再谈滤波算法优化。很多项目里出现问题,最后回溯下来,多半不是卡尔曼滤波理论推错了,而是输入数据里有脏东西。
如果你刚刚开始接触组合导航,建议不要只盯着仿真跑分,尽快把一套组合系统接到真实数据上跑起来,哪怕一开始参数很粗糙也没关系。真车跑几趟,你会比看十篇论文更深刻地理解INS和GPS各自的脾气,也能更快掌握“滤波权重如何取舍”这个组合导航的核心手感。
最后再分享一个小技巧:调试阶段把INS原始输出、GPS输出、组合输出同时画在轨迹图上,颜色分开。你一眼就能看出组合结果到底是跟谁在走、在哪段被谁带偏了。磨刀不误砍柴工,这个动作能帮你省下大量排查时间。