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吧。

### 如何在ROS使用Gazebo创建和编辑地图 #### 创建自定义的地图文件 为了在 Gazebo 中创建新的 `.world` 文件,可以利用 Gazebo 自带的 Building Editor 工具。启动该工具的方法是在终端输入 `gazebo --verbose worlds/empty.world` 并打开 GUI 后选择顶部菜单栏中的 “Create” -> "Building Editor"[^1]。 完成设计之后,通过点击界面上方的 “File” 菜单来保存所构建的世界模型为一个新的 `.world` 文件。这使得用户能够轻松地定制化模拟环境而无需深入了解 SDF (Simulation Description Format) 的细节语法。 #### 加载已有的世界文件 当希望加载之前已经创建好的特定场景时,在命令行执行如下指令即可: ```bash roslaunch gazebo_ros empty_world.launch world_name:=<path_to_your_world_file> ``` 这里的 `<path_to_your_world_file>` 应替换为你实际的地图路径[^3]。这种方式允许快速切换不同的训练场地或是测试条件下的机器人行为表现。 #### 编辑现有的.map文件用于导航规划 如果目标是从零开始制作适合 SLAM 或者路径规划算法使用的栅格图,则通常先要在物理空间内布置好障碍物等元素再运行相应的建图程序如 gmapping 或 hector_slam 来获取最终的地图数据[^2]。得到的地图可以通过修改其对应的配置参数适应不同需求的应用场合。 一旦拥有了`.map`格式的地图文件后, 可以将其换成可供rviz显示的形式以便后续处理: ```bash rosrun map_server map_saver -f /tmp/my_map ``` 上述命令将会把当前内存里的地图存储下来,并命名为 `/tmp/my_map.pgm` 和 `/tmp/my_map.yaml`。这两个文件共同描述了一个静态二维占用网格表示法的地图,其中 .pgm 是图像文件用来展示地形特征;.yaml 则记录了比例尺和其他元信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白云千载尽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值