【一看就会】【激光slam第一篇】如何理解激光slam

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

找工作不容易,啥都得看看,之前毕设做的激光slam,在这里整理一下

本文主要讲3d激光slam,先理解,再拆分,再讲一些基础知识,再讲几个经典算法。


一、slam是什么?

拼图!
slam就是拼图。
视觉slam就是连续拍几张照片拼在一起。
激光slam就是连续采集几帧点云图拼在一起。

你想一下,给你两张图片,一张图片拍到这张桌子三个角,另外一张照片拍到桌子两个角,你怎么把这两张照片拼在一块?

把都拍到的那个角给重叠,然后把两张照片中其他能对上的特征对上呗。

这里面,
“角”“其他特征”就是slam中的【特征提取】

“重叠”“对上”就是slam中的最核心的部分——【点云配准】

两张照片之间的距离和旋转角,就是slam中的【里程计】

把很多张图片给拼成一张大图,就是slam中的【建图】

照片比较多,图比较大的时候,难免会有误差,比如说一条直线拼的不直,那就需要一边拼图一边修正,这就是slam中的【回环检测】

所有的slam无非就是在这上面做文章,以下我们就以此进行详细解释。

二、激光slam具体步骤

1.点云预处理

激光slam中,采集数据的是激光雷达。
激光雷达有几对接收器和发射器。
其中发射器发射激光,接收器接收反射回来的激光,计算二者时差,然后计算出距离。
接收器和发射器都会安装在一个不断旋转的台子上面,然后进行快速的360°旋转。
如果只有一组接收器和发射器,就叫单线激光雷达,几组就是几线。
多线雷达就能采集3d数据。
所以你也看到了,其实采集回来的数据是几行,最多的128线就采集128行,不过18线和36线的其实就很够用了。

然后采集回来的数据是一个个点,每个点都是一组数据,数据中有这个点的三维坐标信息,还有线标,就是从上往下数,是第几组接收器发射器的采集的点。有的还有光强等。

采集回来的数据呢,点太多了,还有些不知道飞哪去的点,还有些接收器没接收到的点,于是就需要数据预处理。

1.去NAN点

方法就是调用pcl的函数,去除数据中的无效点

2.去噪

噪点的去除方法就是滤波,像是Kalman滤波算法、粒子滤波算法,半径滤波算法等,pcl库里基本都有。

4.去畸变

畸变这个是雷达点云数据中特有的一种现象。
原因就是因为在激光雷达采集数据是通过接收器发射器不断【旋转】采集来的。
一帧就是雷达旋转了一圈。
雷达旋转的过程中,车辆或者机器人也会走,这个时候相当于一帧的点云中,有不同时间和位置的采集来的数据,就会产生畸变:
在这里插入图片描述
去畸变的原理,就是知道采集这个点时的雷达,和最开始的位置的相对位姿,然后给转换过来。
相对位姿的获取用imu。

比如说,以雷达这一帧初始点作为坐标原点,其中一个点采集回来的坐标为(1,3),但实际上,imu判断雷达已经往y轴方向走了2,那这个点的真实坐标信息就是(1,5).
就是一个相对坐标系的转换。

5.下采样

雷达数据太多了,后面不好计算,就用下采样,也就是隔几个点取一个,让数据量小一点。
常用的下采样方法:

  1. 体素栅格滤波
  2. 随机采样
  3. 均匀采样
    等等
    反正pcl库里都有,调用就行,这些都可以了解一下。

6.坐标变换

主要就是局部坐标系变换到全局坐标系,这个还需要和后续的激光里程计配合。
主要包括旋转和平移。
就是把每一帧激光雷达的数据都转换到全局坐标系下面。
pcl库里也有。

这里补充一点知识,坐标变换中常常提到一个名词——四元数。
四元数的作用就是表达旋转。
这里是不是就有些疑惑,为啥非要整个四元数表述旋转,旋转不就是三个角度吗?
之前直接用三个角度表示旋转的叫欧拉角表示法。
实际运算过程肯定有个先后顺序对吧,xyz三个轴的旋转角。
假设使用欧拉角的旋转顺序是 ZYX。
如果y轴刚好旋转到90°的时候,z和x轴对齐重合了,两个旋转就成一样的效果了,那就缺失了一个角度的自由度了。
这个就叫欧拉角的万向锁。

