ROS学习笔记(18):建图与定位(2)

0.前言

上文提到现在的我们已经进入到了SLAM领域的学习,会涉及到大量专业知识,作为一个自学的大三(好吧也快大四了)萌新并不能保证每次文章的专业性和准确性,所以,本人推荐大家能自己去查阅一些相关书籍和论文,并不关乎你一定要在多短的时间内学会这门课程,更希望大家能更热爱学习的感觉而不是只关注如何短期获取得成绩快感。

1.扫描匹配

在谷歌的SLAM算法Cartographe当中扫描匹配相当重要的一个模块。

1.扫描匹配的作用

1.参看上图可知雷达的扫描是以一个固定的弧度增量来进行扫描的,这种扫描方式是由一个个不连续的点构成的,即使我们看着很像是连续的(因为他足够密集),但slam地图的构建必须保证地图的连续性(地图不能在某个地方断开,这样就是一堵墙出现了一个小洞一样),扫描匹配就需要将雷达获取到的一个个不连续的点进行连接是生成一条条连续的线,并且尽可能的与现实贴合,这就是ros的点云。

2.移动机器人是会移动的,当移动机器人位姿变化时,雷达扫描到的环境就出现了变化(如下图1),还是一样的,我们希望地图是连续的,匹配扫描就需要将位姿变化前的地图和位姿变化后的地图进行匹配,使他们连续起来,这里就是使用最大特征提取的办法了。

图1

注释:实际的实现方式请自行翻看相关书籍或论文。

2.扫描匹配一些轶事

轶事1:高速位姿改变

激光雷达和摄像头是按照一定时间进行一次数据采集的,当移送机器人的位姿改变过快时,就会产生上一次的采集数据和下一次采集的数据完全没有相同特征点 ,这时就完全无法进行特征匹配了。(当然随着雷达和摄像头的不断迭代,这种情况越来越少了。)因此想要提高扫描的匹配度,要么提高设备的性能,要么降低速度。

轶事2:场景高度重复

当移动机器人出现在一个高度重复的场景里时,机器人是很难判断自己是否进行了位姿改变的(有点像鬼打墙),高度相似的特征是的地图拼接十分困难。(当然这种情况极少出现。)

以下就是因移动机器人位姿改变导致扫描匹配效果差的图片:

2.使用ICP的扫描匹配

ICP(Iterative Closest Point),中文称为迭代最近点,主要使用在点云配准,目标是计算两个点云间的变换。

网上有大佬对ICP的解读:

【PCL】—— 点云配准ICP(Iterative Closest Point)算法_icp点云配准-CSDN博客

这让我想起了数字化中国一些古老建筑和文物。

1.ICP的原理

使用蓝色和红色的点进行连线排列,这些线段就是点云(point cloud)。

拥有了点云后,蓝色线点云上的每个点都开始寻找红色线点云上与他最近的点,这一步通常称为数据关联。找到了这些点之后进行变换,使这些点云尽可能的重叠到一起。在不断的迭代过后使得点云间的距离不再变换或达到某个可接受的阈值。

注释:最小距离计算和变换是分开进行的,第一步是计算点云的质心,这可以方便后一步的点云的相互变换,第二步就是用奇异值分解(SDV)来计算出本次变换的最佳变换。当匹配效果最佳时,点云的协方差将是最小。(当然通常不使用spd而是使用最小二乘法来进行不断的迭代,直到结果达到阈值。)

ICP迭代的目标就是找到M_{opt}:

M_{opt}=argmin_{M} \sum_{i}((M\cdot s_i-d_i)\cdot n_i)^2

注释:有空我来手算一遍这个公式。

2.扫描重叠机制 

机器人处在一个环境当中时,会有两种确立扫描标记点的位姿的坐标,一种是以环境中某个固定点为基准坐标建立的全局坐标系;另一种是以机器人为基准坐标建立的本地坐标系。

下图2为机器人在某位姿情况下对A、B、C三点进行扫描后映射在两种不同坐标系下的状态:

图2

下图3为机器人进行位姿调整后,重新获取到同样的点在两种坐标系下的状态:

图3

