世界杯2018_世界杯北美区预选赛 - jmkxjj.com

感觉SLAM太难了,大家有什么想法?

观点一

作者|知乎用户

https://www.zhihu.com/question/388453391/answer/2115024130

SLAM难不难,对于基础不同的人可以很不一样。对于新手来说主要需要厘清基本脉络,理清楚主干带着问题去看各种论文和算法

几乎所有SLAM研究围绕着几个问题进行,当你看一个工作的时候要想清楚这个工作的这几个问题是怎么回答的,以下写了一些英文术语是为了方便直接在原文中对照

Front-end(前端,包括视觉或者lidar前端)和data association(数据匹配)。要注意data association的问题是多层面的,包括帧间特征点的匹配(例如vins使用LK光流),关键帧的匹配(loop closure),或者现在一些semantic方法需要引入对物体的匹配。

2. State estimation(状态估计):

用于确保local accuracy(局部精度)的sliding window(滑动窗口)+graph optimization(图优化)或者MSCKF,这部分是VIO的核心,一般来说核心解决的问题是bundle adjustment

用于global consistency (全局一致性) 的pose graph optimization(PGO)。注意一个问题,VIO的工作不包括PGO,完成了局部估计就算VIO了。当然还有一些过于简化的使用帧间EKF等方法,这种我们一般不把他当(2021年)的VIO,只能算光流。PGO是用于全局状态估计的。也有一些工作会在求global consistency的时候加入bundle adjustment。

此外还需要明白一个问题,无论sliding windows上做graph optimization还是pgo都是从factor graph(因子图)那里延伸出来的,而MSCKF滤波的则是Kalman filter的派生。

状态估计是SLAM的核心,别被SLAM的名字困扰,在SLAM算法中,最重要的就是状态估计,经常有人抱怨的数学难度,优化要怎么解就是这里。但是请不要在学习初期太把优化器当回事:你一开始认为优化器是写好factor就给出正确结果并不影响你的入门。

3.Mapping(建图),对于VIO来说,2就算干完活了,对于完整的slam,需要使用pgo的优化结果和点云(由各种方法得来,包括且不限于单目算法,双目相机,结构光等等)生成对三维地图表示,从最简单的occupy map(占用地图),到octomap,tsdf,esdf,到一些submap的技巧等等

所有SLAM都要回答这么几个问题,把这几个问题搞明白先再去探讨李代数或者具体的优化方法。在我看来如果你还没有搞明白我上面说的这些,那去搞自己写solver或者跑去读g2o,ceres代码是南辕北辙。

学一个东西先搞明白基本的主干框架,再去搭建每个细节。最后建议读读vins-mono的文章,写的非常清楚。

观点二

作者|无疆WGH

https://www.zhihu.com/question/388453391/answer/2128109058

分享一下本人经历:普通985硕,专业本身与SLAM/机器人不沾边,只会基本的coding,高数/线代/矩阵论只上过课,SLAM零基础,研究生期间只简单用过ORB-SLAM2(改接口)。

2020年9月入职某机器人公司开始从事SLAM导航工作,现在能够对几个主流激光SLAM方案相对得心应手地改进落地,正在利用周末时间coding自己的SLAM框架+复现paper,近期在我司满一年的应届生定岗定级评比中位列Top15%(获得同届最高职级),看ICRA/IROS paper基本无压力,能够follow别人的工作。

这个回答算是个人一年来的经验分享,希望能给大家一些参考~

题主觉得SLAM太难了,其实我也有过同感,一次是在学校跑开源SLAM尝试阅读代码的时候,另一次是工作期间基于若干开源方案进行二次开发的时候。现在看来,第一次觉得难是理论功底不足+代码能力差,第二次是工程trick 理解不足+代码能力差(不熟悉C++设计模式)。

SLAM说难也不难,个人愚见对于初阶工程师来说,归根结底就三个方面~

以下开始分享我的亲身经历:

我研三上才第一次接触到《十四讲》,没错,是才知道这本书的存在,才知道有SLAM这个词汇。然后在隔壁课题组同学的帮助下跑通了ORB-SLAM,跑的还是官方的包。

同学期,因为毕设的一个环节是双目SLAM,花大把时间读《十四讲》+跑代码建立了对SLAM的基本认知。

春节后爆发疫情,在家无聊用C++写了一些视觉的小工程,代码量1W行,打通了C++基本功。

20年5月份入职,9月底开始从事SLAM相关的岗位。看了两个月VINS-Fusion,似懂非懂,工作上没有产出(惭愧)。20年年底上手某厂的某开源激光SLAM框架,从跟着前辈同事跑bag包、配置launch文件做起。

