这里我们介绍一个在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五种文件,便于归档
工作流示例
- 构建:
mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make -j$(nproc),得到 CLI 可执行文件 - 参数配置:在
map_config.json中填写 corners、分辨率、阈值等信息,也可直接启动python3 gui/map_creator_gui.py进行可视化调参 - 生成:运行 GUI 或 CLI 命令;CLI 会遍历扫描体积进行射线投射,逐层写入占据概率
- 验证:
- 2D:
xdg-open map.pgm或eog map.png快速查看占用情况 - 3D:
pcl_viewer map.pcd检查点云稠密度 - ROS:在
rviz中加载map.yaml,确认坐标与机器人框架对齐
- 2D:
- 迭代:调小
--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吧。
4686

被折叠的 条评论
为什么被折叠?



