LoginSignup
6
2

最新のAutowareをGPUなしで環境構築できるDockerfileを作った

Last updated at Posted at 2023-12-16

はじめに

屋外で使う差動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の中身
    説明はコメントで書きました。
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イメージを使用することができます。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2