【ROS】代价地图

news2025/4/19 4:30:57

【ROS】代价地图

  • 前言
  • 代价地图(Costmap)概述
  • 代价地图的参数
    • `costmap_common_params.yaml` 参数说明
    • `costmap_common_params.yaml` 示例说明
    • `global_costmap.yaml` 参数说明
    • `global_costmap.yaml` 示例说明
    • `local_costmap.yaml` 参数说明
    • `local_costmap.yaml` 示例说明
  • 在 RViz 中查看代价地图

前言

本文将介绍 ROS 导航系统中 move_base 节点的核心模块之一——代价地图(Costmap)

代价地图以二维栅格地图的形式,对机器人所处环境中的每个区域进行“通行代价”的量化评估,也就是衡量机器人经过该区域的风险和难度。代价越高,意味着该区域越危险或越不适宜通行。

ROS 中的代价地图主要分为两类:

  • 全局代价地图(Global Costmap):基于静态地图构建,覆盖整个环境范围,主要用于全局路径规划
  • 局部代价地图(Local Costmap):基于机器人实时传感器(如激光雷达)感知到的障碍物信息构建,反映当前机器人周围的动态环境,主要用于局部避障和路径微调

我的环境:
本教程使用的环境是:实体 ROS 小车,Ubuntu 18.04,ROS1 Melodic

参考资料:

  • ROS导航系统 | 代价地图 Costmap
  • ROS导航系统 | 代价地图的参数设置

代价地图(Costmap)概述

关于代价地图的概念与原理,推荐参考以下视频中 0–5 分钟的内容,讲解清晰,通俗易懂:

  • ROS 导航系统 | 代价地图 Costmap

代价地图的参数

ROS 中的代价地图配置通常涉及三个参数文件:

  • costmap_common_params.yaml
    用于配置全局和局部代价地图的通用参数,如地图分辨率、机器人半径、障碍物膨胀半径等,主要影响代价地图的形状和结构。由于它同时作用于全局与局部代价地图,集中配置可避免参数冲突和重复设置。

  • global_costmap_params.yaml
    专用于全局代价地图的配置,包含其计算范围、更新频率等参数。用于支持全局路径规划任务。

  • local_costmap_params.yaml
    专用于局部代价地图的配置,用于定义其感知范围、更新频率等参数。支持机器人动态避障和轨迹调整。

将这三个文件合理配置,是实现稳定导航和精确路径规划的关键。


costmap_common_params.yaml 参数说明

该文件配置了代价地图的通用参数,影响机器人在地图中的碰撞判断与导航行为。以下是常用关键参数说明:

  • robot_radius
    机器人底盘的半径。代价地图会以此为基础设置“核心不可通行区域”,确保机器人不会碰撞到障碍物。

  • inflation_radius
    膨胀区域半径,即障碍物外围的“ 风险缓冲区 ”。距离障碍越近,通行代价越高。这个区域机器人仍可进入,但接近障碍的风险更大。
    示意图

  • obstacle_range
    表示将激光雷达检测到的多少米范围内的障碍物纳入代价地图。一般设置为激光雷达有效探测距离,或稍小一些以剔除不稳定数据。

  • raytrace_range
    表示在该范围内的空旷区域(激光束穿过且未检测到障碍物的栅格)将被视为无障碍,并用于清除动态障碍物残留的“阴影”

  • observation_sources
    指定障碍物信息的来源(可为激光雷达、深度摄像头等)。名称可自定义,但需与下方对应配置保持一致


costmap_common_params.yaml 示例说明

# 机器人本体参数
robot_radius: 0.25                # 机器人半径(单位:米),可适当设置略大以预留安全空间,避免碰撞

# 膨胀层参数
inflation_radius: 0.5            # 膨胀半径(米),用于在障碍物周围添加安全距离
                                # 设置过大会导致通行区域变小,设置过小则增大碰撞风险

# 障碍物层参数
obstacle_range: 6.0              # 将动态障碍物更新到局部代价地图的最大检测距离(米)
                                # 超过此距离(6m)的动态障碍物更新到局部代价地图中
                                # 一般设为激光雷达的有效探测范围
                                # 注意与局部代价地图显示范围无冲突,显示小于检测范围是正常的

raytrace_range: 6.0              # 清除动态障碍物的残影的光线追踪距离(米)
                                # 仅在该范围内(6m内)清除动态障碍物的残影
                                # 超出此范围的障碍物不会被自动清除


# 传感器数据源配置(可多个)
observation_sources: base_lidar head_kinect2

# 底部激光雷达传感器设置
base_lidar:
  data_type: LaserScan           # 传感器数据类型
  topic: /scan                   # 订阅的话题名
  marking: true                  # 将障碍物添加至代价地图
  clearing: true                 # 清除障碍物残影(动态场景使用)

# 头部 Kinect2 点云传感器设置
head_kinect2:
  data_type: PointCloud2         # 点云数据类型
  topic: /kinect2/sd/points      # 点云话题名
  marking: true                  # 将障碍物添加至代价地图
  clearing: true                 # 清除障碍物残影(动态场景使用)
  max_obstacle_height: 1.5       # 可检测障碍物的最大高度(单位:米)
  min_obstacle_height: 0.2       # 可检测障碍物的最小高度(单位:米)

global_costmap.yaml 参数说明

  • global_costmap:命名空间,表示以下参数都属于全局代价地图配置。
  • global_frame:地图坐标系的名称,一般为 "map"
  • robot_base_frame:机器人底盘坐标系的名称,通常为 "base_footprint""base_link"
  • static_map:是否将 map_server 发布的地图作为初始静态地图。
    • 若为 true,使用现有的静态地图(适用于已知环境)。
    • 若为 false,初始地图为空,需依赖动态建图机制(适用于未知环境导航任务)。
  • update_frequency:地图更新频率,即传感器观测数据更新到全局代价地图的频率(Hz)。
  • publish_frequency:发布频率,用于将全局代价地图发送给 RViz 等工具进行可视化的频率(Hz)。
  • transform_tolerance:TF 容忍时间(单位:秒),用于处理 TF 超时问题。
    • 如果提示 TF timeout 报错,可适当增大该值以提升鲁棒性。

global_costmap.yaml 示例说明

global_costmap:
  global_frame: map # 全局坐标系,通常是地图坐标系
  robot_base_frame: base_footprint # 机器人基坐标系
  static_map: true # 是否使用静态地图
  update_frequency: 1.0 # 地图更新频率 (Hz)
  publish_frequency: 1.0 # 地图发布频率 (Hz)
  transform_tolerance: 1.0 # 坐标变换容忍度 (秒)

local_costmap.yaml 参数说明

  • local_costmap:命名空间,表示以下参数属于局部代价地图配置。
  • global_frame:地图坐标系的名称,一般设置为 "odom",用于防止障碍物跳变。
  • robot_base_frame:机器人底盘坐标系的名称,通常为 "base_footprint""base_link"
  • static_map:是否使用 map_server 发布的静态地图作为初始地图。通常设置为 false,因为局部规划阶段是基于实时传感器数据(如激光雷达)生成临时地图进行规划和避障。
  • rolling_window:局部代价地图的范围是否随机器人移动。通常设置为 true,确保局部代价地图与机器人实时更新。
  • width:局部代价地图的宽度。
  • height:局部代价地图的高度。
  • update_frequency:地图更新频率(Hz),即传感器数据更新到局部代价地图的频率。通常设置为激光雷达的扫描频率,以确保实时反应。
  • publish_frequency:地图发布频率(Hz),即将局部代价地图发布给 RViz 等工具的频率。
  • transform_tolerance:TF 容忍时间(秒),用于处理 TF 超时问题。如果出现 TF timeout 错误,可以适当增大该值以提升系统鲁棒性。

