在任何机器人上实施 ROS 导航堆栈的指南

文章目录

  • 路径规划
  • 参考

路径规划

路径规划是导航的最终目标。这允许用户向机器人给出目标姿势,并让它在给定的环境中自主地从当前位置导航到目标位置。这是我们迄今为止所做的一切(地图绘制和本地化)的汇集点。ROS 导航堆栈已经为我们完成了繁重的工作,就像我们在地图绘制和本地化中看到的那样。导航的路径规划部分是在名为 move_base 的包中实现的。在我们开始使用这个包之前,了解全局并了解关键细节非常重要。

使用的 ROS 节点:move_base

在这里插入图片描述
中间的大方框代表move_base节点,它是ROS导航堆栈的核心。它订阅了多个主题,包括映射部分中介绍的map_server 节点和本地化部分中介绍的amcl 节点。在 move_base 节点中,有很多事情需要在继续之前理解。

在 move_base 节点中,该图显示了四个主要项目。让我们一一了解它们。

  • global_planner
  • local_planner
  • global_costmap
  • local_costmap

Planner是一种算法,用于计算机器人从当前位置到用户提供的目标位置的路径。在 ROS 中,规划器依靠称为成本图的地图 来生成计划。稍后将解释成本图。让我们花一些时间来了解 move_base 节点中发挥作用的各种规划器。

move_base节点包括两种规划器——全局规划器和局部规划器。global_planner输出机器人从当前位置到目标位置的路径。ROS 中实现的几种不同的算法/规划器可以实现全局规划。常见的是 – carrot_planner 、 navfn 和 global_planner 。用户可以选择使用哪个 global_planner。此外,在使用任何这些全局规划器之前,用户需要配置一些参数。参数列表在此处给出。现在,对 global_planner 在宏观导航方案中的作用有了基本的了解,同样重要的是要提到 global_planner 依赖 global_costmap 来创建计划。在介绍成本图之前,我们还需要了解一下 local_planner。

local_planner还生成机器人在给定环境中移动的计划或路径。globa_planner 创建的计划将传递给 local_planner 执行。local_planner 依赖于 local_costmap 并生成一个本地计划,其中考虑了激光和里程计数据。有几个本地规划器可供使用。常见的是 – base_local_planner、dwa_local_planner、eband_local_planner、teb_local_planner。到目前为止,我们已经了解到 global_planner 和 local_planner 都依赖于代价图。让我们研究一下它们到底是什么。

ROS 中的成本图是2D 或 3D 占用网格矩阵/地图,其中每个网格或单元格都分配有 0 到 255 之间的值/成本。每个单元格中的值或成本用于由 globa_planner 和 local_planner 规划路径。这些值指示给定网格是空闲的、已占用的还是未知的。如果单元格是空闲的,则为其分配成本 0,如果单元格包含障碍物,则为其分配更高的值,例如 254。包含障碍物的单元格的成本基于以下因素膨胀(分散到)周围的单元格:用户指定的膨胀半径。请参阅本页有关“通货膨胀”的部分。要了解有关成本图的更多信息,请参阅 ROS wiki上的此页面以及此页面。这里还提供了一个简短的定义。此时,您可能想知道成本图是如何创建的?

首先,必须初始化代价图。这可以通过从本教程的映射部分中介绍的 map_server 节点提供静态地图或提供区域的固定宽度和高度来完成。ROS 导航堆栈使用两个成本图 - 一个称为global_costmap,由 global_planner 用于在整个环境上创建长期计划,第二个称为local_costmap,由 local_planner 用于创建短期计划,同时考虑到环境中的障碍物信息。我们主要使用静态映射来初始化global_costmap。请注意,为了使用用户提供的静态地图(通过map_server节点)初始化costmap,它必须与amcl节点结合使用,以便可以在地图框中注册障碍物信息。最后,我们通过给 local_costmap 一个固定的宽度和高度来初始化它。初始化后,当机器人在环境中移动时,local_costmap 会根据传感器数据进行更新。因此,如果在创建静态地图后将新对象/障碍物添加到环境中,它们将显示在 local_costmap 中,但不会显示在 global_costmap 中。

总结上面提出的概念, move_base 节点包含两个规划器 - 全局规划器依赖于基于 global_costmap 生成全局规划,而 local_planner 依赖于 local_costmap 来生成局部规划。简而言之,近距离路径规划的优化由local_planner完成,全路径由global_planner优化。这两个规划器和他们的成本图一起工作,为机器人创建一条路径,通过避开障碍物将其从一个点带到另一个点。

这就是 move_base 节点的概念部分。接下来,我们将开始使用它来使机器人在环境中自主移动。然而,我们需要首先满足先决条件,就像我们在地图绘制和本地化中所做的那样。

参考

https://prabhjotkaurgosal.com/a-guide-to-implementing-ros-navigation-stack-on-your-robot/4/

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

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

相关文章

【Delphi】 各个平台使用 ntfy 效果说明

