ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MTI-8-5A与R7KA8D2KFLCAC组合导航实战:无人机IMU+GNSS融合定位

MTI-8-5A与R7KA8D2KFLCAC组合导航实战:无人机IMU+GNSS融合定位 1. 项目起因与整体设计思路先交代一下背景我最近在折腾无人机的导航系统场景不光是操场飞着玩还包括树冠遮蔽的山地、高架桥底下、采石场周边这类比较极端的野外环境。飞控自带的GPS在开阔地确实还行可一旦进了林子或者贴近建筑定位直接漂到没眼看返航点都能给你歪出去十几米。这个项目核心就是解决这类问题把惯性测量单元和卫星定位模块结合起来用一套组合导航方案把系统的整体导航性能补上去。标题里的两块核心硬件——MTI-8-5A和R7KA8D2KFLCAC——一开始听到的人可能觉得就是两个零件号没什么概念。实际上它们分别对应组合导航里的两个关键角色一个是高频惯性传感器输出加速度和角速度另一个是支持多系统高精度定位的卫星接收模块输出绝对位置和速度。两者一个管短时递推一个管长时校零配合起来才能既稳又准。这套思路在行业里叫GNSS/INS组合导航无人机、无人车、手持测绘设备基本都在用。这篇文章我打算把从选型、接线、安装到融合算法再到实飞测试的完整过程都写出来适合正在做无人机开源飞控、野外机器人导航或者单纯想搞明白“IMU为什么能救GPS”的读者。整篇文章以实际踩坑为主尽量少讲虚的公式多讲落地时怎么操作。1.1 不直接用卫星定位非得多花一块IMU先说一个经常被忽略的事实卫星定位的更新频率并不高。我这里用的R7KA8D2KFLCAC在普通定位模式下输出10Hz开RTK后可以到20Hz但中间仍然有50毫秒的空窗。而这50毫秒对一架以每秒20米速度飞行的无人机来说就是整整1米的未知位移。更麻烦的是卫星信号本身是个离散的、易被遮挡的东西一进树荫或者靠近桥墩定位点会突然跳变这种跳变对飞控来说几乎是致命的。那有人会问飞控里不是本来就有惯性传感器吗确实有常见的Pixhawk飞控板载的IMU一般属于消费级到工业级的过渡档位长时间积分后的漂移非常可观。如果纯靠板载IMU来推算位置几秒钟后数据就发散到没法用。这时候就需要一个单独的、性能更好的外部IMU来做专用导航解算MTI-8-5A就是干这个用的。它输出频率高、噪声低、温漂小可以撑起短时间内相对精确的姿态和位移递推。所以整个设计逻辑是这样卫星模块负责给出大范围、绝对准确但较低频率的位置修正IMU负责在两个修正点之间提供高频、平滑但会缓慢漂移的推算轨迹最后通过融合算法把两边数据捏在一起既拿到高刷新率又不让漂移积累。1.2 IMU和GNSS怎么分工各管一段谁也替不了谁要理解这套系统得先把两个传感器各自的长短板放在桌面上摊开看。IMU的长板是“高频”和“连续”——它不需要任何外部信号在木屋里、矿洞里、桥底隧道中照样工作每秒能输出几百个数据点。它的短板是“漂移”——误差会随着时间不断叠加你很难直接用它来回答“我到底飞了多远”这种绝对位置问题。GNSS模块则恰好反过来。它的长板是“绝对位置”——只要天空可见度够它在任何时刻都能给出一个与历史无关的经纬度坐标误差不会随着时间累积。短板也很明显频率低、怕遮挡、信号多路径时会出现米级的跳动。如果把IMU定位比喻成一个很勤奋但记性不太好的短跑陪练那GNSS就是每跑几步才出现一次的精准坐标桩。一个人负责在桩与桩之间校正方向另一个人负责把过程走直组合起来就是完整的运动轨迹重建。在无人机场景里还有一个更实际的好处卫星信号偶尔会出现完全失锁的情况比如钻桥洞、翻越山脊的瞬间。单纯靠GNSS的飞控此时会像突然被蒙住眼睛一样位置会直接在飞控地图上“瞬移”。而有了外部IMU后系统可以进入纯惯性推算模式短时间维持合理的位置输出信号恢复后再平滑切回卫星解整个过程用户几乎感觉不到异常。这在野外定向作业时价值非常高。1.3 系统整体架构两个模块怎么串起来用在开始接线之前先把系统框架画清楚。整个导航系统以飞控或者独立的导航计算机为核心挂接两个外部传感器MTI-8-5A通过UART串口输出三轴加速度、三轴角速度以及模块自带的姿态解算结果R7KA8D2KFLCAC通过另一路UART输出NMEA格式的定位数据同时PPS引脚输出秒脉冲作为时间同步基准。两路数据在飞控侧汇合经过扩展卡尔曼滤波或者是更工程化的互补滤波加误差状态滤波器生成最终的位置、速度、姿态输出。我用的是Pixhawk架构的开源飞控固件为ArduPilot和PX4都跑过两种固件对这类“外部IMU外部GNSS”的硬件结构都有比较成熟的支持。理论上只要参数配置正确PX4里的EKF2模块可以直接利用外部IMU数据来替代板载惯性数据参与融合。ArduPilot则更灵活一点可以通过多个串口分别挂载外置IMU和GPS模块参数里指定好协议即可。核心思路就是给系统接入“更好的眼睛”和“更稳的陀螺仪”数据通路打通后剩下的工作就是调参和测效。2. 硬件选型MTI-8-5A 与 R7KA8D2KFLCAC 的核心参数2.1 MTI-8-5A一枚被低估的工业级IMUMTI-8-5A这个模块第一次拿到手的时候我甚至怀疑是不是发错了货——尺寸不大比常见的火柴盒还要小一圈重量也很轻。但看参数其实挺能打。它属于工业级惯性测量单元不含磁力计输出的是纯惯性的三轴角速度和三轴加速度这个“纯”字很关键意味着数据的误差模型相对干净不会被机载电流产生的磁场干扰。后面做校准和滤波时数据质量比那些消费级六轴模组明显好一个档次。核心参数方面陀螺仪的量程支持到±450°/s加速度计量程最大能到±40g这个动态范围对无人机来说绰绰有余。真正让我满意的是零偏稳定性——陀螺仪零偏能做到个位数的°/h级别加速度计零偏也基本稳定在毫g级。这种指标听着枯燥但对于纯惯性递推来说零偏每小一点10秒内的位置漂移就能少好几米。模块输出频率可以调到100Hz甚至更高完全能满足飞控的实时控制需求。如果非要说它的局限性那就是模块本身不带磁力计也因此不提供完整的航向绝对参考。所以它需要GNSS速度方向或者外接磁力计来辅助确定“朝哪边飞”。这个限制在选型阶段就要想清楚好在咱们这套方案里本来就有GNSS的速度矢量完全能补上这个空缺。2.2 R7KA8D2KFLCAC定位模块里的多面手另一个主角R7KA8D2KFLCAC是一只多模多频卫星定位模块。之前用过的普通单频GPS模块在城市峡谷和树林里基本就是摆设冷启动一分钟定位精度十米级飘起来让人没脾气。这个模块则支持多个卫星系统同时接收包括我们常用的GPS、北斗、GLONASS和Galileo多系统并行搜星的好处非常直观可见卫星数翻倍遮挡环境下依旧能保持至少十几颗星的稳定跟踪。它支持RTK载波相位差分这是厘米级定位的关键。在架设好基准站或者接入千寻类网络RTK服务后模块可以输出2cm1ppm级别的定位精度。这个精度对无人机的精细航线作业——比如测绘扫描、定点降落、桥梁检测——都是必不可少的。即便不开RTK它在标准定位模式下也能做到1.5米以内的CEP精度比大多数板载GPS好不少。模块本身是3.3V供电UART输出NMEA 0183协议和二进制协议同时提供PPS秒脉冲引脚。我最看重的是PPS这一个功能IMU数据更新频率不固定GNSS数据又存在传输时延两块数据如果没有统一的时基融合算法很容易产生错误的观测更新。有了PPS硬件信号飞控可以精确锁定GNSS测量的观测时刻再跟IMU时间戳对齐融合精度能提升一个档次。2.3 选型阶段踩过的几个坑选型时最容易犯的错误是只看单个器件的标称精度不考虑系统匹配度。我第一次搭这套系统时IMU用的是高端的光纤陀螺GNSS用的却是普通单频模块结果RTK都没法触发高精度惯性反而浪费了。后来才明白整套系统的精度瓶颈取决于最弱的那一环IMU、GNSS、天线、融合算法必须得在一个量级上。另一个坑是天线。GNSS模块本身的接收性能再强如果外接天线质量不行在树荫下照样搜不到星。我最后换了一只有源双频天线带放大器和滤波器的陶瓷贴片方案线缆长度控制在5米以内信号电平稳定搜星数量和信噪比都比原来的袖珍天线好太多。另外一个细节是天线一定要放在无人机或野外设备的最高点周围不能有金属结构遮挡否则多路径效应会让RTK精度从厘米级掉回米级。供电这块也提醒一下R7KA8D2KFLCAC的3.3V电源要尽量干净。我试过直接从飞控的降压模块取电结果是定位数据偶尔出现校验错误排查了很久才发现是电源纹波太大干扰了射频部分。后来给模块单独加了一路LDO稳压问题立刻消失。3. 硬件集成接线、布局与减震设计3.1 接口与电平匹配5V和3.3V之间不能乱接MTI-8-5A和R7KA8D2KFLCAC虽然都走UART串口但电平标准不同直接接飞控会出事。MTI-8-5A的逻辑电平用的是3.3VR7KA8D2KFLCAC同样也是3.3V而部分飞控的串口是5V电平如果直连轻则数据乱码重则烧掉模块的IO口。我的做法是给两路串口都加一极电平转换芯片最保守可靠的方案是用TXS0108E这类双向电平转换芯片把飞控5V侧的TX/RX转成3.3V再接模块。接线顺序上模块TX接到转换芯片的3.3V侧RX转换芯片5V侧再接飞控的RX反过来同理。如果飞控本身支持3.3V串口可以直接省略转换但一定要用万用表量过确认。实际测试中遇到过一种很隐蔽的问题串口波特率不匹配导致数据出现整段乱码。MTI-8-5A的默认波特率是115200R7KA8D2KFLCAC我设置成了230400而飞控串口我一开始忘了改三路波特率对不上校准数据全部是错的。建议集成交付前先单独用一个USB转TTL小板把两个模块分别接电脑确认各自能输出有效数据再上飞控。3.2 布局考虑天线离IMU远一点再远一点硬件安装位置我在第一版方案上踩过大坑。当时图省事把IMU和GNSS模块都固定在同一块碳纤维底板上天线紧贴IMU安装。结果飞行时天线辐射对IMU传感器引入电磁干扰IMU输出出现周期性跳变融合后的姿态在悬停时居然还有规律抖动。后面把天线移到了机身最前端通过加长馈线连接IMU仍然居中安装问题立刻缓解。这里的原则是GNSS天线尽量远离任何高速数字电路和惯性传感器至少相隔15厘米以上馈线尽量使用带屏蔽层的同轴线走线也不要和大电流动力线平行缠绕。如果空间实在有限可以考虑把IMU装在单独的小减震板上与天线的机械隔离也会更好。IMU的减震处理同样重要。无人机机臂振动是IMU数据的主要噪声源虽然MTI-8-5A内部有一定抗振设计但外部再做一道减震仍然能明显改善数据质量。我用了常见的“泡棉胶铝片”结构一块2毫米厚的3M泡棉胶贴在底板和IMU之间IMU通过双面胶固定在泡棉上方再盖一块轻质铝片保持受力均匀。这个小结构装好后IMU数据里的振动频谱峰值明显下降后处理时都不需要再加重滤波了。3.3 PPS时间同步系统时基统一是融合的前提时间同步这块值得单独写一小段。MTI-8-5A的惯性数据自带内部时间戳但它的晶振和飞控系统时钟并不是同一颗加上串口传输延迟时间戳会有几个毫秒的偏差。R7KA8D2KFLCAC在每次有效定位解算完成时通过PPS引脚输出一个精确到微秒级的脉冲这个脉冲对应的测距时刻和模块内部卫星接收时刻严格对齐。飞控侧通过捕获PPS脉冲的上升沿可以测量出本地时钟和卫星时钟之间的偏差再换算到IMU时间戳上就能把两个传感器数据的观测时刻统一到同一参考系。这一步在实际项目里叫“硬件时间同步”。如果飞控固件本身不支持PPS捕获比如某些自研飞控只做了软件层的时间戳那融合效果会差一截尤其飞行速度快、机动大的场景下几个毫秒的对齐误差就能导致几厘米到十几厘米的位置误差。我在Pixhawk上启用PPS的做法是把R7KA8D2KFLCAC的PPS引脚接到飞控的TIMER_IN脚开启GPS_PPS_EN参数固件会自动进入时间同步模式。需要注意的是PPS引脚是推挽输出3.3V飞控引脚也必须是3.3V容忍接错方向可能造成内部短路。4. 数据融合与软件实现4.1 融合算法为什么必须用而且要理解它在干什么数据融合是整套系统里面最“看不见摸不着”但决定性最强的环节。通俗地讲IMU给出的信息像是一位自信的短跑选手高频率地报告“我这个瞬间的加速度是这么多我猜我现在在这个位置”GNSS则像一位每两秒钟才看一眼地图的领航员报一个更可信但更稀疏的“你在这”。两个人的判断都有误差怎么结合呢最通用的解法是误差状态卡尔曼滤波本质上是一个动态加权平均的过程谁的误差小谁的权重就大。PX4和ArduPilot内部都集成好了EKF2/EKF3算法不需要我们自己写卡尔曼滤波代码但这不意味着可以完全当黑盒。融合效果好不好很大程度上取决于给算法提供的传感器噪声参数是否切合实际。把IMU的加速度噪声和角速度噪声参数设置得过于乐观算法会过于信任惯性递推GNSS一断就疯狂漂移设置得过于悲观又会让输出的位置轨迹变得迟缓和跳动飞控的响应手感会很差。我的经验是先查看模块数据手册里的随机游走和噪声密度值填入滤波器参数再通过试飞来微调。比如MTI-8-5A手册里给出的角速度随机游走大约是0.15°/√h量级加速度噪声密度大约0.12 m/s²/√Hz这些参数比飞控板载IMU的默认值更优填入后EKF估计的定位标准差确实有可见下降。4.2 飞控参数配置一步一步让系统跑起来下面给出我在PX4环境下的实际配置流程。第一步是接线后确认设备枚举MTI-8-5A接到UART4R7KA8D2KFLCAC接到UART5。终端里输入ls /dev/ttyACM*确认串口存在然后通过px4 param set把串口映射到对应驱动param set SER_UART4_BAUD 921600 param set IMU_GYRO_RATEMAX 400 param set IMU_ACCEL_RATEMAX 400外部IMU需要在驱动里设置为“external”类型PX4才能正确识别它而不是和板载IMU冲突。设置方式是在参数IMU_GYRO_ID、IMU_ACCEL_ID那一组参数里把外接IMU的ROTATION参数设为自定义安装角。这一步非常容易出错建议参考飞控源码提供的IMU校准章节严格操作。GNSS模块配置也类似串口指定后设置协议类型为u-bloxR7KA8D2KFLCAC兼容u-blox二进制协议即可param set SER_UART5_BAUD 230400 param set GPS_UBX_MODE 1 param set GPS_UBX_FIX_MODE 3所有参数设置完成后重启飞控打开QGroundControl在MAVLink控制台查看sensor_status确认IMU和GPS都被标记为healthy再查看GPS_RAW_INT里的卫星数量通常室外应在十二颗以上。4.3 融合流程如何配合从冷启动到动态切换融合系统在冷启动时会经历一个收敛过程。刚上电时飞控不知道无人机处于什么姿态、什么位置EKF需要在最开始的一两秒内快速收敛。这个阶段IMU数据的作用特别大它可以迅速确定“水平面在哪里”让姿态估计先稳定下来。GNSS位置则需要等到首次有效定位之后才会参与位置融合在室内启动、再拿到室外去飞的场景里这个过程会是平稳过渡的不会出现位置跳变。整套系统在飞行中的工作方式是EKF以IMU数据为主干按100Hz频率递推位置、速度、姿态每当GNSS数据到达且通过校验时滤波器会用观测值去修正IMU递推的累积误差。GNSS失锁时间在3秒以内时EKF基本可以维持位置误差在两米以内超过10秒纯惯性推算的漂移才会变得比较明显。这个特性在穿越桥底、峡谷这类短暂失锁的场景里价值巨大飞控完全不需要进入紧急返航逻辑飞手也不会感觉到异常。如果你用的是ArduPilot而非PX4融合方面的参数调整思路是类似的。ArduPilot的EKF3对传感器噪声、延迟补偿、GPS速度融合都有独立的置信度参数官方文档建议优先开启GPS速度融合EKF3_GPS_TYPE速度信息比位置信息在短时间内的修正效果更平滑也更适合无人机动态控制。5. 实测试验与问题排查5.1 测试流程怎么安排改装完之后不能直接拉出去飞我建议分三步走。第一步是桌面静态测试模块通电飞控连接地面站确认所有传感器数据刷新正常、PPS时间同步状态为OK、没有报错弹窗。第二步是手持慢走测试带着整套设备在户外沿着已知距离走一圈在地面站回放里看位置轨迹是否与实走路径基本吻合重点观察转向时的轨迹平滑度和直线段上的位置抖动幅度。第三步才是实际飞行测试先手动飞行再做自动航线。我实际用的测试路线是绕操场走一圈加一段林间小路。操场开阔段能看到GNSS数据质量良好轨迹基本贴着步行路径林间段信号会有遮挡此时重点观察飞控的“位置保持”表现如果漂移在可接受范围内说明融合确实在干活。飞行测试我更看重悬停稳定性。在同一地点切换“GPS模式”和“定高模式”对比观察位置漂移半径。原装板载GPS配合板载IMU时悬停位置半径大概在1.2米左右换上这套组合导航后同一条件下悬停半径直接压到0.4米以内视觉上看明显是“钉”在天上的。转向机动后的位置回拢速度也快了很多之前的滞后感基本消失。5.2 常见问题速查表整理一下项目过程中实际遇到且确实影响效果的几个问题按出现概率从高到低排现象可能原因排查与解决GNSS一直无法定位天线朝向受遮挡、馈线太长、模块供电不足检查天线有源供电改用短馈线室外开阔环境下重试IMU数据频繁跳变安装位置离动力线/天线太近移远IMU添加泡棉减震重新校准陀螺仪PPS时间同步报错PPS引脚接线错误飞控引脚不兼容3.3V用示波器量PPS波形确认极性换用兼容引脚融合后的位置轨迹有周期性抖动滤波器噪声参数设置过保守或IMU减震不足调大EKF对GNSS的信任权重检查IMU减震结构GNSS数据校验错误频繁波特率不匹配串口线缆过长统一波特率串口线尽量短屏蔽线更佳飞行中返航点偏移明显长时间失锁后纯惯性漂移过大检查飞行路径遮挡情况调整返航策略失锁超时后强制重新定位排查这些问题的核心思路是“先分模块再整系统”。任何异常都先回到单模块测试IMU单独通过电脑读取是否正常GNSS单独架到窗外是否能定位全部正常后再连接飞控。这样可以快速缩小故障范围避免在整机上调半天找不到原因。6. 经验总结与后续扩展这趟项目做下来我最大的体会就是“好硬件还要配好整合”。MTI-8-5A和R7KA8D2KFLCAC这两块板子单独拿出来指标都不差但真正让它们发挥价值的是那套时间同步、噪声调参和安装布局的功夫。如果你手里的无人机本身就是偏DIY的强烈建议先跑通一个最小系统——一块飞控、一块IMU、一块GNSS、一根天线把静态测试和慢走测试做到位再考虑上机实飞。如果后续想继续扩展有几个方向我觉得很值得试。一是接入网络RTK让R7KA8D2KFLCAC的厘米级精度真正用起来配合航测软件做正射影像和三维重建效果会非常惊人。二是把MTI-8-5A的数据直接接到视觉里程计里做视觉惯性融合在室内和地下环境里也能获得稳定定位。另一个更进阶的方向是增加双天线测向模块让系统直接输出绝对航向角这会让自主飞行能力上一个台阶。最后再分享一个小细节数据记录一定要开好。我在测试飞控时习惯把完整日志打开每个传感器原始数据和融合输出全部记录因为很多问题只有在回放时才能看出来——比如时间戳是否对齐、哪个数据源在特定时间段异常。有了扎实的日志后续优化就有据可依而不是对着空中飞过的现象瞎猜。希望这篇记录对正在折腾组合导航的你有帮助有问题欢迎在评论区交流我尽量把已知的坑都讲清楚。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进