四元数由一个实部和三个虚部组成,实部指的是旋转幅度,虚部指的是旋转方向和角度信息。
用虚部和实部就能计算出在哪个轴旋转了多少度。

四元数这部分可以搜的看一下。

2.特征提取

特征提取目的就是提取中当前帧和目标帧的特征。
一般可以分为三步:
1.计算曲率
2.提取边缘特征和平面特征
3.去除噪声和降采样

目前的3d激光slam的特征提取,很多都是根据loam系列来的,也就是根据曲率区分平面点和角点。
曲率大的就是角点,曲率小的就是平面点。

lego-loam系列中还加入了地面点和非地面点的区分,这个是判断位于同一垂线的两点夹角是否足够小。
在这里插入图片描述
曲率计算在pcl库中有。

slam中的特征提取和图像识别的特征提取有区别,没有图像识别中的特征提取那么复杂,主要目的是为了后续的点云配准做准备并减少计算量。

3.点云配准

点云配准是激光slam中最重要的部分,目的是为了获取两帧之间点云位姿变换矩阵。
主要算法有两种:ICP和NDT

1.ICP

ICP(Iterative Closest Point)是一种常用的点云配准算法,用于估计两个点云之间的刚性变换(旋转和平移),使得它们尽可能重合。
本质就是一个最小二乘优化问题。
可以分为两大步:
1.最近点匹配
2.最小二乘优化

1.最近点匹配

最近点匹配就是为了找到当前帧点云每一点,在目标点云中的对应点。
听起来很绕口对吧。
两帧点云之间假设有100个点,那我们需要把这100个点一一对应起来,然后再进行最小二乘优化求解,解出两帧点云之间的最小位姿变换矩阵。

那这些点怎么相互对应呢?
最简单的就是暴力搜索,直接计算每个点之间的距离,然后取最小的那个点。

更为普遍的是使用kd树搜索。
kd树是一种数据结构,有点像二叉树。将中位数点作为根节点,将其左右两部分递归划分为子树。
先将数据都存进kd树中,然后从根节点开始,计算距离,判断属于那边的子树。
大大节省了计算量。

还有一种是体素网格。
也是先将点云划分为固定大小的体素网格。
然后再在对应的网格中计算每个点的距离,进行最近点搜索

ps:这里需要注意的是,这里的计算最近点,就直接用的雷达局部坐标系中的点的距离,也就是采集得到的原始数据的距离。

pcl库中也都有

搜索这一步可以使用gpu加速等,毕竟这步搜索多个点可以并行计算,而不是需要遵守先后。

2.最小二乘优化

上一步找到对应点之后。
就需要构建最小二乘优化问题了。
就是将所有对应点之间的距离相加,然后通过优化解出最小位姿变换矩阵。
这里肯定会有疑问。
不是已经计算出每个点的最小距离了吗,怎么还要优化求解?
这里有很多地方没有专门提,所以会让很多人造成误解。
我来解释一下,前面的找最近点,就直接是在雷达局部坐标系下计算。
也就是说,直接用的雷达点云的点坐标来的,也不管雷达有没有移动。
但是这一步,本来就是为了求解两帧雷达之间的位姿变换的,所以这里,将当前帧的雷达坐标系,设为所需求解的未知量,也就是相对目标帧的平移和旋转。
然后再进行对应点求解。

求解的过程中,就需要我们之前的特征提取了。
角点和角点进行距离计算:
在这里插入图片描述
平面点和平面点匹配计算距离:
在这里插入图片描述
然后就是最小二乘优化问题求解,这部分太复杂了,之后我应该会单独写一篇文章讲。

2.NDT

4.里程计和建图

里程计就是上面计算出来的相对位姿的累加。
有相对位姿和初始帧坐标,就可以得到每一帧在全局坐标系的坐标,然后将所有点给保存在一个文件里,就是建图。

5.回环检测

