Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット #3

Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット #3 です。

Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット #2 に続いて、残りの部分を作ります。

開発環境
OS: Ubuntu Mate 18.04
言語: Python2.7 ROS: melodic
開発ツール: Visual Studio Code
Gazebo/Turtlebot3 burger
注) burger には、Depth Camera プラグインを追加します。
条件:
1) バーガーを草刈りロボットとみなします。
  サイズ:178 x 178 [mm]
2) 部屋を畑とみなします。
3) センサーは、Depth Camera プラグインを使います。
  屋外の、実際の畑では、ちょっと無理だと考えますが、今回は、畑を隈無く移動させるプログラムの試験なので、割愛します。
4) SLAM で、畑 (部屋) のマップファイルが作成済とします。

1. 次は、ライン情報テーブル 作成 です。

class GenLine を作成します。

mower_robo1.py に続けて記述します。

~/catkin_ws/src/ros_start/scripts/mower_robo1.py  update 2020.12.5

2. 最後に、移動 (草刈り) 処理
プログラムのメインの制御と、main を作成します。
class MowerRobo と main です。

mower_robo1.py に続けて記述します。

~/catkin_ws/src/ros_start/scripts/mower_robo1.py update 2020.12.5

3. 実行です。

$ 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/map.yaml

$ roscd ros_start/scripts
$ python mower_robo1.py


以上です。
end !! が出たら、終点です。

まだまだ、荒削りですが、目標の動きは、再現できると思います。
途中で、壁にぶつかったら、 Rviz の 2D Navi Goal で少し移動させてやってみとうせ。!!

注1) たまに、目的地が飛ばされる時がある。
 self.pub.publish(self.goalMsg) の後で、move_base/result の空イベント上がってくるみたい!!
他の人も経験しているみたい。
https://github.com/jsk-ros-pkg/jsk_common/issues/155

これに関しては、/move_base/result のイベントが来たときに、/odom の pose.pose.position.x、y が変わってなかったら、
もう一度同じ目的地への移動メッセージを出すようにしました。
 当初、コールバックルーチンの中で、目的地への移動メッセージしていたのが良くないのかと、考えて、目的地への移動メッセージ をコールバックルーチン外で出す様に変更してテストしましたが、改善されませんでした。

また、/move_base_simple/goal へのメッセージの、WaitForTransform をしなければいけない書き込みも在りましたが、
これば、的外れのきがします。
/move_base_simple/goal へのメッセージ が届いているから、/move_base/result のコールバックが実行されているので。

update 2020.12.4 by nishi


注2) ラインのstart,end が壁に近すぎる事がある。
 今回、これの対策は組み込んでいないので、我慢しとうせ。

注3) 逆に、遠いときがある。
 まだ、プログラムを突き詰めていないので、勘弁しとうせ!!

注4) Depth カメラでの 障害物判定距離が近すぎる(まだ、遠くに設定できない)ので、
うまく、壁を避けられない時がある。
レーザーの方を使えば、問題ないと思うが、そうすると本来の趣旨から言ってどうか..

追々、改修していかんといかんぞね!!

いまは、Rviz で動きをじっくり観察して、どうするか考えているところじゃ!!
後、たまに誤字があるのは、勘弁しとうせ、 FiLCO のクソボロのキーボードが、
あまりにチャタリングがひどくてダブって入る所為じゃ。

注5) バーガーの車体サイズの定義が、ナビゲーションでは、大きのでは!
turtlebot3_navigation/param/costmap_common_params_burger.yaml
#footprint: [[-0.105, -0.105], [-0.105, 0.105], [0.041, 0.105], [0.041, -0.105]]
#changed by nishi
footprint: [[-0.110, -0.090], [-0.110, 0.090], [0.041, 0.090], [0.041, -0.090]]

注6) 壁に近い直線は、壁から離れて、カーブを描いたコースを取る。
 もしかしたら、到着時のバーガーの向きが適切でないかもしれない。
