首页 / 资讯中心 / 文章详情

视觉SLAM前沿思考:几何、学习与多传感器融合的鲁棒性之路

视觉SLAM前沿思考:几何、学习与多传感器融合的鲁棒性之路 ★ FEATURED ARTICLE
前阵子听了一场关于视觉SLAM的分享主题是“视觉SLAM最新观点”分享人是章国锋教授。我一边听一边记了不少笔记事后又回看了一遍把里面让我反复琢磨的几个点单拎出来聊聊。这篇不是讲稿复述算是我消化之后的一个梳理也会夹带一些我自己做SLAM项目时踩过的坑和调整思路。如果你做机器人、AR、三维重建或者刚开始接触视觉SLAM应该能从里面找到一些有用参考。这些年视觉SLAM从实验室慢慢走到产品里跑通一个Demo已经不算新闻真正难的是让它长期稳定工作。章国锋教授这次分享的核心不是教大家某个具体算法的公式推导而是在帮大家重新理解这个领域当前的结构性变化几何方法还有什么价值学习范式到底能解决什么问题稠密地图和场景表达怎么往前走多传感器融合又该怎么看。这些判断直接影响选题方向和技术选型所以我想把它写成一篇可以反复翻看的心得文章。1. 这场分享的底色视觉SLAM的理想与现实视觉SLAM这十多年进步非常快从早期只能在小范围、慢速、纹理丰富的环境里跑起来到现在手机AR、扫地机器人、无人机上都能实时定位建图。大家默认“SLAM问题基本解决了”的声音也越来越多。但如果真正去跑过真实场景你会发现所谓“解决”其实有很强的前提条件。分享开场就点出了这个温差我觉得这是全场最值得咀嚼的一段。1.1 从“能跑通”到“靠得住”一个质的转折过去几年只要做SLAM相关方向的人大概率都见过这样的演示手持相机在办公室里转一圈实时建出地图轨迹稳定回环闭合漂亮。这类Demo确实让人兴奋但问题在于它是在一个相对友好的环境里得到的。一旦到了地下车库、夜晚街道、快速旋转、重复纹理的走廊传统基于特征点或直接法的那套思路就会开始露馅。章国锋教授表达得很直接我们从“能不能跑通”走到了“靠不靠谱”这个阶段。前一个阶段大家拼的是基本功能后一个阶段拼的是边界条件下的可靠性。就像开车晴天高速公路大家都能开真正考验驾驶技术的是雨夜山路。视觉SLAM面临的正是这种从“实验室指标”到“工业级鲁棒性”的跨越。这个观点替我解释了很多现象。某些算法在公开评测集上成绩很好精度能到厘米级可一旦换一个场景、换一组传感器、换一种运动模式效果就崩。问题不是某个模块不行而是整个系统还没有建立起应对不确定性的能力。环境光照变化、运动模糊、动态障碍物、重复纹理任何一个因素都会让现有的几何约束失效而SLAM系统恰恰依赖这些约束。1.2 学术界和工业界的认知温差做研究的人和做产品的人坐在一起看视觉SLAM的角度其实很不一样。学术圈更关心新问题、新方法、新榜单工业界则天天面对回归测试、可维护性、算力成本这些现实问题。分享里有一个让我印象很深的观点很多论文展示的是上限而工程交付需要守住的是下限。有个做机器人的朋友跟我聊过他们在室内铺了视觉SLAM方案客户现场最常见的问题就是“换个窗户朝向光照变了就丢定位”。论文里不会写这个因为论文的实验环境是固定的光照条件也是固定的。但现实世界永远在变化。分享中强调的正是这一点视觉SLAM从学术命题走向工程命题之后我们需要把训练、评测、部署的重点转移到“是否能稳定运行在最差情况”上。这套判断对研究者的选题方向是有影响的。如果我们认可“鲁棒性才是当前的核心矛盾”那么后续做实验设计的时候就不能只挑表现优秀的序列来展示反而应该专门找那些之前算法容易崩的场景去做压力测试把失败的案例拆开逐个分析原因。没有这种意识改进的方向很容易跑偏。2. 观点拆解章国锋教授讲的几个关键判断分享的主体内容围绕几个大问题展开。我把它拆成五个方面每个方面都对应一个当前视觉SLAM领域绕不开的讨论点。这五块也是我认为这场分享里最有含金量的部分适合一边读一边对照自己的项目来思考。2.1 几何方法没有过时但边界已经非常明显很多人一谈到深度学习与SLAM结合就觉得传统几何方法要被替代了。章国锋教授并没有这么看他的判断是几何方法依然是精度和可靠性的底座但它的边界已经暴露得很清楚。传统视觉SLAM的核心思想是利用多视图几何关系去恢复相机运动和场景结构。特征点法、直接法、半直接法本质上都是在对几何约束做文章。优势很明显可解释性强、计算效率高、在小规模静态环境下精度非常高。但边界同样明显弱纹理场景里特征太少动态场景里静态假设不成立快速运动时帧间重叠太少强烈光照变化时图像一致性被破坏。这些问题不是某一种特征提取器或者某个优化策略能解决的它们属于整个“纯几何框架”的物理边界。我自己的理解是几何方法可以比作一座老城的基础管道系统设计得很精巧但管道的容量和布局定死了你只能在基础上修补无法凭空增加新的供给能力。要让SLAM进入更复杂的环境必须引入新的信息来源而这个信息来源很大程度上来自学习。不过这并不意味着几何会被彻底丢掉。恰恰相反学习模块最终还是要嵌入到几何框架里用来补足那些几何处理不好的环节而不是取代整个系统。谁能在两者之间找到最合理的接缝谁就能做出真正可靠的新方案。2.2 学习型SLAM从“换模块”到“换范式”深度学习介入SLAM早期更多是局部替换比如用神经网络来做特征点提取、特征匹配、回环验证。这些工作有效果但本质上还是在原有几何框架里打补丁。分享里讲到最近几年出现了更激进的思路直接让网络端到端地学习位姿估计、地图表示甚至整个SLAM过程这是把范式本身换掉了。端到端学习的吸引力很好理解模型可以从大量数据里自动学到几何约束难以表达的复杂模式比如物体遮挡、动态目标、重复纹理甚至可以利用场景先验来辅助定位。在某个特定环境里训练过的模型往往能比几何方案更稳。但问题也随之而来实际场景的分布不会跟训练数据完全一致一旦遇到没见过的场景类型模型的泛化表现就会衰退。章国锋教授在分享里的态度比较务实学习型SLAM正在给领域带来新能力但热启动、泛化性、可解释性还没有被彻底解决。在纯学习方案跑到和几何方案同等鲁棒之前现实产品依然更依赖几何底座。我的理解是这就像你雇了一个记忆力超强的向导他在熟悉街区确实比地图好用但离开这个区域他还是得回到地图和指南针上。实操上如果一个项目要引入学习模块我会建议先从最容易评估收益的环节入手比如动态物体检测、回环一致性验证、光照不变特征提取。这些环节的改进效果可以直接量化风险也相对可控。一上来就替换整个前端或者后端出了问题很难定位。2.3 稠密化与场景表达SLAM的下半场分享里另一个让我重点标记的观点是SLAM的输出正在从稀疏特征点走向稠密场景表达。传统视觉SLAM建出来的地图是一堆稀疏的路标点定位是够用了但机器人要去抓取、避障、导航、交互稀疏点云根本不够用因为你对场景的几何结构和物体边界没有完整认识。这几年大家开始认真对待稠密化问题。早期有基于立体匹配和深度预测的稠密重建后来NeRF和3D高斯泼溅3DGS这一类可微分渲染技术带来了全新的场景表达方式。它们可以把场景表达成连续的辐射场或者一组可控的高斯原语渲染出来非常逼真几何精度也不错。但稠密化带来的挑战也是结构性的首先是实时性稠密表达的计算和存储开销远高于稀疏路标其次是地图更新场景中物体被移动之后稠密地图怎么局部更新而不是全部重建再是和位姿估计的耦合稠密建图需要好位姿而稠密地图又能反过来修正位姿这中间的循环怎么设计还没有标准答案。章国锋教授的观点是稠密重建与定位一体化会成为未来一个重要方向不再把定位和建图切成两个独立模块来考虑。我自己也非常认同这一点。以前做导航方案稀疏SLAM把地图给到代价地图层中间还要做很多凑合的处理比如把点云投影成2D栅格。如果SLAM直接产出带语义或几何信息的高质量稠密表达下游模块会省掉大量脏活。2.4 多传感器融合不是为了炫技而是补短板视觉SLAM单靠相机物理上就很难解决所有问题。相机在暗处看不清快速运动时容易模糊纯旋转时视差不足动态物体遮挡严重。分享里对于多传感器融合的态度非常明确融合不是“配置堆料”而是用传感器之间的互补性去消除单一传感器的盲区。视觉惯性IMU已经成了视觉SLAM的事实标配。IMU可以提供短期运动约束在视觉退化时续命还能辅助尺度估计。视觉激光雷达的方案在自动驾驶和机器人领域也很普及激光雷达对光照不敏感能提供精确的深度信息但它的点云稀疏、价格高纯靠它又缺乏视觉的丰富纹理。毫米波雷达、事件相机等也在特定场景里发挥作用比如雨雾天气或者高速运动。融合的底层逻辑并不复杂每种传感器都有自己的特长和失效模式系统设计的目标是让它们在时间和空间上对齐然后根据当前环境状态动态选择可信度更高的信息源。真正麻烦的是工程细节时间同步、外参标定、坐标系统一、各传感器置信度权重标定每一样都是坑。我在项目里就吃过外参标定的亏。相机和IMU的外参标定偏差了一点点静态场景里不明显一旦运动起来轨迹就开始飘回环闭合总是差一截。后来重新做了严谨的标定流程很多玄学问题直接消失。所以章国锋教授在分享里提到“融合系统的性能上限取决于标定精度”这句话真的是老工程师用头发换来的经验。2.5 长期运行与地图生命周期被低估的问题分享中还专门提到了长期运行问题这是我之前关注相对较少的部分。实验室环境里一次运行可能就几分钟地图建完就结束。但真正长期部署的机器人和AR设备面对的是场景不断变化、建筑装修、家具移动、季节更替、光照差异。设备要能在数周、数月甚至数年的跨度里持续稳定的工作。这里涉及几个细分的挑战地图需要随时间更新过期信息要被标记或移除设备需要支持多会话也就是多次进入同一场景后能识别并发准确实时的重定位还要处理场景结构性变化否则地图里某个区域的匹配全是错的。这些需求加在一起其实是一个“地图生命周期管理”问题而它对系统架构和数据结构的要求远高于单次SLAM。很多人的研究里并不把地图更新当作核心问题但产品落地时这几乎是无法绕开的。章国锋教授把这一点拎出来算是给了大家一个很重要的提醒。之前和一些做AR的朋友聊他们在落地时也遇到同样的问题用户在家里建了一张地图过段时间沙发换了个位置重定位就不稳定了必须要重新建图。如果能把地图的局部更新和动态处理做顺这个体验就完全不一样了。3. 从观点到实操我按这些思路调整了自己的项目听完分享我做的最重要一件事就是重新审视了自己过去做SLAM项目的评估方式。技术观点说得再热闹最终还是要落到项目里。这一节我把怎么把分享里的思路转化成实际操作的方法展开讲一讲希望对你有直接帮助。3.1 先复现、后对比、再改进的标准流程不管你想验证哪个观点第一步永远是先搭一个可复现的基准线。我在做SLAM相关项目时一般遵循下面的流程选择一个公开可得的经典开源方案作为baseline优先找维护活跃、依赖简单、代码稳定的版本不要一上来就挑战复现难度很高的论文代码。搭建统一的评测环境用同一组数据集、同一组硬件配置、同一种评估脚本去跑所有方案避免由于评估方式不一致导致结论失真。先做数据预处理确认图像的尺寸、帧率、时间戳格式、畸变矫正方式、传感器同步方式这些都会对结果产生巨大影响。运行baseline记录轨迹精度、运行时间、CPU/GPU占用、跟踪丢失次数等指标。在这个基础上做单点改进一次只改一个模块用控制变量法观察实验结果。这看起来是很基础的工程流程但真正严格执行的人很少。我见过太多人直接把算法拉到自己的私人数据上没有预处理就跑最后算法崩溃他们还得花很长时间去排查到底是算法问题还是数据格式问题。先复现再对比不是为了走流程而是为了确保后面每一个结论都可追溯。做对比的时候还有几个容易被忽略的细节。轨迹精度对比前要用相似变换做对齐因为单目SLAM没有绝对尺度直接用欧氏距离比较位姿没有意义。对齐算法里经常会用到Umeyama算法把预测轨迹对齐到真值轨迹坐标系下之后再算误差才有参考价值。如果不做这一步精度数值会被尺度和坐标系偏差严重污染。3.2 在真实场景里暴露问题的方法分享里面反复提到鲁棒性那怎么在项目里有效测试鲁棒性我的做法是建立一套“压力测试路线”专门找那些容易让视觉SLAM失效的地方来跑。我简单列几个我常用的压力场景你也可以参考扩展地下车库光照暗、纹理少、车道线重复对特征法和直接法都不友好。室外逆光路段太阳直射镜头、动态范围大图像内容可能接近过曝。快速旋转自拍路径原地转圈、甩动相机测试IMU和短期运动估计。人流量大的走廊动态遮挡频繁测试后端鲁棒性和动态点过滤能力。电梯口和镜面附近玻璃反光、镜面虚假匹配测试外点和回环误检处理。每跑完一轮我都要记录“跟踪丢失时间点、重定位恢复时间、回环是否错闭合”这三个核心信息。这些数据比轨迹RMSE更能反映一套SLAM系统在真实场景里的表现。在压力测试里暴露出来的问题通常就是产品上线后用户会遇到的问题。如果你手头没有现成的压力测试路线我建议你从每天最常走的那条通勤路开始沿着固定路线来回走几次用手机或开发板采集数据。这种数据看起来不“酷”但它包含了光照变化、行人、车辆、树影、玻璃幕墙等真实干扰非常适合用来做鲁棒性分析。3.3 评估参数别只盯着一两个指标很多人评估SLAM方案时习惯只看一个轨迹误差指标。这个习惯很危险因为单一指标无法反映系统的全貌。我建议至少从四个维度来评估下面这个表格可以直接抄走当模板评估维度常用指标它反映的问题定位精度绝对轨迹误差ATE、相对位姿误差RPE估计轨迹和真值轨迹之间的偏差鲁棒性跟踪丢失次数、恢复时间、跟踪丢失率系统在困难场景下能否坚持工作实时性前端跟踪耗时、后端优化耗时、整体帧率算法能否在目标硬件上满足实时约束资源消耗CPU占用、内存占用、GPU占用多传感器系统里留多少余量给其他模块这里特别说明一下RMSE均方根误差很容易被个别离群帧拉高所以看指标的时候同时关注中位数误差和最大误差更有价值。在对比两个方案时中位数误差相近但最大误差差距很大说明两者的失效模式分布并不一样。章国锋教授在分享中也提到定义更合理的评测维度本身就是值得做的工作这一点我非常认同。我自己用过一个笨但有效的办法跑算法的时候顺带记录每一帧特征点数量、匹配内点数量、优化残差等信息然后在时间轴上跟轨迹误差叠加起来看。这样就能知道误差突变到底是因为特征丢失、匹配误检还是优化发散而不是只能对着一个RMSE数字猜原因。4. 争议没有结束几个值得继续讨论的问题这场分享的精彩之处不只是给出了判断也留下了很多开放性问题。这些问题没有标准答案但恰恰是未来几年最值得投注研究方向的地方。我把自己的思考整理一番分享在这里。4.1 大模型能不能重构SLAM的玩法视觉SLAM和语言模型、视觉基础模型的结合是一个无法回避的讨论点。大模型对场景有更强的语义理解能力知道什么是桌子、什么是门、什么是墙面这能帮助SLAM更好地处理动态物体和场景变化。但大模型目前也有一些致命短板。首先是实时性很多大模型的推理速度还不适合塞进SLAM的实时前端其次是输入噪声SLAM喂进去的是带误差的位姿和图像序列大模型是否能在不精确输入上保持稳定输出再就是闭环更新大模型产生的是概率式的响应很难像几何约束那样直接用于精确定位和地图校正。我的判断更偏向“大模型作为全局先验”的路线让大模型提供一个场景级理解然后仍然用几何优化去精修位姿和地图。这种混合架构的冗余度比纯端到端更高也更容易定位问题。这个方向上要做的事很多比如怎么把语义先验转成可优化的几何约束怎么设计大模型和SLAM的双向通信都还有很大探索空间。4.2 稠密表达与位姿精度之间的纠缠稠密重建依赖好的位姿估计位姿估计又可以借助稠密地图来约束。这个相互依赖的关系在实时系统里很难解开。早期直接把离线NeRF的训练过程塞进前端算力完全扛不住。后来3DGS在渲染速度上实现了突破但建图和更新过程中位姿怎么精细化依然没有统一范式。分享里提到一个方向把稠密表达本身变成位姿优化的观测模型。这意味着不再用稀疏特征点来构建误差函数而是直接比较当前帧和渲染出的稠密表达之间的差异来优化位姿。这个思路的想法很清晰但工程实现要考虑的问题极多比如局部地图怎么维护、多个视角的观测怎么加权、重建误差如何与位姿误差解耦。短期内大概只会出现在计算力充裕的设备上但长远看会是重要演进方向。4.3 数据集排名还能代表真实性能吗最后再说一个更偏方法论的问题我们依靠公开数据集的排名来评价SLAM系统这个范式还能走多远很多数据集是在固定传感器、固定场景、固定采集方式下得到的用它来测试算法公平性好但“真实度”有限。现实世界的传感器差异极大镜头的畸变、曝光的策略、IMU的噪声特性每一项都会影响算法表现。同一个算法在A数据集和B设备上结果可能天差地别。章国锋教授在分享中也提到需要更多具有挑战性的基准和更系统的评测维度。我自己在项目里最深的感受是数据集排名只能作为入门参考最终决策必须靠自己的测试数据而且测试环境要尽量贴近真实部署环境。这个问题的背后其实是整个领域评价体系的思考我们到底需要什么样的 benchmark才能引导算法向真正的可靠性和泛化性迈进而不是在特定数据集上过拟合。专门去构造难例、加入动态干扰、模拟传感器噪声都是更艰难但也更有价值的方向。5. 面向不同阶段读者的建议分享结束后现场提问环节里有不少同龄人和学生问方向选择和技术路径的问题。我把自己的建议也整理一下按读者所处阶段分开写方便对号入座。5.1 给刚入门的人别一上来就端到端不少新同学受深度学习热潮影响一接触SLAM就想做端到端学习方案觉得几何方法过时了。我的建议恰恰相反先老老实实把几何基础打牢哪怕只是做一个简化版的视觉里程计。具体来说可以从特征提取、特征匹配、本质矩阵分解、三角化、位姿图优化这些基础模块开始在没有现成框架的情况下手写一遍流程。这个过程会让你真正感受到SLAM的难点到底在哪而不是只在黑盒里调参。等你把几何方案的瓶颈摸清楚了再去看深度学习模块应该插在哪会非常有方向感。入门阶段推荐的路线是先跑通一个经典开源方案再对照代码阅读它的系统架构论文然后把其中一个模块替换成自己的实现逐步加深理解。这个过程中不必追求马上创新先把“别人的代码为什么这么写”想明白后面做研究才能站得住脚。5.2 给做工程的人技术选型要看整个系统如果是在做产品我建议你不要被某个算法的SOTA精度牵着走。视觉SLAM在项目里只是系统的一部分你真正需要的是一套可以在目标硬件上稳定运行的完整解决方案而不仅仅是一个精度最高但工程代价巨大的算法。做技术选型前先列出系统的关键约束芯片算力、内存上限、传感器型号、应用场景、允许的初始化时间、重新定位的能力要求、长期运行的处理策略。然后按这些约束去筛选方案而不是先选算法再适配系统。比如一个扫地机器人方案和一个AR眼镜方案对功耗、体积、算力的约束完全不同不可能用同一套架构去套。另外我强烈建议你在项目里配置一份自动化回归测试数据集哪怕规模不大。每次算法更新后跑一遍回归能帮你快速发现“精度提升了但某段路径跟踪丢了”这类问题。没有回归测试的SLAM项目长期维护下去会非常痛苦。5.3 给做研究的人去研究那些“不优雅”的问题如果你准备在这个方向深耕我有一个比较直接的观察学术界容易被优雅的公式和漂亮的实验吸引但工业界最痛的问题往往是不优雅的比如传感器标定误差、时间同步偏差、长期运行时地图维护、极端场景下的故障恢复。这些问题的共同特点是它们不是单点算法能解决的需要系统级的设计。章国锋教授在分享中提到的很多判断其实都在引导研究者去关注系统层面的可靠性。这类工作可能不如端到端模型那样“性感”但它的价值是实打实的而且能真正影响产品演进的方向。我不建议你只盯着榜单上的SOTA刷数字更建议你去找那些现有方法都解决不好的“角落问题”比如动态场景下的长期建图、重定位失败后的自动恢复、稀疏-稠密混合地图的高效存储。这些方向短期发文章可能不那么顺手但长期价值极大竞争也相对小很多。写到这里我把这次分享里最触动我的内容基本都梳理完了。最后再说一点个人体会。听完章国锋教授的分享我自己最大的变化是以前看一个SLAM方案总是先看它在数据集上的精度排名现在会更先去看它的失效案例和分析逻辑。能坦诚分析自己方案在哪些场景下会蹦、为什么会蹦比在100个序列上都跑出优秀数字更值得敬佩。如果这篇分享能给你带来一两个新视角那就很值了。
阅读完成 · 觉得有帮助?
咨询建站