welcom ! Handel home

2025年3月5日 星期三

建置 ROS + Gazebo + RViz Docker Compose

 📌 建置 ROS + Gazebo + RViz Docker Compose

這份 docker-compose.yml 會建立 三個容器

  1. ros_core:ROS Master,負責 ROS 通訊
  2. gazebo_sim:Gazebo 模擬環境
  3. rviz_gui:RViz 視覺化

支援 GUI (DISPLAY 變數),讓 Gazebo 和 RViz 在主機上顯示
透過 network 讓 ROS 節點能互相通訊
使用 volumes 保持開發環境穩定


🚀 docker-compose.yml

yaml
version: '3.9' services: ros_core: image: ros:noetic-ros-core container_name: ros_core networks: - ros_network command: ["roscore"] gazebo_sim: image: osrf/ros:noetic-desktop-full container_name: gazebo_sim networks: - ros_network depends_on: - ros_core environment: - DISPLAY=${DISPLAY} # 讓 GUI 在主機顯示 - QT_X11_NO_MITSHM=1 - ROS_MASTER_URI=http://ros_core:11311 - ROS_IP=gazebo_sim volumes: - /tmp/.X11-unix:/tmp/.X11-unix command: ["gazebo"] rviz_gui: image: osrf/ros:noetic-desktop-full container_name: rviz_gui networks: - ros_network depends_on: - ros_core environment: - DISPLAY=${DISPLAY} - QT_X11_NO_MITSHM=1 - ROS_MASTER_URI=http://ros_core:11311 - ROS_IP=rviz_gui volumes: - /tmp/.X11-unix:/tmp/.X11-unix command: ["rviz"] networks: ros_network: driver: bridge

🚀 主要功能解析

🔹 1️⃣ ros_core(ROS Master)

  • 負責 ROS 訊息傳輸
  • 使用 ros:noetic-ros-core 最小化的 ROS 版本
  • 設定 ROS_MASTER_URI 讓其他容器能夠連接 ROS Master

🔹 2️⃣ gazebo_sim(Gazebo 模擬環境)

  • 使用 osrf/ros:noetic-desktop-full,內建 Gazebo
  • 顯示 GUI(Gazebo)
    • DISPLAY=${DISPLAY}
    • volumes: /tmp/.X11-unix:/tmp/.X11-unix
  • 設定 ROS_MASTER_URI 連接 ros_core

🔹 3️⃣ rviz_gui(RViz 視覺化)

  • 使用 osrf/ros:noetic-desktop-full
  • 顯示 GUI(RViz)
  • 連接 ros_core 來讀取 ROS 資料

🚀 使用方式

1️⃣ 啟動 Docker Compose

bash
xhost +local:docker # 允許 Docker 存取 X Server docker-compose up -d # 啟動 ROS, Gazebo, RViz

🚀 這會自動啟動三個容器,Gazebo 和 RViz 會顯示在主機上!

2️⃣ 進入 gazebo_sim 容器

bash
docker exec -it gazebo_sim bash

🔹 測試 ROS 是否正常運作

bash
rostopic list

應該能看到 ROS Topic,例如:

bash
/clock /gazebo/link_states /gazebo/model_states /tf

3️⃣ 進入 rviz_gui 容器

bash
docker exec -it rviz_gui bash

🔹 手動啟動 RViz

bash
rviz

🚀 你應該可以看到 RViz 的 GUI 介面!


🚀 停止與清理

📌 停止所有容器

bash
docker-compose down

📌 清理無用的 Docker 資源

bash
docker system prune -af

📌 總結

服務名稱用途
ros_core啟動 ROS Master,處理 ROS 訊息
gazebo_sim啟動 Gazebo,執行機械手臂模擬
rviz_gui啟動 RViz,視覺化機械手臂

💡 這份 docker-compose.yml 讓 ROS、Gazebo、RViz 能夠無縫協作,並支援 GUI! 🚀

沒有留言: