作者丨王方浩@知乎

来源丨https://zhuanlan.zhihu.com/p/379070942

编辑丨3D视觉工坊

为了方便大家更好的系统学习激光SLAM,工坊邀请行业专家推出了面向工业级实战类的激光SLAM学习课程《深入剖析激光SLAM的关键算法与源码实现》,感兴趣的朋友可以加入我们一起学习。

自动驾驶里首先需要解决的问题就是建图和定位,如果地图和定位没有做好,无人车根本就跑不起来。而建图和定位又涉及SLAM技术。这里我主要是分享下我学习SLAM的经历和一些小小的思考,希望能够帮助大家。

了解阶段

因为我是从零开始的,我认为第一个阶段主要是了解SLAM技术,知道它的大致原理和用途就可以了。

SLAM的名称理解起来非常容易,我觉得SLAM技术中取名字唯一值得推荐的就是SLAM这个名词本身。同时定位与地图构建(Simultaneous localization and mapping),我们来到一个陌生环境,由于没有地图,只能通过探索,一边获取自己的相对位置,一边绘制当前环境的地图,当探索完该区域之后,我们就可以得到该未知区域的完整地图了。

除了SLAM,其它的一些名词大部分都晦涩难懂,我一度怀疑这些大神都是在秀屠龙技能。站在一个新手的角度来说,一个贴切和容易理解的技术名词非常关键,一个不知所措的名词往往都会吓退新人,比如BA,李代数群,词袋。我不排除其它学科的一些缩写和专有名词,但是这些名词完全无法用一句话解释它的用途,理解起来也非常不形象,这是我觉得不太合理的地方。

接下来是前端和后端,在计算机技术中前端通常指的是网页,后端通常指的是后台的服务器程序。而SLAM中恰恰又有前端和后端的概念,导致我理解起来也有点费力气,一是因为我之前就有惯性思维,二是感觉也不太贴切,虽然功能上有一个大概的影子,但是拿前端和后端去统称这2个过程有什么现实的意义吗?下面贴一张前端和后端划分的图。

以我目前的理解前端是进行特征提取,获取相邻帧的位姿变换,而后端则是进行地图的拼接和位姿优化。这2个过程有点类似在线计算和离线计算的架构,也就是大数据的lambda架构,实时计算的是相邻帧的位姿,然后再离线计算位姿的优化并且提供给在线使用。用前和后来指代这2个过程我无法理解它们的作用。

因此我觉得了解阶段最主要的也是最重要的是理解SLAM的名词本身,并且知道SLAM的大致的原理,也就是通过相邻帧来获取相对位姿,计算相对位置,同时利用历史轨迹信息来建图,并且优化之前和现在的位姿。

第一阶段知道了SLAM的大概原理就成功了,千万不要再去刻意理解上述这些名词,有可能只是增加烦恼。

学习框架

因为做自动驾驶,这里我主要以Lidar SLAM为例子来说明。目前lidar slam我认为优先学习lego-loam框架,然后是cartographer框架。其实如果开始只是了解SLAM的原理,一下子跳到看框架可能觉得跨度有点大,实际上我是非常建议一开始就是去学习框架,而不是看书,学习完整理论,学习数学之类,理由如下。

首先LEGO-LOAM的代码总共才4000行,也就是说就算是一行一行的啃,难度也不会非常大,一天看100行,40天也看完了。总之没看到代码前我还忐忑,代码会不会动则上万行,甚至几十万行,既然只有4000行,我觉得完全可以放心了,下定决心啃代码就可以了。

其次LEGO-LOAM还有论文讲解,我觉得这非常关键,比如开始我以为LEGO是代表积木的意思,可以类似乐高积木来搭建SLAM系统,实际上LEGO是基于地面做优化(Lightweight and Ground-Optimized)。论文中也详细介绍了程序的每个步骤,以及原因和背景,可以说结合代码食用效果非常好。

最后,LEGO-LOAM是当前比较主流的开源Lidar SLAM算法,学习动力足,不是什么过时或者不实用的算法。

等看完开源框架,基本上就对SLAM的整体框架有了一个大致的理解,比如前面所说的前端、后端,如何提取特征,如何做pose图优化,回环检测之类的。

进阶阶段

由于我本人目前仅限于前面2个阶段,因此这里主要是一些想法,后面如果有更进一步的学习,我会继续补充。

网上有集成了各种算法的OpenSLAM平台,这里面集成了一些开源的SLAM算法。我的理解是SLAM算法有点类似于编程,个人有很大的发挥空间,而不是按部就班的按照某几步操作就可以完成,比如提取特征,摄像机和Lidar提取的方式就不一样,而且如何提取特征也不一样。如何去除树叶,如何找到显著的特征,是基于传统的查找线和角特征,还是基于其它的算法,这些都没有成熟完善的方法论,都是基于经验和方法的结合,也就是个人的发挥占很大的因素。

拿SLAM和编程相比,虽然2者的实现起来都有很大的发挥空间,但是编程为什么好学习一点,之所以编程可以快速入门的原因,是因为有非常成熟的学习曲线,比如编程就是数据结构和算法。因此大部分人了解下编程语言,然后学习数据结构和算法,就可以很好的胜任编程了。所以我个人觉得SLAM学习网站可以不要一味的汇集各种SLAM算法,然后整成一个大杂烩,让个人去学习,而是应该把底层技术抽丝剥茧,总结成一些方法,然后分别去深入学习,等到使用时,再从这些方法中寻找合适的工具去组合。

