AIchallenge-racingのすゝめ（進め）その3 Autowareの構造をみる

# はじめに
<!-- 発端や概要を記載 -->
この記事は、[その１](https://qiita.com/Arata-stu/items/4b03772348dca4f7ef89)、[その２](https://qiita.com/Arata-stu/items/6708b7604d97c8dfa0ba)の続きになっています。良ければそちらも読んでみてください。

前回までは、パラメータ調整、マップ編集をやってきましたが、それらがどのように利用されているか分からない状態です。将来も見据えて、ここらで調査しておきたいところですね。

ということで今回はAutowareの構造をみていきましょう！！
# 目次
<!-- タイトルとアンカー名を編集 -->
1. [大雑把に理解する](#まずは大雑把に)
1. [トピックを覗く](#トピックを覗く)
1. [次回に向けて](#次回に向けて)
1. [参考文献](#参考文献)

<!-- 各チャプター -->

# まずは大雑把に
Autowareの構造は膨大ですが、役割ごとに見ていくとやりやすいです。ありがたいことに[AIチャレンジ公式](https://automotiveaichallenge.github.io/aichallenge2023-racing/customize/index.html)さんから、今回のracing大会で利用されているAutoware Microの構造が公開されているので、まずはこれを見ましょう。すこし補足もいれておきました。

Autoware Micro
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673708/15e0ee80-6112-a502-b89b-f5ce572eb4a1.png">
左側から順に追っていきましょう。
1. Map,localization,perceptionから情報を取得し、それをもとに経路生成
1. 経路を軌跡(Trajectory)に変換し、それに向かって追従
1. 追従の出力を、車の入力（アクセルやハンドル）に変換

こんなところでしょうか。画面上部のgoal_pose_setterからは、正直よくわかっていないのですが、大雑把に読み取ることができました。


# トピックを覗く
次に、各ノードでどのような情報がやり取りされているのか覗いていきましょう。僕のおすすめはpath経路です。おそらく経路の情報が入っていそうな、path_with_lane_idを見ていきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673708/e21732c1-9a18-1849-d361-67160b97846f.png" , width=50%>

AIチャレンジのAutowareとawsimを起動した状態で、新たなterminalを開きます。
```shell
#今アクティブなtopicを表示
ros2 topic list
#-t をつけると、メッセージの型も確認できる
ros2 topic list -t
#topicの中身を表示
ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id
```
echoを利用すると、出力メッセージの確認ができます。これでは、logがすごいスピードで更新されるので、オプションを付けましょう。
```shell
#一度だけ出力 -once
ros2 topic echo --once /planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id

```

出力
```shell
#pointが前にも続く
...
...
---
- point:
    pose:
      position:
        x: 22269.1368
        y: 52043.1304
        z: 177.7921
      orientation:
        x: -0.0004146634240909538
        y: -0.00018891603851126825
        z: -0.9100083500665173
        w: 0.41458967084840675
    longitudinal_velocity_mps: 0.0
    lateral_velocity_mps: 0.0
    heading_rate_rps: 0.0
    is_final: false
  lane_ids:
  - 9516
left_bound:
- x: 22294.1399978612
  y: 52085.839375431875
  z: 178.26991601298306
- x: 22292.7808
  y: 52075.7468
  z: 178.2641
- x: 22288.0462
  y: 52063.0986
  z: 177.9548
- x: 22280.6065
  y: 52047.949
  z: 177.9347
- x: 22279.622
  y: 52045.9668
  z: 177.9154
- x: 22276.5585
  y: 52041.3002
  z: 177.8928
- x: 22272.730671703423
  y: 52036.3827960673
  z: 177.88489931971168
right_bound:
- x: 22285.340555426355
  y: 52087.01981185332
  z: 178.03735211996326
- x: 22285.1609
  y: 52085.67
  z: 178.0277
- x: 22278.9992
  y: 52066.7101
  z: 177.7224
- x: 22271.6912
  y: 52051.9975
  z: 177.7074
- x: 22265.7262
  y: 52042.612
  z: 177.6941
- x: 22265.141105347142
  y: 52041.99532136478
  z: 177.69360333865825
---
```
おそらく、left,right_boundは左右の車線を示してそうですが、果たして！？
ChatGPTに座標を渡して、プロットしてみました。(GPT便利！！)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673708/3fe0b938-a049-0b46-6737-2d889159f10d.png" , width=70%>
予想通りこれは車線と考えられますね。今回は１回分のデータのプロットですが、連続して受け取ったら、Rviz同様パスのアニメーションが作れそう。


# 次回に向けて
今回は、Autowareの構造を大雑把に確認したあと、経路のtopicを調査しました。その出力を活かして次に活かすためには、自作nodeを作成しないといけません。

次回は、自作パッケージの作成&Autoware Microへ導入をしていきたいと思います。


# 参考文献
- [AIチャレンジ](https://automotiveaichallenge.github.io/aichallenge2023-racing/customize/index.html)