SLAM从入门到精通(从amcl到navigation软件栈)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了amcl,但它只是navigation里面的一个package而已。真正的导航还包含很多的内容。举个例子来讨论下,我们假设需要一个机器人从a点走到b点,应该分成哪几个步骤来完成呢。首先,机器人需要确认下自己的位置吧,是在其他地方,还是已经在a点了?接着,机器人需要规划一条a点到b点的路径吧?规划的路径只是保证了这条道路的可行性,但小车本身的机械属性是不是可以走完这条路、每段路上的速度该如何规划,这是需要进一步细化的内容。所有这些都准备好了,下面就是机器人不停和底盘交互的过程了。

1、ros navigation的github地址

        本身navigation是一个软件栈,里面有很多的内容,地址在这,https://github.com/ros-planning/navigation。

2、软件栈的结构图

        这幅图的信息非常多,也非常重要,建议反复观看。它包含了用户层的输入、tf的输入、odom的输入、传感器的输入、map的输入,以及对外底盘的输出cmd_vel。在整个navigation最核心的部分,还包含了global_planner、global_costmap、local_planner、local_costmap,这些也是非常重要的。整个框架由move_base实现,每个细节又由具体的模块来实现。

3、全局搜路

        所谓的全局搜路,就是global_planner。这方面有很多的算法,比如迪杰斯特拉算法、a*算法等等。这种算法主要是找出一条从出发地到目的地的拓扑路。本身搜路的过程就是一个拓扑搜索的过程,并不考虑robot自身的机械性能。

4、局部搜路

        全局搜路本身只是一个简单分析一下路径实施的可行性。至于机器人究竟应该在节点之间怎么走比较好,这就是局部搜路的范畴。目前ros上面也提供了相关的局部搜路算法,比如dwa算法。和全局搜路算法相比较,局部搜路需要考虑到robot自身的一些机械素质,即规划的速度是否可以、规划的角速度是否可以、转弯半径是否可以。对于效率优先的场景而言,肯定是希望越快越好。但是对于robot来说,它本身又有自己的安全要求和设备性能瓶颈,所以这中间就有一个权衡和取舍的问题。

5、amcl定位

        这里我们看到了amcl,也就是robot定位。实际生产中,amcl定位是非常重要的。但是实际场景中,稳定输出的环境特征是非常困难的,很多时候都需要我们人为去创造、或者设计出合理的环境特征。这样才能在实际场景中稳定地运行。所以hector slam也好,gammping slam也好,他们只是基础,但是仅仅依靠这些基础构建出来的栅格地图来定位,还是远远不够的。

6、控制目标输出

        控制目标的输出,是我们所有操作的真正目的。前面我们已经知道,所有的控制目标都可以分成线速度控制和角速度控制,所以底盘的最终目标就是实现ros系统提出的线速度、角速度目标即可。

附录

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

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

相关文章

windows C 开发

在win下用C/C开发 非图形界面 应用程序 基础环境包括3个内容1. API : 一般是系统(包括c标准库和其他dll)提供的2. 编译器 : 可以是gnu的,可以是微软提供的3. 编辑器 : 随意都可以 // 不再考虑范围开发方式(API编译器) 原生windows API 使用 Windows API 来编写非视窗代码。…

基于 QT 实现 Task Timer,高效利用时间

一、开发环境 Ubuntu 20.04 QT6.0 二、新建 Qt Wigets Application 这里的基类选择 Wigets, pro 配置文件添加 sql 模块,需要用到 sqlite, QT sql 三、添加数据库连接头文件 // connection.h #ifndef CONNECTION_H #define CONNECTION_…

Acwing 840. 模拟散列表

Acwing 840. 模拟散列表 题目描述思路讲解代码展示 题目描述 思路讲解 代码展示 拉链法&#xff1a; #include <cstring> #include <iostream>using namespace std;const int N 100003;int h[N], e[N], ne[N], idx;void insert(int x) {int k (x % N N) % N;e…

数据分析技能点-机器学习优化思想

优化思想,这个听起来极其专业和高端的词汇,其实它无处不在,悄无声息地影响着我们的生活和决策。从寻找最快的上班路线,到决定如何配置投资组合,优化思想都是一个不可或缺的元素。而在机器学习领域,优化思想更是扮演着至关重要的角色。 文章目录 优化的基础优化问题与实际…

历史服务器

二、配置历史服务器 在spark-3.1.1-bin-hadoop2.7/conf/spark-defaults.conf添加以下配置&#xff0c;其中d:/log/spark为日志保存位置 spark.eventLog.enabled true spark.eventLog.dir file:///d:/log/spark spark.eventLog.compress true spark.history.fs.logDirectory fil…

图神经网络GNN(一)GraphEmbedding

DeepWalk 使用随机游走采样得到每个结点x的上下文信息&#xff0c;记作Context(x)。 SkipGram优化的目标函数&#xff1a;P(Context(x)|x;θ) θ argmax P(Context(x)|x;θ) DeepWalk这种GraphEmbedding方法是一种无监督方法&#xff0c;个人理解有点类似生成模型的Encoder过程…

