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

news2024/12/28 4:44:17

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进行一下演示和学习?不确定,最近想着稍微摆烂一点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024护网整体工作预案示例

目录 第1章 HW整体工作工作部署 1.1 工作组织架构 1.2 各部门工作职责 1.3 演练期间工作机制 1.3.1 工作汇报机制 1.3.2 应急响应机制 第2章 系统资产梳理整改 2.1 敏感信息梳理整改 2.2 互联网资产发现 2.3 第三方供应商梳理 2.4 业务连接单位梳理 第3…

医疗器械FDA | 医疗器械软件如何做源代码审计?

医疗器械网络安全测试https://link.zhihu.com/?targethttps%3A//www.wanyun.cn/Support%3Fshare%3D24315_ea8a0e47-b38d-4cd6-8ed1-9e7711a8ad5e 医疗器械源代码审计是一个确保医疗器械软件安全性和可靠性的重要过程。以下是医疗器械源代码审计的主要步骤和要点,以…

keil5 Cannot reset target Shutting down debug session 报错解决办法

1.现象 使用GD32下载代码时,突然出现Cannot reset target Shutting down debug session的提示。如下图: 以及: 以前使用GD32都没遇到过这种问题,看了很多其他人的解决办法也不好使,换了stm32的板子去下载又没有这种问…

jdk17卸载后换jdk1.8遇到的问题

过程: 1、找到jdk17所在文件夹,将文件夹进行删除。(问题就源于此,因为没删干净) 2、正常下载jdk1.8,按照网上步骤配置环境变量,这里我参考的文章是: http://t.csdnimg.cn/Svblk …

揭秘:学校教室采用数码管同步时钟的原因-讯鹏电子钟

在学校的教室里,我们常常会看到数码管同步时钟的身影。究竟是什么原因让它成为学校教室的宠儿呢?让我们一同来探究其中的奥秘。 数码管同步时钟具有极高的准确性。对于学校这样一个对时间管理要求严格的场所,准确的时间是保障教学秩序的基石。…

英国皇家物理学会(IOP)数据库简介及个人获取IOP文献的方法

一、英国皇家物理学会(IOP)简介 英国皇家物理学会(IOP)成立于1873年,IOP现有科技期刊75种,具有较高的科研水平,还与多个世界知名的学协会合作出版,包括:中国物理学会、欧洲物理学会、德国物理学会、日本应用物理学会、欧洲光学学会、国际计量…

[数据结构] --- 树

1 树的基本概念 1.1 树的定义 树是n(n>0)个结点的有限集。当 n 0 时,称为空树。在任意一棵树非空树中应满足: (1) 有且仅有一个特定的称为根 (root) 的结点; (2) 当 n > 1 时,其余结点可分为m(m>0)个互不相交的有限集…

未来已来:揭秘20篇自动驾驶顶会顶刊,开启智能交通新纪元!

【自动驾驶】是近年来在深度学习领域中备受关注的一项技术,它通过整合传感器数据、计算机视觉和机器学习算法,实现车辆的自主导航和决策。自动驾驶技术已经在路径规划、环境感知和车辆控制等多个领域取得了显著成果,其独特的方法和有效的表现…

笛卡尔乘积算法js实现

全因子实验设计( DOE) :指所有因子的所有水平的所有组合都至少进行一次实验,可以估计所有的主效应和所有的各阶交互效应。 笛卡尔乘积:指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),…

如何在TechNow招聘顶尖AI工程师

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

好看的风景视频素材在哪下载啊?下载风景视频素材网站分享

随着短视频和自媒体的兴起,美丽的风景视频不仅能让人眼前一亮,更能吸引大量观众。无论是旅游博主分享那些令人心旷神怡的旅行片段,还是视频编辑师寻找背景素材来增强作品的视觉效果,高质量的风景视频素材需求量巨大。以下是几个下…

深度学习与飞桨 PaddlePaddle Fluid

编辑推荐 飞桨PaddlePaddle是百度推出的深度学习框架,不仅支撑了百度公司的很多业务和应用,而且随着其开源过程的推进,在其他行业得到普及和应用。 本书基于2019年7月4日发布的飞桨PaddlePaddle Fluid 1.5版本(后续版本会兼容旧版…

LeetCode 60.排序排列(dfs暴力)

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: "123""132""213""231""312""321" 给定…

独享代理VS共享代理,新手选择攻略

随着互联网的广泛普及和应用,涉及网络隐私、数据安全和网络访问控制的问题变得越来越重要。代理服务器作为一种常见的网络工具,可以在跨境电商、海外社媒、SEO投放、网页抓取等领域发挥作用,实现匿名访问并加强网络安全。在代理服务器类别中&…

每日两题 / 20. 有效的括号 155. 最小栈(LeetCode热题100)

20. 有效的括号 - 力扣(LeetCode) 遇到左括号入栈 遇到右括号判断栈顶是否为匹配的左括号 最后判断栈是否为空 func isValid(s string) bool {var stk []runefor _, value : range s {if value ( || value { || value [ {stk append(stk, value)}…

项目实战--MySQL实现分词模糊匹配

一、需求描述 推广人员添加公司到系统时,直接填写公司简称,而公司全称可能之前已经被添加过,为防止添加重复的公司,所以管理员在针对公司信息审批之前,需要查看以往添加的公司信息里是否有相同公司。 二、方案 技术…

盒子模型(笔记)

盒子模型 盒子模型的属性 padding属性 内边距:盒子的边框到内容的距离 /*每个方向内边距*/padding-top: 20px;padding-left:20px;padding-bottom:20px;padding-right: 20px; /*每个方向内边距的第二种方法*/ /* 顺序依次是上左右下*/padding: 10px 20px 30px 4…

WIN32核心编程 - 数据类型 错误处理 字符处理

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 数据类型 基本数据类型 Win32基本数据类型 错误处理 C语言中的错误处理 C中的错误处理 Win32中的错误处理 字符处理 C/C WIN32 字符处理 数据类型 基本数据类型 C/C语言定义了一系列…

Linux的Socket开发概述

套接字(socket)是 Linux 下的一种进程间通信机制(socket IPC),在前面的内容中已经给大家提到过,使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信)&#xff0c…

cv2.cvtColor的示例用法

-------------OpenCV教程集合------------- Python教程99:一起来初识OpenCV(一个跨平台的计算机视觉库) OpenCV教程01:图像的操作(读取显示保存属性获取和修改像素值) OpenCV教程02:图像处理…