ros中的costmap

本文介绍了ROS中的costmap包,它在move_base中用于将传感器数据转化为2D网格地图。地图分为安全、风险和危险区域,costmap通过marking和clearing操作更新地图。网格有occupied、unknown和free三种状态,根据传感器信息进行赋值。此外,文章还讨论了地图类型、API、以及不同地图层的作用,如静态地图层、障碍地图层和膨胀层。

直到我整理完move_base后才发现costmap也十分重要,这才有了这篇文章。

costmap是一个package,用在move_base的global_map和local_map当中。用于将laser扫面数据或者点云数据转化成一个2d的网格地图

1.总览

costmap_rviz.png

简单来说,地图中分成几部分

灰色部分:安全区域,robot运动在该区域不会发生碰撞

红色部分:危险区域,robot的footprint覆盖到该色网格就肯定会发生碰撞

蓝色部分:风险区域,robot在该区域有可能发生碰撞

红色几何型:robot在地图中所占的区域


2.两个操作

costmap订阅传感器发布的主题数据并更新自身地图,其中有两个操作

marking:标识该区域为障碍信息

clearing:清除该区域的障碍信息


3.网格的三种状态

每个网格会被赋予一个0~254之间的值,代表三种不同的状态

occupied:占有,unknow:未知,free:空闲。


4.地图更新和tf

costmap根据update frequency参数定期来更新地图。每个周期内,根据传感器信息mark/clear地图中的网格。

co

### ROS1中的Costmap概念与使用方法 在ROS1中,`costmap_2d`包提供了用于生成二维代价地图的功能,广泛应用于机器人导航领域。以下是对`costmap_2d`相关概念和使用方法的详细说明。 #### 1. Costmap2D的基本功能 `costmap_2d::Costmap2D`类主要用于维护一个二维代价地图,该地图表示机器人周围环境的空间占用情况。地图中的每个单元格(cell)都有一个代价值,用于描述该位置是否可通行或存在障碍物[^1]。 ```cpp #include <costmap_2d/costmap_2d.h> ``` #### 2. Costmap2DROS的扩展功能 `costmap_2d::Costmap2DROS`类是`costmap_2d::Costmap2D`的一个封装,它集成了与ROS相关的功能,例如参数配置、传感器数据订阅等。通过`costmap_2d::LayeredCostmap`,可以管理多个图层(layer),每个图层负责处理特定类型的数据(如静态地图、动态障碍物等)。这些图层通过`pluginlib`动态加载到`LayeredCostmap`中[^1]。 ```cpp #include <costmap_2d/costmap_2d_ros.h> ``` #### 3. 配置文件结构 `costmap_2d`的配置通常通过YAML文件完成,主要包含以下内容: - **全局代价地图(global_costmap)**:用于规划全局路径。 - **局部代价地图(local_costmap)**:用于实时避障。 - **通用参数**:如分辨率(resolution)、更新频率(update_frequency)、通视检查(inflation_radius)等。 示例配置文件如下: ```yaml global_costmap: global_frame: map robot_base_frame: base_link update_frequency: 5.0 publish_frequency: 2.0 static_map: true inflation_radius: 0.55 local_costmap: global_frame: odom robot_base_frame: base_link update_frequency: 10.0 publish_frequency: 2.0 rolling_window: true width: 6.0 height: 6.0 resolution: 0.05 inflation_radius: 0.55 ``` #### 4. 使用步骤 以下是使用`costmap_2d`的基本步骤: - 引入必要的头文件并初始化`Costmap2DROS`对象。 - 加载配置文件并设置参数。 - 启动代价地图更新线程。 代码示例: ```cpp #include <ros/ros.h> #include <costmap_2d/costmap_2d_ros.h> int main(int argc, char** argv) { ros::init(argc, argv, "costmap_example"); ros::NodeHandle nh; // 初始化Costmap2DROS对象 costmap_2d::Costmap2DROS costmap("my_costmap", nh); // 等待代价地图初始化完成 while (!costmap.isCurrent()) { ros::Duration(0.1).sleep(); } ros::spin(); return 0; } ``` #### 5. 常见图层 `costmap_2d`支持多种图层,常见的有: - **StaticLayer**:用于加载静态地图。 - **ObstacleLayer**:用于处理传感器数据(如激光雷达、深度相机)。 - **InflationLayer**:用于计算障碍物的影响范围。 #### 6. 注意事项 - 确保传感器数据帧与代价地图的参考帧一致。 - 根据机器人尺寸调整`inflation_radius`参数。 - 使用`rolling_window`模式时,需合理设置窗口大小以避免性能问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值