这个框架非常难读(对当时的我来说),不懂C++新特性 + 无读SLAM代码经验 + 没有架构思维,让我完全不知道代码在干嘛。硬着头皮死磕,开始逐渐明白了一些小模块的代码为什么这么写,比如多激光雷达数据预处理。再后来能够在小车上实时跑算法了,可以试着调整一些参数看看效果如何改变。【此时此刻,才有资格称自己为小白】

质变发生在2021年的前三个月,凭借着死磕精神硬是把庞大的代码工程吃下来了(这个工程总共6W+行代码,远远大于其它激光SLAM框架,白天做工作,晚上看代码+做笔记),期间前辈离职个人被顶到一线,直面算法落地的责任,但恰恰是这种直面,让我对代码的理解飞速加深。

紧接着团队开发的算法正式落地项目应用,我开始每天泡在应用场景里,因为算法刚落地一定会有各种水土不服,作为工程师,根据持续暴露的各种问题优化代码解决问题,是本分。

等这个落地跟进过程大体结束,已是21年的5月底。这时的我,有种酣畅淋漓的感觉!

落地效果比较稳定后,逐渐有时间做一些global的复盘和总结,SLAM这个事开始在我脑海中逐渐变成一个清爽、条理、具体的存在,赏心悦目。

然后开始去看其它的方案,沿着 LOAM/A-LOAM/LeGO-LOAM/Lio-Sam 一路往前走,期间同步系统性地review了 2020/2021年的 IROS和ICRA ,我发现自己无论是看代码还是review paper,速度已经非常快了(大神太多,这里只是跟之前的自己比)。

在看代码的时候看到一些不明意图的细节,开始能够很快意识到、或者是根据该模块的功能反向推测到,作者为什么这样写。在 review 别人paper的时候,看到一些不错的想法,会想到怎样把它嵌入到自己的系统中,解决自己遇到的工程问题,开始在组会上提出一些新的想法和同事们讨论。会有冲动用个人时间去复现未开源代码的paper,并且现在也正在做。

一通百通!

半年时间,SLAM世界对我好像瞬间通透了!工作上的成就感也让自己自信起来。

为什么我认为【理论功底+coding能力+工程trick】构成了初阶工程师的能力栈?大抵也是我对个人经历的总结。质变的那3个月和落地跟进的2个月,理论功底的补齐一直没有断过,高数/线代/矩阵论课本是手边书,《概率机器人》解决对滤波算法体系的理解,看paper/博客/知乎做总结家常便饭;coding能力方面,C++PrimePlus是手边书,C++11/14官网网站是我最经常访问的网站之一,我一直都喜欢总结,享受把难以说清楚的问题用清晰的图表或脑图表达出来的快感,对复杂架构下多线程间交互逻辑的梳理使我非常得意;工程trick方面有两点,研读优秀开源框架本身就学到了很多trick,落地的过程中又遇到了新的问题,逼着你不仅要自己想还要多和大家请教交流,创造或挪用一些新的trick来解决问题。

最后,放出能力栈的完全版,即兴总结,定有疏漏,仅供入门者参考,大神跳过。

观点三

作者|范帝楷

https://www.zhihu.com/question/388453391/answer/1165655760

同从业人员,我们组的SLAM除了opencv用于图像读取,显示,Eigen用于矩阵计算之外,所有模块都是自己做的,包括前端特征提取,匹配,后端优化等。

这算法做到特别好难度极高,这个过程中需要大量反复测试,很多细节上需要取舍,基于网上开源的魔改也好,自己做也好,其实都可以,只要最后能上线用。

题主这个情况,学了这么长时间SLAM,还觉得自己在入门期,那应该好好反省了,毕竟这玩意儿需要的知识其实并不多,是否应该设法自己短期强化学习一下?

本文仅做学术分享,如有侵权,请联系删文。

点击进入—>3D视觉工坊学习交流群

干货下载与学习

后台回复:巴塞罗那自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进3.国内首个面向工业级实战的点云处理课程4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

8.从零搭建一套结构光3D重建系统[理论+源码+实践]

9.单目深度估计方法:算法梳理与代码实现

10.自动驾驶中的深度学习模型部署实战

11.相机模型与标定(单目+双目+鱼眼)

12.重磅!四旋翼飞行器:算法与实战

13.ROS2从入门到精通:理论与实战

14.国内首个3D缺陷检测教程:理论、源码与实战

15.基于Open3D的点云处理入门与实战教程

16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进

重磅!粉丝学习交流群已成立

交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。

扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿,微信号:dddvisiona

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看,3天内无条件退款

高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~

2025-11-08 12:02:52
友情链接