【ROS】map_server 地图的保存和加载

前言

在 ROS 中,想要实现导航功能,首先需要一张已建好的地图。导航系统依赖这张地图进行路径规划、定位和障碍物避让等操作。本文将讲解在使用 gmappinghector_mapping 建图后,如何保存和加载地图。

本章面向 ROS 初学者,系统地讲解地图的保存与加载流程,为后续的定位与导航功能奠定基础。

我的环境:
本教程使用的环境是:实体 ROS 小车,Ubuntu 18.04,ROS1 Melodic

参考资料:


地图的保存

关于地图保存,可参考 map_server 文档 2.2 小节,如下图所示:
map_saver说明

地图保存的原理是:将当前发布在 /map 话题中的地图数据保存为本地文件。
因此,只有在建图(如 Gmapping 或 Hector 等)已经完成并且 /map 话题正在发布数据的前提下,才能执行保存操作。


常用命令:

假设我们要把地图保存到主目录下的 map 文件夹中,文件名为 my_map,命令如下:

rosrun map_server map_saver -f ~/map/my_map

执行后会生成两个文件:

  • my_map.pgm(地图图像)
  • my_map.yaml(地图元数据,包括分辨率、原点等)

地图的加载

关于地图加载,可参考 map_server 文档 2.1 小节,如下图所示:
在这里插入图片描述
地图加载的原理:将本地保存的地图配置文件(.yaml 文件)解析,并将静态地图数据发布到 /map 话题,供其他节点(如导航)订阅使用。


单独发布地图:测试地图加载

假设你已经将地图保存到主目录下的 map 文件夹中,地图元数据文件为 my_map.yaml,可以使用以下命令加载并发布地图:

rosrun map_server map_server ~/map/my_map.yaml

执行该命令后:

  • map_server 节点会自动读取:
    • my_map.yaml(地图元数据)
    • my_map.pgm(地图图像)
  • 并持续发布 /map 话题,供导航、定位等模块使用。

集成到 Launch 文件中:一键加载地图

为了将地图加载集成到启动流程中,只需在你的 .launch 文件中添加如下内容:

<node name="map_server" pkg="map_server" type="map_server"
      args="$(find your_package)/maps/your_map.yaml" output="screen">
    <param name="frame_id" value="map" />
</node>

这样,在运行该 launch 文件时,map_server 节点就会自动加载指定地图,并开始发布 /map 话题,方便与 AMCL、move_base 等模块配合使用,实现自动导航。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值