目录 一、Delphi 中使用 ntfy 库下载地址 二、各个平台使用效果说明 1. android 平台 2. ios 平台 3. windows 平台 三、总结 一、Delphi 中使用 ntfy 库下载地址 官方的文档地址:ntfyDelphi 接口库地址:GitHub - hazzelnuts/ntfy-for-delphi at …

智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

BGP基本配置实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、内部OSPF互通,配置OSPF协议 3、BGP建立邻居关系 4、R1和R5上把业务网段宣告进BGP 5、消除路由黑洞,在R2、R4上做路由引入 6、业务网段互通 一、实验拓扑 二、实验需求 1、按照图…

JVM源码剖析之软、弱、虚引用的处理细节

目录 写在前面: 源码剖析: Java层面: JVM层面: 使用危险点: 总结: 版本信息: jdk版本:jdk8u40 垃圾回收器:Serial new/old 写在前面: 不同的垃圾回收…

不同性别人群的股骨颈骨密度随年龄的变化趋势

增龄是发生骨质疏松的危险因素。因此,中老年人需要积极防范骨质疏松,以免发生骨折等不良事件。 为了探究不同性别人群的股骨颈骨密度随年龄的变化趋势,首先创建一个df,变量有id(编号)、age(年龄…

【算法】算法题-20231110

一、力口:506. 相对名次 简单 给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。 运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第…

Git之分支与版本->课程目标及知识点的应用场景,分支的场景应用,标签的场景应用

1.课程目标及知识点的应用场景 Git分支和标签的命名规范 分支 dev/test/pre/pro(即master) dev:开发环境--windows (自己的电脑) test:测试环境--windows/linux (公司专门的测试电脑 pre:灰度环境(非常大的公司非常重要的项目) pro:正式环境 灰度环境与正式环境的服务器配置…

logback异步日志打印阻塞工作线程

前言 最新做项目,发现一些历史遗留问题,典型的是日志打印的配置问题,其实都是些简单问题,但是往往简单问题引起严重的事故,比如日志打印阻塞工作线程,以logback和log4j2为例。logback实际上是springboot的…

【Python】AppUI自动化—appium自动化开发环境部署、APP测试案例(17)上

文章目录 一.appium简介1.什么是appium2.appium 的工作原理3.APP类型4.APP页面布局 二,appium开发环境部署(python环境)1.下载安装环境1.1.下载安装所需环境1.2.Appium-desktop( Appium-Server-GUI )配置1.3.Appium-Inspector 配置…

计算机msvcp140.dll重新安装的四个解决方法,专门解决dll文件丢失问题的方法

在我多年的电脑使用经历中,曾经遇到过一个非常棘手的问题,那就是电脑提示找不到msvcp140.dll文件。这个问题让我苦恼了很久,但最终还是找到了解决方法。今天,我就来分享一下我解决这个问题的四种方法,希望对大家有所帮…

python爬虫怎么翻页

爬虫程序的代码实现如下&#xff1a; #include <iostream> #include <string> #include <curl/curl.h>int main() {CURL *curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl curl_easy_init();if(curl) {curl_easy_se…

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件&#xff0c;通过使用Conditional Generative Adversarial Networks&#xff08;条件生成对抗网络&#xff09;的技术来生成图像。它允许用户对生成的图像进行更精细的控制&#xff0c;从而在许多应用场景中非常有用&#…

每次重启完IDEA,application.properties文件里的中文变成?

出现这种情况&#xff0c;在IDEA打开Settings-->Editor-->File Encodings 然后&#xff0c;你需要将问号改为你需要的汉字。 重启IDEA&#xff0c;再次查看你的.properties文件就会发现再没有变成问号了

order by的注入与Insert ,update和delete注入

order by的注入 Insert &#xff0c;update和delete注入

大二第四周总结——用原生js封装一个分页器

用原生js封装一个分页器 起因&#xff1a;这次项目还是用原生的js来写的&#xff0c;我负责的是后台&#xff0c;分页是后台最常见的一个功能了&#xff0c;于是干脆封装一下,废话少说&#xff0c;直接上代码 这里是基本的样式 .pagination {display: flex;width: 600px;hei…

PCB知识补充

系列文章目录 文章目录 系列文章目录参考文献PCB知识互连线电阻过孔/铜箔电流能力铜箔载流能力过孔载流能力 热设计电磁兼容及部分要求 参考文献 [1]牛森,张敏娟,银子燕.高速PCB多板互联的电源完整性分析[J].单片机与嵌入式系统应用,2023,23(09). [2]陈之秀,刘洋,张涵舒等.高…

Django中简单的增删改查

用户列表展示 建立列表 views.py def userlist(request):return render(request,userlist.html) urls.py urlpatterns [path(admin/, admin.site.urls),path(userlist/, views.userlist), ]templates----userlist.html <!DOCTYPE html> <html lang"en">…

【Java】反射

1.什么是反射机制? Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类中的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 的反射机制…

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例&#xff0c;有关《软件工程与计算》23章内容的重点知识整理&#xff0c;已经总结在了博客专栏中&#xff0c;有需要的自行阅读&#xff1a; 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…

进程状态和优先级

文章目录 进程状态Linux中具体的进程状态僵尸进程孤儿进程 进程优先级 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 进程状态 进程在操…