turtlebot3_burger ナビゲーション開始位置について
- 概要
- やり方
- ①amcl.launchのパラメータを変更して、初期位置の変更することについて
- ②wapoint_setのsubするトピックについて(①のパラメータの調整する際の方法)
- ③ナビゲーション時のinit_poseについて
- ④amclとinit_Poseの姿勢を同じにする方法について(計算方法)
概要
turtlebot3_burgerでwaypoint_navigationを行う場合。ナビゲ−ションの開始位置が、マップの[x,y]=[0,0] ではない時にパラメータ設定する必要があった。設定しない場合、ナビゲーション時にwaypointが 変なところにいったりする。また、ロボットの姿勢がrviz上で狂った状態になる。そのことについて書いていく。
動作環境&筆者のPCスペック(実際に動かした)
環境
- Ubuntu18.04 LTS(実機)
- ubuntu18.04 server(RaspberryPi 3b+)
- turtlebot3_burger
PCスペック
- Corei7-8665 QadroP520 メモリ32GB
やり方
①amcl.launchのパラメータを変更して、初期位置の変更することについて
②wapoint_setのsubするトピックについて(①のパラメータの調整する際の方法)
③ナビゲーション時のinit_poseについて
④amclとinit_Poseの姿勢を同じにする方法について(計算方法)
①amcl.launchのパラメータを変更して、初期位置の変更することについて
実際のファイルの場所↓
turtlebot3/amcl.launch at master · uhobeike/turtlebot3 · GitHub
何もいじってなければ、通常以下のようなパラメータになっていると思います。
実際にロボットを動かすときの初期位置がマップの[x,y]=[0,0]とは違う場合 、 以下のコマンドでrvizを立ち上げたときに、想定とは違う位置にスポーンされてしまいます。
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
私の場合、家でとったマップ上(rviz)にうまくスポーン(姿勢・位置)する用に以下のように調整しました。
各パラメータについてですが、x,yについては自明だと思います。
initial_pose_a
はz軸に対して、どのくらいラジアン回転させるかというパラメータです。
計算については、④で触れます。
<arg name="initial_pose_x" default="0.0"/> <arg name="initial_pose_y" default="0.0"/> <arg name="initial_pose_a" default="0.0"/>
②wapoint_setのsubするトピックについて(①のパラメータの調整する際の方法)
値を①で調整することがわかりましたが、何かある程度参考になるやつあるでしょと思われます
以下が値を取得するためのソースコード(もっと良い揃え方あると思う多分、、)
ある程度ロボットを動かして、パーティクルの分散がある程度小さくなったら スタートしたい位置にて、waypointを登録します。
そうすると、waypoint.csvが作られて、一行目の値がスタートポイントです。
xとyについては、そのままコピペで良いと思います。initial_pose_aの値については、クオータニオンである zとwどちらかを用いて、導出します。(④にて)
③ナビゲーション時のinit_poseについて
以下のパラメータについて話をしていきます
デフォルトはこんなんじ
rvizでうまくスポーン(姿勢・位置)する用に以下のように調整しました。
amcのやつは何だったのって、なると思われますが、、、。
説明すると、個人の意見として、amclはぶっちゃけ値は何でも良さそうなのですが(init_Poseによって移動されるので)
しかしパーティクルの収束を考慮すると予め、設定しておいたほうが良いのかなと思っています。(適当にしてたら誘拐みたいなことになりそう)
なんだかんだで、パラメータの設定箇所については以上です。
④amclとinit_Poseの姿勢を同じにする方法について(計算方法)
たとえば、今回はamclのトピックをつかって、クオータニオンでの姿勢(orientation.zとorientation.w)を取得し、ラジアン回転の姿勢(initial_pose_a)に変換して、パラメータを設定しました。
計算方法は、以下の通りです。
initial_pose_a
⇩
orientation.zとorientation.w
⇩