LoginSignup
1
0

【11日目】OSS連携してみたい!(8)Autowareのpure pursuitを調査する

Last updated at Posted at 2023-12-10

この記事は筆者オンリーのAdvent Calendar 202311日目の記事です。

前回までのあらすじ

C++/PythonでAutowareのmsgをサブスクライブしmsgをそのままAutowareにパブリッシュする処理を追加しました。

今回やること

OSS連携について、pursuitの処理をPythonRoboticsのソースコードに置き換えて実行してみたいと思います。
そこで、現在のAutowareの入出力、内部処理について調査してみたいと思います。

pursuitの各処理について

AutowarePythonRoboticsの処理はリンクの通りになります。

Autowareのpursuitの構成

pursuitの構成を見てみます。

引数/サブスクリプション/パブリッシャー

引数
・wheel_base
・lookahead_gain
・lookahead_min_distance
・speed_proportional_gain
・use_external_target_vel
・external_target_vel
のfloatがあります。
サブスクリプション
Odometry
Trajectory
の2つのmsgをサブスクライブしているようです。
Trajectory内には最大100000のベクターのTrajectoryPoiontを持つことができるようです。

パブリッシャー
AckermannControlCommand
のmsgをパブリッシュしているようです。
AckermannControlCommandは
・Time型のstamp
AckermannLateralCommand型のlateral
(メンバーはsteering_tire_angle/steering_tire_rotation_rateで構成されている)
LongitudinalCommand型のlongitudinal
(メンバーはspeed、acceleration、jerkで構成されている)
で構成されているようです。

メッセージをパブリッシュ/サブスクライブする契機

30ms毎にOdometry/Trajectoryのデータを受領してmsgを作成しているようです。

パブリッシャーの作成

上記のAckermannControlCommandにパラメータを入力しているようです。
・AckermannControlCommand.stamp
・AckermannControlCommand.longitudinal.stamp
・AckermannControlCommand.lateral.stamp
には現在のタイムスタンプが入っているようです。

・AckermannControlCommand.longitudinal.speed
・AckermannControlCommand.longitudinal.acceleration
・AckermannControlCommand.lateral.steering_tire_angle
にpure pursuitで計算したパラメータを入れているようです

のパラメータを作り込んでいるようです。
処理としては
Trajectroryの複数点とOdometoryの点を比較し、Trajectory内の最も近い点(インデックス)を取得する。
上記で取得したTrajectoryの縦方向のスピードをlongitudinal.speedに代入する。
proportinal gainと縦方向の速度差分をlongitudinal.accelerationに代入する。
先読み点を検索し、計算を行い
ateral.steering_tire_angleに代入する。
ということをを行っているようです。

まとめ

いろいろOSS連携してみたかったけど面倒くさい予感がしてきた。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0