从零开始搭二维激光SLAM --- 序章

2024-04-02 22:18

本文主要是介绍从零开始搭二维激光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 --- 序章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871200

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

HDU 2159 二维完全背包

FATE 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

BIRT--商业智能和报表工具,从零开始

1.简介 BIRT (Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 JavaEE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。 2.下载 官网下载网址:http://download.ec

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

C语言批量数据到动态二维数组

上一篇文章将文件读取放到静态创建的二维数组中,但是结合网络上感觉到今天的DT时代,这样批量大量读取一个上百行的数据,分配的内存是否可能因为大量的数据而产生溢出呢,最近一直研究里malloc函数,通过它来动态建立所需的二维数组,因此,通过文件操作和动态创建二维数组结合起来,将大量的数据动态的放入矩阵中,不知道这样的思想是否正确,下午把程序运行出来了,将程序贴上来,欢迎大家一起探讨:对于有规律的大数据

从零开始学习JVM(七)- StringTable字符串常量池

1 概述 String应该是Java使用最多的类吧,很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事,而且我们又经常使用相同的String对象,那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在,StringTable叫做字符串常量池,用于存放字符串常量,这样当我们使用相同的字符串对象时,就可以直接从StringTable

从零开始构建大语言模型并进行微调:全面指南

要从0开始搭建并训练一个大语言模型(LLM),涉及到多个步骤和资源,包括理论理解、工具使用、数据准备、模型训练与微调。以下是一个从基础到应用的指南,帮助你理解并逐步实现这一目标。 1. 理解基础概念 在开始搭建大语言模型之前,了解以下基本概念至关重要: 生成式AI:通过大语言模型生成自然语言文本,例如GPT、BERT等。机器学习:通过数据训练模型,使其具备从数据中学习规律的能力。深度学习:机