【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)

在这里插入图片描述

文章目录

  • 例说mapserver静态地图参数
    • 1. Rviz中显示的地图
    • 2. mapserver保存地图详解
    • 3. 补充实验

例说mapserver静态地图参数

1. Rviz中显示的地图

在建图过程中,rviz会显示建图的实时情况,其输出来自于SLAM,浅蓝色区域为地图大小,黑色像素为障碍物占据栅格,白色区域为自由区域。
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第1张图片

2. mapserver保存地图详解

rosrun map_server map_saver -f test

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第2张图片
图片尺寸为 384 × 384 384\times 384 384×384,地图图片的尺寸不依赖于Gazebo和rviz的初始默认栅格,而是根据机器人探索情况动态增长

eog test.pgm

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第3张图片

测试一下,当机器人跑的特别远时,地图尺寸会变化
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第4张图片

打开配置文件vim test.yaml

image: test.pgm
resolution: 0.050000
origin: [-10.000000, -10.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

PGM是一种用于表示2D栅格地图的图像格式,通常在机器人导航和SLAM中使用。
image: test.pgm:

这行指定地图图像文件的名称,通常是以.pgm为扩展名的文件,包含了地图的栅格信息。
resolution: 0.050000:

这行指定了地图的分辨率,即每个像素的大小。在这个例子中,像素的边长为0.05单位(通常以米为单位)。
origin: [-10.000000, -10.000000, 0.000000]:

这行指定了地图的原点,也就是地图中(0, 0)栅格的位置。在这个例子中,原点的X坐标为-10,Y坐标为-10,Z坐标为0。这表示地图的左下角位于世界坐标系中的(-10, -10)位置。
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第5张图片

negate: 0:

这个参数通常用于指定地图的占据信息。如果值为0,表示地图中0值代表占据(occupied),而255值代表空闲(free)。如果值为1,表示地图中0值代表空闲,255值代表占据。
occupied_thresh: 0.65:

这个参数指定了栅格被认为是占据的概率阈值。在地图中,每个栅格通常用一个0到1之间的值表示占据的概率。如果概率大于或等于0.65,则该栅格被认为是占据的。
free_thresh: 0.196:

静态地图信息可以通过话题/map获取,其消息类型为nav_msgs::OccupancyGrid
消息解析

# 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

其中数据部分表明了,未知区域为-1,其他数值为占据概率,取值范围为[0,100],结合上面的配置,不难得出,在生成的地图中,取值65以上的点为黑色点,取值19.6以下的为白色点,灰色未知区域为-1

这个参数指定了栅格被认为是空闲的概率阈值。如果概率小于0.196,则该栅格被认为是空闲的。
Gazebo中的场景
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第6张图片Gazebo中栅格数量为 20 × 20 20\times 20 20×20,每个栅格1米,地图大小 384 × 384 384\times 384 384×384,精度0.05m/pix,那么地图表达 19.2 × 19.2 m 19.2\times 19.2m 19.2×19.2m,基本一致

对于具体的地图坐标与换算算法(ROS实现),可参考
https://blog.csdn.net/weixin_47012067/article/details/121875590

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第7张图片
在ROS的地图中,地图pgm是以像素为单位标记的,每个像素点(map.info.resolution)代表0.05m,即地图的分辨率(精度)为0.05m。

例如,下图上的星星,他的位置在像素层面上的坐标为 ( 400 , 150 ) (400, 150) (400,150),则 x : 400 x:400 x400像素, y : 150 y:150 y150像素。这个机器人距离地图原点的实际距离是:横坐标方向为 400 × 0.05 = 20 m 400 \times 0.05=20m 400×0.05=20m,纵坐标方向为 150 × 0.05 = 7.5 m 150 \times 0.05=7.5m 150×0.05=7.5m

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第8张图片

3. 补充实验

实际上Gazebo和rviz中直接看到的栅格是图形化工具,与生成的地图没有直接关系
world文件中

<model name='ground_plane'>
      <static>1static>
      <link name='link'>
        <collision name='collision'>
          <geometry>
            <plane>
              <normal>0 0 1normal>
              <size>100 100size>
            plane>
          geometry>
          <surface>
            <friction>
              <ode>
                <mu>100mu>
                <mu2>50mu2>
              ode>
              <torsional>
                <ode/>
              torsional>
            friction>
            <contact>
              <ode/>
            contact>
            <bounce/>
          surface>
          <max_contacts>10max_contacts>
        collision>
        <visual name='visual'>
          <cast_shadows>0cast_shadows>
          <geometry>
            <plane>
              <normal>0 0 1normal>
              <size>100 100size>
            plane>
          geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Grey</name>
            script>
          material>
        visual>
        <self_collide>0self_collide>
        <kinematic>0kinematic>
        <gravity>1gravity>
      link>
    model>

这个是地平面的尺寸,将其改为30 30明显变化了(灰色区域),但是其并非在rviz中的基本版面
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第9张图片在Gazebo中点击World->GUI->grid
可以发现栅格数量和栅格大小都是可以指定的
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第10张图片只是度量工具,沿墙有10个格子,每个格子1m,表明墙有10m
将栅格数量修改为10,栅格大小修改为2后,发现其占5个格子,仍然是10m,同时,所建的静态地图仍然为精度0.05,尺寸 384 × 384 384\times 384 384×384
rviz的栅格同样如此,也是可以指定数量和大小的,同样也不会影响建图,所以gazebo和rviz中的栅格只不过是图形化的度量工具。
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)_第11张图片

你可能感兴趣的:(日常问题,ROS,SLAM,C++,rviz,gazebo,机器人)