【Unity】オープンソース自動運転シミュレーター「AWSIM」のチュートリアル

この記事では，TIER IVがオープンソースで提供している自動運転シュミレーター「AWSIM」について紹介します．ここでは，入門編を紹介します．

https://tier4.github.io/AWSIM/GettingStarted/QuickStartDemo/


https://tier4.github.io/AWSIM/GettingStarted/SetupUnityProject/

# 目次
* Nvidia GPUの設定
* Unityを使用しないデモ(Quick Start Demo)
* Unityを使用したチュートリアル(Setup Unity Project)

# 環境
推奨PCスペック

|OS             |Ubuntu 20.04|
|:--------------|----------|
|CPU            |6コア，12スレッド 以上|
|GPU            |RTX2080Ti 以上|
|Nvidiaドライバー |>=460.27.03|


# Nvidia GPUの設定
すでにNvidiaをインストールし，nvidia-smiが通る方は，飛ばしてください

以下のコマンドでインストール可能なversionが表示されます．recommendと表示されたversionをインストールしていきます
```bash
$ ubuntu-drivers devices
```
以下のサイトでrecommendされたversionと一致するCUDA ToolKitのversionを確認してください．

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions__table-cuda-toolkit-driver-versions

確認したCUDA Tool Kitのversionをインストールしていきます．下記のサイトで該当するCUDA Toolkitのサイトに遷移し，自分の使用しているOSをクリックしていくと

https://developer.nvidia.com/cuda-toolkit-archive

![Screen Shot 2022-12-12 at 11.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/9880dd00-f40e-b38f-4525-19ae506cd164.png)
インストールするためのコマンドが表示されるので，順に沿ってインストールしてください．

インストールが完了したら，以下のコマンドでGPUを認識しているか確認してください．
```bash
$ nvidia-smi
```
<font color="Red">この際に以下のエラーが出た方は，</font>
```bash
Failed to initialize NVML: Driver/library version mismatch
```
CUDA等をアンインストールし，先ほど確認したnvidia-diver-versionをインストールすることで nvidia-smiが通るようになると思います．
```bash
$ sudo apt purge nvidia* libnvidia*
$ sudo apt install nvidia-driver-{該当するversion}
```


# Unityを使用しないデモ(Quick Start Demo)
### localhostの設定
.bashrcの一番下の行などに以下のコードを追加してください．
```bash:~/.bashrc
export ROS_LOCALHOST_ONLY=1
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

if [ ! -e /tmp/cycloneDDS_configured ]; then
    sudo sysctl -w net.core.rmem_max=2147483647
    sudo ip link set lo multicast on
    touch /tmp/cycloneDDS_configured
fi
```

### Vulkan Graphics Library のインストール
すでにインストールしている方は，飛ばしてください．
```
sudo apt install libvulkan1
```

### AWSIMのデモをダウンロード
wgetを使用し，AWSIM.zipをダウンロードし，zipファイルを解凍します．
```bash
$ wget https://github.com/tier4/AWSIM/releases/download/v1.0.1/AWSIM_v1.0.1.zip
$ unzip　AWSIM_v1.0.1.zip
```
解凍したファイルを実行可能にします．
```bash
chmod +x {解凍したファイル名}
```

### 実際に起動する
```bash
./{解凍したファイル名}
```

今回はAutowareについて紹介せずに終わります．



# Unityを使用したチュートリアル(Setup Unity Project)
### Unityのインストール

https://docs.unity3d.com/hub/manual/InstallHub.html?_ga=2.88052184.1578664082.1666244865-1853321066.1666244865#install-hub-linux

```bash
$ sudo sh -c 'echo "deb https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'
$ wget -qO - https://hub.unity3d.com/linux/keys/public | sudo apt-key add -
$ sudo apt update
$ sudo apt-get install unityhub
```
Unity Hubの最新versionが入ります．(自分は3.3.0)

<font color="Red">Unity Hubがうまく起動出来なかった方</font>は，以下のコマンドでversion2.4.6をインストールできます
```bash
$ wget https://public-cdn.cloud.unity3d.com/hub/prod/UnityHub.AppImage
$ chmod +x UnityHub.AppImage
$ ./UnityHub.AppImage

#この後に説明するversionのインストール方法
$ ./UnityHub.AppImage unityhub://2021.1.7f1/d91830b65d9b
```

### Unity Hub のセットアップ
はじめに以下のコマンドでAWSIMをダウンロードします．
```
$ git clone https://github.com/tier4/AWSIM.git
```

次にUnity Hubを開きます．
右上の**Install Editor**をクリックし，**download archive**クリックしWebページに遷移します．
![Screenshot from 2022-12-12 14-05-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/d725d66b-af98-8df3-fc23-f3c53b318002.png)

遷移したページから**Unity 2021.1.7**のversionを探し，Unity Hubを開いてインストールしてください．
![Screenshot from 2022-12-12 14-07-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/258ba9b9-1eee-5a5c-65fb-199646ec7744.png)

インストールが終わり次第，ProjectsのOpenをクリックし，先ほどインストールしたGitHubのリポジトリ(AWSIM)を開き，クリックして実行してください．
![Screenshot from 2022-12-12 14-08-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/3c387fb2-6b2c-e597-78c2-c9e628b5775d.png)

次に[Japan_Tokyo_Nishishinjuku.unitypackage](https://github.com/tier4/AWSIM/releases/download/v1.0.0/Japan_Tokyo_Nishishinjuku.unitypackage)をダウンロードします
コマンドで行う方は，wgetでダウンロードしてください
```
$ wget https://github.com/tier4/AWSIM/releases/download/v1.0.0/Japan_Tokyo_Nishishinjuku.unitypackage
```

ダウンロードが終わり次第，起動させておいたUnityのAssets -> Import Package -> Custom Package をクリックし，先ほどダウンロードした**Japan_Tokyo_Nishishinjuku.unitypackage**を選択し，インポートします．
![Screen Shot 2022-12-15 at 16.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/35964c8c-2e06-b8aa-748d-ad363e65f6ee.png)

インポートが終了したら，Asset→AWSIM→Scenes→Main→AutowareSimulation(.unity)を選択し，Unityの実行ボタン▶️押します。

### 実際に車を操作する
車をキーボードで操作するために，以下の画像のように該当箇所にチェックマークを入れてください．
![Screen Shot 2022-12-14 at 14.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/ce712277-8bad-9e0b-ee5d-5c57be930140.png)

キーバインドのデフォルトは，以下のようになっています．
```bash:Assets/AWSIM/Scripts/Vehicles/VehicleKeyboardInput.cs
// ----- key binds -----
// up arrow : Accelerate
// down arrow : Deceleration
// left/right arrow : Steering
// D : Drive gear
// P : Parking gear
// R : Reverse gear
// N : Neutral gear
// 1 : Left turn signal
// 2 : Right turn signal
// 3 : Hazard
// 4 : Turn signal offp
```

実際に動かした動画がこちらです．
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744789/5237a421-87b6-99c5-a694-9c4ee421d190.gif)


最後まで読んでくださり，ありがとうございました．