如果要使用 Docker 啟動 osrf/ros:indigo-desktop-full
並讓 Gazebo 或其他 GUI 應用程式顯示在主機上,
你需要讓 Docker 容器能夠存取 X11 顯示伺服器。
步驟 1:確保 Docker 已安裝
若尚未安裝 Docker,可使用以下指令安裝:
確保 Docker 服務正在運行:
步驟 2:允許 X11 顯示 GUI
讓主機允許 docker
容器使用 X11:
你可以驗證顯示變數:
通常會顯示類似 :0
或 :1
,這是 X11 顯示伺服器的地址。
步驟 3:使用 Docker 啟動 ROS Indigo
執行以下指令,並確保:
-e DISPLAY=$DISPLAY
讓 Docker 使用 X11-v /tmp/.X11-unix:/tmp/.X11-unix
掛載 X11 介面--net=host
讓 ROS 使用相同的網路環境(可選)
啟動 ROS Indigo 容器
這會進入容器的 bash 介面,你可以在這裡執行 ROS 指令。
步驟 4:測試 GUI(Rviz 或 Gazebo)
進入容器後,啟動 rviz
或 Gazebo
來測試顯示功能:
或者:
如果 GUI 成功顯示在主機上,表示 X11 轉發成功。
步驟 5:啟動 ROS Master 並運行 Gazebo
在 Docker 容器內:
另開一個新的終端機,再次進入 Docker 容器:
然後啟動 Gazebo:
這樣 Gazebo 會在主機上顯示。
其他技巧
1. 使用 --device
掛載 GPU(如果有 NVIDIA 顯卡)
如果你使用 NVIDIA 顯卡並希望 GPU 加速:
這樣可以讓 Gazebo 或 RViz 更流暢地運行。
2. 永久允許 X11
如果不想每次都執行 xhost +local:docker
,可以在 ~/.bashrc
或 ~/.profile
中加入:
這樣每次開機時都會自動允許 X11 共享。
總結
- 確保 Docker 已安裝
- 允許 Docker 容器使用 X11 (
xhost +local:docker
) - 使用
docker run
掛載DISPLAY
和 X11 - 測試 GUI 應用程式(Gazebo, RViz)
- 啟動 ROS 並運行模擬環境
這樣你就可以在 Docker 容器內運行 ROS Indigo + Gazebo,並在主機顯示介面上查看結果! 🚀
#3===============================================
sudo docker run -it --rm \
--net=host \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--privileged \
--name ros_container \
osrf/ros:indigo-desktop-full bash -c "
useradd -m -s /bin/bash ubuntu && \
echo 'ubuntu:ubuntu' | chpasswd && \
su - ubuntu"
#=======================================
apt update && apt install -y \
libgl1-mesa-glx \
libgl1-mesa-dri \
libqt5gui5 \
mesa-utils \
x11-apps
解決方案 前提條件 你需要確保宿主機上已經安裝了 X11 服務器(例如,Linux 上通常是 Xorg)。
你需要從宿主機將顯示環境傳遞到容器中。
步驟 1:檢查宿主機的顯示環境
在宿主機上運行:
bash
echo $DISPLAY
通常會輸出 :0 或類似的值。如果沒有輸出,說明宿主機的 X11 環境尚未正確設置,需先解決這部分。
步驟 2:啟動 Docker 容器時傳遞顯示環境
啟動容器時,需要將宿主機的 DISPLAY 環境變量和 X11 套接字(socket)共享給容器。假設你使用的是 ros:noetic 映像,命令如下:
bash
docker run -it \
--env "DISPLAY=$DISPLAY" \
--volume "/tmp/.X11-unix:/tmp/.X11-unix" \
--name ros_container \
ros:noetic
--env "DISPLAY=$DISPLAY":將宿主機的顯示環境傳遞到容器。
--volume "/tmp/.X11-unix:/tmp/.X11-unix":共享 X11 套接字,讓容器可以與宿主機的 X 服務器通信。
步驟 3:安裝必要的圖形庫
ros:noetic 映像可能缺少一些運行 RViz 和 Gazebo 所需的圖形庫。你需要在容器中安裝它們。進入容器後運行:
bash
apt update && apt install -y \
libgl1-mesa-glx \
libgl1-mesa-dri \
libqt5gui5 \
mesa-utils \
x11-apps
libgl1-mesa-glx 和 libgl1-mesa-dri:提供 OpenGL 支持。
libqt5gui5:提供 Qt 的 GUI 支持。
mesa-utils 和 x11-apps:用於測試圖形環境。
步驟 4:測試圖形環境
在容器中運行以下命令測試 X11 是否正常工作:
bash
xclock
如果一個時鐘窗口彈出,說明 X11 配置成功。如果失敗,會有進一步的錯誤訊息可以排查。
步驟 5:啟動 RViz 或 Gazebo
現在嘗試啟動 RViz 或 Gazebo:
bash
rosrun rviz rviz
或
bash
rosrun gazebo_ros gazebo
沒有留言:
張貼留言