local_costmap.yaml 示例说明

local_costmap:
  global_frame: odom # 全局坐标系,通常是里程计坐标系
  robot_base_frame: base_footprint # 机器人基坐标系
  static_map: false # 是否使用静态地图
  rolling_window: true # 是否开启滚动窗口模式
  width: 3.0 # 地图宽度 (米)
  height: 3.0 # 地图高度 (米)
  update_frequency: 10.0 # 地图更新频率 (Hz)
  publish_frequency: 10.0 # 地图发布频率 (Hz)
  transform_tolerance: 1.0 # 坐标变换容忍度 (秒)

在 RViz 中查看代价地图

在 RViz 中查看代价地图的步骤如下:

  1. 添加 map 显示器。
  2. 修改显示名称为 global_costmaplocal_costmap,以对应全局或局部代价地图。
  3. 订阅话题 /move_base/global_costmap/costmap/move_base/local_costmap/costmap
  4. 将颜色方案(Color Scheme)设置为 costmap,以便直观查看代价地图的效果。

这样,你就可以在 RViz 中清晰地看到代价地图的显示效果。

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

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

相关文章

《Against The Achilles’ Heel: A Survey on Red Teaming for Generative Models》全文阅读

《Against The Achilles’ Heel: A Survey on Red Teaming for Generative Models》 突破阿基里斯之踵:生成模型红队对抗综述 摘要 生成模型正迅速流行并被整合到日常应用中,随着各种漏洞暴露,其安全使用引发担忧。鉴于此,红队…

datagrip连接mysql问题5.7.26

1.Case sensitivity: plainmixed, delimitedexac Remote host terminated the handshake. 区分大小写:plain混合,分隔exac 远程主机终止了握手。 原因:usessl 参数用于指定是否使用 SSL(Secure Sockets Layer)加密来保护数据传…

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

本文目录 一、引言二、Web Unlocker API 功能亮点三、Web Unlocker API 实战1.配置网页解锁器2.定位相关数据3.编写代码 四、Web Scraper API技术亮点 五、SERP API技术亮点 六、总结 一、引言 网页数据宛如一座蕴藏着无限价值的宝库,无论是企业洞察市场动态、制定…

【本地MinIO图床远程访问】Cpolar TCP隧道+PicGo插件,让MinIO图床一键触达

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言MinIO本地安装与配置cpolar 内网穿透PicGo 安装MinIO远程访问总结互动致谢参考目录…

Policy Gradient思想、REINFORCE算法,以及贪吃蛇小游戏(一)

文章目录 Policy Gradient思想论文REINFORCE算法论文Policy Gradient思想和REINFORCE算法的关系用一句人话解释什么是REINFORCE算法策略这个东西实在是太抽象了,它可以是一个什么我们能实际感受到的东西?你说的这个我理解了,但这个东西,我怎么优化?在一堆函数中,找到最优…

Profibus DP主站转modbusTCP网关与dp从站通讯案例

Profibus DP主站转modbusTCP网关与dp从站通讯案例 在当前工业自动化的浪潮中,不同协议之间的通讯转换成为了提升生产效率和实现设备互联的关键。Profibus DP作为一种广泛应用的现场总线技术,与Modbus TCP的结合,为工业自动化系统的集成带来了…

快速部署大模型 Openwebui + Ollama + deepSeek-R1模型

背景 本文主要快速部署一个带有web可交互界面的大模型的应用,主要用于开发测试节点,其中涉及到的三个组件为 open-webui Ollama deepSeek开放平台 首先 Ollama 是一个开源的本地化大模型部署工具,提供与OpenAI兼容的Api接口,可以快速的运…

H.265硬件视频编码器xk265代码阅读 - 帧内预测

源代码地址: https://github.com/openasic-org/xk265 帧内预测具体逻辑包含在代码xk265\rtl\rec\rec_intra\intra_pred.v 文件中。 module intra_pred() 看起来是每次计算某个4x4块的预测像素值。 以下代码用来算每个pred_angle的具体数值,每个mode_i对应…

