ROS使用Pluginlib自定义代价地图-虚拟墙

文章详细描述了如何重写和扩展CostmapProhibitionLayer,包括覆盖onInitialize,updateBounds,和updateCosts函数,以及使用自定义参数和rviz进行禁行区域设置。着重于处理多边形和点的致命障碍及清除功能。

一、重写地图层

1、 包含头文件

#include <costmap_prohibition_layer/costmap_prohibition_layer.h>
#include <pluginlib/class_list_macros.h>

PLUGINLIB_EXPORT_CLASS(costmap_prohibition_layer_namespace::CostmapProhibitionLayer, costmap_2d::Layer)

想要实现重写地图层,需要派生类里面重写或者说覆盖以下函数:

void onInitialize():在costmap执行初始化initialize后会执行这个函数,相当于为用户提供的初始化接口。
void updateBounds(double robot_x, double robot_y, double robot_yaw, double *min_x, double *min_y, double *max_x, double *max_y):计算插件图层要更新到主图层区域的大小,每个图层都可以增加这个尺寸
void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j):将每个图层的代价值更新到主图层

2、自定义地图层参考costmap_prohibition_layer ​

2.1、重写onInitialize函数

void CostmapProhibitionLayer::onInitialize()
{
  //ros节点句柄
  ros::NodeHandle nh("~/" + name_);
  current_ = true;
  
  //创建动态配置的服务器和回调函数,并为服务器配置回调函数
  _dsrv = new dynamic_reconfigure::Server<CostmapProhibitionLayerConfig>(nh);
  dynamic_reconfigure::Server<CostmapProhibitionLayerConfig>::CallbackType cb =
      boost::bind(&CostmapProhibitionLayer::reconfigureCB, this, _1, _2);
  _dsrv->setCallback(cb);

  // 获得地图数据 分辨率
  costmap_2d::Costmap2D *costmap = layered_costmap_->getCostmap();
  _costmap_resolution = costmap->getResolution();

  // set initial bounds
  _min_x = _min_y = _max_x = _max_y = 0;
  
  // 参考代码是从yaml文件中读取虚拟墙数据
  std::string params = "prohibition_areas";
  if (!parseProhibitionListFromYaml(&nh, params))
    ROS_ERROR_STREAM("Reading prohibition areas from '" << nh.getNamespace() << "/" << params << "' failed!");
  
  _fill_polygons = true;
  nh.para
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值