welcom ! Handel home

2025年4月15日 星期二

GPU + USB + micro-ROS 的 docker-compose.yml + Dockerfile 套件組

 以下是完整的 ROS 2 Humble 環境組合:

🎯 支援 NVIDIA GPU、USB 裝置(如 /dev/ttyACM0)、micro-ROS Agent、自訂 ubuntu 用戶,並透過 docker-compose 一鍵啟動


📁 目錄結構

ros2_microros_gpu_docker/ ├── docker-compose.yml ├── Dockerfile └── entrypoint.sh

📦 Dockerfile(支援 GPU + ROS2 + micro-ROS agent)

Dockerfile
FROM osrf/ros:humble-desktop-full # 建立使用者 RUN useradd -ms /bin/bash ubuntu && echo "ubuntu:ubuntu" | chpasswd && adduser ubuntu sudo # 安裝常用工具與 micro-ROS 相依套件 RUN apt update && apt install -y \ build-essential python3-pip \ python3-colcon-common-extensions \ git curl wget nano tmux net-tools iputils-ping \ libboost-system-dev libtinyxml2-dev libyaml-cpp-dev \ && rm -rf /var/lib/apt/lists/* # 建立 micro-ROS agent 工作空間 USER ubuntu WORKDIR /home/ubuntu/data/uros_ws RUN mkdir -p src && cd src && \ git clone -b humble https://github.com/micro-ROS/micro-ROS-Agent.git && \ git clone -b humble https://github.com/micro-ROS/micro_ros_msgs.git SHELL ["/bin/bash", "-c"] RUN source /opt/ros/humble/setup.bash && \ colcon build # 自動載入 ROS 與 micro-ROS 環境 RUN echo "source /opt/ros/humble/setup.bash" >> /home/ubuntu/.bashrc && \ echo "source /home/ubuntu/data/uros_ws/install/setup.bash" >> /home/ubuntu/.bashrc COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]

🛠 entrypoint.sh(進入後切換成 ubuntu 使用者)

bash
#!/bin/bash exec sudo -u ubuntu -H bash

🧩 docker-compose.yml(支援 GPU + USB + X11 + Volume)

yaml
version: '3.9' services: ros2dev: build: . container_name: ros2dev network_mode: host privileged: true environment: - DISPLAY=${DISPLAY} - QT_X11_NO_MITSHM=1 volumes: - /tmp/.X11-unix:/tmp/.X11-unix:rw - ./data:/home/ubuntu/data devices: - /dev/ttyACM0:/dev/ttyACM0 deploy: resources: reservations: devices: - capabilities: [gpu]

🚀 使用步驟

  1. 建立資料夾並放入三個檔案

bash
mkdir -p ros2_microros_gpu_docker/data cd ros2_microros_gpu_docker # 放入 Dockerfile、docker-compose.yml、entrypoint.sh
  1. 建立映像與啟動容器

#docker compose use docker-compose.yml 啟動
$xhost +local:ubuntu $docker compose up --build

#docker run 啟動
$docker run -itd \ --restart=always \ --name ros2dev \ --network host \ --privileged \ -e DISPLAY=$DISPLAY \ -e QT_X11_NO_MITSHM=1 \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -v $(pwd)/data:/home/ubuntu/data \ --device=/dev/ttyACM0:/dev/ttyACM0 \
--device=/dev/ttyUSB0:/dev/ttyUSB0 \ --gpus all \ ros2-humble-ubuntu:latest

  1. 容器啟動後執行:

#bash login ros2dev
$ docker exec -it ros2dev bash

#new firmware_ws prj run 建立 micro ros firmware by stm32 or esp32
#create stm32F407 freerots firmware code and build code
$ros2 run micro_ros_setup create_firmware_ws.sh freertos olimex-stm32-e407
$ros2 run micro_ros_setup build_firmware.sh

#to uros_ws prj run
$cd uros_ws
$echo "source /opt/ros/humble/setup.bash" >> /home/ubuntu/.bashrc
$source /opt/ros/humble/setup.bash
$source install/local_setup.bash


$ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0

✅ 功能總結

功能支援
micro-ROS Agent✅ 編譯內建
USB UART (/dev/ttyACM0)✅ 掛載
NVIDIA GPU✅ docker compose 支援
GUI 工具(Gazebo / RViz)✅ 透過 X11
Ubuntu 使用者✅ 預設 ubuntu/ubuntu


沒有留言: