Gazebo turtlebot3 Burger Depth Camera Navigation Python Program.

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

4.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_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 上のシュミレーションでも、得られる情報は、結構あるもんじゃ。
実機でテストする前に、ここまで判れば十分じゃ。

後は、草刈りで、畑をくまなく移動させるにはどうすればよいか?

このブログ記事について

このページは、おんちゃんが2020年11月24日 14:00に書いたブログ記事です。

ひとつ前のブログ記事は「Gazebo turtlebot3 waffle Depth Camera SLAM」です。

次のブログ記事は「Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