這裡是一個 完整的 Docker 範本,
用於建立 ROS 2 Humble + Gazebo Classic 11 + RViz2 的開發環境(包含 GUI 支援),
適合你要開發機器人、模擬與視覺化。
✅ 環境設定總覽
組件 | 版本 |
---|---|
ROS 2 | Humble |
Gazebo | Classic v11 |
RViz | RViz2(跟 ROS 2 一起) |
Ubuntu | 22.04 |
GUI 支援 | X11(含 xhost 配置) |
編譯工具 | colcon , vcstool , rosdep , xacro , check_urdf , gazebo_ros |
📁 建立資料夾結構
bashmkdir -p ros2_gz_docker_ws
cd ros2_gz_docker_ws
touch Dockerfile docker-compose.yml .dockerignore
🐳 Dockerfile
:建立 ROS2+Gazebo 環境
DockerfileFROM ros:humble ENV DEBIAN_FRONTEND=noninteractive # Install common dev tools + GUI + Gazebo Classic RUN apt update && apt install -y \ build-essential \ python3-colcon-common-extensions \ python3-vcstool \ python3-rosdep \ python3-pip \ gazebo11 \ ros-humble-gazebo-ros-pkgs \ x11-apps \ liburdfdom-tools \ ros-humble-xacro \ && rm -rf /var/lib/apt/lists/* # Initialize rosdep RUN rosdep init || true RUN rosdep update # Create workspace RUN mkdir -p /root/ros2_ws/src WORKDIR /root/ros2_ws # Source ROS 2 SHELL ["/bin/bash", "-c"] RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc # Default entrypoint CMD ["bash"]
📦 docker-compose.yml
(支援 X11 顯示 RViz/Gazebo)
yamlversion: '3.8'
services:
ros2dev:
build: .
container_name: ros2_humble_gz
environment:
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ./src:/root/ros2_ws/src:rw
network_mode: host
privileged: true
stdin_open: true
tty: true
🔒 .dockerignore
dockerignore*.log *.pyc __pycache__/ build/ install/
🚀 啟動步驟
-
允許 GUI 分享:
bashxhost +local:root
-
建立與啟動容器:
bashdocker compose up --build
-
進入容器內建套件:
bashcolcon build source install/setup.bash ros2 launch your_pkg your_launch_file.py
🧪 測試指令
在容器中執行:
bashrviz2 # 測試 RViz GUI
gazebo # 測試 Gazebo GUI
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_cpp listener
🛠️ 可選:加入你自己的 ROS2 專案
放入 src/
,然後重新 colcon build
即可,例如:
bashcd /root/ros2_ws
ros2 pkg create my_robot_pkg --build-type ament_python --dependencies rclpy
colcon build
🧼 離開時清除
bashdocker compose down
xhost -local:root
📁 補充:可安裝其他工具
-
ros-humble-joint-state-publisher-gui
-
ros-humble-rqt-*
-
ros-humble-robot-state-publisher
加進 apt install
區塊即可。
是否需要我也幫你做一個簡單的 roscar4wheel
測試用套件、含 Gazebo+RViz launch?可作為進一步測試。
下面把 「ROS 2 Humble + Gazebo Classic + RViz2」的 Docker 範本 再升級,讓容器可以直接吃到 主機的 GPU(OpenGL/Vulkan 加速)。以下以 NVIDIA GPU 為主要示範,AMD/Intel 在最後也附上簡化做法。
0 ️⃣ 先決條件(主機端)
事項 | 指令 / 文件 |
---|---|
NVIDIA 驅動(≥ 470.xx)已安裝在主機 | nvidia-smi |
NVIDIA Container Toolkit 安裝好 | https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html |
Docker CLI ≥ 20.10 | docker --version |
X11 正在跑本機(Wayland 需開 XWayland 或改用 XVFB/VNC) | echo $DISPLAY |
nvidia
runtime,可用 --gpus all
啟用。1 ️⃣ .dockerignore
(同前)
dockerignore*.log *.pyc __pycache__/ build/ install/
2 ️⃣ Dockerfile
(加入 GL/Vulkan 依賴)
DockerfileFROM ros:humble ENV DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] # 1) 系統&編譯工具 + Gazebo + 常用 ROS 工具 RUN apt update && apt install -y \ build-essential \ python3-colcon-common-extensions \ python3-vcstool \ python3-rosdep \ python3-pip \ gazebo \ ros-humble-gazebo-ros-pkgs \ liburdfdom-tools \ ros-humble-xacro \ mesa-utils \ && rm -rf /var/lib/apt/lists/* # 2) 初始化 rosdep RUN rosdep init || true && rosdep update # 3) 建立工作區 RUN mkdir -p /root/ros2_ws/src WORKDIR /root/ros2_ws # 4) 預載 ROS 環境 RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc CMD ["bash"]
不用把 NVIDIA 驅動裝進映像檔——nvidia‑docker 會自動把主機驅動與 OpenGL/Vulkan .so 掛進容器。
3 ️⃣ docker-compose.yml
(核心:--gpus all
+ X11 & CUDA env)
yamlversion: "3.8"
services:
ros2dev:
build: .
container_name: ros2_humble_gz_gpu
# ---------- GPU ----------
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
# 若不支援 compose 的 deploy,亦可在 CLI: `docker compose --profile=gpu up --build`
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all # 或 "0,1" 指定 GPU
- NVIDIA_DRIVER_CAPABILITIES=graphics,utility,video,compute
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ./src:/root/ros2_ws/src:rw
network_mode: host
privileged: true
stdin_open: true
tty: true
如果不用 docker‑compose
bashdocker build -t ros2_humble_gz_gpu .
xhost +local:root
docker run --gpus all -it \
--env DISPLAY=$DISPLAY \
--env QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd)/src:/root/ros2_ws/src \
--network host \
--privileged \
--name ros2_humble_gz_gpu \
ros2_humble_gz_gpu
4 ️⃣ 啟動與測試
bash# 啟動(compose)
xhost +local:root
docker compose up --build
# 或 CLI 版,見上段
# 容器內測試 GPU
glxinfo | grep "OpenGL renderer" # 應顯示你的 NVIDIA GPU 名稱
glxgears # 看到齒輪跑起來即成功
# Gazebo & RViz2
gazebo # 應開啟 Gazebo GUI,FPS > 60 (依硬體)
rviz2 # RViz2 正常顯示
5 ️⃣ 將工作區與 GUI 整合
-
把你的 ROS2 套件放到 宿主機
src/
,會自動同步進容器/root/ros2_ws/src
-
容器內執行:
bashcd /root/ros2_ws rosdep install --from-paths src -ir colcon build --symlink-install source install/setup.bash
-
啟動你的 launch:
bashros2 launch roscar4wheel bringup_gz.launch.py gui:=true
6 ️⃣ AMD / Intel GPU 小抄
-
Mesa OpenGL 基本上已包含在映像檔,主機要啟用
--device=/dev/dri
:bashdocker run -it \ --device /dev/dri:/dev/dri \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ ros2_humble_gz_gpu
-
若用 Wayland → 開
xhost +si:localuser:root
+QT_QPA_PLATFORM=wayland
/XWayland 。
常見問題速解
症狀 | 解法 |
---|---|
Gazebo 黑畫面 / RViz 閃退 | 確定 glxinfo 已顯示 GPU;若無,多半是 xhost 或 NVIDIA runtime 未正確安裝 |
libGL 找不到 | 升級驅動或重新安裝 NVIDIA Container Toolkit |
FPS 很低 | 檢查 Docker 沒跑在 --cap-add=SYS_PTRACE 之類 sandbox,必要時關 vblank |
現在你有了 GPU 加速 的 ROS 2 + Gazebo Classic + RViz2 Docker 環境!
如要加入 ros_gz_bridge、Gazebo Sim Ignition 或 CUDA pytorch 等,只要在 Dockerfile 補裝對應套件並保持 --gpus all
即可。
沒有留言:
張貼留言