這裏我們介紹一個在gazebo中快速生成柵格地圖的方法。以前的生成一般需要通過slam進行建圖,這個過程比較麻煩,而且容易產生漂移。我們現在通過gazebo中的一些插件來實現這個過程,變得更加合理而且地圖非常標準化。

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#gazebo


我們在做ros導航的時候經常會需要地圖,無論是2d的柵格地圖還是3d的點雲地圖,有沒有辦法直接生成gazebo中的這樣的標準版本的地圖呢?當然有,以下是本項目的實現的細節。

PGM Map Creator 項目

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#算法_02


架構與目錄

  • 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,確認座標與機器人框架對齊
  1. 迭代:調小 --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 https://github.com/chan-yuu/pgm_map_creator.git

然後通過build.sh進行編譯

./build.sh

最後運行即可

python3 gui/map_creator_gui.py

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#gazebo_03

界面的相關的配置和説明在README當中有具體的説明。

注意,如果不需要3D的點雲地圖,可以勾選2d,更快的生成柵格地圖。

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#人工智能_04


「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#gazebo_05


進度條沒有那麼準確,基本上80多就可以算是結束了,只要有對應的文件就可以了。

在map文件夾下可以找到:

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#算法_06


選擇了2d之後就只有2d的柵格地圖,3d的pcd幾乎沒有高度值:

「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#人工智能_07


「 Gazebo仿真 」地圖創建、多模型顯示、基本指令_gazebo導入地圖模型_Robot_#gazebo_08