详细介绍ROS中的map_server

详细介绍ROS中的map_server

map_server 是 ROS (Robot Operating System) 中的一个功能包,它提供了一个用于处理二维地图的节点。该功能包主要有两个核心组件:map_server 和 map_saver。它们分别用于加载地图到 ROS 系统并从系统中保存地图。

  1. map_server:这是一个用于加载地图的节点。它从文件系统中读取一个 YAML 格式的配置文件和一个图像文件(PGM、PNG 等)。配置文件包含地图的基本信息,如分辨率、原点、图像文件名等。map_server 将地图发布为 nav_msgs/OccupancyGrid 消息类型,使其他 ROS 节点能够访问和使用地图数据。通常,map_server 在启动文件中启动,并加载地图文件。例如:
1
2
3
4
<launch>
<node name="map_server" pkg="map_server" type="map_server" args="$(find my_package)/maps/my_map.yaml" />
</launch>

  1. map_saver:这是一个用于从 ROS 系统保存地图的命令行工具。它订阅发布为 nav_msgs/OccupancyGrid 消息类型的地图,并将其保存为一个图像文件(默认为 PGM 格式)和一个 YAML 配置文件。map_saver 的一个常见用例是保存 SLAM(Simultaneous Localization and Mapping)算法生成的地图。要使用 map_saver,请在终端中运行以下命令:
1
2
rosrun map_server map_saver -f <output_path_and_filename>

是保存地图文件和 YAML 配置文件的路径和文件名(不包括扩展名)。例如:

这将在 ~/maps 目录中创建名为 my_saved_map.pgm 和 my_saved_map.yaml 的文件。

总之,map_server 功能包提供了一个用于加载、发布和保存二维地图的简单接口。它是许多 ROS 导航和定位任务的基础,如基于已知地图的定位和路径规划。

修改map_server发布的话题

要修改map_server发布的话题名称,您可以使用remap标签在启动文件中将默认的map话题重映射为所需的新话题名称。以下是如何在启动文件中更改map_server发布的话题名称的示例。

  1. 创建一个名为custom_map_server.launch的新启动文件,或编辑现有的启动文件。假设您的地图文件名为my_map.yaml,并位于名为my_package的ROS包的maps目录中。
  2. 在启动文件中,添加map_server节点,并使用remap标签更改发布的话题名称。例如,将默认的/map话题重映射为/custom_map:
1
2
3
4
5
6
<launch>
<node name="map_server" pkg="map_server" type="map_server" args="$(find my_package)/maps/my_map.yaml">
<remap from="map" to="custom_map"/>
</node>
</launch>

现在,map_server节点将地图发布到名为/custom_map的话题上,而不是默认的/map话题。您需要确保其他使用地图数据的节点(如导航、定位和路径规划)订阅到正确的新话题。如有需要,可以使用相同的方法修改这些节点的订阅话题。


详细介绍ROS中的map_server
https://qiangsun89.github.io/2023/04/27/详细介绍ROS中的map-server/
作者
Qiang Sun
发布于
2023年4月27日
许可协议