回环检测是后端优化中的一部分。
后端优化也就是有了上面的里程计信息,可以进行初步建图后,为了防止建图有误差,再进行一步优化。
毕竟上面的里程计是优化问题,求得的解有可能没那么准,所以需要不断检测优化。
回环检测的主要目的是修正累积的定位误差,从而优化地图和轨迹,提升整体SLAM性能。

讲一下什么是回环检测:
在当前帧(比如第10帧)和之前的某些帧(比如第1帧)之间找到匹配关系,并通过配准计算它们之间的相对位姿。
之前里程计是一帧接着一帧进行icp或者ndt进行计算。
回环检测就是隔几帧进行计算,也是使用一样的配准算法。

有些情况,机器人还在往前走,第10帧和第1帧有部分重叠。
有些情况,机器人已经绕了一圈了,第10帧和第1帧几乎完全重叠。

这些计算出来的相对位姿,都是为了后续的后端优化做准备。

6.后端优化

loam和lego-loam都没后端优化
lio-sam有,使用了图优化,用的gtsam库。

后端优化这部分较之于前面很不好理解。
我们直接讲一下图优化。

图优化本质上还是最小二乘优化,只是构建优化函数和优化问题的时候用到了图的思想。
图就分为节点和边,都是抽象的概念。

反正记住,节点就是某一帧的【全局坐标信息】,边就是某一帧和另外一帧的【相对位置关系】。

图优化也是一帧一帧优化的,所以下面我们讲的是某一帧的图优化。

我们还是从输入输出开始讲吧。

输入

1.节点:特定时间的里程计位姿,回环检测得到的位姿,gps的全局数据。
再解释一下,节点就是每一帧的全局信息。
2.边:两个节点之间的约束:两个节点的相对位姿(点云配准得来的),imu得到的两个节点的相对位姿关系。

输出

图优化的输出主要是每一帧的优化后全局位姿,包括位置和方向。

优化函数

怎么根据输入的这些数据得到输出呢?
就需要建立一个优化函数。
在这里插入图片描述
优化目标的核心是让估计值尽可能接近测量值。

测量值就是之前点云配准得到的两帧之间的相对位姿,和imu得到的相对位姿(也就是边)。
估计值就是由两帧的全局坐标(也就是节点)相减,得到的两帧之间的相对位姿。

然后还是一个最小二乘优化问题,进行求解。

这个时候又有个问题了,全局坐标里面,有里程计的数据,还有gps的数据,怎么选呢。
不用选,我全都要。
那就做两个优化目标函数,然后加起来,根据权重区分其中的重要性,最后依然是得到了一个组合的最小二乘优化函数。
在这里插入图片描述


总结

不用后端优化也能直接通过里程计建图,但是无法消除累计误差。
这次是一锅大杂烩,之后再拆开细讲。

激光SLAM(Simultaneous Localization and Mapping)是指通过利用激光扫描仪的数据同时实现机器人的自我定位和环境建图的过程。这项技术已经成为机器人领域中重要的研究内容之。 在激光SLAM理论方面,主要有几个关键的概念。首先是地图构建,机器人通过扫描周围环境,将获取到的激光点云数据转化为幅地图。同时,激光SLAM也需要实现机器人的同时自我定位,也就是在未知环境中,机器人通过分析激光数据推算出其自身的位置。 实践方面,激光SLAM需要激光传感器进行环境测量。激光传感器会在扫描过程中发射激光束,然后通过接收反射回来的激光束,来计算击中目标物体的位置。机器人通过不断地旋转或移动激光传感器,以此来获取周围环境的激光点云数据。 激光SLAM的实施过程主要包括建图、定位和配准等步骤。建图过程中,机器人通过收集周围环境的激光数据,将其转化为幅地图。定位过程中,机器人通过对比当前获得的激光数据和已有的地图数据,从而推算出自身的位置。配准是指将不同位置、角度下获取的激光数据进行融合,从而得到整体致性的地图。 总的来说,激光SLAM理论与实践是通过利用激光扫描仪的数据实现机器人定位以及地图构建的过程。通过激光传感器扫描环境,将激光数据转化为地图,并实现机器人的同时自我定位。激光SLAM技术在无人驾驶、工业自动化等领域有重要的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不断学习加努力

俺会努力的,一直免费的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值