UbuntuにAWSIM（自動運転シミュレータ）をインストールする

# はじめに
LG Electronicsが開発を行っていた（LG）SVL SIMULATORが2022年1月をもって開発終了しました。
SVL SIMULATORのGithubは生きているものの、新たにインストールするために必要な[Node.js](https://github.com/nodesource/distributions)のインストールができなくなっているとともに、そもそもUbuntu18.04 LTSのサポートも終わりが近づいてきました（無課金だと2023年1月予定）。

そこでUbuntu22.04で自動運転シミュレータを行う方法としてAutowareなどの開発も行うTIER IVが新たに「[AWSIM](https://github.com/tier4/AWSIM)」という自動運転シミュレータを開発していました。

この記事ではAWSIMをUbuntu22.04にインストールするまでの公式ドキュメント（[AWSIM document](https://tier4.github.io/AWSIM/GettingStarted/SetupUnityProject/)）を日本語でまとめたものとなります。

# 推奨環境
[公式の推奨環境](https://tier4.github.io/AWSIM/GettingStarted/QuickStartDemo/#1-check-the-required-specifications)はつぎのようになっています

OS：Ubuntu22.04
CPU：6コア12スレッド以上
GPU：RTX2080Ti以上
Nvidiaドライバ：460.27.03以上

__OS__
~~OSに関してはUbuntu20.04とのことです。このシミュレータはROS2を利用するので、Ubuntu22.04でも使えるかもしれません（未確認）。~~
v1.1.0以降はUbuntu22.04でしか対応していません（ROS2 humbleのみ対応のため）。
そのため、Ubuntu20.04で利用したい場合は、それ以前のバージョンを使うとよいでしょう。

__CPU__
記載の通り6コア12スレッド以上です。
しかし、最近発売されたIntel12世代以降のCPUはスレッドがコアの倍になっていないことがある（PコアとEコアの関係）ので注意が必要かも？

__GPU__
RTX2080Ti以上とかなり要求スペックが高いです。
参考程度にしてもらいたいですが、GPUのベンチマークスコアなどをググってみるとRTX3000番台のGPUの場合3070以上は必要になってくるのではないかと思います。

また、私が行った環境を以下に示します。

OS：Ubuntu22.04
CPU：Intel Core i7-13700（16コア24スレッド[Pコア：8, Eコア：8]）
GPU：RTX3070（LHR版）
Nvidiaドライバ：525.89.02

（参考：v1.0.1で確認）
OS：Ubuntu20.04
CPU：Intel Core i7-10700（8コア16スレッド）
GPU：RTX3070
Nvidiaドライバ：515.65.01

# ローカルホストの設定（2024/02/23追記）

以下を.profile(homeの隠しファイル)の一番下に記入。
```
export ROS_LOCALHOST_ONLY=1
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
```

以下を.bashrc(homeの隠しファイル)の一番下に記入。
```
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
```

# NVIDIAドライバのインストール
ひとまず公式通りのNVIDIAのグラフィックドライバの入れ方を紹介します。

```
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo ubuntu-drivers autoinstall
```

そして、

```
$ nvidia-smi
```

で確認できたらOK

なのですが...
私はここではまりました。

なので、ここでは手動入れることをおすすめします。
やることは変わらないのでUbuntu18.04でドライバをインストール方法の[Qiita記事](https://qiita.com/tatsuya11bbs/items/7c3ba15f8eff6cf40276)を参考にやるといいと思います。

上記の記事でUbuntu22.04と違うと思ったところだけ記載します。

まず、「1. NVIDIA-driverをインストールする前に」の(1) Nouveauの無効化するところから「2. NVIDIAドライバのインストール」のリポジトリの追加をするところまではすべて同じです。
しかし、「インストール可能なデバイスが表示」からある現象が起きたので共有します。

```
$ ubuntu-drivers devices
```
のコマンドを実行すると以下の表記になります。

```
user@user:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002488sv00001462sd00003909bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA104 [GeForce RTX 3070 Lite Hash Rate]
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-515-server - distro non-free
driver   : nvidia-driver-510 - distro non-free
driver   : nvidia-driver-515-open - distro non-free
driver   : nvidia-driver-525-open - third-party non-free recommended
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-515 - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```
ここで「recommended」のドライバを入れるのが基本ですが、
「nvidia-driver-525-open」のように-openがついたドライバはうまく認識しません。

-openがなく「nvidia-driver-○○」のものが「recommended」されていれば上記の記事どおり進みましょう。

しかし、自分と同じ現象が起きた場合はつぎのようにするといいです。

まず、[NVIDIAドライバダウンロード](https://www.nvidia.co.jp/Download/index.aspx?lang=jp)のページにアクセスします。

このページで自分が使っている環境を選択します。
自分の場合は以下のように設定しました。

製品のタイプ:GeForce
製品シリーズ:GeForce RTX 30 Series
製品ファミリー:GeForce RTX 3070
オペレーティングシステム:Linux 64-bit
ダウンロードタイプ:製品ブランチ
言語:Japanese
![NVIDIAドライバダウンロード_1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/ac96051e-b0db-21f1-f467-243c56e96711.png)
その後、「探す」を押すと以下の画面が表示されます。
![NVIDIAドライバダウンロード_1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/29ce25c4-a8a3-a076-fd33-f80ed83258b0.png)

ここでの「バージョン」欄の「525.60.11」の525を覚えておきましょう。（ここでダウンロードはしません。）

つぎにターミナルで

```
$ ubuntu-drivers devices
```

を実行します。
すると、このような表示がでてきます。

```
user@user:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002488sv00001462sd00003909bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA104 [GeForce RTX 3070 Lite Hash Rate]
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-515-server - distro non-free
driver   : nvidia-driver-510 - distro non-free
driver   : nvidia-driver-515-open - distro non-free
driver   : nvidia-driver-525-open - third-party non-free recommended
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-515 - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

先程覚えた番号のドライバがあるか確認をして、以下のコマンドでインストールしましょう（ここではnvidia-driver-525）。

```
$ sudo apt install nvidia-driver-525
$ sudo reboot
```
再起動後、以下のコマンドで確認。

```
$ nvidia-smi
```
以下のような表示になればOK

```
user@user:~$ nvidia-smi 
Sun Mar  5 08:33:59 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.89.02    Driver Version: 525.89.02    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%   37C    P8    23W / 220W |    264MiB /  8192MiB |      3%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1827      G   /usr/lib/xorg/Xorg                116MiB |
|    0   N/A  N/A      1963      G   /usr/bin/gnome-shell               84MiB |
|    0   N/A  N/A      4404      G   ...veSuggestionsOnlyOnDemand       61MiB |
+-----------------------------------------------------------------------------+
```
以上が、ドライバのダウンロードです。

<font color="Red">__※2024/02/23追記：公式では525のドライバを推奨しているそうです。__</font>

# gitのインストール&SSHの設定
以下のコマンドでgitをインストールしましょう。

```
$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt update
$ sudo apt install git
```

その後、SSHを使ってgit cloneするので、あらかじめgithubのアカウントを作成しましょう。

詳しい設定の方法が書かれた[Qiita記事](https://qiita.com/koki2022/items/2a056f1286b9c62bf614)があるので、これをそのまま実行するといいと思います。

# UnityHubとUnityのダウンロード
__（2023年3月にこの項目を修正しました。）__

以下のコマンドでUnityHubをインストールします。
```
$ 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
```

以下のコマンドでUnityhubを起動します。

```
$ unityhub
```

起動できたらまず、Unityにサインインもしくはアカウント作成しましょう（ライセンス認証で必須）。
![unityhub_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/6d1b3980-8533-1b9d-e255-5d937bc311d1.png)

次にライセンス認証をします。
歯車マーク(Preferences)→License→Addを選択します。
![unityhub_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/1b09f6bc-d677-89f7-6bb7-f00ca35b9407.png)
個人利用の場合はACTIVATE LICENSEの「Get a free personal license」→Agree and get personal edition licenseを選択します。
以下では、Unity Personalを選択した前提で話をすすめます。
![unityhub_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/95a93c4b-60a0-627a-8670-60daea183329.png)
![unityhub_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/9c1ab313-735d-d80b-f11c-fa4a060241af.png)
ライセンス認証できると以下のような画面になります。
![unityhub_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/33ed4b22-d955-1ec7-1a82-8d81c6cef411.png)

次にUnityをダウンロードしていきます。
[Unity download archive](https://unity.com/releases/editor/archive)のページにアクセスして、Unity 2021.X→Unity 2021.1.7→Unity Hubをクリックします。
![unityhub_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/438e2bf2-ddc5-4c96-9c4b-3959ccbb1dd1.png)
UnityHubで開くダイアログが出てくるので、Open Linkで開く。
![unityhub_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/f337de2d-5ea9-d383-d348-26b871d94abf.png)
Unityhubが起動すると、以下のような画面が出てくるので「Install」を押してインストールします(LGSVLのようにビルドする必要がないので、チェックボックスは必要ありません)。
![unityhub_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/b04b662d-81e7-a7fc-13b8-de4d6fbc345b.png)
インストールは回線環境にもよりますが長いです。待ちましょう。

～インストール初期～
![unityhub_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/4b01bb92-6304-5a11-3f72-8a5f413cb799.png)
～インストールほぼ終わり～
![unityhub_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/38bd98bf-d06c-162c-7929-cdff483e1298.png)
～インストール完了～
![unityhub_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/fa6f2343-c01e-d06d-55a6-b28bd630a003.png)

# AWSIMのダウンロードからUnityへのインポートまで

以下のコマンドを使ってAWSIMをダウンロードしていきます。

```
$ git clone git@github.com:tier4/AWSIM.git
```
opensslがないとunityを起動した際にsafe modeで起動してしまうので，以下のコマンドでopensslをインストールします．

```
$ wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5.13_amd64.deb
$ sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.13_amd64.deb
```

git cloneとopensslのインストールが終わったら、UnityHubを起動し、読み込ませます。

```
$ unityhub
```
起動できたら、Projects→Openを選択します。
![awsim_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/8a95ecc4-bc95-56a8-9234-c8598f695b48.png)
git cloneしてきたフォルダをそのまま選択します。
![awsim_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/ec43923a-750c-37a9-be4a-667443ca33e9.png)
Unityのバージョンが2021.1.7f1になっているか確認をして、クリックをしてインポートします。
![awsim_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/620a5bcb-d2d3-6887-7fed-460c0b61fd7d.png)
![awsim_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/f612c05b-8142-b03e-60ca-6c639b2fda70.png)
インポートができたらこのような画面になります。
![AWSIM_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/777ecb21-8034-b40b-37bc-334abdce98c1.png)

# ROS2のインストール（2024/02/23追記）
AWSIMを動かすには、ROS2のインストールが必要です。
<font color="Red">__※2024/02/23追記：v1.2.0以降での大きな変更点__</font>
__原則は__[公式のインストール手順](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)や[Qiita記事](https://qiita.com/porizou1/items/5dd915402e2990e4d95f)などを参考にインストールするといいと思います。

<font color="Red">__ただし、絶対に.bashrcファイルや.profileファイルにPATHを通さないこと（AWSIM内にあるROS2 for Uniryが機能しなくなります。）__</font>

具体的には、以下のコマンドを実行しなければいいです。
```
$ echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
$ source .bashrc
```

ROS2のトピックを記録したいときはその都度 __UnityHubを起動しているターミナル以外で__ 以下のコマンドを実行すればいいです。
```
$ source /opt/ros/humble/setup.bash
```

正直、ROS2をAWSIM以外でも使う人はめんどくさいと思うので、AWSIM専用PCとROS2用PCで分けて使ったほうがいいと思います(もちろんSSDを分ければ1台でいいです)。

# 西新宿の環境での動作確認

インポートが完了したら、実際にTIER IVが用意してくれている西新宿の環境で動作確認を行いましょう。

まず、[Japan_Tokyo_Nishishinjuku.unitypackage](https://github.com/tier4/AWSIM/releases/download/v1.0.0/Japan_Tokyo_Nishishinjuku.unitypackage)をダウンロードしましょう。

ダウンロードできたら、Unity内でAssets→Import Package→Custom Package...を選択していき、ダウンロードしてきたunitypackageを選択します。
選択したら、以下の画面が出てくるので、Importを押しましょう。
![Nishishinjuku_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/11530ef1-d63d-5707-5240-b2899335c67b.png)
Importができたら左下のフォルダにインポートしたフォルダがあるので、Asset→AWSIM→Scenes→Main→AutowareSimulation(.unity)を選択します。
左側にAutowareSimulationが選択されていることを確認したら、再生ボタンを押します。
![Nishishinjuku_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/c0a17032-3ee2-2836-9e22-cd513e1c120b.png)
すると、シミュレータが起動して車両を動かすことができます。
![Nishishinjuku_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385091/8738332a-b20f-bfd8-6141-7f5a34939f6f.png)
デフォルトでは、キーボードで車両を操作することができます。

# おわりに

公式ドキュメントにはLiDAR等のさまざまな設定があるそうなので、試してみてください。

# 参考文献
この記事は以下の情報を参考にして執筆しました。

・「AWSIM公式ドキュメント」, URL：https://tier4.github.io/AWSIM/GettingStarted/SetupUnityProject
・「Ubuntu 18.04.3 LTSでNVIDIA-driver(GeForce RTX 2070 SUPER), cuda 10.1, cudnn 7.6のインストール+python環境構築」, URL：https://qiita.com/tatsuya11bbs/items/7c3ba15f8eff6cf40276
・「NVIDIAドライバダウンロード」, URL：https://www.nvidia.co.jp/Download/index.aspx?lang=jp
・「Git」,　URL：https://git-scm.com/download/linux
・「Ubuntu ローカルのgit設定~SSHキー取得~GitHub,Gitlab連携まで」, URL：https://qiita.com/koki2022/items/2a056f1286b9c62bf614
・「ubuntu22.04にROS2 Humbleをインストールする」, URL：https://qiita.com/porizou1/items/5dd915402e2990e4d95f
・「Unable to record LiDAR topics suddenly #187」, URL：https://github.com/tier4/AWSIM/issues/187