movebase导航和地图数据的使用 - 7 global costmap和local costmap的区别和用途

本文介绍了ROS中movebase的global_costmap和local_costmap的差异,包括它们的参数设置如`update_frequency`、`publish_frequency`、`rolling_window`等。local_costmap用于机器人局部避障,具有`rolling_window`属性,而global_costmap则用于全局路径规划。同时,解析了odom和map坐标系转换的过程,以及如何通过tf广播建立这两个坐标系之间的关系。

两份costmap如下:

planner_costmap_ros_ = newcostmap_2d::Costmap2DROS("global_costmap", tf_);

controller_costmap_ros_ = newcostmap_2d::Costmap2DROS("local_costmap", tf_);

看看区别:

他们的参数分别如下;

local_costmap_params.yaml:

local_costmap:

global_frame: odom

robot_base_frame: /base_footprint

update_frequency: 5.0

publish_frequency: 2.0

//注意,其实ros里提供了一种cfg机制,可以建立dynamic_reconfigure::Server并设置callback,当配置变化时,会调用callback。那么那些config会被通知到?需要定义一些cfg文件,config文件制定了关心的config参数。在make时,python处理这些cfg文件生成一些cpp的类,这些类就是具体的config类,他们会从rosparam server获取和设置参数,而rosparam中的参数的源头其实都是这里的yaml文件中的参数。所以我们看到的cfg文件中的和这里同名的参数,那只是说明那些自动生成的类会用到我们在yaml中设置的参数。并且设置了默认,最小,最大值等等。这样以来,我们可以有两条获取config的方法,一是直接访问paramserver,一是访问config。数据源头其实都是yaml文件。

//update frequency控制voidCostmap2DROS::mapUpdateLoop(doublefrequency)这个函数循环执行的频率。每次循环都会调用layeredCostmapupdateMap,将各个layer的数据合并算出结果。publishfrequency用来控制向外publishcostmap的频率。所以增大update_frequency频率会加快内部的地图合成速度。增大publish_frequency会加快发送给rviz的速度。

static_map: false //这个参数貌似是老板本的代码遗留物,目前有了plugins项目后,就不再使用这个了

rolling_window: true //这个costmap是否随着robotroll.默认是false.这里因为是local costmap要随着机器人滚动。而globalcostmap就不需要。当滚动时,layeredcostmaporigin要在每次updatemap时都被更新。

width: 4.0

height: 4.0

resolution: 0.05 //

transform_tolerance: 0.5//这个是Costmap2DROS::getRobotPose函数获取基于globalframerobotpose所耗时间的一个阈值,超过这个阈值就会有warning.

plugins:

- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}

- {name: inflation_layer, type: "costmap_2d::InflationLayer"}







global_costmap_params.yaml:

global_costmap:

global_frame: /map

robot_base_frame: /base_footprint

update_frequency: 1.0

publish_frequency: 0.5

static_map: true

transform_tolerance: 0.5

plugins:

- {name: static_layer, type:"costmap_2d::StaticLayer"}

- {name: obstacle_layer, type:"costmap_2d::VoxelLayer"}

- {name: inflation_layer, type:"costmap_2d::InflationLayer"}





看看缺别,看看如何使用这些参数的。

先来看看localcostmap

<think>嗯,用户问的是如何在RViz中配置并查看global_costmaplocal_costmap。首先,我需要回忆一下ROS中costmap的相关知识。根据引用[3],globallocal costmap区别在于用途global用于全局路径规划,local用于局部避障。然后,用户可能在配置时遇到了显示的问题,或者知道如何启动RViz来查看这两个地图。 首先,配置参数文件是关键。比如在global_costmap_params.yamllocal_costmap_params.yaml中,需要确保插件已经正确添加,如引用[4]提到的plugins列表。然后,引用[2]提到必须显式声明这些插件,否则ROS使用它们。所以用户需要检查他们的配置文件是否正确设置了各个层,比如static_layer、obstacle_layerinflation_layer。 接下来是RViz的配置步骤。用户需要添加相应的显示类型,比如添加两个Map类型的显示,分别订阅global_costmaplocal_costmap的话题。可能需要调整话题名称,例如/global_costmap/costmap/local_costmap/costmap。同时,设置同的颜色方案来区分两者,比如global用蓝色,local用红色。 然后,用户可能需要在启动导航包时正确加载这些参数。比如,在启动move_base节点时,确保global_costmaplocal_costmap的参数文件路径正确。此外,检查是否有参数错误或插件未加载的情况,这可能导致地图无法显示。 用户可能遇到的问题包括地图显示,这时候需要检查RViz的话题是否正确订阅,或者costmap是否被正确发布。可能需要使用rostopic list来确认话题是否存在。此外,如果图层顺序对,比如障碍物层在静态层下面,可能导致显示问题,需要调整插件加载顺序,如引用[4]中的顺序。 最后,测试步骤也很重要,用户可能需要逐个启动节点,并观察终端是否有错误输出,比如插件加载失败或者参数错误。同时,确保rolling_window参数在local costmap中设置为true,以便地图随机器人滚动,如引用[3]所述。 总结步骤应该是:配置参数文件、启动节点、在RViz中添加显示并调整话题,最后验证调试。需要提醒用户注意常见问题,比如话题名称、图层顺序参数设置是否正确。</think>在RViz中查看`global_costmap``local_costmap`需要配置ROS导航栈参数并添加可视化组件,步骤如下: ### 一、配置参数文件 1. **global_costmap_params.yaml** ```yaml global_frame: map robot_base_frame: base_link update_frequency: 1.0 plugins: - {name: static_layer, type: "costmap_2d::StaticLayer"} - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"} [^4] ``` 2. **local_costmap_params.yaml** ```yaml global_frame: odom robot_base_frame: base_link update_frequency: 5.0 rolling_window: true # 允许随机器人移动更新地图[^3] plugins: - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"} ``` ### 二、在RViz中添加显示 1. **启动RViz** ```bash roslaunch your_robot_navigation your_navigation.launch rosrun rviz rviz ``` 2. **添加可视化组件** - 点击左下角 **Add** -> **By Topic** - 选择 `/global_costmap/costmap` 添加为 **Map** - 选择 `/local_costmap/costmap` 再次添加为 **Map** - 调整颜色方案(建议全局用蓝色系,局部用红色系) ### 三、验证显示效果 | 属性 | global_costmap | local_costmap | |-------------------|----------------------|---------------------| | 坐标系 | `map` | `odom` | | 更新频率 | 1-2Hz | 5-10Hz | | 覆盖范围 | 全地图 | 机器人周围3-5米 | | 动态障碍物显示 | 无 | 实时更新 | ### 四、常见问题排查 1. **地图未显示** - 检查是否在`global_costmap_params.yaml``local_costmap_params.yaml`中正确声明了插件[^2] - 使用`rostopic list`确认是否发布`/global_costmap/costmap``/local_costmap/costmap`话题 2. **坐标系错位** - 确认`global_frame``robot_base_frame`参数与TF树一致[^3] 3. **图层覆盖异常** - 插件加载顺序影响显示层级,确保`static_layer`在障碍物层下方[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值