ROS中map、costmap数据格式

1、topic数据格式

map与costmap都是以nav_msgs::OccupancyGrid类型发布其topic。

其中整张地图的障碍物信息存放在data数据成员中,data是一个int8类型的vector向量,即一维数组。假设一张pgm的map地图,宽:width,高:height,单位为像素,分辨率为resolution,左下角像素点在世界坐标系下的位置为:(origin_x,origin_y),单位米,那么世界坐标系下一点(x,y)单位米,假设其在地图中,那么该点对应的data中的索引index为:

index = (int)((x - origin_x) / resolution) + ((int)((y - origin_y) / resolution)) * width;

那么该点在地图中的信息即为data[index]
即:data是按照那张地图图片的自底向上,自左至右逐个像素点存储的

map中data存储的格式如下:
0:空白区域
100:障碍物
-1:未知
1-99:根据像素的灰度值转换后的值,代表有障碍物的概率

costmap中的data 由0-255转换至0-100。

2、costmap表示格式

 ROS的代价地图(costmap)采用网格(grid)形式,每个网格的值(cell cost)从0~255。分成三种状态:被占用(有障碍)、自由区域(无障碍)、未知区域。虽然代价地图中每个cell可用255个不同值中任何一个值,可是下层数据结构仅需要3个值。 具体来说在这种下层结构中,每个cell仅需要3个值来表示cell的3种状态:free,occupied,unknown。

NO_INFORMATION = 255  未知空间

LETHAL_OBSTACLE = 254 说明该单元格中存在一个实际的障碍。若机器人的中心在该单元格中,机器人必然会跟障碍物相撞

INSCRIBED_INFLATED_OBSTACLE = 253 说明该单元格离障碍物的距离小于机器人内切圆半径。若机器人的中心位于等于或高于"Inscribed" cost的单元格,机器人必然会跟障碍物相撞

FREE_SPACE = 0 没有障碍的空间

Map Updates

代价地图以参数update_frequency 指定的周期进行地图更新。每个周期获取传感器数据后,代价地图底层占用结构都会执行标记和清除操作,并且将该结构投影到代价图且附上相应代价值。然后,每个代价值为costmap_2d::LETHAL_OBSTACLE的单元格都会执行障碍物膨胀操作,即从每个占用单元格向外传播代价值,直到用户定义的膨胀半径为止。

联系:13835327580(微信同号)

在Robot Operating System (ROS)中,配置costmap_converter节点以接收并处理地图数据通常涉及到以下几个步骤: 1. **安装和启动**: - 首先,你需要确保已经安装了`ros-navigation`或`move_base`相关的包,其中包含了`costmap_converter`组件。如果没有,你可以通过`rosdep install <package_name>`来安装。 2. **创建map_server**: costmap_converter通常需要一个实时更新的地图数据源,比如` nav_msgs/OccupancyGrid`或` nav_msgs/GridMap`消息。你需要运行一个`map_server`节点来提供这个数据,它可以从多种来源加载,如`.yaml`文件、传感器数据或者其他动态生成的数据。 ``` $ rosrun map_server map_server map_file:=your_map_file.yaml ``` 3. **设置`costmap_converter`参数**: - 在`~/.bashrc`或其他启动文件中,设置`costmap_converter`的相关参数,例如分辨率(`resolution`)、更新频率(`update_frequency`)以及是否从`map_server`获取静态地图(`use_sim_time`等)。例如: ```bash export ROS_NAMESPACE=your_namespace export ROS_IP=your_ip_address export ROS_MASTER_URI=http://your_ros_master:11311 ``` 4. **启动`costmap_converter`**: - 确保`map_server`已运行,然后启动`costmap_converter`: ``` $ roslaunch your_package name_of_costmap_converter.launch ``` 5. **订阅和发布**: - `costmap_converter`会自动订阅`map_server`发布的地图数据,并将其转换成所需的导航数据类型(如`nav_msgs/Costmap2D`),然后发布到`~/odom`话题供其他导航系统使用。 ```bash $ rosrun tf static_transform_publisher 0 0 0 0 0 0 /odom base_link ``` 这是为了确保`odom`话题有正确的坐标信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值