🚙

Autowareでラジコンの自動運転をしてみる

2024/08/16に公開

岐阜大学アレックス研究室です。

今日はAutoware Core/Universeでラジコン車両のCanEduDev ROVERを自動運転をしてみようと思います。

今回自動運転を行う車両

今回はKvaser社が開発する最高時速40km/h(はやい)の1/5ベースの車両CanEduDev ROVERを用いてAutoware Integrationを行ってみます。

Autoware Integration

最近はAutoware-Documentaionも充実しており、Integrating Autowareを参考にしました。
Autowareで自動運転を行うにはざっくり以下の3点が必要となります。
1. リポジトリの準備
2. 車両・センサーモデルの作成
3. Vehicle_interfaceの作成
4. Autowareのチューニング

1.リポジトリの準備

Autowareの各種リポジトリをfolkします。Autowareのメタリポジトリのxxx.reposは、Autowareの更新で作成したinterfaceが動かなくなる可能性があるため、Clone時のコミットで固定しておいた方が良いかもしれません。
参考:公式ドキュメント Integrating Autoware

2.車両・センサーモデルの作成

車両のモデル・センサー配置を記述します。templateのsample_vehicle_launchやsample_sensor_launchを変更する形で作成します。sample部は作成する車両名に変更します。
今回はセンサーはVelodyne VLP-32CとXSENS IMUを積載しました。

sample_vehicle_launchの作成

sample_vehicle_descriptionに車両モデルを格納し、sample_vehicle_launchでvehicle_interfaceを起動します。
車両の3D-Modelの作成にはBlenderを用いDAEファイルにて出力しました。
Rviz2ではモデルファイルから直接テクスチャを表示することはできないため、テクスチャ貼り付けは別ファイルからのリンクにて対応します。

センサーモデルの作成

車両のどこにどんなセンサーが乗っているか、またセンサー起動のlaunchファイルを記述します。またセンサーデータのCrop等の下処理もここで記述します。

Velodyne・HESAIなどの一部LiDARはTIER IV社のNebulaドライバーで起動することができ、LiDARのWebインターフェースにアクセスすることなく、ConfigファイルでLiDARの設定ができます。

作成が終わったらRviz 2でTFを表示したり、実際にセンサーを起動して確認します。
参考:公式ドキュメント Creating vehicle and sensor models

3.Vehicle_Interfaceの作成

Autowareと車両を繋ぐvehicle_interfaceを作成します。
vehicle_interfaceはステアリング・アクセル・速度などの情報を相互通信するためのノードとなります。ウインカーやドア開閉も必要に応じて実装します。

今回はCAN通信にて実装します。流れとしては以下のようになります。

  1. ros2_socketcanでCANとのやりとりを/to_can_busと/from_can_busとしてROSノード化する
  2. vehicle_interfaceで上記2トピックをPublish/Subscribeし、またAutoware側とのトピックも適切にPub/Subする。
    参考例:pix-moving社のpix-kitのvehicle_interface
    またアクセル-速度のキャリブレーションも行います。

4.Autowareのチューニング

autoware_launch内にAutowareのlaunchファイル・設定ファイルが格納されています。
必要に応じてパラメータチューニング等を行います。

地図作成

今回はLIO-SAMを用いて地図を作成しました。IMUとLiDAR間の外部パラメータが異なると地図がグニャグニャになってしまうので注意です。
また、Laneletに関してもVector Map Builderを用いて作成しました。

自動運転を行う

autoware.launch.xmlを起動し、自動運転を行います。
Rviz上で自己位置を指定し、autoボタンを押し自動運転を行います。

エラー消し込み

1回目は恐らく何かしらのエラーが出て、自動運転ができないかと思います。
ターミナルでERRORやprocess has diedをgrepし、エラーが出ている・落ちているノードを特定し、修正をしていきます。
機体・環境に対して適切にパラメータが設定されていなかったり(特にSensing, Localization周り)、トピックが繋がっていないことが多いです。
また

ros2 run rqt_runtime_monitor rqt_runtime_monitor

で/diagnosticsを拾い、ERRORを消し込んでいきます。

Operation Modeがautoに入り、自動運転が始まれば完了です。

さいごに

色々省きながら、一連の流れを記事にしてみました。
次回はもう少し細かく記事にしてみようと思います。
作成物のGitHubはここからアクセスできます。

岐阜大学アレックス研究室

Discussion