自動運転AIチャレンジ2023（インテグレーション）取り組みの工夫と失敗〜予選（シミュレーション）編〜

## あらすじ

- [自動運転AIチャレンジ2023（インテグレーション大会）](https://www.jsae.or.jp/jaaic/2023_contest.php)
- 本記事は[チーム遊戯王](https://automotiveaichallenge.github.io/aichallenge2023-integ/teams/index.html#チーム遊戯王)の大会参加記（の予選編）です。
- 次回大会以降の参加者の参考になりましたら幸いです。いいね頂けると喜びます。

※ 発言は個人の見解に基づくものであり、所属組織を代表するものではありません
※ Blogを書くまでが自動運転AIチャレンジ！

---
## 自己紹介
[チーム遊戯王](https://automotiveaichallenge.github.io/aichallenge2023-integ/teams/index.html#チーム遊戯王)です。
謎の有志団体である[challenge_club](https://challenge-club.connpass.com)の有志メンバーで構成されています。

> https://challenge-club.connpass.com
> 謎の有志団体であるchallenge_club（技術チャレンジ部）です。
> 新しいことにチャレンジしてみたい！
技術をさらに深めたい！
いろんな人と知り合いたい！
一人だと心折れちゃう！一緒に取り組む仲間が欲しい！

チーム遊戯王は予選は社会人上位だったものの、決勝では惜しくも入賞を逃しました。
これを真摯に受け止め、これまで取組んだ工夫、及び今後の課題点について振返ります。

---

## 予選（シミュレーション）の取組み

ポイント
- シミュレータ上に再現された走行試験場のコースを走行し、距離を競う
- コース上には障害物（段ボール、三角コーン）、特に後半クランクは高難度の狭路

以下の工夫点について順に記載します。
- １．経路計画の最適化（停止、障害物回避、狭路走行）
- ２．評価の効率化

![スクリーンショット 2023-12-02 15.30.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/e979b36c-1bbf-32dc-a37c-315efdc7f812.png)



---
## １．経路計画の最適化（停止、障害物回避、狭路走行）

経路計画は「[planning](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/)」という機能を活用します。
[autowareのplanning機能]((https://autowarefoundation.github.io/autoware-documentation/main/))が非常に充実しているので、該当のplannerを上手く活用、パラメータ調整を実施します。

https://github.com/autowarefoundation/autoware

![スクリーンショット 2023-12-02 14.14.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/496af702-0549-4046-41c6-f2a75e9c748f.png)

---
今回、以下の４つのplannerを活用しました。

- 障害物手前の停止：`obstacle_stop_planner`
- 障害物回避（段ボール）：`obstacle_avoidance_planner`
- 障害物回避（三角コーン）：`lane_following_planner`
- 狭路走行：`crank_driving_planner`（これは自作）

以降、順番に説明します。

---
## 1.1 障害物手前の停止：`obstacle_stop_planner`

・「障害物手前の停止」では、障害物から手前`4.5m`ほどの位置での停止が求められます
・障害物検出時に`obstacle_stop_planner`を発動、今回は、停止marginを期待通りになるよう調整し解決を図ります

![スクリーンショット 2023-12-02 14.26.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/4449047e-ae8d-5bab-0cd7-c41ede272e41.png)


ドキュメントリンクは以下の辺りです

https://tier4.github.io/obstacle_stop_planner_refine/pr-check/pr-30/site/obstacle_stop_planner_refine/

---
## 1.2 障害物回避（段ボール）：`obstacle_avoidance_planner`

・「障害物回避（段ボール）」では、段ボールと路肩間のスムーズな進行が求められます
・障害物回避経路走行時に`obstacle_avoidance_planner`を発動、今回は、路肩までのバッファ（`road_shoulder_safety_margin`）、障害物までのバッファ（`lateral_collision_buffer`）を調整し解決を図ります

![スクリーンショット 2023-12-02 14.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/2fd0d789-3093-7d9b-bef8-47c292c1675e.png)


ドキュメントリンクは以下の辺りです
https://autowarefoundation.github.io/autoware.universe/main/control/trajectory_follower_node/obstacle_avoidance_planner

---
## 1.3 障害物回避（三角コーン）：`lane_following_planner`

・「障害物回避（三角コーン）」では、路肩に存在する三角コーンを回避する経路生成が求められます
・通常走行時に活用する`lane_following_planner`の制御パラメータのうち、進行方向に対して横方向の誤差を許容するパラメータ（`curvature_weight_lat_error`）を大きめに調整し、路肩の三角コーン回避を図りました

![スクリーンショット 2023-12-02 15.13.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/d9aed07c-e473-b253-4521-427b3df17b52.png)

路肩に三角コーンが存在するカーブ手前にて、少し横方向に膨らんで曲がる経路を生成することで三角コーンに当たらなくなりました

ドキュメントリンクは以下の辺りです（図がなかったので該当パラメータを図示）
尚、本解法には別解が存在するようです。

![スクリーンショット 2023-12-02 14.37.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/75f3548d-1c1e-7a75-7840-49c397cf7199.png)


https://autowarefoundation.github.io/autoware.universe/main/control/mpc_lateral_controller/#how-to-tune-mpc-parameters

---
## 1.4 狭路走行：`crank_driving_planner`（これは自作）

・「道幅の狭いクランクの走行」では道幅が狭いエリアでの高精度な制御が求められます
・は通常のplannerでは困難であったため、曲がる軌道をよりクランクの経路に対応させます
・クランクを曲がる軌道を円で近似し、それに沿って曲がることでよりクランクの奥に進む経路を生成しました

![スクリーンショット 2023-12-02 19.53.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/aad731b0-ac8c-0cc6-7c2a-d9b7ca724db2.png)


ドキュメントリンクは以下の辺りです

https://github.com/bushio/crank_driving_planner

`narrow space driving`なども参照したのですがどうも今回の課題には適当ではなかった様子。

https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/

---
## ２．評価の効率化

・パラメータ最適化には十分な試行錯誤が必要、しかし手動だと非常に時間が掛かります。
・クラウド・サーバ技術を活用し、自動評価を並列実行することで解決を図ります。これでパラメータ調整時の効果測定を効率化します（徹夜しなくてもよくなったぞ＾＾）

![スクリーンショット 2023-12-04 1.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/89c8a646-e3f7-e40b-a076-35810f2edd8f.png)


---
## 走行動画

上記の工夫によりコース前半＋後半中盤付近までの課題を概ね解決できました。
動画は以下の通り。

> 2023 8 31 aichallenge submit
https://youtu.be/oD6F7P9Bx08

![スクリーンショット 2023-12-02 13.47.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/ae035dca-8546-d319-5fc1-5abf366f82eb.png)

ここまでを2023/7/E-9/1まで試行錯誤し、無事に予選を通過いたしました。

---
## 

と、ここまでは良かったことを書いてみました。
一見すると作戦が功を奏しているかのようですが、まさか決勝であんなことが起ころうとは誰もが予期しておりませんでした。
、、（後半に続く）


---
# 参考/謝辞

参考にさせていただきました。ありがとうございます。

https://qiita.com/h_bog/items/a36df3042a342bd2a0c5

https://qiita.com/h_bog/items/849a4241cdef257f3b3a

https://qiita.com/h_bog/items/8bce776fef0a39676c46

https://qiita.com/h_bog/items/4ed94ef6256ac5ae9c03

https://qiita.com/Massy0127/items/a408a221739337934b9c

https://qiita.com/Massy0127/items/bc63ec8e391a7b7b563e

https://qiita.com/yhisaki/items/b57172c9917399573b67

https://qiita.com/bushio/items/ce0b8fdf42004bada01b