welcom ! Handel home

2025年2月16日 星期日

ROS 2 Humble + Gazebo Fortress + NVIDIA RTX 4070

 

ROS 2 Humble + Gazebo Fortress + NVIDIA RTX 4070 Dockerfile

要讓 ROS 2 Humble + Gazebo FortressNVIDIA RTX 4070 上運行,需要使用 NVIDIA Docker(nvidia-container-toolkit),並確保容器內可使用 CUDANVIDIA 驅動


🔹 Dockerfile 設計重點

  1. 基於 nvidia/cuda 官方映像,確保 CUDA 正確安裝。
  2. 安裝 ROS 2 HumbleGazebo Fortress
  3. 安裝 nvidia-container-toolkit 來支援 GPU 加速
  4. 啟用 OpenGL 與 Vulkan,確保 GUI 可運行。
  5. 適用於 Ubuntu 22.04,並支援 NVIDIA RTX 4070

🚀 Dockerfile:ROS 2 + Gazebo + NVIDIA GPU

[dockerfile]

# 使用 NVIDIA 官方 CUDA 11 映像(Ubuntu 22.04) FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 # 設定環境變數 ENV DEBIAN_FRONTEND=noninteractive # 更新系統並安裝基本工具 RUN apt update && apt install -y \ lsb-release wget gnupg2 curl software-properties-common mesa-utils \ && rm -rf /var/lib/apt/lists/* # 設定 Gazebo 軟體庫 RUN sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" > /etc/apt/sources.list.d/gazebo-stable.list' \ && wget https://packages.osrfoundation.org/gazebo.key -O - | apt-key add - # 安裝 NVIDIA 驅動和工具(確保 GPU 可用) RUN apt update && apt install -y \ nvidia-driver-535 nvidia-container-toolkit \ && rm -rf /var/lib/apt/lists/* # 安裝 ROS 2 Humble RUN apt update && apt install -y \ ros-humble-desktop \ ros-humble-ros-gz \ && rm -rf /var/lib/apt/lists/* # 安裝 Gazebo Fortress(Ignition Gazebo) RUN apt update && apt install -y \ gazebo-fortress \ && rm -rf /var/lib/apt/lists/* # 設定 NVIDIA OpenGL 和 Vulkan 支援 ENV NVIDIA_DRIVER_CAPABILITIES=all ENV NVIDIA_VISIBLE_DEVICES=all ENV LIBGL_ALWAYS_INDIRECT=1 # 設定 Gazebo 環境變數 ENV GZ_SIM_RESOURCE_PATH=/usr/share/gz # 設定 ROS 2 環境變數 RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc RUN echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc # 設定工作目錄 WORKDIR /root/ros2_ws # 預設執行指令 CMD ["bash"]

🔹 建立 Docker 映像

Dockerfile 所在的目錄執行:

bash
docker build -t ros2_humble_gazebo_nvidia .

這將建立 支援 RTX 4070 GPUROS 2 Humble + Gazebo Fortress Docker 環境。


🔹 運行容器並使用 GPU

執行 Docker 容器,並確保使用 NVIDIA Docker

bash
docker run --gpus all -it --rm --net=host \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ ros2_humble_gazebo_nvidia

📌 參數說明

  • --gpus all:允許容器訪問所有 GPU。
  • --net=host:確保 Gazebo 和 ROS 2 通訊正常。
  • -e DISPLAY=$DISPLAY:允許 GUI(Gazebo 界面)顯示。
  • -v /tmp/.X11-unix:/tmp/.X11-unix:共享 X11 來顯示 Gazebo 界面。

🔹 測試 GPU 是否可用

在容器內執行:

bash
nvidia-smi

如果能看到 GPU 設備資訊,表示 NVIDIA Docker 設定成功。

也可以測試 OpenGL:

bash
glxinfo | grep "OpenGL renderer"

如果回傳:

yaml
OpenGL renderer string: NVIDIA RTX 4070

表示 GPU 可用


🔹 測試 Gazebo

1️⃣ 啟動 Gazebo

在 Docker 容器內執行:

bash
gz sim shapes.sdf

這將打開一個 Gazebo 模擬場景,如果畫面正常顯示,代表 Gazebo 與 GPU 配置成功

2️⃣ 檢查 ROS 2 話題

開啟另一個終端,執行:

bash
ros2 topic list

你應該會看到 Gazebo 發布的話題,例如:

bash
/clock /model/info /physics/step

📌 結論

這個 Dockerfile 建立了一個 支援 NVIDIA RTX 4070ROS 2 Humble + Gazebo Fortress 環境,並確保:

  • NVIDIA GPU(CUDA) 可用
  • Gazebo Fortress 正確運行
  • 支援 OpenGL、Vulkan
  • 可以顯示 Gazebo GUI

🚀 現在你可以在 Docker 環境中使用 Gazebo 來進行 ROS 2 模擬了! 🎉

沒有留言: