BEIKE blog

備忘録です

turtlebot3_burger ナビゲーション開始位置について

概要

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

何もいじってなければ、通常以下のようなパラメータになっていると思います。

f:id:beike:20200811185911p:plain
amcl_init_pose

実際にロボットを動かすときの初期位置がマップの[x,y]=[0,0]とは違う場合 、 以下のコマンドでrvizを立ち上げたときに、想定とは違う位置にスポーンされてしまいます。

roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

私の場合、家でとったマップ上(rviz)にうまくスポーン(姿勢・位置)する用に以下のように調整しました。

f:id:beike:20200811191005p:plain
amcl_tune

各パラメータについてですが、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について

以下のパラメータについて話をしていきます

turtlebot3_aws/4goal_waypoint_send_2.cpp at e22ebfeee75a364daddd008a43de464f6a0c1376 · uhobeike/turtlebot3_aws · GitHub

デフォルトはこんなんじ

f:id:beike:20200811200641p:plain
initial_pose

rvizでうまくスポーン(姿勢・位置)する用に以下のように調整しました。

f:id:beike:20200811200954p:plain
initial_pose_tune

amcのやつは何だったのって、なると思われますが、、、。

説明すると、個人の意見として、amclはぶっちゃけ値は何でも良さそうなのですが(init_Poseによって移動されるので)

しかしパーティクルの収束を考慮すると予め、設定しておいたほうが良いのかなと思っています。(適当にしてたら誘拐みたいなことになりそう)

なんだかんだで、パラメータの設定箇所については以上です。

④amclとinit_Poseの姿勢を同じにする方法について(計算方法)

たとえば、今回はamclのトピックをつかって、クオータニオンでの姿勢(orientation.zとorientation.w)を取得し、ラジアン回転の姿勢(initial_pose_a)に変換して、パラメータを設定しました。

計算方法は、以下の通りです。

initial_pose_a

   ⇩

 \begin{eqnarray}
    rad & = & x^\circ \frac{\pi}{180}\nonumber \
 \end{eqnarray}

orientation.zとorientation.w

   ⇩

\begin{align*}
w & = &cos\frac{x^\circ}{2} \
z  & = &sin\frac{x^\circ}{2}
\end{align*}

以上の計算がラジアンクオータニオンです。