资讯动态

开源SLAM方案选型指南:从视觉到激光融合的工程实践

发布时间:2026/9/13 7:24:12 来源:尧图企业网站定制
说真的手里同时攥着七八个开源SLAM仓库却不知道用哪个上自己的小车这种纠结我太懂了。我之前做项目选型光对比ORB-SLAM3、VINS-Fusion、Cartographer、LIO-SAM这些方案就花了一周多踩了不少坑也整理了一套自己的评估思路。这篇东西不打算照着论文给你念概念而是从实际工程选型的角度把主流开源SLAM方案的适用范围、对比维度、实测方法和避坑经验一次性讲清楚。不管你是刚接触SLAM的学生还是正在给机器人项目做方案选型的工程师这篇文章都能让你少走不少弯路。1. 开源SLAM方案全景盘点视觉、激光与融合三条路线1.1 视觉SLAMORB-SLAM3与VINS系是绕不开的参考系提到视觉SLAMORB-SLAM3和VINS这两个系列几乎绕不开因为它们在准确度、开源完整度和社区活跃度上都做得相当好很多论文和工程都是拿它们当基线。ORB-SLAM3是目前视觉SLAM里综合能力非常强的方案支持单目、双目、RGB-D还支持视觉与IMU的紧耦合。它的核心思路是提取ORB特征点通过共视图Covisibility Graph做局部和全局的因子图优化回环检测则用DBoW2词袋模型来做。最让我觉得实用的是它引入了多地图系统Atlas哪怕跟踪中途丢了地图也可以保存下来重定位后跟之前的地图重新关联。这个特性在实际测试里太关键了因为单目SLAM在快速旋转时很容易跟踪丢失以前丢一次就得重新初始化现在可以接着跑。VINS-Mono和它的扩展版VINS-Fusion走的是另一条路线基于滑动窗口Sliding Window做优化。它使用光流法追踪角点特征配合IMU预积分和重投影残差在滑动窗口里联合优化姿态、速度和IMU零偏。VINS-Fusion还加了全局位姿图优化可以融合GPS、双目视觉等不同传感器。我自己在无人机数据集上测试VINS-Fusion在快速运动和激烈光照变化下表现得比纯视觉方案稳健不少代价是参数更多、调试更敏感。除了这两个主流系列还有一些值得留意的方案LSD-SLAM是直接法代表恢复半稠密深度图适合纹理较弱的场景但对相机内参和亮度一致性要求比较高SVO则是半直接法速度快但定位精度和鲁棒性一般更适合做辅助定位DSO是稀疏直接法精度不错但对相机模型很敏感OpenVSLAM把多种特征点法和可扩展地图管理做了整合接口干净适合想自己动手改代码的研究者。不过话说回来做工程我还是优先建议从ORB-SLAM3或VINS系入手生态成熟参考资料多遇到问题至少有地方可查。1.2 激光SLAMCartographer、LOAM系与Fast-LIO系激光SLAM在机器人落地领域地位很高因为激光雷达测量模型简单、受光照影响小平面建图精度通常优于视觉方案。Cartographer是Google开源的2D/3D激光SLAM框架前端做scan-to-submap匹配后端用Ceres优化子图的位姿回环检测用分支定界加速搜索。它在室内结构化环境的表现尤其好很多商用扫地机器人、清洁机器人、服务机器人的建图方案底层就是Cartographer。如果要部署到自己的机器人上它提供了比较完整的ROS接口用Lua脚本配置参数调一调就能跑起来。LOAM系则是另一条技术主线从港科大的A-LOAM到LEGO-LOAM再到LIO-SAM一路演进下来。它的核心思想是从点云中提取角点和平面点用scan-to-scan和scan-to-map做配准估计雷达的相对运动。A-LOAM用Eigen和Ceres重新实现了LOAM代码量小、可读性强很适合入门学习激光SLAM的整个流程。LEGO-LOAM进一步做了轻量化使用地面分割和聚类降噪处理效率更高。LIO-SAM则加入IMU预积分、GPS因子和回环检测用因子图做紧耦合优化室外大场景的效果明显更好。如果手头的机器人要在户外跑LIO-SAM这类融合方案是首选。Fast-LIO2是另一个让我印象深刻的方案它把紧耦合迭代误差状态卡尔曼滤波IESKF和动态KD树结合用最前端的雷达特征直接更新状态绕开了传统scan matching里“先配准再优化”的分步流程。实测下来Fast-LIO2在低算力设备上依然能保持较高频率和较低漂移特别适合无人机、小型机器人这类计算资源有限的平台。后续的Faster-LIO还进一步压缩了计算量把计算复杂度从O(m)降到接近O(1)在边缘计算模块上跑很舒服。1.3 面向导航和落地的融合方案RTAB-Map与SLAM Toolbox如果目标是“建完图之后还要导航”那单纯比较SLAM算法还不够还得看它和ROS导航栈能否顺畅配合。RTAB-Map是一套集成度很高的实时外观建图方案支持视觉、RGB-D和激光雷达输入它最拿手的是增量式回环检测和使用贝叶斯滤波做图优化输出可以是二维栅格地图也可以是带三角网格的三维增量地图。我在室内移动机器人上用过RTAB-Map做三维语义地图的基础它的ROS接口很完整能直接把输出发布到占用栅格和点云话题上后续对接Nav2很方便。SLAM Toolbox则是2D激光SLAM里的实用派它支持和Nav2深度集成可以做地图序列化、保存和加载还能在线重定位。如果你做的是室内轮式底盘传感器只有单线激光雷达和轮式里程计SLAM Toolbox通常比Cartographer更容易调通参数也少一些。值得一提的是不论选哪个方案最终大概率都要落到ROS/ROS2的框架里去调度那么TF树是否正确、话题频率是否稳定这种工程细节反而会决定方案能不能真正用起来。我在评估时会把“官方文档是否提供ROS示例”“社区是否有人分享过类似的硬件配置”也当做一个重要加分项来看。2. 选型前先想清楚这四件事2.1 传感器配置决定了你的方案上限很多新手上来就问“哪个SLAM方案最好”这个问题其实没有意义因为传感器已经先把路堵死了。手里只有一颗低成本单目相机非要上Cartographer激光SLAM这肯定不现实。选方案的第一步应该是盘清楚自己有什么传感器、能装什么传感器、愿意花多少钱买传感器。视觉SLAM的传感器成本最低但受光照和纹理影响很大纯激光SLAM精度高但一颗过得去的激光雷达可能够买好几套视觉系统RGB-D相机便宜又好用但室内强光下易受红外干扰室外基本没法用IMU虽然便宜却能给视觉或激光方案带来巨大提升特别是在快速运动和退化场景里。另外还要考虑多传感器的物理安装和时间同步问题。紧耦合方案对时间戳同步非常敏感如果相机和IMU的时间差有几十毫秒跑VINS这类方案基本必飘。外参标定也是传感器层面的大问题。我见过有人把相机和IMU之间的外参随便填个近似值结果跑出来的轨迹一开始就斜着飞还以为是算法不行。后来老老实实用Kalibr做了一次相机IMU联合标定问题立刻消失。所以评估方案之前先评估自己的“传感器底子”是不是靠谱这条原则永远排在第一位。2.2 应用场景定义精度与鲁棒性边界硬件定了之后接下来要问自己我的机器人到底在什么样的环境里跑这决定了精度和鲁棒性的权重分配。室内结构化场景比如办公室、商场、仓库墙和柱子多几何特征丰富用单线激光雷达加Cartographer或SLAM Toolbox就能建出很好的栅格地图定位误差可以做到厘米级。大范围室外场景比如园区、矿区几何退化区域多光照变化也大建议激光雷达融合IMU和GNSSLIO-SAM或FAST-LIO2这一类方案会更合适。无人机在高速机动时视觉惯性融合的鲁棒性通常优于纯视觉EuRoC数据集上VINS系列的表现就很有说服力。要是场景里人多、车多、动态物体复杂还需要考虑动态物体过滤或语义SLAM这已经超出普通开源方案的默认能力了。我踩过的一个典型坑是室内方案直接搬去室外结果在大片平坦空地上激光匹配不断退化定位漂到没法看。平面地面、长走廊、开阔广场这些退化场景是所有特征点配准方案的共同难题。选型时要把场景退化因素单独列出来评估。2.3 算力约束与实时性之间找平衡算法再优秀跑不动也是白搭。评估方案时不能只看论文里的精度表格还要考虑到你实际用的主控能不能实时运转。ORB-SLAM3在普通x86工控机上表现很稳但放到树莓派级别的平台就得注意帧率和图像分辨率勉强能跑但余量不大。Cartographer在低端工控机上可以通过调低点云频率、降低submap构建频率来压榨性能代价是建图精度略微下降。Fast-LIO2因为用了IESKF和ikdTree计算复杂度低空载时在嵌入式ARM设备上也能维持较高的位姿更新频率这一点在无人机和手持设备上很有价值。另外实时性不只是“能不能每秒跑几帧”的问题而是“能不能跟上控制周期”的问题。机器人底盘导航通常希望定位频率不低于10Hz飞控系统则可能要求更高。选型时建议在目标设备上做一次压力测试记录CPU占用、内存占用和最坏延迟不要只看平均帧率。2.4 许可证、社区与二次开发成本要提前算清许可证是我见过被忽略得最严重的问题。做研究无所谓但做商业产品时必须逐行确认开源许可证。ORB-SLAM3和VINS-Mono都是GPLv3协议这意味着如果你基于它们做了修改并对外分发整个衍生软件的源码也必须以GPL协议开源这对商业产品的打击很大。Cartographer用的是Apache 2.0宽松很多允许直接集成进闭源商业产品只需保留版权声明。很多LOAM系的仓库和衍生版本许可证声明不清晰甚至有些仓库压根没写许可证严格来说这种代码商用风险极高不建议直接拿来做产品底子除非你能和作者确认授权。社区活跃度也值得看。一个项目star再多如果近一年没有issue回复、没有PR维护遇到问题只能自己啃源码评估成本会高不少。我评估时会先去GitHub看最近的commit记录、issue处理时效、有没有官方维护的文档或社区群组再决定要不要花时间深入测试。3. 横向对比与实测评估方法3.1 主流方案横向对比把常见开源方案按几个关键维度摆在一起看思路会清晰很多。我整理了一张评估表字段包括传感器输入、优化方式、实时性、许可证和典型适用场景这是我自己项目里的常用分类方式。方案传感器输入优化方式实时性许可证典型适用场景ORB-SLAM3单目/双目/RGB-D/IMU基于特征的关键帧BA、多地图中高与图像分辨率相关GPLv3室内外视觉定位、AR、研究基线VINS-Fusion单目/双目/IMU/GPS滑动窗口紧耦合优化中高需GPU/较强CPUGPLv3无人机、车载多传感器融合Cartographer单线/多线激光、IMU、里程计子图匹配Ceres图优化中可调参数适应低算力Apache 2.0室内机器人建图、仓储、清洁LIO-SAM激光雷达/IMU/GPS因子图优化中高BSD系/开源室外移动平台、自动驾驶车载FAST-LIO2激光雷达/IMU迭代误差状态卡尔曼滤波高适合嵌入式设备GPL-2.0具体看仓库无人机、小型机器人、实时建图定位RTAB-MapRGB-D/双目/激光增量式回环检测图优化中BSD-3-Clause三维建图、语义地图SLAM Toolbox单线激光/轮式里程计2D图优化、地图序列化高LGPL室内导航、低成本底盘这张表没有面面俱到但能帮你快速做第一轮筛选。比如你的项目是室外园区巡检车传感器有32线激光、IMU和RTK那么LIO-SAM或FAST-LIO2的优先级就明显高于ORB-SLAM3。如果只是给室内配送机器人做二维建图导航Cartographer和SLAM Toolbox远比上位复杂的视觉方案划算。3.2 数据集与评价指标怎么选筛选出两三个候选方案之后就要用标准数据集做量化评估而不是凭感觉说“看起来挺准”。目前最常用的几个SLAM公开数据集各有侧重KITTI自动驾驶室外大场景包含双目相机、64线激光雷达、GPS/IMU真值适合评估视觉里程计和激光SLAM在长距离大范围场景下的表现。EuRoC MAV室内微型飞行器数据集双目相机加IMU包含快速运动、光照变化较大的序列是评估视觉惯性方案的好帮手。TUM RGB-D室内手持RGB-D数据集用运动捕捉系统提供高精度真值适合评估RGB-D和单目方案在室内近距离场景里的精度。M2DGR上海交通大学开源的地面机器人数据集传感器非常丰富覆盖激光、视觉、IMU、GPS、全景相机还有很多动态物体场景适合评估多传感器融合方案。评价指标方面最常用的是绝对轨迹误差ATE和相对位姿误差RPE。ATE衡量整条轨迹和真值之间的偏差RMSE越小代表全局定位越准RPE衡量逐帧之间的相对位姿偏差反映局部漂移速度。实际操作中我一般两个指标都看ATE主要判断整体轨迹是否漂移RPE则能看出算法在运动过程中的稳定性。另外还要记录运行时的资源占用和算法发布频率这些指标往往比精度的绝对值更影响最终落地决策。3.3 实操案例用evo量化评估一个方案以ORB-SLAM3在EuRoC数据集上的评估为例我把整个流程拆解一遍这套方法同样适用于其他方案。第一步准备ORB-SLAM3依赖并编译。官方仓库编译前需要安装Pangolin、OpenCV、Eigen3等依赖DBoW2和g2o已经内置在Thirdparty目录里。不建议在内存小于8GB的机器上直接全线程编译很容易OOM稳妥的做法是限制编译线程并增加交换空间。git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 chmod x build.sh ./build.sh -j4第二步下载EuRoC数据集。这里只需要下载序列对应的压缩包比如MH_01解压后确认目录结构是否包含mav0文件夹。第三步运行单目或双目示例程序。以双目为例./Examples/Stereo/stereo_euroc \ ./Vocabulary/ORBvoc.txt \ ./Examples/Stereo/EuRoC.yaml \ /data/euroc/MH_01 \ ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt \ dataset-MH01_stereo运行后会在当前目录生成KeyFrameTrajectory_TUM_Format.txt这就是算法估计出的轨迹文件格式是TUM格式的。第四步用evo工具计算ATE和RPE。先安装evopip install evo --upgrade然后把EuRoC的真值也转换成TUM格式的轨迹文件再运行evo_ape tum groundtruth.tum KeyFrameTrajectory_TUM_Format.txt -r full -va --plot evo_rpe tum groundtruth.tum KeyFrameTrajectory_TUM_Format.txt -r trans_part -va --plot我在实际评估中会重点关注ATE的RMSE和RPE的RMSE还会保留evo生成的轨迹图方便直接对比估计轨迹和真值之间的偏差分布。这套流程走完一个候选方案的精度画像基本就出来了。4. 常见问题与避坑技巧实录4.1 编译期雷区开源SLAM项目对编译环境很敏感很多问题都出在依赖库版本上。我用一张表记录几个最常见的坑问题现象可能原因解决办法编译过程中内存溢出终止并行编译任务过多降低-j参数增加swap空间OpenCV接口报错、undefined reference系统OpenCV版本与源码不兼容使用项目文档指定的OpenCV 3.x版本Pangolin版本不对导致GUI崩溃Pangolin版本过新或过老按官方README指定版本源码编译GCC版本过高导致编译报错部分源码用到旧语法使用兼容编译器或Docker镜像构建另外提醒一点很多方案看似支持ROS1和ROS2但实际维护进度并不均衡。ROS2版本若只是社区维护、并不保证可用评估时以官方维护状态为准。4.2 标定与时间同步问题我发现大量SLAM跑飞案例的根源不在算法而在标定和数据同步。相机内参不准地图会发生尺度漂移相机到IMU的外参不准视觉惯性融合会直接发散两个传感器的时间戳不同步紧耦合优化会引入很大的伪误差。如果要跑视觉惯性方案建议先用Kalibr对相机和IMU做联合标定得到内参、相机到IMU的外参、IMU噪声密度和随机游走。标定过程中要让设备在纹理丰富、光照稳定的环境里充分旋转和激励否则标定结果不可靠。对于激光雷达和IMU的外参也可以参考lidar_align等工具做联合标定。时间同步方面尽量采用硬件同步方案比如用同一路PPS信号或相机曝光时间戳实在不行也要在软件上做高精度插值对齐。4.3 建图效果差、回环失效的排查思路建图效果不佳时先别急着调算法参数先回看原始数据质量。雷达点云是不是存在运动畸变相机图像有没有出现严重拖影里程计话题频率是否稳定这些基础问题不解决算法再调也没用。回环失效通常有几种情况场景重复度不够、回环搜索范围太窄、词袋匹配阈值设置不合理。Cartographer里可以调loop closure的匹配策略和搜索窗口LIO-SAM里可以调整回环检测的评分阈值。排查时先在rviz里打开轨迹和地图观察机器人在回访起点附近时有没有触发回环候选再根据实际情况调整参数千万不要一次性改一堆参数否则根本不知道哪个起了作用。5. 从评估到落地面试与二次开发视角5.1 评估过一次方案SLAM面试就有底了很多人准备SLAM岗位面试时死磕论文公式却忽略了从工程视角理解整个系统。实际上如果你亲手把ORB-SLAM3跑通过又对比过Cartographer和LIO-SAM的行为差异面试官问“ORB-SLAM3的回环检测怎么工作”“VINS为什么用滑动窗口”“Cartographer的子图优化是什么”你都能结合自己的实际测试讲出个所以然来。这种工程直觉比背概念要扎实得多。《视觉SLAM十四讲》这类教材确实是打底的好东西李群李代数、状态估计、图优化这些基础它讲得很透。KITTI数据集更是几乎成了SLAM从业者的标配验证集简历里写“基于KITTI跑通并评估了多个开源方案”比写一堆形容词有说服力得多。5.2 开源方案不是终点二次开发才是常态开源项目给你的只是一个可运行的起点真正落地时基本都要做二次开发。比如ORB-SLAM3的研究属性很强工业使用可能需要替换掉部分特征提取逻辑、增加语义信息或者调整初始化策略。Cartographer在生产环境里通常还要配合自己的调度系统、地图管理模块和动态避障策略一起工作。即使选型阶段觉得某个方案已经很完善也要预留出自己改源码、维护分支的时间预算。最后分享一个我的个人习惯选定候选方案后先在仿真环境或公开数据集上跑一遍标准评估记录精度和资源占用再拿自己机器人的真实数据录制一段bag回放给算法看。回放时把传感器原始话题和算法输出话题对应好能提前暴露大量传感器的坑。整个流程走完方案能不能上真机我心里基本就有数了。我个人在实际评估中体会最深的一点是不要迷信某个方案在某个数据集上的漂亮数字因为你的机器人、你的传感器、你的场景肯定和数据集不完全一样。评估的价值不是找出“全世界最强方案”而是找出“在你自己条件下最不容易翻车的方案”。如果这篇文章能帮你少走几天弯路那就值了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价