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

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

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

观点二

作者|无疆WGH

分享一下本人经历:普通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来解决问题。

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

观点三

作者| 范帝楷

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

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

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

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

SLAM入门门槛确实高

如果想要进行业圈子,加入 机器人SLAM交流社区

如果想要系统深入学具体机器人SLAM课程,上 cvlife.net

点击领取学习资料 → 机器人SLAM学习资料大礼包

独家重磅课程官网:cvlife.net

全国最大的机器人SLAM开发者社区

技术交流群

— 版权声明 —

本公众号原创内容版权属计算机视觉life所有;从公开渠道收集、整理及授权转载的非原创文字、图片和音视频资料,版权属原作者。如果侵权,请联系我们,会及时删除。返回搜狐,查看更多