Gazebo turtlebot3 Burger Depth Camera Navigation Python Program です
。
Gazebo turtlebot3 waffle Depth Camera Slam and real time Mapping. で、Gazebo turtlebot3 Burger の
Depth カメラ でのナビゲーションが確認できたので、こんかいは、 Python でバーガーを動かしてみようとおもいます。
グーグルで検索していたら、下記ページがあったので、そのまま使ってみます。
multi_goals.py
開発環境
OS: Ubuntu Mate 18.04
ROS: melodic
開発ツール: Visual Studio Code
Gazebo/Turtlebot3 burger
注) burger には、Depth Camera プラグインを追加します。
1. 作成。
そのままでは、家から、はみ出すので、ちょっとだけ変更します。
~/catkin_ws/src/ros_start/scripts/multi_goals.py
うむ、動いたぞね!!
障害物があって、バーガーが途中で停止したりする場合があるので、それへの対応処理を組み込めば、
使えるようになりそうぞね。
2. 経路の計画。
次は、経路の計画を立ててみます。
それらしいツールが、まだ見つけられないので、ここは、ちょっと頭をひねって。
Rviz で 2D Nav Goal を行うと、/move_base_simple/goal が出てくるので、これを、Python プログラムで逐次チェックして、
ファイルにお落とすようにします。
そして、そのファイルを、上記プログラムを少し手直しして、ファイルから目的地データを取り込んで、バーガー を動かします。
そうすれば、Rviz で 経路の計画が立てられるのでは無いか、と言う考えです。
同じ発想の人も、いるもんです。
Map-Based Navigation
Finding the Coordinates for Locations of Interest
注) おんちゃんは、この人の考えを流用したのではないぞね、自分で考えたぞね!!
その点は、間違えないでいとうせ!!
3. Rviz で目的地を指定してルートを作成。
~/catkin_ws/src/ros_start/scripts/tbot3_sav_move_base_simple.py
3.1 操作
$ roscore
$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_gazebo turtlebot3_world_nav_nishi.launch
$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map6.yaml
$ roscd ros_start/scripts
$ python tbot3_sav_move_base_simple.py
Rviz で目的地を順に指定して、ルートを作成する。
ルートが、完成したら、tbot3_sav_move_base_simple.py を終了させます。
route_plan.txt が作成されています。
4. 保存されたルートを読みこんで、それをたどるプログラム。
~/catkin_ws/src/ros_start/scripts/tbot3_nav1.py
$ roscore
$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_gazebo turtlebot3_world_nav_nishi.launch
$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map6.yaml
$ roscd ros_start/scripts
$ python tbot3_nav1.py
route_plan.txt を読み込んで、ルートを辿ります。
5. 感想
1) どうしても後ろ向きに進むシーンが多い。
離れた地点を指定すると、どうしてもそのまま後ろ向きに移動して、到着点で、指定の向きに変わる。
後ろ向きに進まれると、Depth カメラで障害物を見つけられない。
あくまでも、レーザーセンサーを前提の動きぞね!!
まだ、設定パラメータに、Depth カメラ用の項目があるのか?
2) 取るコースが直線的でない。
多分、進路変更のアルゴリズムが、直角コーナを例に取れば、その場でクルッと回る
のではなくて、車のように前に進みながらコーナーを曲がるので、ベジェ曲線の様な進路変更を取る、作りぞね。
これでは、おんちゃんの目的の草刈りロボットの進み方には、ちょっと合わない。
その場で、クルッと回って、後は、まっすぐ目的地に行って欲しい。
注1) マップ情報で、壁に近い直進のルートの場合、その壁を避ける形で、遠回りのルートを、選んでいる様にも見える。
6. 設定情報を見直しました。
1) turtlebot3/turtlebot3_navigation/param/costmap_common_params_burger.yaml
注1)
obstacle_range: 1.0 [m] 位にしたいのだが、そうすると、Depth Camera なので、地面を障害物として、捉えるみたいで、うまく行かない。
Depth Camera の PointCloud2 の Y軸を制限するには、どうすればよいのか?
注2)
#inflation_radius: 1.0 では、おんちゃんの場合は、距離が有り過ぎでした。
2) turtlebot3/turtlebot3_navigation/param/dwa_local_planner_params_burger.yaml
注1) Burger が後ろ向きに進む件。
#min_vel_x:-0.22
# ここがマイナスだと、バックするみたい。0.0 だと、バックしないが、障害物にぶつかった時、回避行動のバックができない。
min_vel_x:-0.03 # これ位か?
初期値が、
max_vel_x: 0.22
min_vel_x: -0.22
だったので、前進、後進のどちらを選択しても良い。と判断していたのでは。
注2) Bureger が、大回りになる件。
#max_vel_theta: 2.75
#min_vel_theta: 1.37
# ここが大きいと大回りになるみたい。
max_vel_theta: 1.0
min_vel_theta: 0.3
この値を調整すれば、その場でクルッと向きを変えるのでは?
この2つのファイルの設定変更で、だいぶ、オンちゃんが考える、草刈りロボットの動きに近づいてきたぞね!!
Gazebo 上のシュミレーションでも、得られる情報は、結構あるもんじゃ。
実機でテストする前に、ここまで判れば十分じゃ。
後は、草刈りで、畑をくまなく移動させるにはどうすればよいか?