ここのプログラムは、まだ未対応だが、
草刈りなので、とにかく、真直ぐ進んで欲しい。草を障害物と判定したら、草刈りが出来ない。
やはり、基本、障害物を避けるナビゲーションではなくて、機械学習で、草を選んでコースを決めるロボットが必要か?

注7) /move_base/result の戻りコード
 status.status = 3 : 正常
 status.status = 2 : 目標地が再設定された
 status.status = 4 : バーガー糞詰り。ニッチもサッチも動かない。
  この場合は、手助けが必要。ここは、プログラムで救済方法を考えないといけない!!

注8) バーガーの向きを、ラインに一致するようにしました。update 2020.12.5 by nishi

注9) Map の役割があまり理解できなかったので、turtlebot3_empty_world.launch を使って、ある意味レーザー、
Depth カメラが無いのと同じ状況にして試してみました。
他の、ナビゲーションの起動等は同じにして。
どうやら、次の目的地が与えられたときに、Map を元にした経路計画が作られる。..この点は有効に働いている。
この時、黒ラインが表示される。
黒ラインに従って移動するに従って、目的地の途中までの赤ラインが表示されて、それに従って移動する。

 ただし、移動途中で最短コース(この場合は、Map の壁は無視)が現れると、そのコースを選択して進むようになります。
今回は、センサーが無いのでそのまま突切って、目的地へ到着します。

この動きから、Map情報が何処まで使われているのか、推測できます。

この時、センサーが在れば、センサーに現れる障害物をうまく処理できれば、問題なく切り抜けられます。
ただし、この場合にうまくセンサー情報の対応処理がうまく出来ない時が有って、この場合最後までうまく行かないと、
rc=4 で移動を停止します。

要約すると、当初の経路計画には、確かに、Map が使われる。
ただし、移動するに連れて、初期の経路よりも、センサーを使った経路を重視するようになる。

問題箇所。
"ROS ロボットプログラミングバイブル" の本を参考に、この問題行動を推測すると、
11.6.1 ナビゲーション(Navigation) に記述のある、
動作計画(Motion Planning)、移動/障害物回避(Move/Collision Avoidance) に記述のある、
move_baseの経路計画パッケージの中の、障害物回避アルゴリズム Dynamic Window Approach (DWA) に問題があると思われます。
パラメータ不良か、プログラム自体の不具合か?


注10) /move_base_simple/goal のリクエストに対して、動作完了(status=3)、エラー(status=4) になると、
/cmd_vel がプログラムで使えるようになるので、この間に、プログラムでバーガーを自由に操作できるみたいぞね!!
と言うことは、目的地までナビゲーションを利用して、目的地に到着したら、自分でバーガーを操作して何かできると言うことか。

総括.
草刈りロボットは、vel_bumper.py の様な、とりあえず真直ぐ進んで、障害物がバンパーに当たったら、
回避行動をする様な物が適しているのか?
そのバンパー役を、カメラで写して機械学習で判定する類が向いているのかも。

Gazebo のシュミレーションで、この事が簡単に学習出来たのでよかったです。

その後。
畑の草刈りロボットであれば、畝や、畑が突然崖になっていたりするので、そこを認識するには、
やはり 3D Map でないといけない。
RTB-Map 3D で、屋外でActive SLAM を行っている例が、You Tube に出ているので、試してみたいぞね。
rtabmap_ros
その前に、 RTB-Map で、2D Map の作成は、簡単に試せました。
Mapping and Navigation with Turtlebot
でも、PC のパワーが結構、必要みたいです。

このブログ記事について

このページは、おんちゃんが2020年12月 2日 13:04に書いたブログ記事です。

ひとつ前のブログ記事は「Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット #2」です。

次のブログ記事は「Tensorflow1.15 pointnet part_seg」です。

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

カテゴリ

ウェブページ

サイトナビ