通过观察机器人位姿变换前后两种坐标系中三点的的状态,可以快速发现使用全局坐标系时同样的点在坐标系下的状态是一致的;使用局部坐标系时同样的点在坐标系下的状态发生了改变,下图为使用局部坐标系下的机器人获取到的点状态情况。

  图3

既然使用局部坐标系发生位姿变换时,同样的点在坐标系的状态不一样,那就需要进行扫描匹配将同样的点的状态进行统一重叠,这一步也就是将局部坐标系构建成全局坐标系(可理解为以第一个局部坐标系为全局坐标系,后续的局部坐标系都进行里程计等传感器进行数据采集后计算出相对变换),如下图是未将同样的点进行扫描匹配时产生的情况:

3.扫描匹配的难点

1.第一个难点:经过前文的对扫描匹配的学习,我们已经有了部分认识,但实际扫描匹配过程会出现一个难点:旧的一些点会随着机器人的位姿改变而消失,新的点随着机器人的位姿改变而显现,因为这种情况的发生,对扫描匹配的算法就提出一定的要求。

2.第二个难点:前面是知道了A、B、C三点,这会使计算和变换都简单很多,但现实是根本不知道变换前后的点那些是同一个点。扫描匹配就需要去处理这些问题。

4.简单的解决思路

1.对点间的距离做出简单的评估,这就是现在的评估。

2.对下一时间(t=t+1)扫描得到的每一个点都寻找前一个时间(t=t)距离最近的点进行匹配。

3.使用更好的距离评估方式(类似于icp之类的方式)。

4.不断反复前面的步骤,直到到达了一个可接受的阈值。

注释:当然这并不是最好的方式,但他足够简单。

去了解icp吧,我讲得可能会有点乱:但在b站上能看到大佬对icp的演示视频:

Point Clouds Registration for 3D Reconstruction with Iterative Closest Points_哔哩哔哩_bilibili

在维基百科上也有对icp的介绍:迭代最近点 - 维基百科,自由的百科全书 --- Iterative closest point - Wikipedia

3.结尾

ok,本次内容到此为止,下一篇文章我们来对icp进行演算一遍,加深认识。让我想想暑假的我要备考考研,找个时间也更新一下isaac sim或ros2?我看看能不能拿宇树的go2进行一下演示和学习?不确定,最近想着稍微摆烂一点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/769189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TOB传输、承载网拓扑图

1、用户面:GNODEB>UPE>SPE>NPE>UPF>CMNET网 2、控制面:GNODEB>UPE>SPE>NPE>IP承载网>核心网

充分利用智慧校园人事系统,提升党政职务管理

智慧校园人事系统中的党政职务管理功能,是专为高校及教育机构设计的,旨在高效、精确地处理与党政职务相关的各类事务,包括职务任命、任期管理、职责分配、考核评估等,以信息化手段促进党务及行政工作的透明化、规范化。 该模块首先…

redis主从复制哨兵模式集群管理

主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡&…

像学Excel 一样学 Pandas系列-创建数据分析维度

嗨,小伙伴们。又到喜闻乐见的Python 数据分析王牌库 Pandas 的学习时间。按照数据分析处理过程,这次轮到了新增维度的部分了。 老样子,我们先来回忆一下,一个完整数据分析的过程,包含哪些部分内容。 其中&#xff0c…

好久不见!写了一个自动截图神器~【附源码】

文章目录 前言新增功能介绍截图功能快捷键设置 程序设计和使用介绍操作菜单栏选择点击坐标点选择图片选择截图区域快捷键设置 表格循环次数状态栏 使用案例源代码 前言 好久没更新文章了。上一次更新是在4月16日差不多,也只是写了一个错误集,没什么太多…

【Python机器学习】模型评估与改进——在模型选择中使用评估指标

我们通常希望,在使用GridSearchCV或cross_val_score进行模型选择时能够使用AUC等指标。scikit-learn提供了一种非常简单的实现方法,那就是scoring参数,它可以同时用于GridSearchCV和cross_val_score。你只需要提供一个字符串,用于…

基于Vue的MOBA类游戏攻略分享平台

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术、SpringBoot框架、B/S模式、Vue.js 工具:MyEclipse、MySQL 系统展示 首页 用…

