LoginSignup
7
2

初心者がAIチャレンジやってみた (6):mini_autowareを使ってみる

Last updated at Posted at 2023-07-20

概要

「初心者がAI Challengeやってみた」シリーズの第6弾です。
今回はautowareににmini_autowareという新しいブランチが作られていたのでAutoware-Miniという最小構成のautowareのlaunchファイルが追加されていたので、そちらを使ってみました。
感想としては「パラメータ変更による動作への影響が分かりにくい」、「そもそもどのパラメータをいじれば良いのか分からない」と言った悩みを解決するのに良いブランチだと思いますのでもし同様の悩みがある方がいたら参考にしてみてください。

===
本シリーズではJapan Automotive AI Challenge 2023にautoware初心者の筆者が試行錯誤しながら挑戦する記録を公開しています。自動運転に興味があるけどプログラミングに自信が無い方などの参考になれば幸いです。

前の記事はこちら:

筆者はautoware初心者です。
説明等が正確でない可能性があるので本記事だけではなく他の記事やautowareのドキュメントも確認するようにしてください。

mini_autowareブランチを使ってみる

ブランチの切り替え

まずはブランチを切り替えて動かしてみましょう。
ターミナルを開いて以下の手順を実行します。

cd aichallenge2023-sim             # AIチャレンジのディレクトリに移動
git fetch                          # 最新の変更内容をgitからダウンロード (このコマンドはスキップ可)
git stash                          # 消えてほしくない変更内容がある場合はこれで一時保存する
git pull                           # 最新の変更内容を実際に反映する
git stash pop                      # 一時保存していた変更内容を反映する
git checkout main                  # ブランチを切り替える

以上の手順で最新の変更内容の反映とブランチの切り替えができます。
ここはautowareの説明というよりgitの使い方の説明になってしまうので詳細は省きますが、簡単に説明すると git pullで最新バージョンのautowareプログラムをインストールして、git checkout feat/mini_autowareでmini_autowareのブランチ(autowareのバージョンみたいなイメージ)に切り替えています。ファイルを変更したりしている場合、git pullの段階でエラーが起こってしまうことがあります。そのためgit stashコマンドを用いて変更内容を別の場所に保管しつつ破棄してこのエラーが出ないようにします。

実行

ブランチの切り替えができたのでとりあえずautowareを実行してみます。合計で3つのターミナルが必要になりますのでそれぞれでrockerを起動しておきます。
Rockerを起動

cd aichallenge2023-sim/docker
bash build.sh
bash run_container.sh

Rockerコンテナ内でコマンドを入力してAWSIMとAutowareを起動します。
AWSIMを実行

# Rockerコンテナ内で
sudo ip link set multicast on lo
source /autoware/install/setup.bash
/aichallenge/AWSIM/AWSIM.x86_64

Autowareを実行

# Rockerコンテナ内で
cd /aichallenge
bash build.sh           # コードのビルド
bash run.sh             # コードの実行

以上のコマンドで従来どおりAWSIMとautowareが起動します。
次にRViz上で目的地を設定し、以下のコマンドを入力して自動運転を開始します(何故かRViz上のパネルから自動運転開始の指示が送れないので、ターミナルから直接指示を出す必要があります)。
コマンドを送信

# Rockerコンテナ内で
sudo ip link set multicast on lo
source /autoware/install/setup.bash
ros2 topic pub /autoware/engage autoware_auto_vehicle_msgs/msg/Engage 'engage: true' -1

動作は以下の動画のような感じになると思います。障害物をガン無視して衝突しながらゴールに向かって走行していきますが、途中で計画経路がレーンからはみ出してしまうため停車してしまいました。

中身の確認

実行してみて分かるように障害物回避などが動いていません。
何がどう違うのかを確認してみましょう。

  1. ターミナルで呼び出しているrun.shを確認 → aichallenge.launch.xmlが呼び出されている
  2. aichallenge.launch.xmlを確認 → aichallenge_submit.launch.xmlが呼び出されている
  3. aichallenge_submit.launch.xmlを確認 → ここが変わっている!

ということでaichallenge_submit.launch.xmlが変更されていることが分かりましたので中身を見てみましょう。(GitHubのpush内容とかを確認すれば上記の手順をふまなくても変更されたファイルとかがすぐに分かります。)

<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <!-- Autoware -->
    <!-- <include file="$(find-pkg-share autoware_launch)/launch/e2e_simulator.launch.xml">
        <arg name="vehicle_model" value="golfcart"/>
        <arg name="sensor_model" value="awsim_sensor_kit"/>
        <arg name="map_path" value="/aichallenge/mapfile"/>
        <arg name="rviz" value="false"/>
    </include> -->

    <include file="$(find-pkg-share aichallenge_submit_launch)/launch/autoware_mini_awsim.launch.xml" >
      <arg name="vehicle_model" value="golfcart"/>
      <arg name="sensor_model" value="awsim_sensor_kit"/>
      <arg name="map_path" value="/aichallenge/mapfile"/>
      <arg name="rviz" value="false"/>
    </include>

    <include file="$(find-pkg-share initialpose_publisher)/launch/initialpose_publisher.launch.xml" />

    <include file="$(find-pkg-share self_driving_controller)/launch/self_driving_controller.launch.xml" />
</launch>

元々はinclude file ...という部分のe2e_simulator.launch.xmlという部分が動いていたのですが、こちらのファイルではそこがコメントアウトされていて新たにautoware_mini_awsim.launch.xmlというものが追加されています。
試しにe2e_simulator.launch.xmlのコメントを外してautoware_mini_awsim.launch.xmlをコメントアウトして実行したら今まで通りの障害物回避をしました。

autoware_mini_awsim.launch.xml

前置きがだいぶ長くなりましたが、mini_autowareの特徴はこのautoware_mini_awsim.launch.xmlで呼び出すノードなどを全て指定しているという点でしょうか。

例えばL475-L479は以下のようになっており、目的地を可視化するためのノード goal_pose_visualizer が呼び出されています。

<!-- goal_pose_visualizer -->
<node pkg="mission_planner" exec="goal_pose_visualizer" name="goal_pose_visualizer" output="screen">
    <remap from="input/route" to="/planning/mission_planning/route"/>
    <remap from="output/goal_pose" to="/planning/mission_planning/echo_back_goal_pose"/>
</node>

この部分を消したり、コメントアウトするとこのノードが呼び出されなくなり目的地が可視化されなくなります。

1 2
goal_pose_visualizerあり goal_pose_visualizerなし
Screenshot from 2023-07-19 15-42-33.png Screenshot from 2023-07-19 15-43-21.png

これをe2e_simulator.launch.xmlの方で同じことをしようとすると、以下のような順番でファイルを参照しまくる必要がありました:
e2e_simulator.launch.xml → autoware.launch.xml → tier4_planning_component.launch.xml → planning.launch.xml → mission_planning.launch.xml → goal_pose_visualizer.launch.xml

私のようなautoware初心者がこれだけの数のファイルを辿っていってgoal_pose_visualizerにたどり着くのはほぼ不可能だと思います。その分 mini_autoware ではノードが直接autoware_mini_awsim.launch.xmlに記述されているので、今後の調整がかなり楽になりそうです。

ノードを追加したい時はROSの公式ドキュメントを参考にすると良いかもしれません。
ポイントとしてはしっかりとトピックをremapして他のノードがアクセスできるように調整することと、パラメータはparamを使って指定するのを忘れないことです。

一応autowareのノードとかはautoware.universeで見つけられると思いますが、まだ自分で試せていないです。
今後は自作でパッケージを作ってみて動かせるかを試してみたいと思います。

7
2
2

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
7
2