多传感器融合定位:从GNSS/IMU到卡尔曼滤波与因子图的工程实践
2026/9/13 9:26:36 网站建设 项目流程

1. 为什么我劝你不要迷信任何一种单一传感器

做定位做到第三年的时候,我第一次在真实场景里同时跑起激光雷达、IMU、RTK和轮速计。那辆改装过的测试车绕着园区转了三圈,屏幕上轨迹稳定得让人想截图发朋友圈,但第四圈刚拐进一栋钢结构仓库背后时,RTK信号图标闪烁了三下直接变灰,激光雷达的点云里全都是扬尘,IMU因为车辆在搓板路上持续颠簸,加速度计数值一路狂飙——这时候我意识到,所谓定位,本质上不是“哪个传感器更准”的问题,而是“当所有传感器都不可信时,你还能不能保持稳定”。

多传感器融合定位,简单说就是把多个来源的定位信息组合在一起,通过算法取长补短,得到一个比任何一个单独传感器都更可靠、更连续、更高精度的位置估计。它解决的核心痛点是:现实中没有任何一种定位手段能在所有环境下保持同一水平的精度和可靠性。GNSS在开阔地带能到厘米级,但进了隧道就是废铁;IMU不依赖外部信号,但漂移是它的宿命;激光雷达在结构化环境建图效果一流,可遇到动态障碍物密集的闹市区,匹配失败是家常便饭。融合的本质,就是用“互补”去压制“短板”。

这篇内容适合三类人:一是刚进入自动驾驶、机器人、无人系统领域的工程师,需要对整个融合定位的大框架有清晰认知;二是已经在做感知或建图,想把定位链路从单传感器升级到多传感器方案的研发人员;三是准备做技术选型的管理者或架构师,需要搞明白融合定位在真实项目中到底能带来什么,又需要付出什么代价。

这里先给你们一颗定心丸:融合定位没有想象中那么高不可攀,但也没有Demo里那么光鲜亮丽。工程落地的难点,通常不在算法公式本身,而在数据同步、时空对齐、异常处理这几个“脏活”上。后面我会把这几个点逐一拆开讲。

2. 先把家底摸清:三大类传感器各自的脾气和边界

2.1 GNSS与RTK:精度高,但极其“看脸色”

GNSS(全球导航卫星系统)在融合定位里的角色,通常是提供全局绝对位置约束。消费级模块精度在米级,配合RTK(实时动态载波相位差分)技术后可以达到厘米级。这里想多说一句RTK的原理:基准站把载波相位观测值和坐标通过差分数据链发给移动站,移动站利用双差模型消掉卫星钟差、电离层延迟等大部分公共误差,然后通过整周模糊度固定来求解精确位置。听起来很顺滑,但RTK有一个致命前提——必须连续锁定足够的卫星,并且基准站与移动站之间的差分改正数链路要稳定

我实测过的典型场景是城市高架桥下方、两侧高楼林立的窄街、隧道入口处以及山区树荫遮挡严重的盘山公路。这些地方RTK的固定率会断崖式下降,甚至直接浮点解、单点解,定位输出跳变几厘米到几十厘米不等。如果你只看RTK输出的经纬度,不做任何状态判断,融合系统很容易被带偏。

2.2 IMU:无外部依赖,但误差随时间滚雪球

IMU(惯性测量单元)由加速度计和陀螺仪组成,通过对加速度两次积分得到位移,对陀螺仪积分得到姿态。它最大的价值是高更新率(常见200Hz-1000Hz)和短时高精度,在两帧GNSS或激光雷达之间提供密集的位姿增量。但它的核心问题是误差累积——陀螺仪零偏、加速度计零偏、比例因子误差、温度漂移、安装失准角,这些误差每一项单独看都是“小问题”,可一旦积分,就会变成随时间膨胀的位置漂移。一个典型的MEMS级IMU,静止放置10分钟,纯惯性推算出来的位置可能漂到几百米甚至几公里外。

在融合定位架构里,IMU一般不直接作为位置信息来源,而是作为**“运动模型”和帧间传递的桥梁**。它告诉你“这一小段时间内,系统是怎么动的”,至于“动到了哪里”,由其他传感器来纠正。

2.3 激光雷达与相机:能定位,但离不开环境特征

激光雷达通过扫描周围环境获取三维点云,配合高精地图或实时局部地图匹配(比如NDT、ICP算法),能构建出厘米级的位姿估计。相机的视觉定位(VIO/Visual SLAM)则通过特征点提取与匹配实现相对定位,对纹理丰富的环境适应良好,且设备成本比激光雷达低一个数量级。

