点击上方“计算机视觉life”,选择“星标”
快速获得最新干货
本文由计算机视觉life整理,已经获得作者授权。
原文链接:
https://www.zhihu.com/question/396119527
硕士研究生阶段如何学习slam机器人?
即将研一,联系的导师是做这个方向的。但是自己第一次听说slam不太了解。希望有大佬介绍一下这个方向,以及硕士阶段如何进行学习,需要哪些技能,另外就业情况如何,谢啦。
首先是代码环境问题:标配Ubuntu+ROS,因为绝大部分源码是C++,所以CMake的基本模板要会用
https://www.bilibili.com/video/BV1zt411G7Vn/?spm_id_from=333.788.videocard.3&rt=V%2FymTlOu4ow%2Fy4xxNWPUZ%2Bv9LDQVz8nh4eMlp4A7JJY%3D
必看入门书籍:视觉SLAM十四讲 稍微进阶:机器人学的状态估计,多视图几何
https://www.bilibili.com/video/BV1YW411P7AU
1.这位浙大教授讲得非常非常清晰,虽然不如高博视觉SLAM的课有配套习题和课件那样系统,但可能谭平教授更会去用学生能理解的方式阐述SLAM的概念,表达也更清晰一些
https://www.bilibili.com/video/BV1ax411R7Hd
2.经典的高博的视觉SLAM
https://www.bilibili.com/video/BV16t411g7FR?from=search&seid=14811571160409762901
3.曾书格老师的激光SLAM或者某象的无人驾驶
https://www.bilibili.com/video/BV11a4y1v79G
4.波恩大学《传感器及状态估计》SLAM,这是2020年最新的课程
https://www.bilibili.com/video/BV1aK4y1k7FQ
5.Coursera 自动驾驶教程,主要是讲相机模型,多视几何方面的内容,对3D视觉标定方面非常有帮助
https://www.bilibili.com/video/BV1PE411D72p?p=2
6.宾大的vslam,我没听过,但据说听完收获很大
https://www.bilibili.com/video/BV1Y4411m7aG?from=search&seid=18344384925427038262
https://blog.csdn.net/heyijia0327/article/details/82855443
贺博在这里总结得特别好,有分类,有文章作者名,有下载链接,而且貌似还在维护更新…
因为毕竟学习时间和精力毕竟有限,初学者看起来比较慢,所以我一会儿重点推荐一两篇
我接下来只是讲得我自己的学习方法,希望能帮助到你。
1.首先看一遍视觉SLAM十四讲这本书,从三维空间的表示方法,李群李代数的数学原理这些关键的基础概念,到视觉SLAM的前端,后端,回环整个流程的经典算法实现原理。大致过一遍,不需要把每一个公式都推导一遍,比较难的雅各比可以放一放,一些简单的随手就推了,比如针孔相机模型。
2.之后可以撸一遍视觉SLAM十四讲的视频,抱着之前对SLAM的印象,也可以说是带着疑问吧,在高博的耐心讲解中再回顾一下,视频也不会看得很慢(比如因为看不懂看一下停一下),还可能会对以前理解比较粗糙的地方突然领悟…###此处致敬高博,并没有勇气 @Ta
3.这时候可以看一些经典且写得很规范的代码啦,比如ORB-SLAM2!!
https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map/tree/master/ORB_SLAM2_modified
这里是高博改动后的一个版本,可以在SLAM过程中可视化点云图。辅助可以看一下这篇论文:ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras4.
4.可以自己模仿写一个视觉里程计
对于激光SLAM其实我也推荐先看视觉SLAM十四讲,因为SLAM间结构和原理相似,且视觉SLAM有这样好的入门教材没有不看的理由。同时由于相机的观测模型相比激光雷达会更复杂一些,所以互相转换起来会比较快。我之前一个回答,可以借鉴一下
https://www.zhihu.com/question/52634751/answer/1233033108
1.语义SLAM
https://zhuanlan.zhihu.com/p/58648284
我觉得高博讲得太好了,流泪ing,几分钟时间让我这个语义小白都懂了是什么,为什么,要怎么做…深度学习提取路标啊,建立物体级别的地图去进行地图复用等等等,文章还举例了几篇论文,都挺好,可以看看~
VIO视觉惯性里程计 or VINS视觉惯性导航系统
这边深蓝有出了一套课,讲得蛮好的,主讲是贺博高博崔大神,里面IMU的预积分,以及对应残差雅各比,初始化等讲得蛮详细。最棒的是基于目前非常强的沈老师组的VINS-mono的代码架构讲解的。此处强推一篇论文:VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
前几天本科毕设要求英文文献翻译,我自己翻译了一份重新排了版,传了一份Word版本的,大家自取吧
~链接:https://pan.baidu.com/s/1t_bDIiWOdyxnJYuqGrMSwA
提取码:um34
与深度学习结合,估计位姿,用来做闭环检测(场景的再识别)
水下SLAM
仿生SLAM
……看到这里大家辛苦了!!如果有什么问题,请在评论区直接指出~ (ง •̀_•́)ง (*•̀ㅂ•́)
如果我的分享对您有帮助,左侧三角赞同走一走哈哈哈哈~
实验室的师兄刚毕业,都找的是slam方向的工作,自己也正在往这个方向努力.所以在这里总结以下学习经验吧.
个人认为看视频的效率较低,更倾向于看书,以下的推荐的英文书籍大都可以在Library Genesis(需富强上网)上找到,都是个人已经看完或者正在看的书,相信会对你有所帮助.
C++是slam所有知识的基础,它的作用和地位怎么强调都不为过,在学习其他所有知识之前一定要先过这一关.否则你的接下来的路会很难走.
在这里推荐两本书:C++ Prime Plus和Effective C++,特别是第一本,它将陪伴你整个slam的学习生涯.我当时大概花了两个月左右每天练习上面的例子,后面发现C/C++的使用贯穿了所有学习环节,所以每次遇到不会的都会重新来读这两本书.
C++四大组成部分,每一个都要懂其用法,至少做到遇到问题时能快速定位到书里相应的部分:
以C语言为载体的面向过程的编程(Procedure Oriented Programming)
面向对象的编程(Object-Oriented Programming):类,多态,继承,虚函数
为了解决代码重用问题而出现的泛型编程(Generic Programming)以及对应的标准模板库(STL)
1.2 OpenCV
有了C++的基础,你就可以来学习一些图像处理的内容了.图像处理很多算法原理上会比较难以理解,不过没关系,我们有强大的图像处理的函数库可以调用,那就是OpenCV.
学习OpenCV最最推荐的教材是官方的Tutorial.最开始看完Introduction to OpenCV和The Core Functionality(core modeule)这两个就行,剩余的可以以后用到再回来查找.
如果你英文水平不够好的话,可以看看《OpenCV3编程入门》.个人更加推荐看英文的入门文档,毕竟翻译过程会有信息丢失,不利于理解学习.
1.3 Linux & ROS
Linux是slam常用的搭载环境,它其实有很多的发行商,但是只推荐使用Ubuntu,原因很简单,只有机器人操作系统ROS是基于它开发的.
关于Linux的学习,推荐两本书《鸟哥的Linux私房菜》和The Linux Command Line.前者是基于CentOS写的,但是这并不影响使用,后者是基于Ubuntu写的,但是是英文书,
自己学着安装Ubuntu的双系统(虚拟机和Windows直接安装都不推荐,会出各种意想不到的Bug).然后拿着The Linux Command Line,将里面常见的命令自己敲一遍看看效果.
个人认为比较重要的几个点:
终端的使用
Linux文件目录结构
怎么安装软件
怎么新建和删除文件/文件夹
文件打包及解压
至于ROS的学习,目前只推荐官方的Wiki文档.
1.4 机器人学数学基础
这里涉及到了三维旋转矩阵,四元数,李群李代数的知识.由于在学校选了相应的课(听老师说现在全国只有北航开设了相关课程?),所以在课外没怎么学习.不过最近倒是在Github上发现了一个很好的项目,主要是讲三维旋转和四元数的,可以去下载下来看.
我自己也有开了相关的专栏,感兴趣的可以去看看(随缘佛性更新):
https://zhuanlan.zhihu.com/c_1244623606790995968
2.1《视觉slam十四讲》
之所以把这本书放在第二部分讲,主要有三个原因:
1.这本书提供了大量的源码,具有很强的实践意义.
2.如果你没有上面的基础知识作为支撑,看这本书可能会有些吃力
3.从找工作的角度讲,个人认为基础知识的意义大于slam知识本身
关于这本书,其他回答说的很多了,不再赘述.值得强调的是,里面的程序最好自己写一遍,修改修改部分代码看看会出来什么样的效果.
2.2 相机 & 激光雷达
在学习好理论知识后,家庭条件允许的话,,可以自己设计组装一个机器人来玩玩.上淘宝购买相应的零部件.把它们架设到能移动的机器人上,自己编程实现建图啥的.
https://item.taobao.com/item.htm?spm=a1z0k.7386009.0.d4919233.3dca5014N5GgWp&id=574115048099&_u=t2dmg8j261112.3 TurtleBot
TurtleBot是一款搭载ROS的移动机器人,上面自带了激光雷达或者双目视觉系统.TurtleBot
学校开设了移动机器人的课程,去年(2019)刚刚购买了一批TurtleBot2,所以很有幸使用了一段时间.原本还想着自己买一台玩玩,但是看了一下淘宝将近6000元的价格,只能说一句"打扰了,再见!".
你可以打听打听学校有没有实验室有这个玩意儿,如果有的话可以去蹭一蹭,这将会对你的实践能力的提升有很大的帮助.
基础有了,实践有了,接下来就是理论水平的提高了.
主要从两个方向努力,一个是看相关论文,还有一个是看两本书:
《概率机器人》对应的英文书名叫Probabilistic Robotics,还有一个多视觉几何的书籍Multiple View Geometry in computer vision
这两本书不知道各位大佬感觉如何,我最近正在啃,觉得还是比较吃力的.近期准备把这两本书看完然后去看《视觉slam十四讲》后面罗列的一些论文.
这个是上面答主都都忽略的一点,这个可能要泼一些冷水了.前两年随着百度宣布搞无人车,带动了一大批的slam就业岗位,但是现在风口渐渐平息,最近在媒体上也少有看到相应的报道.虽然slam现在看起来还是一个比较火的方向.但是很多单位已经开始减少招收的人数.至于工资,年薪大概在25w左右,还算是可以的
不过,既然选择了这条路就勇敢向前走吧,一起加油!
最后,求点赞,求关注,求收藏,你的支持是我更新的最大动力!
1、看书:高翔的《视觉SLAM十四讲》、《概率机器人》、《机器人学中的状态估计》、《计算机视觉中的多视图几何》;
2、学习ROS、OpenCV、Eigen、sophus、Ceres、g2o等开源软件使用;
3、看SLAM开源项目,激光经典的cartography、gMapping、Hector等;视觉的ORB-SLAM、RGBD-SLAM,LSD-SLAM等;
4、关注优秀的SLAM公众号,计算机视觉life、泡泡机器人SLAM等;
附一篇计算机视觉life的一篇推荐给SLAM小白入门的文章:
https://mp.weixin.qq.com/s/GYcO7m9oBfJK4h2ZWRq0mw
其中有一张思维脑图不错:
http://weixin.qq.com/r/LkSOljPE026srXf19xE8 (二维码自动识别)
我的本科毕业设计是室内激光SLAM(因为疫情的影响,做的有点水 )
分享下我的主要学习历程:
1.《机器人操作系统》这个中科院的课程,mooc上有。(偏重学习理论)
2.古月居的ROS21讲,b站有资源。跟着课程实现topic通讯这些简单的功能。(巩固理论,提高实际操作能力)
(由于我只学过c和汇编,没有c++和py的基础,在前两步之间也交叉着学了关于c++的知识)
3.完成上述两个课程后,就跟着CSDN里面的各种教程,还有创客智造这个网站,在Gazebo平台,用turtlebot机器人跑各种各样的demo,仿真实现了机器人SLAM,导航这些功能。
4.返校之后做了一些实物测试的工作,其实就是用实验室已有的机器人跑算法(操作类似于仿真过程,不停调用launch文件…用的机器人也是创客智造里卖的kobuki套机)比较简单,用gmapping算法扫了一个实验室的图出来。
心得:感觉通过ROS学习激光slam的过程,实际操作过程和理论学习的过程还是蛮割裂的(可能因为本科生能力确实有限) 这个学习的主要收获就是对激光slam有了初步认知,滤波呀、特征匹配这些,更多的收获在于对ROS的使用上。
虽然这只是一个本科生对slam的学习经历,还是希望对你有帮助~
从0到1学习SLAM,戳↓
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com
长按关注计算机视觉life