概要
今回の記事ではAWSIMを使ってAutowareでジャンプ台を使って飛んでみる方法について書いていこうと思います。
環境
awsim-stableのbrachが3/14に新しくなりました。今回はこのversionをもとに記事を書いていきます。
パッケージのディレクトリ構成が大きく変わっているので前の記事を参考に新しくrepositoryを作り直したほうがいいです。
buildトラブル解決に自信がある勇者は以下のコマンドでupdateしましょう。パッケージのディレクトリ構成が変わっているのでsrc,install,buildフォルダは事前に削除したほうがいいです。
cd autoware # のrepository
git pull awsim-stable
vcs import src < autoware.repos # お好みで --force オプションも
または
vcs pull src # 変更加えていたりするとここでエラーがでるので気をつけましょう
colcon build いつものコマンド
さて、新しくなったawsim-stableではautomatic goalというrviz pluginが加わりました。robotecの方がPRを出してくれたようですね。
使い方などはreadmeに書いてあるのでぜひ使ってみてください。
readmeを見ながらAppend goal ボタンをクリックしてゴールの候補を追加し、send goal automaticallyで発車していきましょう。
検証
今回はとりあえずジャンプするまえに細かい検証をしていくためassetストアにあった丸太を使っていきます。(create 3D objectから適当に作ってみてもOKです)
アセットストアとパッケージの使い方はこちらで紹介しているので見てみてみください。
小さいのから大きいのまでならべてみしたが、大きいものは途中で停止してしまいハードルを下げました。
とりあえずキー操作で超えられるのかみてみましょう。
vehicle keybord inputをオンにしましょう。(buildするときはAWの入力とバッティングしてしまうのでオフにするのをわすれないように)
step実行で見てみましょう。干渉判定がしっかり働いているのでタイヤが木に乗り上げてますね。
autowareで制御するときはobstacle stop plannerで木材が障害物判定されてしまうのでobstacle cruise plannerを使うようにします。
<!-- motion -->
<arg name="cruise_planner_type" default="obstacle_cruise_planner" description="options: obstacle_stop_planner, obstacle_cruise_planner, none"/>
<arg name="use_surround_obstacle_check" default="true"/>
<arg name="smoother_type" default="JerkFiltered" description="options: JerkFiltered, L2, Analytical, Linf(Unstable)"/>
ゴールまで走行できましたかね。
解析する
せっかくなので挙動も見てみましょう。plot jugglerというツールを使用していきます。チュートリアルも充実しているので使い方はこちらを参照するのがよさそうです。
以下のコマンドで起動しましょう。
ros2 run plotjuggler plotjuggler
startというボタンを押してから以下のものを選択していきましょう。
/localization/kinematic_state
/localization/acceleration
/control/command/control_cmd
poseのzの値がところどころスパイク状になっていますが、丸太で上下に揺れた影響でした。
autowareでjumpしてみる
create obejectからQuadを選択して、ジャンプ台を作成していきましょう。
とりあえずキーボードinputでテスト。Dでギアを入れて上矢印で前進できます。
unityの※物理エンジンのPhysicsはたしかNvidiaが作成していたと思いますが、なかなかいい挙動しています。
※bulletやODEなど挙動の計算を行うもの
落下地点をミスると突き刺さりますね。lidarのセンサ値も変動が大きいのでピッチ角変動に対する耐久性は将来的には課題になりそうですね。
実際にやるとすごく危ないので実機での検証はおすすめはできないです。
さて、先程はキー操作でのジャンプでしたが、今度はautowareを使ってジャンプしていきます。
見やすいようにmain cameraについているfollow cameraのスクリプトを外して移動させます。
一応目安として適当な大きさのにキューブを置くと良いと思います。今回は高さ2mの台で幅3mジャンプ台?としました。
build 方法はこちらで紹介しているので見ていない方は要チェック
autoware側はジャンプ台が障害物判定されてしまい、障害物停止してしまうので、もう少し攻めていきます。障害物停止をnoneにしてとりあえず走行してみます。
<!-- motion -->
<arg name="cruise_planner_type" default="none" description="options: obstacle_stop_planner, obstacle_cruise_planner, none"/>
<arg name="use_surround_obstacle_check" default="true"/>
<arg name="smoother_type" default="JerkFiltered" description="options: JerkFiltered, L2, Analytical, Linf(Unstable)"/>
npcはジャンプしていますが、今回はこの状態のまま途中でとまってしまいました。摩擦や干渉判定が関係しているのかもしれません。(わかったら教えてください)
高さ1mの台にして斜度を低くし再チャレンジしてみました。頼む!
1mなら飛べましたね。
## おわりに
今回はジャンプ台を作成して、自動運転で飛んでみました。
詳しく調べていませんが、simulatorのzの値、ピッチ角が怪しいので改善の余地はありそうでした。(PRお待ちしています)
炎上しそうなので私はやりませんが、大玉を横から転がしてautowareの制御なら耐えられるのかといったようなことをしてみても面白いかもしれませんね。