ROS学习(17):定位和地图绘制(1)

目录

0.前言

1.定位和建图

1.里程计(Odometry)

[2.扫描匹配(Scan Matching)](#2.扫描匹配(Scan Matching))

3.结尾


0.前言

好久不见各位,前段时间忙着考试(6级和一些专业课)和摆烂断更了近30天,现在哥们回来更新了。前面讲了一大堆ROS和一些机器人理论知识,而这次我们将进入到SLAM(前面在小大小闹,现在正题开始)。

1.定位和建图

**·**确认机器人相对环境的状态(位姿------位置和姿态)。

**·**定位可以以全局框架来进行,也可以以相对一个任意起点来进行。

·定位是Slam的关键组成。

简单介绍一下经典Slam架构的主要5个部分:

1)传感器数据:指机器人中里程计、激光雷达、双目相机等传感器信息的读取。(下文的里程计里也有提及)

2)前端匹配:主要任务为对特征进行处理,估计相邻地图间的相对位姿,得到局部地图。

3)后端优化(Optimization):后端接收不同时刻前端测量的相对位姿,和回环检测的信息,对其进行优化,得到全局一致的轨迹和地图。

4)回环检测(Loop Closing):回环检测判断机器人是否曾经到达过该位姿,检测到回环则将信息传递给后端进行处理。

5)建图(Mapping):根据估计的轨迹来建立对应的地图。

同样也可以参看谷歌的SLAM算法Cartographer的结构:

1.里程计(Odometry)

**里程计:**从一个姿态开始,结合运动控制和测量来估计当前姿态。(传感器数据中的一种)

通常我们会使用一个速度控制器、轮式编码器、IMU等设备来动态集成可用的信息。

速度控制器理解成为加速度配比器被我认为是更优的理解方式,因为现实中速度并不可能瞬间获取到,而是经由加速度和时间的累积等来,同理的位移也是是由速度和时间的累积得来:

我们都希望一切的数据精准无误,但受限于上图的开环结构和现实中器件始终无法100%精准运行的限制导致上面的每一个环节都有可能被加入噪声(noise)干扰:

实际表现便是我们希望机器人位移3m但实际上却位移了3.1m。受限于开环控制没有反馈机制来对误差进行矫正,所以一旦噪声出现将会随着时间不断累积------表现为第二次位移位移了3.2m误差就来到了0.3m。

依旧是这张图,当噪声在加速度环节就产生了,那随着加速度和时间的不断积分变换下去,在子环节都将产生噪声累积,且噪声累积是几何关系的:

一旦噪声产生且不断累积,机器人的位置的不确定性就会不断增加,当时间无穷时,机器人就完全无法确认位置了。回归到本章的重点定位和建图,当机器人本体无法精准定位时,机器人的建图也就失去了精确性,设想实际地图的长度为6m但因为定位的噪声就导致了计算得到了5.7m或者6.3m。为了解决这种情况就出现了以后我们会讲到的回环检测。

2.扫描匹配(Scan Matching)

OK,获取到了传感器的可用数据后需要需要进行前端匹配,而扫描匹配自然就是其中一种方式。(其实扫描匹配和视觉上经常拼接是一样的,只是使用了专业名词。)

这里推荐查看:An ICP variant using a point-to-line metric这篇论文,是有关迭代最近点算法的。在ROS里面就是点云了。

**·扫描匹配:**跨时间收集的范围测量定位方式,扫描匹配。

在定位当中,我们需要参考世界框架来确定自己的位置,而扫描匹配大多就是使用激光雷达SLAM算法的关键模块。而在使用rgb和depth camera(rgb相机和深度相机)时又将会深度探讨最近点算法迭代的概念和一些实现机理。

扩展: 刚巧的是,最近我在游玩鸣潮是经常受困于其索敌系统,于是打算在B站上看一下大佬们对这方面的解释,当我渐渐观看后巧妙的发现原来游戏的索敌系统竟和扫描匹配的思想极为类似。附上视频链接:我决定自己做一套索敌系统_单机游戏热门视频 (bilibili.com)

谷歌的slam算法Cartographer当中扫描匹配是一个相当重要的模块,扫描匹配在本地进行运作使地图本地的一致性。

3.结尾

OK,因为知识量确实很大就先到这里了,下一篇文章我们来重点扩展讲解扫描匹配,现在已经正式步入到了SLAM的领域,对于是自学的我来说也需要一点时间来思考如何才能将这些内容整理好、讲述出来。

相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao4 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT4 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa4 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落5 小时前
Python学习之装饰器
开发语言·python·学习
speop7 小时前
llm的一点学习笔记
笔记·学习
非凡ghost7 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空7 小时前
月2期学习笔记
学习·游戏·ue5
萧邀人7 小时前
第二课、熟悉Cocos Creator 编辑器界面
学习