costmap 代价地图

转自:https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter10/10.3.html

10.3 costmap

costmap是Navigation Stack里的代价地图,它其实也是move_base插件,本质上是C++的动态链接库,用过catkin_make之后生成.so文件,然后move_base在启动时会通过动态加载的方式调用其中的函数。

10.3.1 代价地图

之前我们在介绍SLAM时讲过ROS里的地图的概念,地图就是/map这个topic,它也是一张图片,一个像素代表了实际的一块面积,用灰度值来表示障碍物存在的可能性。然而在实际的导航任务中,光有一张地图是不够的,机器人需要能动态的把障碍物加入,或者清楚已经不存在的障碍物,有些时候还要在地图上标出危险区域,为路径规划提供更有用的信息。

因为导航的需要,所以出现了代价地图。你可以将代价地图理解为,在/map之上新加的另外几层地图,不仅包含了原始地图信息,还加入了其他辅助信息。

代价地图有一下特点: 1.首先,代价地图有两张,一张是local_costmap,一张是global_costmap,分别用于局部路径规划器和全局路径规划器,而这两个costmap都默认并且只能选择costmap_2d作为插件。 2. 无论是local_costmap还是global_costmap,都可以配置他们的Layer,可以选择多个层次。costmap的Layer包括以下几种:

  • Static Map Layer:静态地图层,通常都是SLAM建立完成的静态地图。
  • Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
  • Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物。
  • Other Layers:你还可以通过插件的形式自己实现costmap,目前已有Social Costmap LayerRange Sensor Layer等开源插件。

可以同时选择多个Layer并存。

10.3.2 地图插件的选择

与9.2节中move_base插件的配置类似,costmap配置也同样用yaml 来保存,其本质是维护在参数服务器上。由于costmap通常分为local和global的coastmap,我们习惯把两个代价地图分开。以ROS-Academy-for-Beginners为例,配置写在了param文件夹下的global_costmap_params.yamllocal_costmap_params.yaml里。 global_costmap_params.yaml:

global_costmap:
   global_frame: /map
   robot_base_frame: /base_footprint
   update_frequency: 2.0
   publish_frequency: 0.5
   static_map: true
   rolling_window: false
   transform_tolerance: 0.5
   plugins:
     - {name: static_layer,            type: "costmap_2d::StaticLayer"}
     - {name: voxel_layer,             type: "costmap_2d::VoxelLayer"}
     - {name: inflation_layer,         type: "costmap_2d::InflationLayer"}

local_costmap_params.yaml:

local_costmap:
   global_frame: /map
   robot_base_frame: /base_footprint
   update_frequency: 5.0
   publish_frequency: 2.0
   static_map: false
   rolling_window: true
   width: 4.0
   height: 4.0
   resolution: 0.05
   origin_x: 5.0
   origin_y: 0
   transform_tolerance: 0.5
   plugins:
    - {name: voxel_layer,      type: "costmap_2d::VoxelLayer"}
    - {name: inflation_layer,     type: "costmap_2d::InflationLayer"}

plugins一项中可以设置Layer的种类,可以多层叠加。在本例中,考虑到局部地图并不需要静态地图,而只考虑传感器感知到的障碍物,因此可以删去StaticLayer。


  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在stdr中学习costmap代价地图可以帮助我们在机器人导航任务中进行环境感知和障碍物避开。costmap代价地图是一种以像素为基本单位的二维网格地图,在其中每个像素都包含了该位置的代价值。代价值可以表示该位置的通过难度或者可行性,比如障碍物的位置会有较高的代价值,而开阔的空地则会有较低的代价值。 在stdr中学习costmap代价地图,我们需要了解几个关键概念和实现步骤。首先,我们需要建立一个空的代价地图,并将其按照机器人的初始位置进行初始化。接着,我们通过传感器获取环境中的障碍物信息,并将其转化为适合代价地图的格式并更新到代价地图中。这样,我们就可以得到一个包含了环境信息的代价地图。 在costmap中,代价值的分配可以根据实际需求进行调整。比如,我们可以将靠近机器人的位置设置为较低的代价值,以便机器人在该区域移动更加自由。而远离机器人的位置则可以设置为较高的代价值,以鼓励机器人避开远离自身的区域。 学习costmap代价地图还需要理解如何使用代价地图进行路径规划。机器人可以根据代价地图中的信息来选择一条合适的路径。比如,一个代价地图中具有较低代价值的区域通常被认为是机器人可以安全通过的区域,而具有较高代价值的区域则可能存在障碍物或者其他不可通行的区域。 总之,在stdr中学习costmap代价地图可以帮助我们在导航任务中更好地感知环境,避开障碍物,选择合适的路径。这对于机器人的安全和高效运行至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值