Autoware.Autoをインストールしてみた

※2021.03.13更新
初稿以降，公式サイトのインストールに関する情報もだいぶ変わった．バージョン1.0.0がリリースされたので，最新情報にアップデートしておく．

- 公式サイトアップデート情報のダイジェスト
    - サポートするアーキテクチャとして，amd64に加えてarm64が明記された
    - 依存環境としてROS2が明記された
    - ADEを用いた仮想環境ベースのインストール手順（以下，ADEインストール）については，アーキテクチャごとにコンテナが提供され，ユーザがビルドする必要がなくなった
    - ADEインストールの他に，ターゲットのルートファイルシステム上でビルドしてインストールする手順（以下，ネイティブビルド）も提供された　※本稿では取り扱わないが，別記事を起こす予定
    - arm64向けのADEインストールでは，通常のADEインストールの他に仮想環境内にADEインストールする手順が提供された（クラウド上のインスタンスにADEインストールすることを想定している？）　※本稿では取り扱わない
    - 車のシミュレータとしてLGSVL simulatorをADEインストールする手順が提供された(これまではUnityをインストールしたり色々設定したりと煩雑な手順が必要だった)　※本稿では取り扱わないが，インストールしてAutoware.Autoとの連携が確認できたら別記事を起こす予定
- 本稿での対応
    - ROS2 Dashingベースのシステムは保守のみとなったので，ROS2 Dashingに関する記述は取り消し線で取り消す
    - ROS2 FoxyでのADEインストールについて扱う
        - ADEインストールの手順は大きく変わっているので，必要に応じてこれまでのやり方は折りたたんでおく
    - マイコンとの接続については使用している[ros2arduino][6]がROS2 Dashingのみの対応であり，現状ROS2 Foxyへの対応が見込めないことから，参考扱いとして折りたたむ

# 記事概要
備忘録程度に，Autoware.Autoをインストールして拡張カルマンフィルタデモを起動するところまでの手順を記す．


![AutowareAuto_ADE_Install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/cb69c51b-a057-5576-6d11-84fec893a8c0.png)




# 環境

||ベースOS|Docker|ROS2|CPU, RAM|
|---|---|---|---|---|
|環境1|Ubuntu 20.04(amd64)|v19.03|Foxy|Core i5-7200U, 4GB x 2|
|~~環境2~~|~~Ubuntu 18.04(amd64)~~|~~v19.03~~|~~Dashing~~|~~Core i5-6500, 16GB x 2~~|

Dockerは後述の開発環境"ADE"に必要．~~ROS2環境はAutoware.Autoの明示的なインストール要件に含まれていないが，筆者の環境には既にROS2の環境が構築されていたので記しておく．~~

# ADEインストールの手順
[公式サイトのインストール手順][1]をベースに補足していく．ADEそのもののインストールについては筆者の好みで改変しているので，トラブるようなら公式サイトに従うのが良いだろう．大まかなステップとしては以下の通り．

Step1. ADEのインストール
Step2. プロジェクトのチェックアウト
Step3. ~~プロジェクトのビルド~~ADE環境の設定
Step4. 拡張カルマンフィルタデモの起動

## ADEのインストール
公式サイトには静的リンクのバイナリを落とすように記載されているが，筆者の好みで以下の手順で進めた．

Ubuntu 20.04の場合

```shell
$ pip3 install ade-cli
$ ade --version
3.5.1
```

~~Ubuntu 18.04の場合~~

<details><summary></summary><div>

```shell
$ pip3 install ade-cli
$ ade --version
3.5.1
```
</div></details>

## プロジェクトのチェックアウト
公式サイトの手順に説明を加える．

ADEのワークスペースを作成する．

```shell
$ mkdir ~/adehome
$ cd ~/adehome
$ touch .adehome
```

クローンする．

```shell
$ cd ~/adehome
$ git clone https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto.git
```

所望のリリースタグをチェックアウトする．ここでは`release-1.0.0`ブランチの`1.0.0`タグをチェックアウトする．

```shell
$ cd AutowareAuto
$ git checkout tags/1.0.0 -b release-1.0.0
```

ホストシステムとの設定ファイルの共有設定（任意）．　※公式サイトの説明にはささやかなtypoがあるので注意

```shell
$ cd ~
$ mv ~/.bashrc ~/adehome/.bashrc
$ ln -s ~/adehome/.bashrc
```


<details><summary>以前のやり方で必要だった手順（参考用に折りたたんで残す）</summary><div>

adehomeに，環境変数の設定ファイル".aderc"を配置する．中身へのリンクは[こちら][2]．

```shell:.aderc
export ADE_DOCKER_RUN_ARGS="--cap-add=SYS_PTRACE -e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp"
export ADE_GITLAB=gitlab.com
export ADE_REGISTRY=registry.gitlab.com
export ADE_DISABLE_NVIDIA_DOCKER=true
export ADE_IMAGES="
  registry.gitlab.com/autowarefoundation/autoware.auto/autowareauto/ade:master
  registry.gitlab.com/autowarefoundation/autoware.auto/autowareauto:master
"
```

