AWSIMを動かしてみる

この記事では，TIER IVがオープンソースで提供している自動運転シュミレーター「AWSIM」を使ってみた内容を書いてみました．

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

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

# 環境
推奨PCスペック

|OS             |Ubuntu 22.04|
|:--------------|----------|
|CPU            |8コア×2，16スレッド|
|GPU            |RTX1080Ti|

rosとawsim、autowareのversion

|ROS2            |Humble|
|:--------------|----------|
|Autoware       |awsim-stable|
|AWSIM          |AWSIM_v1.1.0|

基本的にAWSIM autowareのbranchとAWSIMのversionがあっていないと動かないので注意しましょう。（慣れていないうちは推奨の環境の組み合わせを使用しましょう）

GPUの設定まわりで詰まっているIssueがあったのですが、私の場合は以下のようなNvidiaの環境ですんなりセットアップできました。

```
Sat Feb 18 15:02:05 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05    Driver Version: 520.61.05    CUDA Version: 11.8     |
|-------------------------------+----------------------+----------------------+
| 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 ...  On   | 00000000:02:00.0  On |                  N/A |
| 32%   54C    P2    58W / 250W |   5940MiB / 11264MiB |     27%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2401      G   /usr/lib/xorg/Xorg                507MiB |
|    0   N/A  N/A      2567      G   /usr/bin/gnome-shell               71MiB |
|    0   N/A  N/A      6665      G   ...930758177505787228,131072      262MiB |
|    0   N/A  N/A      7069      G   ...RendererForSitePerProcess        9MiB |
|    0   N/A  N/A     13600      G   ...RendererForSitePerProcess       85MiB |
|    0   N/A  N/A     17904    C+G   ...r/2021.1.7f1/Editor/Unity     4951MiB |
|    0   N/A  N/A     28795      G   ...os/humble/lib/rviz2/rviz2       34MiB |
+-----------------------------------------------------------------------------+

```


# Quick Start Demo
基本的にはこちらのドキュメントどおりに進めればセットアップできます。

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

手順
1. Autowareの環境構築
2. AWSIMのダウンロード
3. simulatorの起動

順番に見ていきましょう。
1. Autowareの環境構築
こちらはドキュメントの記載内容そのままです。毎度autowareの環境構築のためのお決まりのコマンドのため内容だけ載せておきます。
冒頭に記載した、autowareのbranchやAWSIMのversionがことなるとうまくtopic同士がつながらないため、versionには注意しましょう。

```
$ git clone https://github.com/autowarefoundation/autoware.git
$ cd autoware
$ git checkout awsim-stable
$ ./setup-dev-env.sh
$ mkdir src
$ vcs import src < autoware.repos
$ source /opt/ros/humble/setup.bash
$ rosdep update
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-w"
```

２.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.1.0.zip
```
解凍するとこんな感じでファイルが展開されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/282b495b-588e-12b5-cb23-ad00e72904de.png)

３.シミュレータを動かしてみる

実行権限をつけて起動しましょう。
```
chmod +x <path to AWSIM folder>/AWSIM_demo.x86_64
./<path to AWSIM folder>/AWSIM_demo.x86_64
```

以下のようなwindowが見えると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/c1c11ed2-fdac-534c-031d-b62f1297a3d0.png)

この状態で出ているtopicは制御入力、sensingの結果、車両の状態になります。
```
/client_count
/clock
/connected_clients
/control/command/control_cmd
/control/command/emergency_cmd
/control/command/gear_cmd
/control/command/hazard_lights_cmd
/control/command/turn_indicators_cmd
/parameter_events
/rosout
/sensing/camera/traffic_light/camera_info
/sensing/camera/traffic_light/image_raw
/sensing/gnss/pose
/sensing/gnss/pose_with_covariance
/sensing/imu/tamagawa/imu_raw
/sensing/lidar/top/pointcloud_raw
/sensing/lidar/top/pointcloud_raw_ex
/vehicle/status/control_mode
/vehicle/status/gear_status
/vehicle/status/hazard_lights_status
/vehicle/status/steering_status
/vehicle/status/turn_indicators_status
/vehicle/status/velocity_status

```

AWSIMはsensing/vehicleをsimulationで模倣したものとなります。

https://www.autoware.org/autoware

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/747d3c17-5d70-9e2e-9309-2a25ad4df0f0.png)



細かいハマったポイントをいくつか書いておきます。
- GPUのドライバを入れたあとは再起動をしないと反映されないことが多いです。
- 何回か試行しているとros2のノードがたまに正常終了しないことがあり、daemonのstop`ros2 daemon stop` start`ros2 daemon start`が必要になることがあります。
- ドキュメントはbashrcでautowareをsourceしていることを前提に書かれているので、AWSIMを起動するterminalではautowareをsourceしないと正しくtopicがでません。
- AWSIMの起動まで少し時間がかかるため以下のような画面がでてきますが、起動に時間がかかっているだけなので、15秒くらい待てば正常に動作するようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/dcb0638c-3a0b-ce7c-7d33-bc499002e273.png)



# 実際に動かしてみる

Autowareの起動はデモに記載がある通りこちらのコマンドで動かせました。
```
ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit map_path:=$HOME/maps/nishishinjuku_autoware_map
```

上記のコマンドだけだとmapとlaneletが表示されるだけになります。
![Screenshot from 2023-02-18 15-44-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/ec556e08-b1c4-82e3-1741-fbbc39dcdec1.png)

こちらに加えてAWSIMのDEMOを動かしてみると以下のようになります。
![Screenshot from 2023-02-18 16-00-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/4c2a57a4-27d9-4e46-ef25-a78b5f7fddfd.png)


ゴールを置くと経路を作成し、planningの各モジュールが動作します。
![Screenshot from 2023-02-18 15-58-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/6dee3447-7183-616a-8247-629b31edcb19.png)



AutowareStatePanelでAUTOのボタンを押すと走行を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/3076b99a-0e48-4f1b-edbc-2843c4a206c2.png)

2023/2/18時点のawsim-stableはautoware.universeのhash値（9085f2f31f0d8cbba6cbe3ffc3b8ca447631ad32）を指しているためこちらのパラメータを変更するとplanningの各モジュールの調整が可能です。

https://github.com/autowarefoundation/autoware.universe/tree/9085f2f31f0d8cbba6cbe3ffc3b8ca447631ad32/planning

レーン変更や障害物回避なども可能です。

![Screenshot from 2023-02-18 14-57-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/150dd8f2-7b45-ff01-6b2f-7ac23185d955.png)