从零开始搭二维激光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篇文章进行推送。

  • 17
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
学习SLAM(Simultaneous Localization and Mapping)是一个相对复杂的过程,但是你可以按照以下步骤开始学习: 1. 学习基础知识:首先,你需要了解机器人感知、运动控制和地图构建的基本概念。熟悉概率和统计的基本概念也是非常有帮助的,因为SLAM中经常使用到这些方法。 2. 学习传感器:了解常用的传感器,如激光雷达、摄像头和惯性测量单元(IMU),以及它们的工作原理、数据处理方法和误差模型。 3. 学习SLAM算法:掌握常见的SLAM算法,如扩展卡尔曼滤波(EKF)、粒子滤波(PF)和图优化。理解这些算法的原理和实现方式是非常重要的。 4. 编程实践:选择一种编程语言(如C++或Python)并开始实践编写SLAM算法的代码。使用开源库,如ROS(Robot Operating System)或PCL(Point Cloud Library)可以加速你的学习过程。 5. 实验和调试:通过实验和调试来验证你的SLAM算法。使用模拟器或真实的机器人进行实验,分析结果并调整算法参数以优化性能。 6. 阅读论文和参考资料:定期阅读与SLAM相关的最新研究论文和参考资料,了解最新的算法和技术发展。 7. 实际项目:最终,尝试应用你所学的知识到实际项目中。参与开源项目或者参加机器人比赛等活动,将帮助你更深入地理解和实践SLAM技术。 需要注意的是,SLAM是一个广泛而复杂的领域,需要持续学习和实践才能真正掌握。所以,耐心和持之以恒的学习态度是非常重要的。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值