这两类传感器本质上都是“特征依赖型”:激光雷达在几何特征明显的场景(隧道、地下车库、厂房)表现惊艳,但在空旷道路或雨雪天气下,点云退化、噪点激增,匹配精度急剧下降;相机在白天纹理丰富的场景表现不错,可一旦逆光、夜晚、白墙走廊或者快速运动造成运动模糊,特征数量不够,位姿解算直接就崩了。

2.4 额外补充:轮速计与地图匹配的“潜在成员”

除了上述几类,工程上常用的还有轮速计(编码器)。它通过车轮转数和轮径模型推算车速和航向增量,在低速、无滑移的室内移动机器人上是稳定支柱,但在高速变道、轮胎打滑时,模型误差会显著放大,需要融合系统实时评估其置信度。

在车规级融合定位里,地图匹配(跟高精地图里的车道线、杆状物、路沿进行匹配)也常作为一项独立输入参与融合。它是视觉/激光定位的“结构化变体”,能把定位结果从“点在哪”进一步约束到“车在哪条车道哪条轨迹上”,对车道级导航意义重大。

3. 融合定位的底层逻辑:从“投票表决”到“状态估计”

3.1 为什么简单的加权平均不是好方案

很多人刚开始接触融合定位时,第一反应是:既然GNSS准一点、IMU稳一点,那我加权平均一下不就行了?

问题是,你这个权重怎么定?不同环境下传感器精度动态变化——GNSS在开阔地可能误差2cm,进了城区就变成50cm甚至更大;IMU静止时的短时推算非常准,但跑起来之后误差随距离增长;激光雷达在隧道里一切正常,但如果旁边开过一辆大货车,半个点云都是动的,匹配出来的位姿可能会有一个瞬间的大跳变。静态权重根本表征不了这种动态变化的置信度。

所以多传感器融合定位真正的核心,是状态估计,而不是简单的加权平均。它把定位问题建模成一个概率问题:我们有一组状态量(位置、速度、姿态、甚至传感器零偏),有一组观测方程把传感器读数映射到这些状态量上,融合算法要做的是在噪声模型(通常是高斯)的假设下,寻找最有可能的状态序列。

3.2 松耦合、紧耦合和半紧耦合到底指什么

先理清几个高频词:

  • 松耦合(Loosely Coupled):每个传感器先独立计算出定位结果(比如GNSS输出经纬度,视觉定位输出位姿,IMU输出增量),融合算法在这些“结果层”进行组合。优点是结构清晰、模块解耦、计算量小、容错性强;缺点是误差已经经过了前端处理,信息损失较大,而且单个传感器前端一旦输出异常值,融合层必须自己想办法识别。

  • 紧耦合(Tightly Coupled):融合算法直接使用传感器的“原始观测”或准原始观测(比如GNSS的伪距、载波相位,视觉的特征点重投影误差,IMU的原始加速度/角速度),在同一个优化问题里联合估计状态。精度上限更高,尤其在卫星信号部分遮挡或视觉特征短暂缺失的场景下,紧耦合可以更好利用残存信息撑住系统。但代价是复杂度、计算量、调试难度显著上升。

  • 半紧耦合:介于两者之间,常见做法是GNSS使用RTK解算出的位置作为观测,同时保留伪距/多普勒等中间量,或者IMU与GNSS做紧耦合,而视觉/激光在结果层融合进去。

工程实践里,我给你们的建议是:没有绝对的最优架构,只有和你的算力水平、传感器质量、现场环境最匹配的架构。最开始做原型验证时,先用松耦合打通链条,把数据同步、传感器标定、异常处理这些基本功练好,再逐步演进到紧耦合。一上来就怼紧耦合,很多时候不是死在算法上,而是死在棘手的数据对齐和噪声建模上。

4. 从贝叶斯滤波到因子图——核心算法族谱

融合定位并非一个算法通吃所有场景,核心算法大致可以分成三支:以卡尔曼滤波为代表的贝叶斯滤波家族、以图优化(因子图)为代表的批量优化家族、以机器学习为代表的数据驱动方法。

4.1 卡尔曼滤波:一切从“高斯线性”起步

卡尔曼滤波(KF)的适用前提是系统方程和观测方程都是线性的,噪声服从高斯分布。它维护一个均值向量和协方差矩阵,通过预测(利用运动模型)和更新(融合观测)两步迭代递推。优点是非常轻量、计算量极小、适合嵌入式实时运行。

