自動運転AIチャレンジ2023シミュレーション大会の環境構築メモ（GPU環境）

# 自動運転AIチャレンジ2023シミュレーション大会の環境構築メモ（GPU環境）

環境構築時の個人メモを残します。間違ってたり過不足あったり、不備見つけたらコメントいただけるとありがたいです。

基本的には下記の公式手順に沿って準備をしています。

https://automotiveaichallenge.github.io/aichallenge2023-racing/setup/index.html

**大きく異なるのは、今回は最初から前回大会（2023年インテグレーション大会）の環境が入っていることです。**

## PC環境
OS: Ubuntu 22.04 LTS
CPU: 13th Gen Intel(R) Core(TM) i7-13700F (16コア)
GPU: GeForce RTX 3060 12GB
Memory: 32GB
Storage: 1.0TB

自動運転AIチャレンジ2023年インテグレーション大会の環境が入ったPCにインストールします。

https://qiita.com/kiwsdiv/items/33b80778f0ddceb6ec44

## Environment Setup
### Nvidia-Driverインストール

既にインストール済みなのでスキップします。以前インストールしたときのメモはこちら。

https://qiita.com/kiwsdiv/items/3e8dac099cb27c7c4b01

```bash 
$ nvidia-smi
Sun Dec 10 17:38:58 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05   Driver Version: 525.147.05   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   38C    P8    15W / 170W |    186MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2134      G   /usr/lib/xorg/Xorg                 64MiB |
|    0   N/A  N/A      2289      G   ...ome-remote-desktop-daemon        2MiB |
|    0   N/A  N/A      2327      G   /usr/bin/gnome-shell              117MiB |
+-----------------------------------------------------------------------------+
```

### コースの準備

`aichallenge2023-racing/docker/aichallenge` ディレクトリを作成します。

```
$ mkdir -p ~/aichallenge2023-racing/docker/aichallenge
```
**※ [後述](https://qiita.com/kiwsdiv/items/474c851c1ee0b83b9e29#2%E5%A4%A7%E4%BC%9A%E7%94%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)しますが、適当なディレクトリ名でOKでした。`aichallenge2023-racing`ディレクトリがあることで、後で`git lfs clone https://github.com/AutomotiveAIChallenge/aichallenge2023-racing`するときに邪魔になります。後程、このクローンしたディレクトリにGoogleDriveからダウンロードしたAWSIMをコピーします。**

[GoogleDrive](https://drive.google.com/drive/folders/1EjgBxB_x0_xRla7_FdPaeEkiOU3vxW7e)から最新のAWSIM_GPU.zipをダウンロードし、aichallenge2023-racing/docker/aichallenge内に大会用AWSIM実行ファイルを展開.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/23025f48-152e-b6f5-dc28-0979b906ff39.png)

パーミッションを図のように変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/af275a87-397a-44ea-67f7-0ad8d0105cd3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/f8910409-d62f-cd0e-cf94-344b855d9ff6.png)

ファイル'AWSIM_x86_64'をダブルクリックで起動すると、以下のような画面が表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/4e64a804-db36-e7cd-b134-4f749d989a32.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/1160f616-3043-a92d-243a-3ff2d551b69c.png)

### Dockerの事前準備

#### docker, rocker, git lfs のインストール
下記のインストールを行う。すでに2023年インテグレーション大会の環境にはインストール済みなのでスキップします。

インストール済みパッケージの確認を行っていきます。

- docker
```bash
$ docker --version
Docker version 24.0.4, build 3713ee1
```

```bash
$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

```
$ docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
```
ここでpermission deniedとなりました。どうやら、
> dockerコマンドはデフォルトではroot権限なしには叩けないようになっています。

とのことなので、権限を付与します。
参照： [Got permission denied while trying to connect to the Docker daemon socket at 解決方法](https://qiita.com/Nw3965/items/8e75da0012cb7a451cc2)

```bash
$ sudo chmod 666 /var/run/docker.sock
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
```
毎回権限を与えるのが面倒なので、起動時に実行するようにしたい。
参考：[Linux起動時にコマンド実行して欲しいので調査した](https://tfca-wasabi.com/network-6/)


- rocker：Dockerコンテナ内のRviz、rqtなどのGUIを使用するために用います。

```bash
$ sudo apt list --installed | grep rocker
python3-rocker/jammy,now 0.2.12-100 all [インストール済み]
```

- git lfs
```bash
$ sudo apt list --installed | grep git-lfs
git-lfs/jammy,now 3.3.0 amd64 [インストール済み、3.4.0 にアップグレード可]
```

## Dockerイメージの準備・起動 〜 Autowareの準備

### 1.Dockerイメージを入手
```bash
$ docker pull ghcr.io/automotiveaichallenge/aichallenge2023-racing/autoware-universe-no-cuda