比如特征提取,就有地面查找算法,聚类算法,这些算法什么时候适用于什么情况。如何做回环检测,如何进行pose-graph优化等。把这些单点的技术类似数据结构和算法总结出来,进行进一步的学习,然后再结合具体的场景去组合发挥出SLAM的威力,这可能是我目前比较推荐的学习思路和方法。

总结

说实话一开始我只是用NDT在建图,之前一直尝试NDT建图没有成功的原因一是我没有理解pose之类的计算,二是没有好的工具,特别是可视化工具,能够手工加入旋转之类方便理解。实现了NDT之后,后面开始接触lego-loam,之前也是觉得高深莫测,但是一旦下定决心,并且只有4000行的代码量之后,接下来就容易多了,当然SLAM中名词混淆和刻意夸大优化算法公式之类的也是阻碍学习的重要原因之一,实际上这些优化算法都有对应的库可以实现,开始不用刻意理解。如果是后面涉及开发新的算法,可以在此基础上进一步学习。

最后侯捷老师说“使用一个东西却不知道它的原理,显得不太高明。”希望大家百尺竿头更进一步,也希望SLAM的学习曲线能够更加系统和专业。

后续我会对lego-loam做一些系统的笔记,并且尝试重构lego-loam的代码。

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

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

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

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

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

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

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

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

如何开始SLAM学习?相关推荐

  1. SLAM学习--视觉slam学习教材推荐(附相关技术文档下载链接)

    (理论上看完前三本,足够掌握视觉slam的所有理论知识,实践部分参考各种开源代码) 一.<视觉slam十四讲>,高翔,清华大学出版社,(目前已出第二版,优先推荐) 以上教材,其实是基于国外 ...

  2. 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》

    这篇博客主要记录了我在深蓝学院视觉slam课程中的课后习题,因为是为了统计知识点来方便自己以后查阅,所以有部分知识可能不太严谨,如果给大家造成了困扰请见谅,大家发现了问题也可以私信或者评论给我及时改正 ...

  3. 视觉slam学习笔记以及课后习题《第三讲李群李代数》

    前言 这篇博客主要记录了我在深蓝学院视觉slam课程中的课后习题,因为是为了统计知识点来方便自己以后查阅,所以有部分知识可能不太严谨,如果给大家造成了困扰请见谅,大家发现了问题也可以私信或者评论给我及 ...

  4. SLAM学习资源分享

    SLAM学习资源分享 转载来自[SLAM],(https://mp.weixin.qq.com/s/kAdGdWDlw15ZmLzG56DOOA)如果告知侵权会删除 之前曾经总结过关于SLAM的资源, ...

  5. SLAM学习资源免费分享-转载

    SLAM学习资源分享 转载来自[SLAM],(https://mp.weixin.qq.com/s/kAdGdWDlw15ZmLzG56DOOA)如果告知侵权会删除 之前曾经总结过关于SLAM的资源, ...

  6. ROS_RGB-D SLAM学习笔记--室内环境测试

    ROS_RGB-D SLAM学习笔记 RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints. ...

  7. SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...

  8. SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)

    写在前面 关于安装配置,博客LIO_SAM实测运行,论文学习及代码注释[附对应google driver数据] 我觉得已经写的比较完善了.但是我觉得在注释方面,这位博主写的还不够完善,因此在学习以后, ...

  9. ROS机器人SLAM学习:Gazebo定位与导航仿真

    ROS机器人SLAM学习:Gazebo定位与导航仿真 一. 在 gazebo 中构建一个用于建图和导航的虚拟环境,可以使用 Building Editor工具创建,也可以使用其他功能包中已有的虚拟环境 ...

最新文章

  1. sketchup 255个su常用插件)_SketchUp领域的知乎,有胆来问!
  2. 前端:jQuery对象和dom对象的转换
  3. CentOS 7.0系统安装配置图解教程
  4. HTTPS加密那点事--轻松秒懂HTTPS非对称加密
  5. #论文 《Wide Deep Learning for Recommender System》翻译
  6. matlab gui自定义图片做背景,matlab GUI自定义图片做背景
  7. 计算机科学与技术分享会,“相伴成长,绘梦未来”——计算机科学学院计算机科学与技术专业举办交流分享会...
  8. 文件上传 upload-labs 1~20做题记录
  9. BD和DBMS和SQL概念
  10. web前端自动化测试工具phantomjs的使用笔记
  11. vuex commit 模块_Vuex详细介绍
  12. yum -y install php-mysql 版本冲突
  13. create-react-app 支持多入口
  14. ICMP(网际控制报文协议)
  15. java表述环形链表_数据结构环形链表(java实现)
  16. 软件工程导论-软件工程概论(学习笔记)
  17. 使用老毛子在腾讯云DNSpod上实现DDNS
  18. 网易云接口加直链下载vip歌曲
  19. 2019-02-04~2019-02-08
  20. layui - 模板引擎

热门文章

  1. 进行Android应用开发的编程环境的建立
  2. CCTextFieldTTF 与 5种常用CCMenuItem
  3. 【有奖辩论】工程师和销售创业谁更有优势?
  4. 除了腾讯阿里,中国最牛的风投机构,其实是合肥市政府!
  5. 阿里员工吐槽:后悔接这侮辱性的offer
  6. 这些Java8官方挖的坑,你踩过几个?
  7. CPU飙高,频繁GC,怎么排查?
  8. 2020 Java 面试高薪攻略.pdf
  9. 推荐7个圣经级技术号!第3名是我遇到的第1个开保时捷的前码农!
  10. MySQL 导致 CPU 消耗过大,如何优化