2025年9月30日 星期二

使用 Docker Ubuntu 20.04/ROS Noetic 專案

 對於您的 Ubuntu 20.04/ROS Noetic 專案,使用 Docker 是最佳的環境管理方式。

ROS 官方在 Docker Hub 上提供了多種映像檔(Image)。最常用的是包含完整桌面的版本,讓您可以在容器內使用 Rviz 等圖形化工具。


官方 ROS Noetic Docker 映像檔選擇

映像檔 Tag基礎環境內容物適用情境
osrf/ros:noetic-desktop-fullUbuntu 20.04 (Focal)包含所有套件(ROS Base, Perception, Simulators, Rviz, Gazebo)。推薦用於開發、模擬和視覺化。
ros:noetic-ros-base-focalUbuntu 20.04 (Focal)只有 ROS 核心套件(沒有 GUI 工具)。適用於部署在自走車底盤或無頭(headless)伺服器上。

我們以 osrf/ros:noetic-desktop-full 為例,演示如何啟動並在容器內運行 ROS 節點。


ROS Noetic Docker 啟動範例 (包含 GUI 支援)

由於您需要處理機械手臂和自走車的視覺化(例如 Rviz),您必須讓 Docker 容器能夠存取主機的圖形介面 (GUI)。

步驟 0: 啟用主機 X 伺服器存取 (僅 Linux 需要)

主機 (Host) 終端機中執行此命令,允許 Docker 容器連接到您的顯示器:

Bash
xhost +local:docker

步驟 1: 運行 Docker 容器

主機 (Host) 終端機中,使用以下指令啟動容器。這個指令包含了所有必要的參數來啟用互動模式和 GUI 顯示:

Bash
docker run -it --rm \
  --env="DISPLAY" \
  --env="QT_X11_NO_MITSHM=1" \
  --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
  osrf/ros:noetic-desktop-full \
  /bin/bash
參數說明
-it互動模式 (Interactive & TTY):允許您在容器內輸入指令並看到輸出。
--rm自動移除 (Auto-Remove):容器停止後會自動移除,不留下無用殘餘。
--env="DISPLAY"環境變數:將主機的 DISPLAY 變數傳遞給容器,這是 Linux GUI 顯示的關鍵。
--volume="..."掛載 X 伺服器:將主機的 X 伺服器通訊端掛載到容器內,讓 GUI 訊息可以傳輸。
osrf/ros:noetic-desktop-full映像檔名稱:使用官方完整桌面版 ROS Noetic 映像檔。
/bin/bash啟動指令:在容器內啟動一個 Bash shell,讓您可以操作。

步驟 2: 在容器內運行 ROS 範例

一旦容器啟動,您的終端機提示符會變成容器內的 Bash 提示符 (通常是 root@<container-id>:/#)。

A. 啟動 roscore (ROS 1 的核心)

容器內的第一個終端機執行:

Bash
roscore

(記得 ROS 1 必須先啟動 roscore!)

B. 啟動視覺化節點 (turtlesim)

主機上新開一個終端機,再次使用 docker exec 進入同一個容器:

  1. 找出容器名稱/ID: 在主機終端機輸入 docker ps

    • 例如,容器 ID 是 a1b2c3d4e5f6

  2. 進入容器並運行節點:

    Bash
    # 使用容器 ID 或名稱
    docker exec -it <容器 ID 或名稱> /bin/bash
    
    # 在容器內的終端機中執行:
    rosrun turtlesim turtlesim_node
    
    • 驗證: 您應該會看到一個新的 turtlesim 視窗彈出在您的主機桌面。

C. 啟動控制節點

主機上再新開一個終端機,再次進入同一個容器:

  1. 進入容器:

    Bash
    docker exec -it <容器 ID 或名稱> /bin/bash
    
    # 在容器內的終端機中執行:
    rosrun turtlesim turtle_teleop_key
    
    • 驗證: 當您在此終端機按下鍵盤方向鍵時,turtlesim 視窗中的烏龜將會移動。

總結

通過這個範例,您已經成功地在一個獨立、乾淨的 Docker 容器中啟動了完整的 ROS Noetic 環境,並實現了圖形介面 (GUI) 的顯示,這對您進行機械手臂的 Rviz 視覺化和 MoveIt! 規劃至關重要。

您現在就可以在這個環境中安裝 MoveIt! 或其他您需要的套件,而不會影響您主機的作業系統。


下一步: 您是否希望了解如何將您的本地 catkin_ws 工作空間或 URDF 檔案透過 Volume Mount 的方式掛載到這個容器內進行開發?



沒有留言:

張貼留言