はじめに
屋外で使う差動2輪の自律移動ロボットのためにAutowareを使おうとしていたのですが、うまくいかなかったのと、公道を走行する用途ではないのでAutowareの採用は諦め、現在はAutowareのLocalization機能など一部を起動して使用しています。
そこでロボットに搭載できるGPUがないミニPCで動くようにしたいのと、yolox などCUDAに依存した機能は使わないので簡単に最新のautowareのmainブランチ環境構築できるようにDockerfileを作りました。
Dockerファイルのリポジトリはこちらです。
Autoware本体とAutoware Universeのリポジトリはこちら
Dockerfileとdocker compose.ymlの説明
- 以下Dockerfileの中身(折りたたみ)
説明はコメントで書きました。
内容はubuntu22.04イメージをベースに以下の記事通りDockerfile内でコマンドを実行しています。
またコンテナ起動してすぐチュートリアルを実行できるようにサンプルのマップをwgetでダウンロードしています。
details
# ベースイメージを指定
FROM ubuntu:22.04
# メンテナ情報
LABEL maintainer="your-email@example.com"
# タイムゾーン設定
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
git \
curl \
lsb-release \
vim
# Autowareリポジトリのクローン
RUN git clone https://github.com/autowarefoundation/autoware.git ~/autoware
# 依存関係のインストール
WORKDIR /root/autoware
RUN yes | ./setup-dev-env.sh --no-nvidia --no-cuda-drivers
# ROS2パッケージのインストール
RUN mkdir src
RUN curl -s https://raw.githubusercontent.com/autowarefoundation/autoware/main/autoware.repos -o autoware.repos
RUN vcs import src < autoware.repos
RUN /bin/bash -c "source /opt/ros/humble/setup.bash" \ && rosdep update && rosdep install -y --from-paths src --ignore-src --rosdistro humble
RUN . /opt/ros/humble/setup.sh \ && /bin/bash -c "colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release"
# 環境設定
RUN echo 'source /root/autoware/install/setup.bash' >> ~/.bashrc && \
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc
# サンプルマップのダウンロードと解凍
RUN apt-get update && apt-get install -y \
unzip
RUN gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd'
RUN unzip -d ~/autoware_map ~/autoware_map/sample-map-planning.zip
# 西新宿マップのダウンロードと解凍
RUN gdown -O ~/autoware_map/ 'https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip'
RUN unzip -d ~/autoware_map ~/autoware_map/nishishinjuku_autoware_map.zip
# コンテナ起動時のデフォルトコマンド
CMD ["/bin/bash"]
- 以下docker-compose.ymlの中身
説明はコメントで書きました。
version: '3' # Docker Composeのバージョン指定
services:
autoware:
build:
context: . # Dockerfileがあるディレクトリのパス
dockerfile: Dockerfile # 使用するDockerfileの名前
image: autoware-no-cuda:latest # 作成するイメージの名前とタグ
container_name: autoware # コンテナの名前
environment:
- DISPLAY=${DISPLAY} # ホストマシンのディスプレイ設定をコンテナに渡す
- QT_X11_NO_MITSHM=1 # X11の設定
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:rw # X11のUnixソケットをマウント
network_mode: "host" # ホストのネットワークを使用
ipc: "host" # ホストのIPCネームスペースを使用 これがないとDockerコンテナ間のROS2通信ができなかった
tty: true # TTYを割り当てる
stdin_open: true # 標準入力を開く
使い方
docker イメージの作成からコンテナ起動まで
git clone https://github.com/porizou/autoware_dockerfile_latest/tree/main
cd autoware_dockerfile_latest
xhost +local:docker
docker compose up --build
すでにautoware-no-cuda:latestイメージがある場合でコンテナを起動したいとき
cd autoware_dockerfile_latest
xhost +local:docker
docker compose up
チュートリアルのPlanning Simulationの実行
ホストPC側で別のターミナルを開き
docker exec -it autoware bash
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
走行開始
docker exec -it autoware bash
ros2 service call /api/operation_mode/change_to_autonomous autoware_adapi_v1_msgs/srv/ChangeOperationMode {}
チュートリアルのrosbagシミュレーションの実行
そのままでは実行できないのでlaunchファイルを書き換える必要があります。
書き換え方法は以下記事のRosbag replay simulation項を参照してください。
おわりに
最新のautowareのmainブランチの環境をGPUなしで構築するDockerfileとdocker-compose.ymlの使い方を書きました。
要望や修正点があればこの記事のコメント欄かgithubのissueでいただけると助かります。
公式のDockerイメージを使う
こちらのページにあるイメージのタグを選んでdocker pull して公式のDockerイメージを使用することができます。