SLAM 建图后,RViz插件slam toolbox Save Map 无响应?只需要命令行保存地图
近在基于humble做 SLAM 建图时,建好的地图却在点击 RViz 的Save Map按钮时毫无反应,甚至后续 RViz 直接陷入无响应卡顿,只能通过终端强制终止进程。好在最终找到了更稳定的解决方案 —— 通过nav2_map_server的命令行工具成功保存地图,今天就把这个踩坑经历和解决方案分享给大家,帮同路人少走弯路。
一、场景还原:辛苦建图,RViz 保存按钮却 “摆烂”
先和大家同步一下我的操作环境,避免大家踩版本不兼容的坑:
- 系统:Ubuntu 22.04 LTS
- ROS2 版本:Humble
- 仿真包:wpr_simulation2(基于启智 ROS 机器人源码)
按照教程的标准流程,建图完成后,接下来就是关键的保存步骤,定位到Create Map Tool区域下的Save Map按钮,信心满满地点击 —— 结果啥反应都没有。

没有弹出文件保存对话框,终端没有任何日志输出,地图也没有被写入任何路径。我不死心,多次点击Save Map按钮,结果更糟:RViz 界面开始卡顿,鼠标拖动视角无响应,最终直接 “卡死”,只能通过Ctrl+C终止终端中的 SLAM 节点,再通过kill命令强制关闭 RViz。
更让人无奈的是,重启 RViz 和 SLAM 节点后,之前建好的地图也丢失了,只能重新控制机器人建图一遍。
二、柳暗花明:命令行保存地图,稳如泰山
在多次尝试 RViz 图形界面保存失败后,我转向了 ROS2 的命令行工具 —— 事实证明,对于 ROS2 的很多功能,命令行往往比图形界面更稳定、更可靠。而保存 SLAM 地图,nav2_map_server提供的map_saver_cli工具就是最优解。
具体操作步骤(全程可复制,零踩坑)
-
保持建图节点在线(关键!)建图完成后,不要关闭运行
slam.launch.py的终端,确保 SLAM 节点、激光雷达节点、机器人状态节点都处于正常运行状态(终端无报错,RViz 虽可能卡顿但地图数据已存在)。 -
新开一个终端,激活 ROS2 环境打开新终端,进入自己的 ROS2 工作空间,激活环境变量(这一步不能少,否则无法找到
nav2_map_server工具):# 进入我的ROS2工作空间(根据自己的路径修改) cd ~/ros2wpr_ws # 激活环境变量 source install/setup.bash -
切换到地图保存目标路径(可选,推荐)为了后续导航加载方便,我直接切换到
wpr_simulation2包的maps目录下保存(避免后续复制文件)cd ~/ros2wpr_ws/src/wpr_simulation2/maps如果不需要直接保存到包目录,也可以在当前终端路径保存,后续再复制文件即可。
-
执行命令行保存地图输入核心保存命令,一键生成地图文件:
ros2 run nav2_map_server map_saver_cli -f map -
验证保存结果执行命令后,终端会输出类似如下的成功日志:
[INFO] [1768560000.123456789] [map_saver_cli]: Saved map to map.pgm and map.yaml此时再查看当前目录,会发现已经生成了两个关键文件:
map.pgm:栅格地图图像文件(灰度图格式,存储地图的视觉信息)map.yaml:地图配置文件(存储地图分辨率、原点、阈值等关键参数,供导航栈加载使用)
到这里,地图就已经成功保存了,全程没有任何卡顿,也不需要依赖 RViz 的图形界面,简直不要太稳定!
三、后续收尾:让保存的地图支持导航加载
保存好地图后,还需要完成两步简单操作,确保后续启动navigation.launch.py时能正常加载地图:
- 重新编译 ROS2 工作空间如果是将地图保存到了
wpr_simulation2的maps目录,需要重新编译包,让地图文件被复制到install目录:cd ~/ros2wpr_ws colcon build --packages-select wpr_simulation2 source install/setup.bash - 验证导航加载启动导航环境,测试地图是否能正常加载:
此时 RViz 会正常显示保存的地图,ros2 launch wpr_simulation2 navigation.launch.pyGlobal Status会显示OK,没有任何地图加载报错,后续就可以进行自主导航操作了。
四、复盘:为什么 RViz 的 Save Map 按钮会无响应?
事后我也复盘了一下,结合 ROS2 Humble 的使用经验,总结出几点可能导致 RVizSave Map按钮无响应的原因:
- 插件兼容性问题:
SlamToolboxPlugin与 RViz2 的部分版本存在兼容性小 bug,尤其在 Humble 版本中,图形界面的交互逻辑偶尔会出现异常。 - RViz 资源占用过高:建图过程中,激光雷达数据、点云数据、地图栅格数据持续刷新,导致 RViz 内存占用过高,界面卡顿,无法响应按钮点击事件。
- 服务通信异常:
Save Map按钮本质是触发了一个 ROS2 服务调用,若 SLAM 节点与 RViz 插件之间的服务通信中断,按钮点击就无法触发实际的保存逻辑,且不会有任何报错反馈。 - 路径写入权限问题:RViz 插件默认的保存路径可能没有写入权限,导致保存操作静默失败,没有任何提示信息。
而命令行工具map_saver_cli直接跳过了 RViz 的图形界面中间层,直接与 SLAM 节点进行通信,获取地图数据并写入文件,既避免了插件兼容性问题,也减少了资源占用,因此更稳定、更可靠。
五、总结
通过这次踩坑经历,我也总结出一个 ROS2 开发的小经验:当图形界面操作出现异常时,不妨试试对应的命令行工具,往往能收获惊喜。
对于 SLAM 建图保存地图这个场景,ros2 run nav2_map_server map_saver_cli -f map这条命令可以说是 “万能解”,既避免了 RViz 卡顿无响应的问题,又能快速、稳定地生成导航所需的地图文件,推荐所有 ROS2 导航初学者收藏使用。
最后,希望这篇博客能帮到和我有同样遭遇的同学,让大家在建图导航的路上少走弯路,顺利完成自己的 ROS2 项目!
更多推荐


所有评论(0)