但真实定位系统的状态方程和观测方程几乎都是非线性的。于是有了扩展卡尔曼滤波(EKF)——在估计值附近做一阶泰勒展开,把非线性方程线性化。EKF是当前工业界落地最广的融合方案,大多数车规级组合导航产品(GNSS+IMU)内部跑的就是误差状态卡尔曼滤波(ES-EKF)。它的优点是对算力要求低、能较好处理IMU和GNSS的组合;缺点是线性化误差在意外的强非线性场景下会放大,以及需要手动推导雅可比矩阵,维护成本不低。

4.2 无迹卡尔曼滤波:不线性化,直接用采样逼近

无迹卡尔曼滤波(UKF)通过选取一组sigma点,将非线性函数直接作用于这些采样点,用采样均值/协方差近似真实后验分布的概率统计信息。它不需要算雅可比矩阵,对非线性程度较高的模型精度优于EKF。代价是计算量大约是EKF的2-3倍,在实际工程中完全可接受。

我个人的经验是:如果目标平台算力富余(比如工控机或带NEON指令集的ARM处理器),UKF是一个替换EKF的低风险升级项;如果算力极其紧张(比如几美元MCU),还是老老实实EKF,毕竟那套代码经过多年打磨,数值稳定性有保障。

4.3 粒子滤波:非线性非高斯的通用解,但别乱用

粒子滤波通过一组带权重的随机粒子逼近任意分布。它对系统没有任何线性/高斯约束,在强非线性环境(比如严重多径、非高斯噪声)下表现优于卡尔曼家族。但粒子滤波的粒子数量随状态维度呈指数级增长——三维空间位置可能需要几千个粒子,六自由度位姿+速度+零偏,这幅状态向量动辄十几个维度,粒子数根本扛不住,计算量爆炸。更别提粒子退化问题:迭代几轮后大部分粒子权重趋近于零,需要重采样,而重采样又会带来粒子耗尽问题。

所以在多传感器融合定位里,粒子滤波通常用于极少见的场景,比如室内定位中直接用UWB锚点做全局定位的初始收敛,或者在全局定位丢失后的全局重定位。常规连续跟踪定位,我更推荐卡尔曼家族或因子图。

4.4 因子图优化:把“一段轨迹”作为整体来求解

与滤波递推式估计不同,因子图(Factor Graph)把多个时刻的位姿和观测建模成图,每一个节点是待估计状态,每一个因子是传感器观测对状态的约束,然后通过非线性最小二乘求解整个状态序列的最大后验估计(MAP)。它的优势在于:

  • 利用了历史的约束信息,不像滤波器那样“只回头看一帧”;
  • 方便做滑动窗口,保持计算量可控;
  • 在关键帧之间增加回环检测因子后,能修正历史漂移。

代价是计算量比滤波大一个量级,实时性取决于图的大小、稀疏程度和求解器效率(g2o、GTSAM、Ceres都是成熟选择)。在实际系统中,浪雷达SLAM、视觉惯性系统(VI-SLAM)甚至车规级融合定位里的“全局轨迹平滑”环节,用的都是这类方案。

4.5 多传感器融合定位中怎么选

先给结论:连续实时跟踪,首选EKF或UKF;需要高精度全局优化或SLAM建图,选因子图;GNSS/IMU/轮速组合导航,EKF是成熟稳妥之选;视觉/激光与IMU的紧耦合前端,因子图是主流。

打个比方:卡尔曼滤波像你在开车时只盯着前方5米的那条分道线,一步步修正方向盘;图优化像你在出门前规划整条路线,并且每开过一段路就回头调整一下之前所有路段的路线。一个实时性好但前瞻性弱,一个计算量大但全局一致性强。

5. 时间同步、坐标系转换和残差建模——必须硬啃的三个细节

这部分是教科书讲得最少、却是工程踩坑最多的部分。

5.1 时间同步:所有传感器必须准确对应到同一时刻

一个残酷的现实是:GNSS输出是整秒脉冲对齐的,IMU输出有固定的高更新率(200Hz),激光雷达点云是一次扫描一个时间段内按顺序打出来的,相机曝光时刻则与触发信号有一定延迟。如果时间戳不严格对齐,你融合的“同一时刻”数据实际来自不同时刻,位置偏差会直接放大。

常见的做法是:

  • 使用PTP(精确时间协议)或GNSS的PPS脉冲为全系统提供统一授时基准;
  • 对每个传感器维护硬件/软件时间戳,并记录触发延迟;
  • 在观测方程里对“时间偏置”进行在线估计,或者干脆把每个观测的离散时间插值到主滤波周期上。

我在现场曾经因为激光雷达的时间戳是“整包接收时刻”而不是“扫描结束时刻”,导致低速转弯时融合轨迹有约0.3米的周期性误差。排查了两天才发现,原因是那台雷达扫描周期100ms,车速6m/s时,0.1秒误差对应0.6米的偏差,而我的融合滤波里没有做时间补偿。细节见真章。

5.2 坐标系:融合前必须先统一“参考系”

所有传感器的定位输出都是相对于自身坐标系。GNSS是地心地固系(ECEF)转经纬度或UTM;IMU是机身坐标系;激光雷达和相机安装在车体不同位置,有自己的外参;轮速计的转角是相对前轮或后轴中心。

融合之前必须做好三件事:

  1. 确定统一的参考坐标系(通常用ENU或UTM作为全局系,用IMU/车体坐标系作为机身系);
  2. 标定所有传感器相对机体的外参(位置安装矩阵+姿态角,通常是6自由度);
  3. 把外参标定误差纳入融合系统,因为外参误差会直接成为系统误差,滤波再高级也无法消除。

很多团队在这块吃过闷亏:视觉SLAM和GNSS融合时,即便时间戳完全对齐,由于外参初始值不准确,融合结果反而比单一视觉定位还要漂。最终只能用离线标定靶场做一遍完整外参标定,再在运行时对少量外参残差做在线估计,才解决。

5.3 观测残差与异常值处理

融合算法不会自己识别传感器是否失效——它只会把观测带到滤波器里,如果观测和状态预测差异巨大,一个错误观测足以把整个估计拉飞。因此,必须在融合之外设置一层“观测质检”,包括但不限于:

  • 合理性检查:位置跳变阈值、速度阈值、姿态角变化率阈值;
  • 残差卡方检验:当观测残差的马氏距离超过一定阈值时,降低该观测的权重或直接剔除;
  • 传感器状态源感知:使用GNSS定位时,判断解状态是固定解/浮点解/单点解/无效解,只对固定解赋予高置信度;
  • 鲁棒核函数:在因子图优化中,使用Huber核或Cauchy核而不是二次损失,防止一组大残差主导全局优化。

这些异常处理逻辑,是融合系统“从能用变好用”的关键。没有任何一个Demo会展示这一点,但现场环境里,数据源50%时间都处于“不太健康”的状态。

6. 典型应用场景与系统架构实例

6.1 车载组合导航(高精度地图采集)

高精地图采集车是典型的“重传感器”平台:高精度RTK/INS(GNSS+光纤陀螺IMU)、激光雷达、全景相机、轮速计、甚至多频多星座板卡堆叠。融合定位在其中的核心任务是:在开阔路段依靠RTK把位置锁定到厘米级,进入隧道/桥梁区域后,切换为INS+轮速+激光里程计持续递推,同时全局优化器保留多年的历史轨迹约束,使得车辆整段行程维持在分米级甚至更高精度。

具体架构上,我一般会把系统拆成两层:前端的紧耦合组合导航(GNSS/IMU/轮速)负责高频位姿输出,后端的因子图优化负责整段轨迹平滑与历史纠偏。两层的输出互相校核,前端报告残差异常时触发重优化。

6.2 地下车库自主泊车(视觉+IMU+轮速+UWB)

地下车库没有GNSS信号,但结构化特征丰富。典型的方案是:相机+VIO提供视觉里程计,IMU提供高频运动约束,轮速计辅助低速情况下的里程模型,车位附近的UWB锚点提供全局位置修正。整个系统的关键是“到处都有锚点”:在没有UWB信号时,系统依靠VIO和IMU持续推算;当检测到UWB测距信号时,融合算法将全局位置约束加进来,既修正了累积漂移,又给规划模块提供了可信任的绝对坐标。

这套系统我在实际项目中验证过,融合到位后,泊车入位停止点的横向误差可以稳定控制在10cm左右。但如果VIO在无纹理白墙区域退化,UWB又只有两个锚点可见(无法三角定位),系统会退化到轮速+IMU“盲推”,误差会随着行驶距离持续增加。这就是融合系统必须做“退化检测”的典型场景。

6.3 仓储移动机器人(激光+IMU+二维码/反光板)

仓储机器人更务实:不大可能上RTK,通常用2D激光雷达+IMU+轮速计做基本定位,在地面贴二维码或反光板做绝对修正。融合算法把轮速计和IMU的一致性作为短期趋势,激光SLAM匹配作为中期趋势,反光板/二维码识别作为长期绝对修正。三者融合后,即使二维码间隔10米甚至更远,机器人在两站之间的轨迹尾部偏差也控制在几个厘米内,到达二维码后可一次性修正为零。

这种场景里,反光板识别结果被视为“强观测”,但必须防“误检”:地面水渍、金属门框都可能被识别成反光板。因此我会在反光板匹配环节加一个“距离连续性检查”和一个“几何分布检查”——只有多个反光板的相对几何关系与地图一致时才采纳,否则直接丢弃。

7. 融合定位系统的调试顺序:先跑通,再调优

新手入门时最容易犯的错是:一上手就同时在时间同步、外参标定、滤波类型选择三件事上纠结。结果往往是系统崩了,根本不知道是哪里出来的问题。我的建议是严格按下面的顺序推进:

  1. 先单人复盘与离线数据回放:把每个传感器数据分别录一段包,先离线绘制各自的轨迹。如果某一路径单独画出来就明显不对,那融合之前先把这一条链路修好。
  2. 仅用其中一个主传感器跑通基准定位:比如先只用GNSS(或激光匹配)输出位置,为整个系统打下框架。
  3. 逐步加传感器,一款一验:加入IMU时,重点观察高频轨迹的平滑性;再加入轮速计时,重点观察车辆静止时的位置收敛;最后加入视觉/激光。
  4. 调参数,但不要靠猜:把Q和R矩阵从“直觉初值”开始,先记录滤波残差和协方差的统计特征,再根据实际残差的均值和协方差去反推噪声参数。不要迷信论文里的参数,那些是在特定传感器上标定的数字,搬到你的场景里通常不适用。

8. 集成传感器,建一个应用场景Demo

做完了理论理解,最快速验证的方法是拿手头现有的ROS 2机器人平台跑一个极简多传感器融合。我建议的配置是:一个GNSS模块(哪怕低成本Ublox)、一个消费级IMU(如MPU6050或ISM330)、一台2D激光雷达,跑一个松耦合的EKF融合。

  • 用robot_localization包中的EKF,把GNSS位置、IMU姿态/角速度、雷达里程计/轮速计作为观测输入;
  • 先设置一个较大的观测噪声,让滤波收敛平滑;
  • 然后观察三种传感器信号交替缺失时,系统输出是否稳定;
  • 再逐步收紧观测噪声,提高对高精度传感器的信任度,观察系统是否会出现跳变。

这个Demo能让你用一天时间真正理解“融合”的意义,比自己啃三个月滤波器理论要直观得多。

9. 从纸面到量产:给融合定位新手的三个重点建议

最后把我这几年实践下来最深的体会送给你。

第一,先做退化边界测试,再谈精度。每一个融合定位系统都有它的极限:GNSS丢失多长时间还能维持精度?视觉特征缺失多少、持续多少秒还能不漂?多快的动态下IMU线性化还成立?这些边界条件应该在系统交付前摸清楚,写成文档。因为现场之所以有80%的问题,都是因为系统被推到了边界之外,而架构上并没有应对措施。

第二,数据日志是排障神器。所有传感器的原始数据、时间戳、解状态、融合输出的中间残差,都应该以二进制或高效格式记录下来。生产环境里抱着雷达和模组到处打日志不太现实,但核心数据回环一定要保留。现场一个棘手的问题,往往要通过数据包离线复盘才能定位原因,而不是盯着实时画面猜测。

第三,不要把融合算法本身当成灵丹妙药。传感器硬件质量、安装精度、数据采集质量,这三点决定了融合系统的上限。算法只是“在合理边界内帮你逼近这个上限”的工具。你花一万块钱高精度IMU,用EKF能跑出漂亮轨迹;你花十块钱MPU6050,就算上因子图、神经网络也一样是玩具。传感器选型与融合算法设计是同等级的事情,甚至前者更优先。

多传感器融合定位不是某一个天才公式的堆叠,而是一位工程师和一群互不信任的传感器之间,一场反复沟通和妥协的艺术。你越早接受“误差是常态”,越早把精力放到数据质量、时间空间对齐、异常处理这些“脏问题”上,你的系统就会越快从能跑变成能跑好——那一天你回头看第一章,会发现真正让你进步的,并不是最深奥的那条公式,而是你对每一个误差来源的敬畏。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询