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

# はじめに

屋外で使う差動2輪の自律移動ロボットのためにAutowareを使おうとしていたのですが、うまくいかなかったのと、公道を走行する用途ではないのでAutowareの採用は諦め、現在はAutowareのLocalization機能など一部を起動して使用しています。
そこでロボットに搭載できるGPUがないミニPCで動くようにしたいのと、yolox などCUDAに依存した機能は使わないので簡単に最新のautowareのmainブランチ環境構築できるようにDockerfileを作りました。


Dockerファイルのリポジトリはこちらです。

https://github.com/porizou/autoware_dockerfile_latest/tree/main


Autoware本体とAutoware Universeのリポジトリはこちら

https://github.com/autowarefoundation/autoware

https://github.com/autowarefoundation/autoware.universe


# Dockerfileとdocker compose.ymlの説明

- 以下Dockerfileの中身（折りたたみ）
説明はコメントで書きました。

内容はubuntu22.04イメージをベースに以下の記事通りDockerfile内でコマンドを実行しています。
またコンテナ起動してすぐチュートリアルを実行できるようにサンプルのマップをwgetでダウンロードしています。

https://qiita.com/porizou1/items/4b731c966abbf92a8eac

<details><summary>details</summary>

```Dockerfile
# ベースイメージを指定
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"]

```

</details>


- 以下docker-compose.ymlの中身
説明はコメントで書きました。

```yaml: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 イメージの作成からコンテナ起動まで

```bash
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イメージがある場合でコンテナを起動したいとき

```bash
cd autoware_dockerfile_latest
xhost +local:docker
docker compose up
```

### チュートリアルのPlanning Simulationの実行

ホストPC側で別のターミナルを開き

```bash
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
```


走行開始

```bash
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項を参照してください。



https://qiita.com/porizou1/items/4b731c966abbf92a8eac

# おわりに

最新のautowareのmainブランチの環境をGPUなしで構築するDockerfileとdocker-compose.ymlの使い方を書きました。
要望や修正点があればこの記事のコメント欄かgithubのissueでいただけると助かります。


























https://github.com/autowarefoundation/autoware/pkgs/container/autoware-universe



# 公式のDockerイメージを使う

こちらのページにあるイメージのタグを選んでdocker pull して公式のDockerイメージを使用することができます。


https://github.com/autowarefoundation/autoware/pkgs/container/autoware-universe