Autowareの備忘録

# Autowareとは

ROS/ROS 2をベースとした世界初のオープンソースソフトウェアの自動運転システムである。

# 最新版であるAutoware Core/UniverseとAutoware.AI, Autoware.Autoの違いは？

AutowareにもAutoware.AI, Autoware.Auto, Autoware Core/Universeの3種類があるが、2022年以降はAutoware Core/Universeが主流になっている。

ざっくり経緯をまとめると以下のような感じです。

:::note
Autoware.AIは自動運転としてのアーキテクチャ設計が明確になっていない状態で、自由に研究開発が進みすぎたため製品レベルに持っていくには課題があった。その後、Autoware.AIを製品レベルに持っていくためAutoware.AutoでROS 2ベースで設計・開発プロセスを刷新した。しかし、自動運転はまだまだ研究が必要な要素技術が多い中、開発プロセスが厳しすぎたため最新の研究要素が取り込みにくくなってしまった。そのため、品質を担保したAutoware Coreとある程度のゆるさを持ったAutoware Universeでコンパチブルに動作させることで従来の課題を解消している
:::


詳しい経緯や説明は以下を参照
- [TIER IV Tech Blog：自動運転開発したい！でもどこから始めれば良いの？
](https://medium.com/tier-iv-tech-blog/自動運転開発したい-でもどこから始めれば良いの-ce511f5fcc4d)
- [TIER IV Tech Blog：スケーラブルな自動運転システム開発プラットフォームのためのリポジトリ構成](https://medium.com/tier-iv-tech-blog/スケーラブルな自動運転システム開発プラットフォームのためのリポジトリ構成-21198f9b0075)
- [Autoware Foundationページ](https://www.autoware.org/autoware)
- [Autoware公式ドキュメンテーション](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-concepts/difference-from-ai-and-auto/)


# Autoware Core/Universeの始め方

[Autoware公式ドキュメンテーション](https://autowarefoundation.github.io/autoware-documentation/main/)に従い、InstallationとTutorialに従って動かすのが良いと思います。まずはTutorialページの赤枠に従って動かすことで手元で3種類の目的のシミュレーションを行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131558/d7579faa-7d75-f28d-b7fa-2c8d5def745b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131558/f0f04129-e78e-192a-ebcf-524bfa76c02d.png)


その他の参考資料
- ドキュメント
    - [TIER IV Tech Blog：自動運転開発したい！でもどこから始めれば良いの？
](https://medium.com/tier-iv-tech-blog/autowareのチュートリアルとcomponentのハイレベルな設計-67a8a2a1b9ba)
- 動画
    - [Autoware のインストールとチュートリアル (2022 年 4 月 18 日版)
](https://youtu.be/iW-a7cKUxuY)
    - [Autoware Universe Training](https://youtube.com/playlist?list=PLXDesS-dYrE3p-Ssx8GXb4IccoevMKO6_)

# Autowareに関してわからないことがあったら？

まずは、[Autoware公式ドキュメンテーション](https://autowarefoundation.github.io/autoware-documentation/main/)を参照してください。
- [Trouble Shooting](https://autowarefoundation.github.io/autoware-documentation/main/support/troubleshooting/)
- [How To Guides](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/)

それでも不明な点は、以下のような場所でコミュニティに質問できます。

- [GitHub Discussions](https://github.com/orgs/autowarefoundation/discussions)
- [GitHub Issues (Autoware Universe Repository)](https://github.com/autowarefoundation/autoware.universe)
- [Discord](https://discord.com/invite/Q94UsPvReQ)
- [ROS Discourse](https://discourse.ros.org/c/autoware/46)

それぞれの使い分けは[こちら](https://autowarefoundation.github.io/autoware-documentation/main/support/support-guidelines/)を参照してください

# 車両へのインテグレーション方法
:::note warn
Under Construction
:::
- [公式ドキュメント：インテグレーションガイド](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/overview/)
- [自動運転の民主化は進んでいる？新卒3人が1ヶ月で自動運転車を走らせてみた！](https://medium.com/tier-iv-tech-blog/自動運転の民主化は進んでいる-新卒3人が1ヶ月で自動運転車を走らせてみた-f5d250727637)

# Autowareでできること
:::note info
随時更新予定
:::
- Sensing
    - 点群のノイズ除去
    - 点群の歪み補正
    - LiDARの同期およびConcatenate
- Localization
    - 単体利用および各種法の組み合わせが可能
        - LiDAR base手法
        - Camera base手法
        - GNSS base手法
- Perception
    - 動物体検知/予測
    - 障害物検知
    - 死角検知
    - 信号認識
- Planning
    - 経路追従
    - 前車追従
    - カットイン減速
    - 障害物停止
    - 停止障害物回避
    - レーンチェンジ
    - 経路ルーティング（目的地までの探索）
    - 横断歩道での通過判断
    - 右折時の通過判断
        - 死角があった場合の頭出し
        - 対向車確認
    - 一時停止
    - 死角での減速
    - 歩行者飛び出し検知および減速
    - 停車禁止区域対応
    - フリースペース駐車
    - 路肩からの発進
    - 路肩への駐車
    - 駐車指定位置に障害物があった場合の近傍駐車位置探索
    -  信号通過判断
        - 赤信号時の停止および青信号での通過判断
        - 急な黄色信号・赤信号切り替わり時の通過判断
    - 巻き込み確認
    - 自動緊急ブレーキ
    - 横G/縦ジャークを考慮した乗り心地
    - ユーザー指定の注視エリア内における障害物検知
- Control
    - キャリブレーションズレ検知
    - 正着制御
    - なめらかな停止
- その他
    - 故障/異常検知
    - 手動走行中からのスムーズな自動運転モードへの切り替え
    - Autowareからドライバーに承認を求める機能：Request To Cooperate（RTC）
        - 例：Autowareはレーンチェンジが必要かつ安全にできると判断しているため、オペレーターに承認を求める
    - 車両キャリブレーション
    - Sensorキャリブレーション
# Autoware Core/Universeの中身に関する解説ドキュメント集

いろいろなドキュメントがあるので関連するものをまとめています

:::note info
随時更新予定
:::

- 全体アーキテクチャ
    - [公式ドキュメント:Autoware Archtecture](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/)
    - [TIER IV Tech Blog：AutowareのチュートリアルとComponentのハイレベルな設計](AutowareのチュートリアルとComponentのハイレベルな設計)
    - [TIER IV Tech Blog：AWFへ提案中のAutoware新アーキテクチャのご紹介](https://tech.tier4.jp/entry/2020/06/03/163000)
    - [SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜](https://www.slideshare.net/SSII_Slides/ssii2022-ts2-autoware)

- Autowareのノード構成
    - [公式ドキュメント：Autoware Universeのノード構成](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/node-diagram/)

- Sensing関係
    - [公式ドキュメント：Sensing Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/sensing/)
     - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/sensing)
     - [CalibrationTools](https://github.com/tier4/CalibrationTools)

- Perception関係
    - [公式ドキュメント：Perception Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/sensing/)
    - [AutowareのPerceptionコンポーネントにおけるDetectionの解説](https://medium.com/tier-iv-tech-blog/gh534fg34f-ff3c23ced803)
    - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/perception)
 
- Map関係
    - [公式ドキュメント：Map Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/map/)
    - [公式ドキュメント：Mapの作り方](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/creating-maps/)
    - [TIER IV Tech Blog：自動運転の地図、ベクターマップについて](https://tech.tier4.jp/entry/2021/06/23/160000)
    - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/map)

- Localization関係
    - [公式ドキュメント：Localization Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/localization/)
    - [TIER IV Tech Blog：カルマンフィルターが自動運転の自己位置推定で使われるまで](https://tech.tier4.jp/entry/2021/08/04/160000)
    - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/localization)
    - [SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜](https://www.slideshare.net/SSII_Slides/ssii2022-ts2-autoware)


- Planning関係
    - [公式ドキュメント：Planning Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/)
    - [TIER IV Tech Blog：Autowareにおける狭路走行のための走行経路計画](https://tech.tier4.jp/entry/2021/03/31/160000)
    - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/perception)


- Control関係
    - [公式ドキュメント：Control Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/control/)
    - [TIER IV Tech Blog：Autowareにおける車両制御アルゴリズムの開発](https://tech.tier4.jp/entry/2019/03/29/173543)
    - [Autoware Universe：ROS 2 パッケージ一覧](https://github.com/autowarefoundation/autoware.universe/tree/main/control)


- Vehicle Interface関係
    - [公式ドキュメント：Vehicle Interface Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/vehicle/)

# AutowareのAPIについて(AD API)

AutowareではインターフェースとしてAD APIとComponent Interfaceの2種類があります。
- AD API：FMS（Fleet Management System）やオペレーターや乗客のHMI（Human Machine Interface）など、自律走行システムの外から車両を操作するために使われるAPI。AD APIはComponent Intarfaceを使って実装される。
- Component Interface：各コンポーネント（Perception, Sensing, Planning, etc.）間のInterface。Component Interfaceを準拠することでComponentレベルの実装の差し替えが可能になる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131558/94409495-0181-836e-d199-00ce2ee235e8.png)

AD APIはあくまでのInterfaceの仕様であり、Autowareで提供されているAD APIの実装はあくまでもデフォルト実装ということになっており中身の実装はユーザーが必要に応じて定義できるようになっています。

このようなスタンスをとっている理由を、`自動運転の開始/発進` というAPIを例に考えます。
通常の自動運転サービスでは、`自動運転の開始/発進`のAPIを叩いた場合、即座に発進しても問題ないケースが多いです。しかし、とあるバスを自動運転サービスからは、`自動運転の開始/発進` に発進の音声を流した後に走行指示を出したいという要求があるかもしれません。
その際にFMSやHMIとの接続はそのままにし`自動運転の開始/発進` APIの中身の実装を変えることで、音声を流したあと発進変えることができます。こういったFMSやHMIとの接続のInterfaceをAPIとして定義しており、中身の実装はユーザーが変更できるようになっています。


- [公式ドキュメント：APIのリスト](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/list/)
- [公式ドキュメント：API利用シナリオ](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/use-cases/)


# その他の関連リンク集
上記で紹介していないが、見かけたAutoware関連リンク集
- AWSIM
    - [AWSIMを動かしてみる](https://qiita.com/ttanaka3/items/6ae5f8331d60b0454308)
    - [【Unity】オープンソース自動運転シミュレーター「AWSIM」のチュートリアル](https://qiita.com/ysenkun/items/25243755b23a2baf46f6)
    - [UbuntuにAWSIM（自動運転シミュレータ）をインストールする](https://qiita.com/Yujisuper/items/b53a29e2e5949a3a24c7)
    - [Unity製自動運転シミュレータのAWSIMをうごかしてみた](https://zenn.dev/engineercafe/articles/bc95f19ff7ab4a)
- [Autoware Universeがうまく動かない！](https://qiita.com/np_hsgw/items/4e585f272771ecb908ab)
- [自動運転ソフトウェア「Autoware」の開発に取り入れている、様々な自動化の仕組み](https://medium.com/tier-iv-tech-blog/自動運転ソフトウェア-autoware-の開発に取り入れている-様々な自動化の仕組み-85a0b540bf23)
- [ubuntu22.04 ROS 2 Humble環境にAutoware Universeをインストールする手順](https://qiita.com/porizou1/items/c9384aaa5fbe1125bf20)