welcom ! Handel home

2025年2月11日 星期二

Gazebo 無法使用 NVIDIA GPU(OpenGL 使用 llvmpipe)

 

🚨 Gazebo 無法使用 NVIDIA GPU(OpenGL 使用 llvmpipe

glxinfo | grep "OpenGL" 結果顯示:

#OpenGL vendor string: VMware, Inc.
#OpenGL renderer string: llvmpipe (LLVM 9.0.1, 256 bits)

🔴 問題

Gazebo 沒有使用 NVIDIA GPU,而是使用 軟體渲染 llvmpipe(這會導致極低的圖形效能)。
目標

讓 Gazebo 正確使用 NVIDIA GPU,啟用 硬體加速(OpenGL / CUDA)


📌 1️⃣ 確保 NVIDIA GPU 可用

nvidia-smi

然後在 Docker 容器內 測試:

bash
docker run --rm --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi

如果成功,表示 Docker 已經啟用 GPU,可以繼續下一步。


📌 2️⃣ 重新啟動 Gazebo 容器並啟用 GPU你需要 確保 Docker 容器啟用了 NVIDIA GPU 支援

bash
$sudo docker stop ros_gazebo0_desktop6080 $sudo docker rm ros_gazebo0_desktop6080
$sudo docker run -itd \ --restart=always \ --name=ros_gazebo0_desktop6080 \ --gpus all \ -p 6080:80 -p 5900:5900 \ -v ./data:/home/ubuntu/data \ -e RESOLUTION=1920x1080 \ -e NVIDIA_VISIBLE_DEVICES=all \ -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics \ -v /tmp/.X11-unix:/tmp/.X11-unix \ ros-gazebo-desktop3

🔹 關鍵參數:

  • --gpus all啟用所有 NVIDIA GPU
  • -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics啟用圖形渲染
  • -v /tmp/.X11-unix:/tmp/.X11-unix讓 Gazebo 可以使用 X11

進入容器:

bash
docker exec -it ros_gazebo0_desktop6080 bash

然後重新測試:

bash

glxinfo | grep "OpenGL"

如果 OpenGL vendor 變成 NVIDIA Corporation,則成功啟用 GPU。

📌 3️⃣ 確保 NVIDIA OpenGL 正確加載

如果 glxinfo 仍然顯示 VMware, Inc.(軟體渲染),請執行:

bash

apt update apt install -y mesa-utils libgl1-mesa-glx libglx-mesa0 libgles2-mesa

然後手動加載 NVIDIA 驅動:

bash
export LIBGL_ALWAYS_INDIRECT=1 export __GLX_VENDOR_LIBRARY_NAME=nvidia

測試:

bash
glxinfo | grep "OpenGL"

如果輸出:

yaml
OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: NVIDIA GeForce RTX 4070

✅ 表示 GPU 正確啟用。

如果要 永久生效,請執行:

bash
echo "export LIBGL_ALWAYS_INDIRECT=1" >> ~/.bashrc echo "export __GLX_VENDOR_LIBRARY_NAME=nvidia" >> ~/.bashrc source ~/.bashrc


📌 4️⃣ 強制 Gazebo 使用 GPU

Gazebo 需要 OpenGL 才能使用 GPU 渲染,你可以在容器內執行:

bash
export GAZEBO_GPU=1 gazebo --verbose

然後檢查 Gazebo 的日誌,應該會顯示:

csharp
[Msg] Loading OpenGL rendering engine

如果還是使用 CPU 渲染,你可以強制指定 NVIDIA OpenGL:

bash
export LIBGL_ALWAYS_INDIRECT=1 export __GLX_VENDOR_LIBRARY_NAME=nvidia gazebo --verbose

如果要 永久啟用 GPU,請編輯 ~/.bashrc

bash
echo "export GAZEBO_GPU=1" >> ~/.bashrc echo "export LIBGL_ALWAYS_INDIRECT=1" >> ~/.bashrc echo "export __GLX_VENDOR_LIBRARY_NAME=nvidia" >> ~/.bashrc source ~/.bashrc

📌 5️⃣ 確保 NVIDIA OpenGL 被 Docker 容器正確使用

有時候 Docker 未自動掛載 NVIDIA OpenGL 庫,請在容器內執行:

bash
ldconfig -p | grep libGL

如果 libGL.so 沒有指向 NVIDIA,請重新安裝:

bash
apt install --reinstall libgl1-mesa-glx libglx-mesa0 libgles2-mesa

然後:

bash
ldconfig

再重新執行:

bash
glxinfo | grep "OpenGL"

📌 6️⃣ 測試 Gazebo GPU 加速

現在你可以嘗試運行 Gazebo:

bash
roslaunch gazebo_ros empty_world.launch

然後 打開 gzclient

bash
gzclient

Gazebo 界面內,檢查 Rendering 設置,看看 是否啟用了 Hardware Acceleration




沒有留言: