ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

多传感器融合SLAM:视觉与激光雷达提升建图精度实战指南

多传感器融合SLAM:视觉与激光雷达提升建图精度实战指南 年前接了一个移动机器人项目客户要求机器人在室内仓库和室外园区两种场景下稳定建图导航一开始图省事直接用单线激光雷达跑Cartographer结果在仓库长走廊里图飘得没法看。后来把视觉相机加进去做多传感器融合SLAM才把建图精度和鲁棒性都拉上来。这篇就是结合那次项目经验讲讲视觉与激光雷达融合SLAM怎么做、为什么能提升建图精度、以及实操中必须避开的坑适合正在做机器人导航、无人车、测绘建模或者刚入手SLAM想少走弯路的工程师参考。多传感器融合SLAM指南如何结合视觉与激光雷达提升建图精度先说一个我在项目里反复遇到的场景拿着纯激光雷达在走廊里跑建图前后是重复的墙面左右是玻璃雷达点云打到玻璃上直接穿过去里程计漂移越积越大最后回环检测也没能救回来地图肉眼可见地扭曲。换成纯视觉方案呢光照一暗、纹理一弱特征点不足轨迹直接飞掉。这两种方案单独用都有一堆限制而多传感器融合SLAM正是解决这类问题的关键思路。把相机和激光雷达的数据在算法层面融合起来让视觉负责识别、激光负责测距再加上IMU做运动约束三者互相补位建图精度和稳定性会有质的提升。这篇文章我从原理、框架选型、实操标定、问题排查几个维度展开讲把我实际踩过的坑和验证过的方法都交代清楚给后面做相关工作的朋友一个能直接上手的参考。1. 为什么要做“视觉激光”的融合SLAM1.1 单传感器各有短板这不是制造焦虑是真实翻车先说激光雷达。激光的测距原理决定了它在几何特征明显的环境里表现极好点云直接给出精确的距离信息建出来的地图尺度准确。但它有两个天生缺陷第一在长走廊、空旷场地这类几何结构重复或稀疏的环境中激光的约束不足位姿估计会沿某个方向漂移第二对材质的敏感度很高玻璃、镜面、深色吸光材料都会让点云出现大量噪点或直接丢帧我在仓库里遇到过的玻璃墙就是典型例子。更麻烦的是纯激光SLAM通常不做回环检测或回环能力很弱一旦漂移发生地图就成了不可逆的“歪楼”。再说视觉。相机的好处是信息丰富有纹理、有颜色、有语义能支撑回环检测和场景识别这是激光很难替代的。但视觉SLAM也有硬伤单目相机没有尺度信息纯视觉里程计出来的轨迹和地图是“无单位”的必须靠其他传感器给尺度双目或RGB-D相机尺度问题减轻了但对光照极其敏感逆光、暗光、白墙都能让特征点数量急剧下降。另外视觉对运动模糊也几乎零容忍机器人在快速转弯时图像拖影特征跟踪就断了。IMU呢IMU能提供高频的角速度和加速度短时间内的运动估计很准但加速度计存在严重的漂移长时间积分算出来的位姿根本不能直接用。它做融合可以单独做SLAM基本不行。所以这三类传感器单独拿出来都有硬伤。这不是危言耸听是我在真实项目里挨个翻车总结出来的纯激光在玻璃幕墙园区里飘纯视觉在夜间仓库里瞎纯IMU连十分钟都撑不过去。融合的核心目标就是用其他传感器的优势去补某一个传感器的短板让系统在任何场景下都至少有两条相互独立的约束来源。1.2 融合解决的三个核心问题退化、纹理缺失、尺度漂移融合SLAM提升建图精度的本质是解决三个单传感器很难独自处理的问题。第一个是退化环境下的定位维持。所谓退化指的是某个方向上没有可用的观测约束。激光在长走廊里沿走廊轴向的约束是好的但垂直墙面的法向约束可能非常弱视觉在纯色墙面前所有特征点都集中在少数区域本质矩阵解算不稳定。融合之后即使激光退化视觉还能提供非几何但丰富的纹理约束视觉退化时激光的几何距离又顶上。两条腿走路总有一条是稳的。第二个是纹理缺失环境下的鲁棒性。深度相机在白色墙壁前基本等于瞎子纯双目在重复纹理环境比如瓷砖地面、百叶窗墙面里匹配会疯狂跳变。激光雷达对这些不敏感点云是几何测量跟光照、纹理无关。反过来激光在重复几何结构比如相同的货架间隔里容易产生误匹配视觉却能通过局部图像的独特性分辨差异。两者互补正好覆盖大部分室内外场景。第三个是尺度问题。视觉单目没有尺度双目和RGB-D的尺度受标定误差影响很大长时间运行还会漂移。激光雷达直接测距天然具备绝对尺度。融合之后激光给视觉提供尺度的“锚”视觉再反过来约束激光的全局位姿这样整个系统的轨迹和地图都建立在真实尺度上建图精度才有兜底。1.3 从传感器组合角度理解融合收益融合不是盲目堆传感器选型直接决定算法方案和成本。我这边根据项目经验把常见的组合方式和适配场景整理了一下。传感器组合融合方式优势局限典型场景单线激光 轮式里程计松耦合成本低、部署快无回环、环境感知弱室内扫地/巡检机器人单线激光 IMU 相机松耦合/紧耦合成本适中、鲁棒性好对单线点云信息量有限室内服务机器人多线激光 IMU 相机紧耦合精度高、抗退化强算力要求高、成本高园区物流、无人机、自动驾驶固态激光 相机 IMU紧耦合体积小、中近距离精度高视场角受限小型无人机、手持设备从表里能看出来融合不是越多越好关键是“互补性”。如果激光和相机的感知范围、环境特征高度重叠融合收益就有限。真正值得做的是让两个传感器在不同维度上提供互补约束再用IMU把高频运动串起来。我习惯在选型时问自己一个问题这套传感器组合在什么样极端环境下会同时失效如果找不到这个环境说明组合是健康合理的如果很容易找到那就得考虑再加传感器或者换方案。2. 融合方案怎么选从松耦合到紧耦合2.1 松耦合和紧耦合的本质区别多传感器融合在算法层面有两条路线。松耦合就是每个传感器独立跑出位姿估计然后用滤波或者因子图把多个估计结果“加权平均”得到一个最终位姿。简单说视觉SLAM跑一套位姿激光SLAM跑一套位姿最后看谁可信度高就多信一点。这种方案的优点是模块化、好实现、容错好缺点是精度和鲁棒性都不算高因为融合时已经丢失了传感器各自的原始观测信息只是对结果做后处理。紧耦合则完全不同它把多个传感器的原始数据直接在同一个状态估计器里处理。视觉的特征点坐标、激光的点云匹配残差、IMU的角加速度积分全部放进同一个优化问题里求解得到的位姿是联合最优的。精度和鲁棒性远好于松耦合尤其是在某个传感器短暂失效比如相机被遮挡几秒时紧耦合系统能利用其他传感器的约束继续维持稳定不会像松耦合那样因为某个模块挂了就直接发散。如果打比方的话松耦合像是三个独立顾问分别给你意见你综合判断紧耦合像是三个专家坐在一个房间里共同讨论相互纠正推导出同一个结论。后者显然更难组织但结果更可靠。对建图精度要求高的项目我基本只考虑紧耦合方案。2.2 主流开源框架盘点与选型建议目前学术界和工业界比较成熟的开源融合SLAM框架我整理成了一张对照表方便直接做技术选型。框架传感器组合耦合方式核心特点适合场景LVI-SAM多线激光 相机 IMU紧耦合因子图统一优化视觉激光共用IMU预积分精度要求高的车载/机器人R3LIVE多线激光 相机 IMU紧耦合实时渲染地图彩色点云效果极好测绘、三维重建LIO-SAM多线激光 IMU紧耦合激光与IMU紧耦合可接GPS纯激光但需要IMU辅助VINS-Fusion相机 IMU可接GPS紧耦合视觉惯性融合支持多相机无激光时的视觉方案FAST-LIO / FAST-LIO2固态/多线激光 IMU紧耦合计算效率高适合嵌入式无人机、小型机器人Cartographer单线/多线激光可接IMU/里程计松耦合子图回环闭环强室内建图导航工业落地多还有一个重要的变通方案不做视觉SLAM而是把视觉做进回环检测模块。比如LIO-SAM本身不融合视觉但可以在后端加一个视觉词袋模型用图像做回环检测去修正激光的漂移。这个思路在工程上性价比很高因为视觉回环比激光回环更鲁棒对光照和视角变化不敏感同时不用把视觉完全接入前端优化算力压力小很多。选型的时候结合自己的硬件和算力来判断。手里只有单线雷达加一个普通摄像头跑LVI-SAM是不现实的哪怕是跑FAST-LIO也勉强。建议的匹配原则是算力强的用紧耦合全功能框架算力捉急的优先上视觉回环辅助方案。另外也要看实时性要求无人机对延迟敏感R3LIVE这类带渲染功能的框架要在更高性能的平台上跑才流畅。2.3 我从LIO-SAM迁移到LVI-SAM的取舍经验我在项目里最初用的是LIO-SAM在纯激光场景下表现已经很不错了后来遇到玻璃墙环境激光退化严重才开始考虑引入视觉。当时评估了两个方向一是给LIO-SAM加视觉回环模块二是直接迁移到LVI-SAM。权衡之后选了后者原因是LVI-SAM把相机和激光放到同一个因子图里做紧耦合优化视觉特征和激光点云互相提供约束比单纯在回环层面加视觉更彻底。代价是系统复杂度上了一个台阶调试时间增加不少。迁移过程中最深的体会是紧耦合系统的性能上限很高但对“输入质量”极为敏感。一个小的外参误差、一个时间戳偏差都会在优化过程中被放大直接体现在建图漂移上。相比之下松耦合系统因为各模块相对独立反而对这些问题有天然的容忍度。所以如果你决定上紧耦合一定要做好充分的心理准备前期的硬件同步、标定工作比写代码、调参数重要得多。这部分后面详细讲。3. 实操从硬件同步到建图出图的完整流程3.1 硬件时间同步融合SLAM最容易忽略的第一步很多人拿到多传感器平台第一件事就是装驱动跑算法结果地图一飘就怀疑算法不行其实问题往往出在时间同步上。多传感器融合的前提是“同一时刻的观测是对同一物理状态的描述”如果相机图像比激光点云晚了100毫秒那么融合出来的位姿就是拿一个旧时刻的视觉观测去约束新时刻的激光点云偏差必然存在。时间同步分硬件同步和软件同步两层。硬件同步是通过物理信号比如PPS脉冲、触发线让多个传感器在同一时刻采样这是精度最高的方案在自动驾驶领域几乎是标配。但大多数机器人平台不具备硬件触发条件这时候就需要软件同步将各传感器消息统一时间基准一般用ROS的ros::Time通过插值把不同频率的数据对齐到同一时间戳。实际操作中我的建议是如果传感器支持硬件触发优先把触发线接上如果不支持至少保证各驱动输出的时间戳是准确的且系统时钟和网络对时正常再接好。还有一个容易被忽略的细节传感器驱动的时间戳是基于主机的接收时刻还是传感器自身的曝光/采样时刻很多USB摄像头默认给的是主机接收时刻本身就带有几十毫秒的不确定性这在融合SLAM里几乎是致命的。建议用支持硬件时间戳硬件触发曝光时间戳的相机型号GMSL、工业相机一般都能做到而普通的USB摄像头在做严谨融合时尽量避开或者牺牲一部分精度做插值补偿。3.2 激光-相机外参标定原理、步骤和常见误区时间同步解决“什么时候拍的”外参标定解决“互相之间在哪”。外参是指相机坐标系和激光雷达坐标系之间的相对位姿变换包括旋转矩阵和平移向量。这个参数错了视觉特征投影到点云上的位置就是错的融合优化的残差也会系统性偏差导致地图漂移。我有一次就是因为外参标定偷懒用估计值结果建出来的地图整体偏了几厘米回环闭合后出现明显分层。外参标定分为有标定板和免标定板两类。有标定板的方法精度高、操作可控也是我推荐的方式。核心思路是让标定板同时出现在相机和激光雷达视野内相机检测标定板的角点激光检测标定板平面的点云然后通过最小化“视觉角点投影到激光点云平面的距离残差”来求解外参。实际操作中用现成工具比如lidar_camera_calibration或ACSC能省很多事但采集数据时要注意标定板不能太小尺寸要保证在15米范围内激光点云扫到足够多的点标定板姿态要多变正视、侧视、俯仰都采几组否则旋转分量约束不足保持平台静止移动标定板避免动平台标定带来的额外误差。免标定板的方法一般是利用环境中的自然角点或将视觉特征与点云进行互信息匹配精度通常低于标定板方式更多用于在线标定或自动标定。但作为融合SLAM的入门我建议老老实实用标定板把外参标准了再谈后面的精度优化。一个常见的误区是外参标定一次就永久有效。实际上任何机械结构的松动、温度变化引起的形变都会破坏外参尤其是长时间运行的机器人我建议每个月至少做一次外参验证。验证方法很简单把标定板放在平台前方5米处把激光点云按当前外参投影到图像上如果投影点和实际特征之间出现系统性偏差外参大概率已经漂了。3.3 启动建图与在线调参一套可复现的最小流程这里我以LVI-SAM的流程为例讲一下从数据采集到地图生成的标准操作这套流程我在不同平台上都验证过做其他框架时思路也通用。第一步录制数据包。启动所有传感器驱动后用rosbag录制指定话题录制时注意涵盖各种运动状态原地旋转、直线加减速、上下坡如果有、来回走同一区域。原理是给优化算法足够的运动激励让IMU的各项偏差可观测。如果运动模式太单一IMU零偏估计不准后期地图会出现缓慢漂移。第二步离线跑建图。录制完成后用rosbag play回放数据同时在线运行SLAM节点。第一次跑一定要盯着Rviz里的实时画面看重点观察两件事一是视觉特征点有没有正确投影到点云上二是当前位姿估计有没有出现跳变。如果视觉特征投影对不上点云基本可以断定外参问题如果位姿跳变多半是时间同步、IMU标定或退化环境导致的。第三步调整关键参数。LVI-SAM里最常调的参数包括IMU噪声协方差、视觉特征数量、激光帧间匹配的体素分辨率。我给一个经验值作为起点体素分辨率设0.5米视觉特征每帧控制在150个左右IMU噪声参数参考imu_utils标定结果来设置而不是用默认值。参数调整要一次只改一个变量改完重新跑同一段数据做对比不要同时动多个参数否则出了问题根本定位不到是谁引起的。第四步保存地图。建图完成后保存的点云地图一般还需要做后处理包括降采样、滤波、地面移除。地图直接用于导航时要额外生成代价地图所需的2D占用栅格或3D体素地图不能直接把原始点云丢给导航模块用。我在仓库项目中就是把3D点云栅格化后投影成2D占用地图导航效果才稳定。3.4 建图精度怎么量化评估建图精度不能靠肉眼“感觉挺准”必须有量化指标。我常用的手段有三个对比轨迹、评估点云重叠度和验证回环闭合误差。轨迹对比是最直观的。用建图算法输出的轨迹和真值轨迹如高精度RTK、运动捕捉系统做对比计算ATE绝对轨迹误差和RPE相对位姿误差用evo工具一行命令就能出结果。如果项目没有外部真值退而求其次可以找一些已知尺寸的场景特征比如货架间距、柱子周长和地图测量值做对比虽然粗略但也能说明问题。点云重叠度评估适用于没有真值的场景把同一地点往返扫过的点云做ICP配准看配准残差有多大。残差小说明地图的一致性高反之说明存在漂移。我习惯在长走廊两端各放一个特征明显的大标靶建图完成后计算两端的标靶点云中心距和实际测量值做差这个差值能很直观地反映建图精度。回环闭合误差是另一个重要指标。理想情况下机器人绕一圈回到起点轨迹应该闭合终点和起点的位姿差应该接近零。如果这个差值很大说明前端里程计或回环检测有问题。在多传感器融合系统里我们也常看“回环后地图的前后一致性”回环优化后地图中的同一物理结构不应出现双层影。这个“双层影”问题我在后面的排查部分还会提到它是建图是否精准最直接的视觉证据。4. 常见问题与排查技巧实录4.1 激光雷达建图漂移先从数据找原因别急着调参“建图飘”是最常见的抱怨但“飘”的原因各不相同。我的排查顺序是先看原始数据再做模块定位。具体来说第一步检查激光点云本身有没有畸变和噪点如果雷达没有被正确标定内参或运动畸变补偿没开启后面的算法再努力也白搭。第二步检查IMU数据质量IMU零偏太大或者信号饱和融合系统会直接受害。第三步才是看算法参数和配置。运动畸变是特别容易被忽视的因素。激光雷达逐点扫描需要时间在扫描过程中雷达自身也在运动所以一帧点云中每个点对应的雷达位姿其实是不同的。如果不做运动畸变校正在快速旋转时点云会“糊成一团”地图自然飘。多数融合SLAM框架包括LVI-SAM、FAST-LIO在紧耦合里会用IMU做畸变补偿但如果IMU数据质量差或者外参不对畸变补偿效果会大打折扣。MEMS固态雷达比如Livox MID系列在这里有个特殊坑它的扫描轨迹是花瓣状的不是传统的逐行扫描如果用传统雷达的模型来处理点云畸变会更严重。好在新版FAST-LIO等框架已经做了原生支持但如果你拿这类雷达跑老框架一定要确认是否启用了对应的点云模型处理否则地图飘得莫名其妙。4.2 视觉特征跟丢光照、纹理、运动模糊三座大山视觉SLAM在融合系统里虽然只是辅助但一旦视觉退化损失也不小。我遇到最多的情况是逆光环境相机对着窗户或亮灯时过曝区域一片白别说是特征点连图像内容都看不清。解决办法有两个一是用HDR相机或开启自动曝光策略让相机兼顾亮区和暗区二是调整安装角度尽量避免镜头直接对着强光源。这里要注意自动曝光会有滞后快速旋转时图像亮度可能来回跳变反而影响特征提取所以我一般更推荐把曝光固定在一个适中的值配合HDR来处理。纹理弱的环境白墙、纯色地板没有太多特征可用这时候有两个技巧一是提高特征提取器的灵敏度让低纹理区域的弱角点也能被提取到二是降低视觉模块在融合中的权重让激光和IMU主导。系统设计上我更推荐第二种思路视觉本来就是辅助没必要在弱纹理区域硬撑。运动模糊在快速移动时几乎不可避免尤其是卷帘快门相机快速旋转时图像会出现果冻效应。我建议在硬件层面选全局快门相机尽量不用卷帘快门如果只能用卷帘快门运动状态下要降低对视觉的信任权重把视觉帧率提高一些也能缓解模糊的影响。4.3 时间戳不同步症状和修正方法时间戳问题伪装性很强往往表现为“地图在转弯处突然断开”或“视觉和激光约束互相打架导致位姿跳变”。有一个快速诊断方法把视觉特征点投影到点云上观察像素和点云边缘是否吻合。如果静态场景下投影是准的运动状态下投影偏移明显多半就是时间同步问题而不是外参问题。修正时间戳要从源头入手第一步给主机配置时间同步服务用PTP或NTP保证系统时间准确。第二步检查传感器驱动是否输出的是采集时刻时间戳而不是接收时刻时间戳如果驱动不支持真实采集时刻最省事的办法是把该传感器换成支持硬件时间戳的型号。第三步在算法层面配置时间偏移补偿参数有些框架允许你设置固定时间偏移量可以通过标定方式求出来填进去。4.4 算力不足影响实时性降分辨率是首选多传感器融合SLAM的计算量确实比单传感器大不少。LVI-SAM在Jetson Orin NX级别上能跑实时但在树莓派这类平台上就会很吃力。算力不足的典型症状是SLAM节点处理速度跟不上传感器帧率导致消息积压、系统延迟越来越大最后建图断断续续。我给的优化顺序是先降图像分辨率再降低视觉特征提取数量最后才考虑减少激光点云帧率。图像分辨率对算力影响最直接从1080P降到720P视觉模块耗时能减少一半以上但对融合精度的损失往往很小。激光帧率调整要谨慎因为降低帧率会直接影响前端里程计的更新频率在快速运动时可能导致位姿滞后。如果还不行再考虑降级到更轻量的框架比如从LVI-SAM换成FAST-LIO加视觉回环而不是硬扛。4.5 问题快速排查清单结合我的实际经验把上面这些坑整理成一张排查表遇到问题先从第一行开始检查。现象可能原因排查顺序解决手段地图整体漂移外参不准、时间不同步、IMU零偏1. 检查点云投影 2. 检查时间戳 3. 重标IMU重新标定、配置时间同步长走廊/空旷场景漂移激光退化、视觉约束不足1. 看特征点分布 2. 加回环检测增加视觉权重、多走回环路径地图出现“双层影”回环闭合失败、地图拼接误差1. 检查回环检测 2. 检查位姿跳变调回环阈值、检查外参视觉投影偏位外参错误或时间不同步1. 静态投影验证重新标定、修正时间戳系统延迟越来越大算力不足、消息积压1. 看CPU占用 2. 看队列长度降分辨率、减特征点数快速旋转时地图扭曲运动畸变未补偿、IMU外参不准1. 检查IMU数据 2. 检查畸变补偿修正IMU外参、开启补偿排查时有几个习惯非常重要一是每一次改动只动一个变量跑同一段数据对比结果不要同时改参数、改外参、改代码二是务必保存每一次的参数文件和建图结果哪怕是失败的后面回归对比时能省大量时间三是不要迷信默认参数尤其是IMU噪声协方差框架的默认值只是“能跑”距离“跑得准”差得很远。最后分享一个我个人的体会做多传感器融合SLAM算法选型只占三成工作量剩下的七成都在做数据质量、标定、同步、参数验证这些“脏活累活”。但恰恰是这些脏活累活决定了系统最终的天花板。别急着追新框架、新模型先把手头这套传感器的时间戳对齐、外参标准、数据录扎实你会发现建图精度提升比换任何新算法都明显。我自己就是把LIO-SAM换成LVI-SAM后花了两周时间重新标定和调参最终在玻璃墙仓库里跑出了误差小于5厘米的地图。如果你正准备做类似的融合方案建议从这套流程开始它会帮你少走很多弯路。
返回列表