Docker 設定#
Docker 提供容器化環境以執行 AutoSDV,而不需修改您的主機系統。這對於開發、測試與模擬情境很理想。
使用情境#
Docker 建議用於: - 開發與測試:在不同機器上的一致環境 - 模擬:在沒有實體硬體的情況下執行 AutoSDV - CI/CD:自動化測試與部署 - 快速評估:在不完整安裝的情況下試用 AutoSDV
先決條件#
主機系統需求#
- Ubuntu 20.04 或 22.04(其他 Linux 發行版可能可用)
- NVIDIA GPU 配備驅動程式 470+(用於 GPU 加速)
- 至少 50GB 可用磁碟空間
- 建議 16GB+ RAM
軟體需求#
-
Docker Engine(20.10 或更新版本):
-
NVIDIA Container Toolkit(用於 GPU 支援):
# Add NVIDIA repository distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list # Install nvidia-container-toolkit sudo apt update sudo apt install nvidia-container-toolkit sudo systemctl restart docker -
Docker Compose(選配,用於多容器設定):
快速開始#
步驟 1:複製 AutoSDV 儲存庫#
步驟 2:啟動 Docker 環境#
設定跨架構支援(在 x86_64 上進行 ARM64 模擬時需要):
步驟 3:建置 Docker 映像#
建置 AutoSDV Docker 映像:
這會建立一個包含以下內容的映像: - Ubuntu 22.04 基底配備 ROS 2 Humble - 預先安裝的 Autoware 2025.02 - 所有 AutoSDV 相依套件 - CUDA 與 TensorRT 支援 - 感測器驅動程式函式庫(專有的除外)
步驟 4:執行容器#
啟動互動式容器會話:
您將進入一個 shell,AutoSDV 在 /home/developer/AutoSDV 準備就緒可供使用。
Docker 映像詳情#
映像架構#
AutoSDV Docker 映像是為 **ARM64 架構**建置的,以匹配 Jetson 平台。在 x86_64 主機上,QEMU 提供透明模擬。
預先安裝的軟體#
- ROS 2 Humble 配備桌面工具
- Autoware 2025.02 二進位發行版
- CUDA 12.3 與 TensorRT 8.6
- Cyclone DDS 配置為預設值
- 開發工具:git、vim、tmux、htop
磁碟區掛載#
make run 指令會自動掛載:
- /tmp/.X11-unix 用於 GUI 應用程式
- NVIDIA GPU 裝置以進行 CUDA 存取
進階使用#
自訂執行選項#
使用額外的磁碟區或埠執行:
docker run -it --rm \
--gpus all \
--network host \
-v /path/to/data:/data \
-v /dev:/dev \
--privileged \
autosdv:latest
開發工作流程#
對於主動開發,掛載您的本地程式碼:
docker run -it --rm \
--gpus all \
-v $(pwd):/workspace/AutoSDV \
-w /workspace/AutoSDV \
autosdv:latest
GUI 應用程式#
為視覺化工具啟用 X11 轉發:
xhost +local:docker
docker run -it --rm \
--gpus all \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
autosdv:latest
然後執行 GUI 應用程式,例如 RViz:
多容器設定#
為複雜部署建立 docker-compose.yml:
version: '3.8'
services:
autosdv:
image: autosdv:latest
runtime: nvidia
network_mode: host
privileged: true
volumes:
- /dev:/dev
- ./data:/data
environment:
- ROS_DOMAIN_ID=0
- DISPLAY=${DISPLAY}
command: ros2 launch autosdv_launch autosdv.launch.yaml
monitoring:
image: autosdv:latest
runtime: nvidia
network_mode: host
environment:
- ROS_DOMAIN_ID=0
command: python3 /home/developer/AutoSDV/src/launcher/autosdv_launch/autosdv_launch/autosdv_monitor.py
執行:
容器管理#
儲存與載入映像#
匯出映像以供部署:
在另一台機器上載入:
清理#
移除容器與映像:
限制#
硬體存取#
Docker 容器的硬體存取有限:
- 無法直接存取光達(USB/乙太網路感測器需要特殊配置)
- 無 CAN 匯流排(除非使用 --privileged 旗標)
- **相機存取**需要裝置掛載
效能#
- x86_64 上的 ARM64 模擬會降低效能
- GPU 穿透會增加開銷
- 網路效能可能因 Docker 網路模式而異
感測器驅動程式#
Docker 映像透過 rosdep 包含大多數驅動程式,但:
- ZED SDK:由於硬體需求,無法在 Docker 中完全使用。實體部署需要原生安裝。
- Blickfeld:透過容器中的 rosdep 安裝
- Velodyne:透過容器中的 rosdep 安裝
對於完整的 ZED 相機支援,請使用原生安裝與 ZED SDK 安裝指南。
疑難排解#
GPU 無法存取#
驗證 NVIDIA runtime:
網路問題#
使用主機網路進行 ROS 2 通訊:
權限被拒#
對於裝置存取,使用權限執行:
建置失敗#
清除 Docker 快取並重新建置:
與 CI/CD 整合#
GitHub Actions 範例#
name: AutoSDV Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Docker
uses: docker/setup-buildx-action@v1
- name: Build Docker image
run: |
cd docker
make build
- name: Run tests
run: |
docker run --rm autosdv:latest \
bash -c "cd /home/developer/AutoSDV && colcon test"
Jenkins Pipeline 範例#
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'cd docker && make build'
}
}
stage('Test') {
steps {
sh 'docker run --rm autosdv:latest make test'
}
}
}
}