当前位置: 首页 > news >正文

在任何机器人上实施 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/

相关文章:

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

文章目录 路径规划参考 路径规划 路径规划是导航的最终目标。这允许用户向机器人给出目标姿势,并让它在给定的环境中自主地从当前位置导航到目标位置。这是我们迄今为止所做的一切(地图绘制和本地化)的汇集点。ROS 导航堆栈已经为我们完成了…...

Android 中注解的使用

Android Support Library 从 19.1 版本开始引入了一个新的注解库,其中包含了很多的元注解,使用它们修饰我们的代码, 可以让我们提高程序的开发效率,让我们更早的发现问题。以及对代码施以规范,让代码更加有可读性。这篇…...

我国陆地遥感卫星发展现状与展望

一、引言 从20世纪90年代末至今,我国陆地遥感卫星事业历经二十多年,实现了从无到有、从小到大、从弱到强的跨越发展。随着高分辨率对地观测系统重大专项(高分专项)、《陆海观测卫星业务发展规划(2011—2020年&#xff…...

arcgis基础篇--实验

一、绘制带空洞的面要素 方法一:先绘制出一个面区域,然后在面上再绘制一个面区域代表面洞,两者位于同一个图层内,选中代表面洞的区域,选择【编辑器】-【裁剪】工具,将面裁剪出一个洞,随后删除代…...

【chatglm3】(3):在AutoDL上,使用4090显卡,部署ChatGLM3API服务,并微调AdvertiseGen数据集,完成微调并测试成功!附视频演示。

在AutoDL上,使用4090显卡,部署ChatGLM3API服务,并微调AdvertiseGen数据集,完成微调并测试成功! 其他chatgpt 和chatglm3 资料: https://blog.csdn.net/freewebsys/category_12270092.html 视频地址&#…...

python爬虫top250电影数据

之前看到的,我改了一下,多了很多东西 import requests from bs4 import BeautifulSoup from openpyxl import Workbook from openpyxl.styles import Font import redef extract_movie_info(info):# 使用正则表达式提取信息pattern re.compile(r导演:…...

STL简介+浅浅了解string——“C++”

各位CSDN的uu们好呀,终于到小雅兰的STL的学习了,下面,让我们进入CSTL的世界吧!!! 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的缺陷 7.为什么要学习string类 …...

wpf 和winform 的区别

WPF (Windows Presentation Foundation) 和 WinForms (Windows Forms) 是 Microsoft .NET 桌面应用程序开发中两种不同的技术框架,它们有一些重要的区别: 1. **UI 抽象层次结构:** - **WinForms:** 使用基于控件(Controls)的 …...

【Apifox】国产测试工具雄起

在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功能, 在接…...

PNAS | 蛋白质结构预测屈服于机器学习

今天为大家介绍的是来自James E. Rothman的一篇短文。今年的阿尔伯特拉斯克基础医学研究奖表彰了AlphaFold的发明,这是蛋白质研究历史上的一项革命性进展,首次提供了凭借序列信息就能够准确预测绝大多数蛋白质的三维氨基酸排列的实际能力。这一非凡的成就…...

PlayCanvas通过IFrame嵌入页面如何与canvasplay脚本通讯

PlayCanvas可以通过IFrame嵌入HTML页面,实现混合编程,扩充PlayCanvas的页面功能。 问:在IFrame嵌入页面中如何与PlayCanvas通讯,调用PlayCanvas功能? 答:可以调用PlayCanvas的全局对象pc来访问其他脚本&…...

springboot整合Redis后间歇性io.lettuce.core.RedisCommandTimeoutException

在springboot中引入spring-boot-starter-data-redis依赖时,默认使用的时Lettuce 产生这种问题的原因有如下两点: 1、Lettuce 自适应拓扑刷新(Adaptive updates)与定时拓扑刷新(Periodic updates) 是默认关闭…...

基于springboot+vue的学生毕业离校信息网站

项目介绍 该学生毕业离校系统包括管理员、学生和教师。其主要功能包括管理员:首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等,前台首页;首页、离校信息、网站公告、留…...

基于C#+WPF编写的调用讯飞星火大模型工具

工具源码:https://github.com/lishuangquan1987/XFYun.SparkChat 工具效果截图: 支持流式输出: 其中ApiKey/ApiSecret/AppId需要自己到讯飞星火大模型官网去注册账号申请,免费的。 申请地址:https://xinghuo.xfyun.cn/ 注册之…...

科普测量开关电源输出波形的三种方法及电源波形自动化测试步骤

开关电源波形测试就是对开关电源的输出波形进行检测和分析,观察开关电源参数变化,以此来判断开关电源的性能是否符合要求。好的开关电源对于设备以及整个电路的正常运行是非常重要的,因此开关电源输出波形测试是开关电源测试的重要环节&#…...

【优化版】DOSBox及常用汇编工具的详细安装教程

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、图解数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. dosbox的介绍、下载和安装1.1 dosbos简介1.2 dosbox的下载1.2.1 方式一&a…...

【Devchat 插件】创建一个GUI应用程序,使用Python进行加密和解密

VSCode 插件 DevChat——国内开源的 AI 编程! 写在最前面DevChat是什么?什么是以提示为中心的软件开发 (PCSD)?为什么选择DevChat?功能概述情境构建添加到上下文生成提交消息提示扩展 KOL粉丝专属福利介绍D…...

运行pytest时,给出警告 PytestConfigWarning: Unknown config option: result_log

问题:在ini中配置了一些选项后运行pytest,会出现下面的警告信息 解决:在ini中增加配置:addopts -p no:warnings...

初始MySQL(五)(自我复制数据,合并查询,外连接,MySQL约束:主键,not null,unique,foreign key)

目录 表复制 自我复制数据(蠕虫复制) 合并查询 union all(不会去重) union(会自动去重) MySQL表的外连接 左连接 右连接 MySQL的约束 主键 not null unique(唯一) foreign key(外键) 表复制 自我复制数据(蠕虫复制) #为了对某个sql语句进行效率测试,我们需要海量…...

ssh秘钥登录

1.设置 SSH 通过密钥登录 密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。 将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...

小木的算法日记-多叉树的递归/层序遍历

🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...