自作 Turtlebot3 自律走行に向けたプログラム。#8
--- Turtlebot3 SBC(Jetson Nano 2G) で、rtabmap_ros で、色々試す。#2 ---
補記) move_baseのローカルプランナーを変更する 。
自作 Turtlebot3 自律走行に向けたプログラム。#7 の続きです。
Spark Fun DMP 6軸フュージョンをキャリブレーション でロボットの前傾姿勢 (IMUの観測値) の補正が出来なくて、
IMUの取り付けスペーサーの両面テープで、前傾を調整して、それから、ロボットを平らな所に置いて、
$ rostopic echo /odom_fox | more
で、見てみると orientation:y = 0.013
で少し前傾しているので、最後の手段、foxbot_core3.ino で、むりやり、q[1] -= 0.013
をして、やっと、前傾がなくなりました。
注) ここは、クォータニオンの回転の計算をしないといけないようです。
クォータニオン(四元数)を使用して座標を回転させる
P2 = Q x P x 共役Q
クォータニオン積を2回行う様です。
今は、手抜きの計算なので、ロボットが、後ろ、179[Deg] から -179[Deg] へ回転する時、変にぶれます。by nishi 2022.6.12
後、ロボットの起点を平らな所に移して、これで、rtabmap_ros で試すと、Rviz の画面で、以前ほどは、沈み込はなくなりました。
ただ、高さの計測が出来ているかと言えば、まだまだその精度には、なっていません。
1. 今の問題点。
rtabmap_ros で、multi_goals4.py で自動で動かすに当たって、今直面している問題点は、何?
それは、ロボットが最後まで完走しないで、途中で止まってしまうことがある点です。
rtabmap_ros を調整して、何回か完走して、これでOKかと思ったら、やはり、完走出来ない事がある事です。
これを、改めて冷静に整理してみました。
完走しないで、途中で止まるのは、Pyrthon Scripts で、途中の経由地への到着で move_base が、経由地へ完全に到着しない旨のエラーを返すので、それが3回エラーになったら、Python Scripts でエラー終了にしてしまっている。
この場合でも、ロボットは、途中の経由地の近辺には来ている。
であれば、Python Scripts で、その誤差を取得して、許容誤差の範囲内であれば、もう次の目的地を目出す。
あるいは、経由地に近づいてから、move_base が、現在位置が、経由地と完全に一致しないので、
少し前後にあるいは左右に車体を動かすのだが、その時の動作が大きい気がする。
数mm のズレを治すのに、其れ以上に車体が動いているのでは?
この場合は、Python Scripts から、move_base の動作速度を落とす様、パラメータを変更してやれば良いのかも知れない。
今まで、multi_goals4.py でロボットが完走しないのは、rtabmap_ros の設定に問題が有るとばかり思っていましたが、
そうではなくて、move_base の設定値か、move_baseを操作する、multi_goals4.py の工夫次第で、完走できるようになるのでは、と考えるようになりました。
ここで、とんでもなく間抜けをしていた事がわかりました。
rtabmap_ros で、3D-Mapping をしていながら、Python Scripts で、目的地を指定するのに、position X,Y と ロボットの向きの z(yaw) の値しか指定していませんでした。
他の position Z(高さ) と、ロボットの傾き x(roll), y(pitch) は、0 に指定していました。
DWA のパラメータに、上記値の tolerance 指定は、無い様です。
rtabmap_ros のパラメータ、
Reg/Force3DoF=true
で、rtabmap_ros を 2D にする方法も在りますが、これでは、まるっきり最初に戻ってしまいます。
move_base の DWA が、そもそも 3D 対応で無いのが、根本の問題としてあるのか?
DWAを 3D 対応にして、但し、position Z(高さ) と、ロボットの傾き x(roll), y(pitch) の、tolerance 指定 をできるように改造出来ないものだろうか?
2. move_baseのローカルプランナーを変更する があるが、別の local planner を選べるのか?
上のページに従って、eband_local_planner を使ってみます。
$ sudo apt install ros-melodic-eband-local-planner
move_base_foxbot.launch の修正
インターネット上で、eband_local_planner_params.yaml を探して、下記ファイルとして保存。
~/catkin_ws/src/turtlebot3_navi_my/param_foxbot/eband_local_planner_params.yaml
eband_local_planner_params.yaml
エラーも無く、簡単に出来ました。
但し、めちゃくちゃロボットの動きが早いので、パラメータの修正が必要です。
注1) これは、先頭行の EBandPlannerROS:
が抜けていたため、パラメータが全てデフォルトになっていたためでした。
注2) eband_local_planner も、 2D 対応 Local Planner です。
注3) xxx.yaml ファイルは、DWA と eband_local_planner のパラメータを同じファイル内で記述しても良いみたいなので、1つのファイルに纏めても良い。
注) teb_local_planner のインストールの方法もあったので、Turtlebot3 で、試してみましたが、説明の設定だけでは、
こちらは、思うように動作しません。
細かい設定は、teb_local_plannerTutorialsSetup and test Optimization に説明が在るように、
teb_local_planner_tutorials.git をダウンロードして
$ git clone https://github.com/rst-tu-dortmund/teb_local_planner_tutorials.git
~/catkin_ws/src/teb_local_planner_tutorials/launch 下のサンプルを参考に、 move_base へ組み込んだ方が早そうです。
こちらのサンプルでは、ロボットがきれいに動作します。
3. 結果。
これは、めちゃくちゃ良いです。最高!! もっと早くに、こちらを使うべきだったぞね!!
DWA に戻る事は、二度とないと思うぞね。
eband_local_planner を使うことによって、Rtabmap_ros も結構良い事が確認出来ました。
いまは、Single USB Stereo Camera ですが、Depth Camera にすれば、もっと性能が上がるかも知れません。
注4) Gazebo上 では、なぜか、あまり良くないが、実機では、最高じゃ。
後日、最新版を、Git Hub にアップするぞね!! by nishi 2022.5.26
関連する git
i) tosa-no-onchan/foxbot_core3
ii) tosa-no-onchan/lib-nishi3
ii) tosa-no-onchan/rtabmap_ros_my
iv) tosa-no-onchan/turtlebot3_navi_my
v) tosa-no-onchan/uvc_camera_single
これで、やっと 自作 Turtlebot3 with rtabmap_ros and Single USB Stero Camera を使って、
Python Scripts で、ロボット操作に専念できるぞね!!
ただ、草刈りロボットとなると、Rtabmap_ros は、却って向いていないかも。
GPS + 機械学習でのSLAM from Camera が出来れば最高じゃが!!
Trutlebot3 より、PX4 と、言うのが、よいのかも知れない。
Airframes Reference の中にローバーもある。
Rover Frames (UGVs)
注) 但し、こちらは、情報が公開されなくて、敷居が高いらしい。ArduPilot の方が、コミュニティな環境の様です。
Rover
PX4 も、ROS の、move_it 等と組み合わせれば、それなりにオープンなリソースを流用できそう。
PX4 SITLシミュレーション
ArduPilot も ROS で拡張できそう。
それよりも、おんちゃんは、今の環境で、草地をまんべんなく走行する仕掛けに取り組みます。