Arcgis经纬线标注设置(英文、刻度显示)

在arcgis软件中绘制地图边框,添加经纬度度时常常面临经纬度出现中文,如下图所示: 解决方法,设置一下Arcgis的语言 点击高级--确认 这样Arcgis就转为英文版了,此时在来看经纬线刻度的标注,自动变成英文

Windows安装Ollama并指定安装路径(默认C盘)

手打不易,如果转摘,请注明出处! 注明原文:http://blog.csdn.net/q258523454/article/details/147289192 一、下载Ollama 访问Ollama官网 打开浏览器,访问Ollama的官方网站:https://ollama.ai/。 在官网首页…

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级 原创 IT小本本 IT小本本 2025年04月04日 02:00 北京 引言 在企业薪酬管理中,团队奖金分配常涉及复杂的分摊规则。传统手工分摊不仅效率低下,还容易因人为疏漏导致分配不公。 本文…

AI工具箱源码+成品网站源码+springboot+vue

大家好,今天给大家分享一个靠AI广告赚钱的项目:AI工具箱成品网站源码,源码支持二开,但不允许转售!! 本人专门为小型企业和个人提供的解决方案。 不懂技术的也可以直接部署工具箱网站,成为站长&…

如何下载免费地图数据?

按照以下步骤下载免费地图数据。 1、安装GIS地图下载器 从GeoSaaS(.COM)官网下载“GIS地图下载器”软件:,安装完成后桌面上出现”GIS地图下载器“图标。 双击桌面图标打开”GIS地图下载器“ 2、下载地图数据 点击主界面底部的“…

IO 口作为外部中断输入

外部中断 1. NVIC2. EXTI 1. NVIC NVIC即嵌套向量中断控制器,它是内核的器件,M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些…

《MySQL基础:了解MySQL周边概念》

1.登录选项的认识 -h:指明登录部署了mysql服务的主机,默认为127.0.0.1-P:指明要访问的端口号,默认为3306-u:指明登录用户-p:指明登录密码 2.什么是数据库 2.1认识数据库 第一点理解。 mysql是数据库的客户…

RCL谐振电压增益曲线

谐振电路如何通过调频实现稳压&#xff1f; 为什么要做谐振&#xff1f; 在谐振状态实现ZVS导通&#xff0c;小电流关断 电压增益GVo/Vin&#xff0c;相当于产出投入比 当ff0时&#xff0c;G1时&#xff0c;输出电压输入电压 当G<1时&#xff0c;输出电压<输入电压 …

JavaScript:表单及正则表达式验证

今天我要介绍的是在JavaScript中关于表单验证内容的知识点介绍&#xff1a; 关于表单验证&#xff0c;我接下来则直接将内容以及效果显示出来并作注解&#xff0c;这样可以清晰看见这个表达验证的妙用&#xff1a; <form id"ff" action"https://www.baidu.…

一、Appium环境安装

找了一圈操作手机的工具或软件&#xff0c;踩了好多坑&#xff0c;最后决定用这个工具(影刀RPA手机用的也是这个)&#xff0c;目前最新的版本是v2.17.1&#xff0c;是基于nodejs环境的&#xff0c;有两种方式&#xff0c;我只试了第一种方式&#xff0c;第二种方式应该是比较简…

【c++深入系列】:new和delete运算符详解

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “生活不会向你许诺什么&#xff0c;尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去&#xff0c;终有一天&…

正弦波有效值和平均值(学习笔记)

一个周期的正弦波在坐标轴上围的面积有多大&#xff1f; 一般正弦波以 y Asin(wx)表示&#xff0c;其中A为振幅&#xff0c;W为角速度。周期T 2π/w; 确定积分区间是x 0&#xff0c;到x 2π。 计算绝对值积分&#xff1a; 变量代还&#xff1a;wx θ&#xff0c;dx dθ…