8.3Jmeter使用json提取器提取数组值并循环(循环控制器)遍历使用

Jmeter使用json提取器提取数组值并循环遍历使用 响应返回值例如&#xff1a; {"code":0,"data":{"totalCount":11,"pageSize":100,"totalPage":1,"currPage":1,"list":[{"structuredId":&q…

字符串,字符数组,类型转换,整数越界,浮点数,枚举

目录 自动类型转换 强制类型转换 数据类型 sizeof 数据类型所占字节数 整数越界 浮点数 字符型 字符串变量 ​编辑字符串的输入输出 main函数的参数 &#xff0c;argc,argv 单个字符输入输出 putchar getchar strlen,strcmp,strcat,strchr,strstr strlen 求字…

云安全之HTTP协议介绍补充

HTTP是一个基于TCP/IP通信协议来传递数据的协议&#xff0c;传输的数据类型为HTML文件、图片文件、查询结果等。HTTP协议一般用于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 URI、URL、URN HTTP使用统一资源标识符(Uniform Resource ldentif…

【Rust日报】2023-09-30 使用Rust做web抓取

CockroachDB 用rust重新实现 嘿&#xff0c;伙计们&#xff0c;我在 Rust 中实现了一个分布式 SQL 数据库。它就像 CockroachDB 和谷歌Google Spanner。告诉我你的想法。 注意: 这不是生产级别的数据库&#xff0c;这是一个以学习为目的的项目。有许多特性&#xff0c;但是缺少…

【软件工程_UML—StartUML作图工具】startUML怎么画interface接口

StartUML作图工具怎么画interface接口 初试为圆形 &#xff0c;点击该接口在右下角的设置中->Format->Stereotype Display->Label&#xff0c;即可切换到想要的样式 其他方式 在class diagram下&#xff0c;左侧有interface图标&#xff0c;先鼠标左键选择&#xff0…

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好&#xff1f; 对目前市场上前三个数据分析师证书进行审查和比较|Madison Hunter 似乎每个重要的公司都推出了自己版本的同一事物&#xff1a;专业数据分析师认证&#xff0c;旨在使您成为雇主的下一个热门商品。 随着…

警告-Ubuntu提示W: Possible missing firmware xxx解决方法

目录 现象原因解决方法 现象 当执行 sudo apt-get update或者sudo apt-get dist-upgrade时&#xff0c;有如下警告&#xff1a; W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169 W: Possible missing firmware /lib/firmware/rtl_nic/rt…

侯捷 C++ STL标准库和泛型编程 —— 4 分配器 + 5 迭代器

4 分配器 4.1 测试 分配器都是与容器共同使用的&#xff0c;一般分配器参数用默认值即可 list<string, allocator<string>> c1;不建议直接用分配器分配空间&#xff0c;因为其需要在释放内存时也要指明大小 int* p; p allocator<int>().allocate(512,…

Emmet语法

CSS复合选择器 接上边的父选择器 子选择器只会选择最近的后代&#xff0c;进行变色 元素1和元素2中间用大于号隔开 元素1是父级&#xff0c;元素2是子级&#xff0c;选子级 ol>li{ color: red&#xff1b;} 并集选择器 不同类型的标签如&#xff1a;div p ul span &l…

nodejs+vue交通违章查询及缴费elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性&#xff1a;技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性&#xff1a; 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…

【STM32】IAP升级03关闭总中断,检测栈顶指针

IAP升级方法 IAP升级时需要关闭总中断 TM32在使用时有时需要禁用全局中断&#xff0c;比如MCU在升级过程中需禁用外部中断&#xff0c;防止升级过程中外部中断触发导致升级失败。 ARM MDK中提供了如下两个接口来禁用和开启总中断&#xff1a; __disable_irq(); // 关闭总中…

8. 基于消影点进行相机内参(主点)的标定

目录 1. ocam模型2. 消影点3. 基于消影点进行相机主点标定3.1 基于ocam模型的主点标定 感谢大家的阅读。 1. ocam模型 可以参考我的另一篇博客ocam模型。 这里简单提一下ocam模型&#xff1a; 这个模型将中心折反射相机和鱼眼相机统一在一个通用模型下&#xff0c;也称为泰勒模…

Thread.sleep(0)的作用是什么?

Thread.sleep(0) 的作用是让当前线程放弃剩余的时间片&#xff0c;允许其他具有相同优先级的线程运行。这种操作有时被称为“主动让出CPU时间片”或“线程主动让步”。 通常情况下&#xff0c;当一个线程执行到一段代码时&#xff0c;它会占用CPU的时间片&#xff0c;直到时间…

如何解决版本不兼容Jar包冲突问题

如何解决版本不兼容Jar包冲突问题 引言 “老婆”和“妈妈”同时掉进水里&#xff0c;先救谁&#xff1f; 常言道&#xff1a;编码五分钟&#xff0c;解冲突两小时。作为Java开发来说&#xff0c;第一眼见到ClassNotFoundException、 NoSuchMethodException这些异常来说&…