ROS学习笔记(17):建图与定位(1)

目录

0.前言

1.定位和建图

1.里程计(Odometry)

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的领域,对于是自学的我来说也需要一点时间来思考如何才能将这些内容整理好、讲述出来。

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

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

相关文章

计算机毕业设计Python+Spark股票基金推荐与预测系统 股票基金可视化 股票基金推荐系统 股票基金可视化系统 股票基金数据分析 股票基金爬虫大数据

目 录 摘 要 Abstract 第1章 前 言 1.1 项目的背景和意义 1.2 研究现状 1.3 项目的目标和范围 1.4 论文结构简介 第2章 技术与原理 2.1 开发原理 2.2 开发工具 2.3 关键技术 第3章 需求建模 3.1 系统可行性分析 3.2 功能需求分析 3.3 非功能性…

高职人工智能专业实训课之“生成对抗网络(GAN)”

一、前言 生成对抗网络(GAN)作为人工智能领域的一项重要技术,已经在图像生成、风格迁移、数据增强等多个领域展现出巨大的潜力和应用价值。为了满足高职院校对GAN专业实训课程的需求,唯众人工智能教学实训凭借其前沿的教育技术平…

mst[讲课留档]

最小生成树(Minimum Spanning Tree) (1)概念 我们知道,树是有 n n n个结点, n − 1 n-1 n−1条边的无向无环的连通图。 一个连通图的生成树是一个极小的连通子图,它包含图中全部的 n n n个顶点,但只有构成一棵树的 n − 1 n-1 …

内容营销专家刘鑫炜:越是赚不到钱,越要加大推广力度

这两天,一位跟我们有长期合作关系的小微企业主老苏问我。 “现在钱这么不好赚,品牌推广应该怎么做?” 我说:“这是好机会,加大投放力度!” 老苏很是不解,这时候不开源节流,还要加…

使用Git从Github上克隆仓库,修改并提交修改

前言 本次任务主要是进行github提交修改的操作练习实践,本文章是对实践过程以及遇到的问题进行的一个记录。 在此之前,我已经简单使用过github,Git之前已经下好了,所以就省略一些步骤。 步骤记录 注册github账号,gi…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

易校网校园综合跑腿小程序源码修复运营版

简介: 易校网校园综合跑腿小程序源码修复运营版,带服务端客户端前端文档说明。 源码安装方法: 需要准备小程序服务号 服务器 备案域名 校园网跑腿小程序源码需要准备 1.小程序 2.服务器(推荐配置2h4g3m) 3.域名…

使用JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

【背景说明】 使用jmeter进行性能测试时,工具自带的查看结果方式往往不够直观和明了,所以我们需要搭建一个可视化监控平台来完成结果监控,这里我们采用三种JMeterGrafanaInfluxdb的方法来完成平台搭建 【实现原理】 通过influxdb数据库存储…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

SpringBoot中整合ONLYOFFICE在线编辑

SpringBoot整合OnlyOffice SpringBoot整合OnlyOffice实现在线编辑1. 搭建私有的OnlyOffice的服务2. SpringBoot进行交互2.1 环境2.2 我们的流程2.3 接口规划2.3.1 获取编辑器配置的接口2.3.2 文件下载地址2.3.3 文件下载地址 3. 总结4. 注意4.1 你的项目的地址一定一定要和only…

三层交换基础

一、什么是三层交换 三层交换是一种在OSI模型第三层,即网络层上工作的网络设备技术,它整合了二层交换机的功能和路由器的部分功能,以实现更高效的网络数据转发和路由选择。三层交换技术的核心在于结合了二层交换技术和三层转发技术&#xff…

【RabbitMQ实战】Springboot 整合RabbitMQ组件,多种编码示例,带你实践 看完这一篇就够了

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、对RabbitMQ管理界面深入了解1、在这个界面里面我们可以做些什么? 二、编码练习(1)使用direct exchange(直连型交换机)&a…

2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

【Lua小知识】Vscode中Emmylua插件大量报错的解决方法

起因 Vscode写Lua用的好好的,最近突然出现了大量报错。 看报错是有未定义的全局变量,这里查日志才发现是由于0.7.5版本新增诊断启用配置,所以导致了原先好的代码,现在出现了大量的报错。 解决方案一 最直接的方法当然是在配置中直…

用摄像头实现识别道路中的车道线、行人与车辆检测(级联分类器、HOG+SVM、行人检测)

基于树莓派的智能小车,用摄像头实现识别道路中的车道线识别、行人检测与车辆检测。 本项目旨在开发一套基于摄像头的智能道路环境感知系统,该系统能够实时识别道路中的车道线、行人与车辆,为自动驾驶汽车、智能交通管理以及辅助驾驶系统提供关…

LeetCode热题100刷题3:3. 无重复字符的最长子串、438. 找到字符串中所有字母异位词、560. 和为 K 的子数组

3. 无重复字符的最长子串 滑动窗口、双指针 class Solution { public:int lengthOfLongestSubstring(string s) {//滑动窗口试一下//英文字母、数字、符号、空格,ascii 一共包含128个字符vector<int> pos(128,-1);int ans 0;for(int i0,j0 ; i<s.size();i) {//s[i]…

python 中的生成器

目录 生成器示例基本生成器示例无限序列生成器使用生成器表达式实用示例&#xff1a;按行读取大文件生成器的 send、throw 和 close 方法 生成器和迭代器迭代器&#xff08;Iterator&#xff09;定义创建使用示例 生成器&#xff08;Generator&#xff09;定义创建使用示例 主要…

隐私计算实训营第二期第十课:基于SPU机器学习建模实践

隐私计算实训营第二期-第十课 第十课&#xff1a;基于SPU机器学习建模实践1 隐私保护机器学习背景1.1 机器学习中隐私保护的需求1.2 PPML提供的技术解决方案 2 SPU架构2.1 SPU前端2.2 SPU编译器2.3 SPU运行时2.4 SPU目标 3 密态训练与推理3.1 四个基本问题3.2 解决数据来源问题…

全新升级!中央集中式架构功能测试为新车型保驾护航

“软件定义汽车”新时代下&#xff0c;整车电气电气架构向中央-区域集中式发展已成为行业共识&#xff0c;车型架构的变革带来更复杂的整车功能定义、更多的新技术的应用&#xff08;如SOA服务化、智能配电等&#xff09;和更短的车型研发周期&#xff0c;对整车和新产品研发的…

OkHttp的源码解读1

介绍 OkHttp 是 Square 公司开源的一款高效的 HTTP 客户端&#xff0c;用于与服务器进行 HTTP 请求和响应。它具有高效的连接池、透明的 GZIP 压缩和响应缓存等功能&#xff0c;是 Android 开发中广泛使用的网络库。 本文将详细解读 OkHttp 的源码&#xff0c;包括其主要组件…