ROS中的珊格地图——nav_msgs::OccupancyGrid

一、Rviz中的地图效果如下:

在这里插入图片描述黑色块为障碍物,颜色较深的灰色块为危险区,颜色再浅一点的是可行区域,最浅的是未知区域(最外围的区域);

二、地图数据格式

官方数据类型解释如下:

nav_msgs/OccupancyGrid MessageFile: nav_msgs/OccupancyGrid.msgRaw Message Definition

# This represents a 2-D grid map, in which each cell represents the probability of
# occupancy.

Header header 

#MetaData for the map
MapMetaData info

# The map data, in row-major order, starting with (0,0).  Occupancy
# probabilities are in the range [0,100].  Unknown is -1.
int8[] data

在这里插入图片描述

# This hold basic information about the characterists of the OccupancyGrid

# The time at which the map was loaded
time map_load_time
# The map resolution [m/cell]
float32 resolution
# Map width [cells]
uint32 width
# Map height [cells]
uint32 height
# The origin of the map [m, m, rad].  This is the real-world pose of the
# cell (0,0) in the map.
geometry_msgs/Pose origin

栅格地图中坐标是一维数组的形式,比如实际地图中某点坐标为(x,y),对应栅格地图中坐标为[x*map.info.width+y]。

三、实例代码

ros::Publisher mapPub = nodeHandler.advertise<nav_msgs::OccupancyGrid>("laser_map", 1, true);

//发布地图.
void PublishMap(ros::Publisher &map_pub)
{
    nav_msgs::OccupancyGrid rosMap;

    rosMap.info.resolution = mapParams.resolution;
    rosMap.info.origin.position.x = 0.0;
    rosMap.info.origin.position.y = 0.0;
    rosMap.info.origin.position.z = 0.0;
    rosMap.info.origin.orientation.x = 0.0;
    rosMap.info.origin.orientation.y = 0.0;
    rosMap.info.origin.orientation.z = 0.0;
    rosMap.info.origin.orientation.w = 1.0;

    rosMap.info.origin.position.x = mapParams.origin_x;
    rosMap.info.origin.position.y = mapParams.origin_y;
    rosMap.info.width = mapParams.width;
    rosMap.info.height = mapParams.height;
    rosMap.data.resize(rosMap.info.width * rosMap.info.height);

    //0~100
    int cnt0, cnt1, cnt2;
    cnt0 = cnt1 = cnt2 = 100;
    for (int i = 0; i < mapParams.width * mapParams.height; i++)
    {
        if (pMap[i] == 50)
        {
            rosMap.data[i] = -1.0;
        }
        else
        {

            rosMap.data[i] = pMap[i];
        }
    }

    rosMap.header.stamp = ros::Time::now();
    rosMap.header.frame_id = "map";

    map_pub.publish(rosMap);
}

打赏

码字不易,如果对您有帮助,就打赏一下吧O(∩_∩)O

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: nav_msgs::OccupancyGridROS的一种消息类型,用于表示一个二维的栅格地图,其每个栅格都有一个占据概率值,表示该栅格被占据的可能性。这种消息类型通常用于机器人导航和路径规划等应用。 ### 回答2: nav_msgs::occupancygridROS的一个消息类型,用于表示一个二维的占据栅格地图。在ROS,占据栅格地图是机器人导航和定位系统常用的一种表示方式。 nav_msgs::occupancygrid消息包含了以下重要成员变量: - header:用于存储消息的元数据,如时间戳和坐标系信息。 - info:描述了栅格地图的元数据,包括地图的分辨率、宽度、高度、原点位置等。 - data:一个一维int8数组,存储了每个栅格的占据状态。每个栅格的值可以是-1、0或100,分别表示未知、空闲或占据状态。 占据栅格地图是通过将环境划分为一个个离散的方格(即栅格)来表示。每个栅格存储了该区域的占据状态,用于判断机器人在环境的导航和避障。栅格地图通常被构建为二值化的图像,其每个栅格要么为空闲,要么被占据。在导航,栅格地图可以用于规划路径、避障和定位。 nav_msgs::occupancygrid消息可被用于ROS的多种导航和避障算法,如SLAM(同时定位与地图构建)、路径规划算法等。该消息可通过ROS的发布-订阅模型进行传递,发布方可以将栅格地图发布到特定的话题,订阅方可以通过订阅该话题获取栅格地图数据,从而进行相关的导航和避障计算。 总之,nav_msgs::occupancygridROS用于表示占据栅格地图的消息类型,可用于机器人导航和避障的路径规划、避障等算法。 ### 回答3: nav_msgs::OccupancyGrid地图占据格子)是ROS(机器人操作系统)的消息类型之一。它提供了一个在机器人导航广泛使用的二维地图表示。 这个消息类型定义了一个二维网格地图,其每个单元格表示地图上的一个位置。每个单元格可以包含三个值之一:-1、0或100。-1表示表示该位置是未知的,0表示该位置是自由的,即可通过的,100表示该位置是被占据的,即不可通过的。其可以通过一个多维数组来表示。每个元素代表了一个地图格子上的状态。 nav_msgs::OccupancyGrid还包含有关地图的一些基本信息,例如地图的原点、分辨率和宽度等。原点是地图坐标系的起始点,通过它可以将地图的位置与其他坐标系进行对齐。分辨率表示每个格子的大小,以米为单位。宽度表示地图在水平方向上的格子数量。 通过使用nav_msgs::OccupancyGrid消息,机器人可以获取到其周围环境的地图信息,并根据该信息进行路径规划和导航。当机器人需要行驶时,可以根据当前位置和目标位置,以及地图信息,使用导航算法来计算最佳路径,并在移动过程检测可能的障碍物。 总之,nav_msgs::OccupancyGrid消息类型是用于表示机器人导航的二维地图信息的一种常用ROS消息类型,它提供了地图格子的状态信息,并允许机器人进行路径规划和导航。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值