大模型技术在辅助学习中的应用

大模型技术在辅助学习中的应用场景非常广泛,以下是一些典型示例。大模型技术在辅助学习中具有广阔的应用前景,可以为学生提供更加个性化、智能化和高效的学习体验。随着大模型技术的不断发展,我们可以期待在未来看到更多创新应用。北京木奇移…

免费最好用的证件照制作软件,一键换底+老照片修复+图片动漫化,吊打付费!

这款软件真的是阿星用过的,最好用的证件照制作软件,没有之一! 我是阿星,今天要给大家安利一款超实用的证件照工具,一键换底,自动排版,免费无广告,让你在家就能轻松搞定证件照&#…

强化学习的数学原理:最优贝尔曼公式

大纲 贝尔曼最优公式是贝尔曼公式的一个特殊情况,但其也非常重要。 本节课很重要的两个概念和一个工具: 工具不用多说,就是贝尔曼最优公式,概念则是 optimal state value(最优状态价值) 和 optimal polic…

Django开发实战(1)- 认识django

1.django 使用MTV模式,其实与MVC本质一样: model:业务对象和关系映射(ORM) template:客户端页面展示 view:业务逻辑,根据需求调用 2.开发相关 √ python √ html&…

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit开发指导】

Data Loss Prevention Kit开发指导 DLP是系统提供的系统级的数据防泄漏解决方案,提供一种称为DLP的文件格式。后缀格式为“原始文件名(包含原始文件后缀).dlp”,例如: “test.docx.dlp”,文件由授权凭证和原始文件密文…

8款你不一定知道的良心软件!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/我们使用一些流行的软件的时候,往往会忽略一些功能非常强大的软件,因为这些软件的众 多,都因为看不见而丢失&a…

【ACM出版-EI稳检索】第三届金融创新、金融科技与信息技术国际学术会议(FFIT 2024,7月26-28)

第三届金融创新、科技与信息技术国际学术会议(FFIT 2024)将于2024年07月26-28日于重庆举行。 FFIT2024 将围绕“金融创新”、"金融科技”与“信息技术”等相关最新研究领域,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、…

Vue3Echarts写关于温湿度统计的好看折线图

在项目统计界面,我们离不开对Echarts的使用,接下来是我在做项目过程中做的一个关于温湿度统计的好看折线图,统计的是温度蓝色和湿度绿色,它们还会有告警和断电,分别用橘黄色和红色区分,以下是示例&#xff…

CesiumJS【Basic】- #056 绘制纹理填充多边形(Entity方式)-使用shader

文章目录 绘制纹理填充多边形(Entity方式)-使用shader1 目标2 代码2.1 main.ts绘制纹理填充多边形(Entity方式)-使用shader 1 目标 使用Entity方式绘制绘制纹理填充多边形 - 使用shader 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium…

Linux系统中交叉编译opencv库

目标:将opencv进行交叉编译,使其能在rk3326板子上运行使用。 环境: ubuntu:18.04 opencv:4.5.4 opencv源码从挂网下载:opencv源码下载地址 交叉编译链:gcc-arm-10.3-linux-gun 一.环境准备 1.交叉编译链我…

【RT摩拳擦掌】如何构建RT AVB switchendpoint平台

【RT摩拳擦掌】如何构建RT AVB switch&endpoint平台 一,文档简介二,平台构建2.1 软硬件情况2.2 配置RT1170 AVB端点2.2.1 1块MIMXRT1170开发板做talker配置2.2.2 2块MIMXRT1170开发板做listener配置 2.3 AVB Switch 配置2.3.1 MOTU AVB Switch2.3.2 …

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向(弧矢和子午方向)的傍轴光线追踪确定近轴图像平面的Z坐标,并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向(YZ)平面测量的距离…

【LeetCode刷题】3099.哈沙德数

题目链接 3099. 哈沙德数 - 力扣(LeetCode) 实现代码 int sumOfTheDigitsOfHarshadNumber(int x) {int sum 0;for(int temp x; temp; temp / 10)sum temp % 10;return x%sum ? -1 : sum; }