GitLabからプロジェクトをチェックアウトするにあたって，筆者の環境ではGitLabにSSH接続している状態が必要であった．
SSH公開鍵の登録やSSH接続の設定については[こちら][3]を参考にした．

別ターミナルにてSSH接続．

```shell
ssh -T git@gitlab.com
```

この状態で

```shell
$ cd adehome
$ git clone --recurse-submodules git@gitlab.com:autowarefoundation/autoware.auto/AutowareAuto.git
```

とするとプロジェクトをチェックアウトできた．

</div></details>


## ADE環境の設定

ADEの設定ファイル（`.aderc`）はアーキテクチャやベースとなるROS2のバージョンごとに雛形が用意されている．ADE環境に入る前に`adehome`ディレクトリ内の`.aderc`が所望の雛形へのシンボリックリンクとなっていることを確認する．

```shell
$ cd ~/adehome
$ ls -l .aderc
.aderc -> .aderc-amd64-foxy
```

確認できたらADE環境に入る．

```shell
$ cd ~/adehome/AutowareAuto
$ ade start --update --enter
```

ADE環境に入るとターミナルの表示が若干変わるので見分けることができる．

```shell
username@ade:~$ # usernameは元々のユーザー名
```

<details><summary>以前のやり方で必要だった手順（参考用に折りたたんで残す）</summary><div>

## プロジェクトのビルド
公式サイトの手順通りである．

```shell
$ ade start --update --enter 
ade$ cd AutowareAuto
ade$ colcon build
ade$ colcon test
ade$ colcon test-result
```

</div></details>


## 拡張カルマンフィルタデモの起動
[公式サイトのチュートリアル][4]通り．各デモを起動する前にROS2の環境変数を読み込むステップを忘れないこと．

```shell
username@ade:~$ source /opt/AutowareAuto/setup.bash # ROS2の環境変数を読み込む
username@ade:~$ ros2 launch autoware_demos ekf_ndt_smoothing_lgsvl.launch.py
```

![AutowareAuto_ADE_Install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/cb69c51b-a057-5576-6d11-84fec893a8c0.png)


<details><summary>以前のやり方でのデモ画面</summary><div>

![AutowareAuto_ekf_demo_desktop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/6656a863-7295-bfdf-5656-0dafba7b519e.png)

</div></details>

<details><summary>ros2arduinoを使用した組み込みROS2との接続はいったん折りたたむ</summary><div>

# 今後の野望
ADEのイメージ内にはROS2 Dashingの環境とビルドシステム一式が含まれているように見える．このイメージ内に[Micro-XRCE-DDS-Agent][5]を構築して外のマイコンボードと接続できれば，マイコンボードのスイッチを操作してAutoware.Auto内のランプをチカチカさせたり，その逆にAutoware.Auto内の状態に応じてマイコンボードのランプをチカチカさせたり出来るようになるのではないか．

※2020.09.30更新
イメージ内でのMicro-XRCE-DDS-Agentのビルドと，マイコンボードからのtopicをAgent経由で ros2 topic echo するところまではできた．

Step1. [ros2arduino][6]のpublisherサンプルを焼き込んだSeeeduino XIAOをUSBでホストPCに接続
Step2. 仮想シリアルのデバイスファイル名を渡して，イメージに入る
Step3. ROS2の環境変数を読み込む

![0-25.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/802cec3c-1276-66fb-132d-9c6d4c9f4fa8.gif)

Step4. Micro-XRCE-DDS-Agentを起動（ターミナルを使いまわすために末尾に&を付けている）
Step5. シリアル経由でのセッションが確立される
Step6. ros2 topic list で /arduino_chatter を確認

![25-43.5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/715651dd-405e-6674-5c59-765d55436dcb.gif)

Step7. ros2 topic echo /arduino_chatter でtopicをsubscribe

![43.5-end.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574178/b80c4b83-9fc9-84c5-a4ef-f789c0989916.gif)

</div></details>


# 参考資料

1.[Autoware.Auto公式サイトのインストール手順][1]
2.[.adercへのリンク][2]
3.[SSH認証キーをGitLabに登録・設定手順 覚書][3]
4.[Usage][4]
5.[Micro-XRCE-DDS-Agent][5]
6.[ros2arduino][6]
7.[@MAEHARA_Keisukeのポータル記事][7]

[1]:https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/installation.html
[2]:https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/blob/master/.aderc
[3]:https://qiita.com/redamoon/items/07e445d1fce360cb5fa3
[4]:https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/usage.html
[5]:https://github.com/eProsima/Micro-XRCE-DDS-Agent
[6]:https://github.com/ROBOTIS-GIT/ros2arduino
[7]:https://qiita.com/MAEHARA_Keisuke/items/31faa68cf5c51831acc6