gazebo栅格地图生成(ros1/ros2均可启用)

这里我们介绍一个在gazebo中快速生成栅格地图的方法。以前的生成一般需要通过slam进行建图,这个过程比较麻烦,而且容易产生漂移。我们现在通过gazebo中的一些插件来实现这个过程,变得更加合理而且地图非常标准化。
在这里插入图片描述

PGM Map Creator 项目

在这里插入图片描述

pgm_map_creator 是一个专注于机器人地图构建的全栈式生成器:输入 Gazebo world 或自定义场景配置,即可一次性导出 2D 栅格、PNG 预览、ROS/ Nav2 元数据、点云以及二进制 Octomap,帮助团队在仿真与真实部署之间保持一致的地图基线。来源

架构与目录

  • src/include/:C++ 核心扫描引擎,负责读取世界文件、进行空间采样与占用推断
  • gui/:PyQt GUI 封装,加载 map_config.json 并调用 CLI 接口完成生成
  • scripts/:构建与辅助脚本,方便在 CI 或批处理场景复用
  • world/room.world:默认示例场景,展示多物体、多层结构处理能力
  • map_config.json:集中存放边界框、分辨率、输出名等参数

参数设计细节

  • --corners:以 (x,y,z) 对指定下右角与上左角,满足 upper_left.x > lower_right.x 等约束,可确保扫描体积合法,避免倒置坐标导致的空输出
  • --resolution:默认 0.01m,可以直接控制 PGM/Octomap 细粒度;实践中可结合机器人 LiDAR 精度调优
  • --multiplier:碰撞检测距离倍数,用于将模型碰撞体适度放大,避免窄缝漏检
  • --threshold:2D 栅格灰度阈值,0→占用、255→空闲,适合根据传感器噪声调整
  • --skip-vertical-scan:仅进行平面采样,大幅减少 3D 扫描耗时,适合只关心 2D 导航
  • --filename:统一输出前缀,生成 .pgm/.png/.yaml/.pcd/.bt 五种文件,便于归档

工作流示例

  1. 构建mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make -j$(nproc),得到 CLI 可执行文件
  2. 参数配置:在 map_config.json 中填写 corners、分辨率、阈值等信息,也可直接启动 python3 gui/map_creator_gui.py 进行可视化调参
  3. 生成:运行 GUI 或 CLI 命令;CLI 会遍历扫描体积进行射线投射,逐层写入占据概率
  4. 验证
    • 2D:xdg-open map.pgmeog map.png 快速查看占用情况
    • 3D:pcl_viewer map.pcd 检查点云稠密度
    • ROS:在 rviz 中加载 map.yaml,确认坐标与机器人框架对齐
  5. 迭代:调小 --resolution 获得更高精度,或调整 --multiplier 避免过度膨胀带来的闭塞

典型应用

  • 室内服务机器人:以真实房间尺寸配置 room.world,快速生成导航地图并在 Nav2 中复现
  • 研究对比实验:在不同阈值、分辨率组合下批量导出地图,分析路径规划性能变化
  • 教学/演示:GUI 提供滑块与输入框,降低初学者理解占据栅格概念的门槛
  • 仿真管线:通过 .bt.pcd 直接供 Octomap 或 3D SLAM 模块消费,保持环境一致性

亮点总结

  • 多格式同步输出:一次扫描、五种结果,减少繁琐的格式转换
  • 参数显式可控:从坐标框、阈值到碰撞倍数,全部在 CLI/GUI 中可追踪
  • 易集成:CMake 构建 + Python GUI,可嵌入现有 C++/ROS/仿真项目
  • 面向自动化:脚本化接口配合 map_config.json,可在 CI 中批量更新地图

用法

首先git对应的仓库:

git clone -b feat-cyun https://github.com/chan-yuu/pgm_map_creator.git

然后通过build.sh进行编译

./build.sh

最后运行即可

python3 gui/map_creator_gui.py

在这里插入图片描述

界面的相关的配置和说明在README当中有具体的说明。

注意,如果不需要3D的点云地图,可以勾选2d,更快的生成栅格地图。
在这里插入图片描述
在这里插入图片描述
进度条没有那么准确,基本上80多就可以算是结束了,只要有对应的文件就可以了。
在map文件夹下可以找到:
在这里插入图片描述
选择了2d之后就只有2d的栅格地图,3d的pcd几乎没有高度值:
在这里插入图片描述
在这里插入图片描述

如果觉得有用请点个star吧。

如果觉得有用请点个star吧。

如果觉得有用请点个star吧。

posted on 2025-12-24 23:45  ljbguanli  阅读(4)  评论(0)    收藏  举报