```
user groupに自分のアカウントを追加、以下のコマンドでgroupsにdockerが追加されていることを確認。
```
$ sudo usermod -aG docker $USER
$ groups $USER
[USER]: [USER] adm cdrom sudo ... docker
```
再度loginし直します。
docker imagesで以下のような表示が見えていることを確認します。

```bash
$ docker images
REPOSITORY                                                                       TAG                           IMAGE ID       CREATED         SIZE
ghcr.io/automotiveaichallenge/aichallenge2023-racing/autoware-universe-no-cuda   latest                        b7fdf9678bc2   2 weeks ago     7.32GB
~~~
```

### 2.大会用データのダウンロード

```
$ git lfs clone https://github.com/AutomotiveAIChallenge/aichallenge2023-racing
WARNING: `git lfs clone` is deprecated and will not be updated
          with new flags from `git clone`

`git clone` has been updated in upstream Git to have comparable
speeds to `git lfs clone`.
fatal: destination path 'aichallenge2023-racing' already exists and is not an empty directory.
Error(s) during clone:
`git clone` failed: exit status 128
```

先ほど[コースの準備](https://qiita.com/kiwsdiv/items/474c851c1ee0b83b9e29#%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%AE%E6%BA%96%E5%82%99)で作った`aichallenge2023-racing`フォルダが邪魔らしいので、一旦名前変更して、再度実行します。

```
$ mv aichallenge2023-racing aichallenge2023-racing-temp
$ git lfs clone https://github.com/AutomotiveAIChallenge/aichallenge2023-racing
```

（本来は、コースの準備を後で行うべきだったかもしれません。）

### 3.大会用dockerイメージのビルド

```
$ cd aichallenge2023-racing/docker/train
```

### 4.大会用dockerコンテナの起動

GPU環境なので、以下のコマンドを実行します。
```bash
$ bash run_container.sh
```

## Dockerコンテナ内でのAWSIM起動

Dockerイメージを導入した後、`aichallenge2023-racing/docker/aichallenge`内に大会用AWSIM実行ファイルをコピーします。先ほど名前を変更したディレクトリです。
`aichallenge2023-racing/docker/aichallenge/AWSIM/AWSIM.x86_64`に配置されている状態となります。

```bash
$ cp -r aichallenge2023-racing-temp/docker/aichallenge/AWSIM aichallenge2023-racing/docker/aichallenge/
```

`docker image ls`で以下のimageが存在していることを確認します。

```bash
$ docker image ls
REPOSITORY                                                                       TAG                           IMAGE ID       CREATED          SIZE
aichallenge-train                                                                latest                        efdf5dc98b88   10 minutes ago   7.38GB
```
GPU環境用の立ち上げスクリプトを起動。

```bash
$ cd ./aichallenge2023-racing/docker/train
$ bash run_container.sh
```

コンテナ内で以下を実行して、AWSIMが立ち上がることを確認します。
```bash
$ cd /aichallenge
$ bash run_awsim.sh 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/e779da55-3661-d66c-d991-dd3d1b412a75.png)

> AWSIMからpublish・subscribeされているトピックのメッセージは，一部/aichallenge/aichallenge_ws/src/sim-msgsで定義されています．これらのメッセージを扱うには，以下のコマンドを実行してください．

と、あるので、ビルドが通ることも確認しました。

```bash
$ cd /aichallenge
$ bash build_autoware.sh
$ source /aichallenge/aichallenge_ws/install/setup.bash 
```

## 地図データosmの配置 WIP

本大会ではlanelet2_mapファイルの改変もOKらしいです。前回のインテグレーション大会で、leneletの変更を検討していたチームもあったのだが、今回はそれも工夫点になるかもしれません。

ファイル構成が以下になるように配置されています。（submit用のディレクトリ中にmapが含まれている）
```
aichallenge2023-racing
└ docker
 └ aichallenge
  └ AWSIM
  └ aichallenge_ws/src/aichallenge_submit/aichallenge_submit_launch
     └map
      └lanelet2_map.osm
```


## Autowareの動作確認

基本的には、下記の順番で実行していきます。

#### 1. AWSIMを起動
```bash
$ cd ./aichallenge2023-racing/docker/train
$ bash run_container.sh
```
コンテナ内部でAWSIM起動
```bash
$ cd /aichallenge
$ bash run_awsim.sh 
```

#### 2. Autowareを起動
```bash
$ docker exec -it [] bash
```

Rockerコンテナ内で
```bash
$ cd /aichallenge
$ bash build_autoware.sh # 必要に応じて
$ bash run_autoware.sh
```

下記のような画面(Rviz2)が表示され，車両の自動走行が開始されることを確認．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/7338b743-4daa-d482-2347-35808fc2be93.png)

デフォルトパラメータ(2023/12/10時点)で走行してみた動画は以下のようになります。

https://x.com/kixxchllng/status/1733870586131329342?s=20

## さいごに

間違っている点、不足している点あればご指摘ください。自分用の環境構築のメモですが、何かに役に立てば幸いです。

これから、CPU環境の立ち上げも行いたいです。やはり、GPU無しでも動作するのは魅力的です。