本文主要是介绍从零开始搭二维激光SLAM --- 序章,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为什么要做这个开源项目
1 我的SLAM接触史
1.1 硕士阶段
从17年3月开始接触SLAM,到现在已经3年了。虽然时间很长,但并不是所有时间都在单纯的搞SLAM。
17年3月,研一下学期的时候选的课题题目,基于SLAM的室内移动机器人导航技术研究。之前并没有接触过SLAM,ROS等等。就连c++都是16年研一上学期的时候学的(大一学过以后没再接触过)。从17年3月开始学ROS,开始了解SLAM,还看了概率机器人这本书(当时基本没看懂)。
到了17年7月,去了安徽芜湖的一家公司实习,因为课题是这家公司给的。到了之后第一次接触机器人,小强机器人,学习操作机器人,搭自己电脑的环境等等,用了2个月。到10月份开题时候还不明白课题到底要干啥。
11月份的时候,考虑到建图的时候总有人,总会在地图上留下一个单独的点,所以做了一个二维雷达的检测人小腿部分的滤波,通过距离等几何信息分辨出人腿,同时也会把和人腿差不多宽度的其他东西也过滤掉。后来跟同事大哥聊了聊,他说,你在没人的时候建图不就完了,这功能有点鸡肋。好吧,后来一想感觉也没啥大用,就没放论文里。
开发完这个功能基本就到12月中旬了,之后边查文章,边研究cartographer,那时候cartographer刚出来不久(具体多久不知道了),国内的资源能查到的很少。只能自己研究。
到了18年1月中旬,终于把配置文件lua,launch,node这些东西全弄懂了,能够成功的建图了,然后被告知快中期了。。。这时候除了建图我还没整啥呢,然后赶紧跑amcl,move_base。为了找创新点加了个主动SLAM,就是边导航遍建图,用的现成的ros包。。。
准备中期再加上跑各种东西,基本基本就4月份了,6月份学校答辩了(学校硕士2年毕业,贼爽,时间很紧凑)。然后开始准备视频,图片,以及测量导航精度的实验,收集数据。弄了1个月。5月份到6月份在家写论文,自以为写的很快了,结果一到学校发现很多人已经把论文写完了,开始做ppt了,我还差2章没写完。。。急死。然后6月份开始疯狂写论文,有次一周连续4天,每天晚上12点睡,凌晨3点起,继续写论文。
论文终于写完了,ppt花了1天时间做完,然后晚上老师让试讲ppt,刚做完没熟悉呢,讲的磕磕巴巴,好多东西说不清楚,很难受。后来又花了2天把ppt重做了,然后继续熟读,还好最终答辩顺利通过了。
总体下来,这一年基本就是在为了论文而学习,只能说是知道了好多概念的名字,但是概念具体是怎么实现的完全不懂。
1.2 工作阶段
18年7月到19年1月,这时候的工作与ros无关,做了激光叉车的运动控制。19年1月开始做激光导航agv,使用ros现成的包。只是在用ros,没有进行深入研究。
19年2-3月有时间了看了下hector的源码。
19年5月-8月进行深入阅读cartographer代码(刚入职一家公司,试用期没让接触项目),9-12月在各种使用cartographer建图,二维的三维的,室内的室外的。
2020年2-5月在家办公,抽时间看了karto的源码。
从4月中旬开始看神经网络,7月参加了百度的神将网络的比赛,8月底比赛结束,第18名。神经网络学着还挺简单,就是内容挺枯燥的,只有一堆百分比的结果。而SLAM与之相比确实有趣很多,我可以去看建图的效果,可以使用各种传感器,可以让机器人在地图上跑导航,但是就是需要的知识太多太多了。
9-10月份又看了下cartographer的分枝定界部分,写了个专利,同时看了orb-slam2的代码,以及视觉slam14讲。
11月份看了LIO-SAM的代码,查了查LOAM与Lego-LOAM的实现原理。
我把我接触SLAM的整个经历写出来,不知道是不是有人和我的经历差不多,一直在使用slam,也看了好多SLAM相关的理论知识,也懂了一些,但是没有自己写过一个SLAM就感觉懂的不够透彻,不够完全。
2 只是在使用SLAM
硕士阶段了解了SLAM相关的知识。
工作阶段一直是使用开源的SLAM算法。因为建图只是机器人导航的第一步,只要能稳定的建图以后就不会总调slam的参数。而且,工作上也不会太去抠细节,扣代码,只要调参调好了,能建图就行了。所以后来的工作重点变成了和同事一起调导航去了,去调move_base,去调导航的效果。
不知道其他公司里的SLAM岗位是不是也这样,哪位同行大佬看到了可以留个言不。
3 念头的产生
所有这一切,导致了我看了很多SLAM的代码,依然感觉自己不是特别会,对SLAM不是特别有把握。
上周三晚上睡不着觉,看着别人发公众号能赚钱,想着自己也写个公众号,公众号的内容可以是从零开始搭一个SLAM,这个念头一产生就一发不可收拾,导致我凌晨4点才睡着。。。
同时,加了一些社群,发现现在刚开始做激光SLAM的也有很多人,也有很多人问有没有像高翔博士的视觉SLAM14讲一样的激光SLAM的教程。
高翔博士出的视觉SLAM14讲在国内视觉SLAM的发展历程中起着十分重要的作用,所以想着向高博学习的想法,我也打算从零开始搭一个激光SLAM,做一个系列的教程。
由于我现在的水平有限,只能边学编写文章,同时还要工作,所以打算以每两周更新一次的频率进行文章的更新。
4 文章的类型与适用人群
4.1 文章的类型
本人的理论基础知识十分有限,所以本系列文章将是以 想要实现的功能进行代码的编写 为主,也就是说本系列文章将以代码为主,而不会进行太多的理论公式推倒。
而编写代码的过程以及思路,我将从0开始,一步一步地带着大家进行二维激光SLAM的编码。
4.2 适用人群
本系列文章不会对各种概念进行深入讲解,也不会对各种理论模型进行讲解,原因很简单,我不会。。。所以,我已经默认了读者已经具备了这些基础知识,起码知道SLAM的各个模块等等。
5 项目地址
github: https://github.com/xiangli0608/Creating-2D-laser-slam-from-scratch
csdn: 李太白lx - 从零开始搭二维激光SLAM专栏 - https://blog.csdn.net/tiancailx/category_10582260.html
公众号: 从零开始搭SLAM
文章将在CSDN与微信号同步更新,由于公众号的特殊性,将会对长篇文章拆分成2篇文章进行推送。
这篇关于从零开始搭二维激光SLAM --- 序章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!