概要
「初心者がAI Challengeやってみた」シリーズの第6弾です。
今回はautowareににmini_autowareという新しいブランチが作られていたのでAutoware-Miniという最小構成のautowareのlaunchファイルが追加されていたので、そちらを使ってみました。
感想としては「パラメータ変更による動作への影響が分かりにくい」、「そもそもどのパラメータをいじれば良いのか分からない」と言った悩みを解決するのに良いブランチだと思いますのでもし同様の悩みがある方がいたら参考にしてみてください。
===
本シリーズではJapan Automotive AI Challenge 2023にautoware初心者の筆者が試行錯誤しながら挑戦する記録を公開しています。自動運転に興味があるけどプログラミングに自信が無い方などの参考になれば幸いです。
前の記事はこちら:
- 第1弾:初心者がAIチャレンジやってみた(1):Autowareを動かしてみる
- 第2弾:初心者がAIチャレンジやってみた(2):1つ目の障害物の回避成功
- 第3弾:初心者がAIチャレンジやってみた(3):2つ目の障害物の回避成功
- 第4弾:初心者がAIチャレンジやってみた(4):全障害物回避達成!(全パラメータ公開)
- 第5弾:初心者がAIチャレンジやってみた(5):開発環境の再構築(番外編)
筆者は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
動作は以下の動画のような感じになると思います。障害物をガン無視して衝突しながらゴールに向かって走行していきますが、途中で計画経路がレーンからはみ出してしまうため停車してしまいました。
中身の確認
実行してみて分かるように障害物回避などが動いていません。
何がどう違うのかを確認してみましょう。
- ターミナルで呼び出している
run.sh
を確認 →aichallenge.launch.xml
が呼び出されている -
aichallenge.launch.xml
を確認 →aichallenge_submit.launch.xml
が呼び出されている -
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 なし |
これを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で見つけられると思いますが、まだ自分で試せていないです。
今後は自作でパッケージを作ってみて動かせるかを試してみたいと思います。