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

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

Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット で、プログラム設計ができたので、
これから、実際にプログラムを作成します。

開発環境
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. 最初は、 Map のデータをアクセスするプログラムを勉強がてら、作ってみます。

/map nav_msgs/OccupancyGrid とのことなので、インターネットで検索して、なんとか作って見ました。

~/catkin_ws/src/ros_start/scripts/map_test1.py

実行は、下記になります。



実行すると、/map で出てくるマップ(pgm) が、OpenCV で確認できます。
Rviz で見る地図と比べてみると、同じでありません。
どうやら、 y=x の線での線対称になっているようです。
これが、こんかいの曲者でした。

width: 421
height: 421
resolution: 0.05
なので、21.05 X 21.05 [meter] の地図と言うことです。
地図の原点は、真ん中 : (x,y)=(210,210) [dot] = M(0,0) [meter] になるようです。
Gazebo で見ると、青、赤、緑のラインが出ているので、そこが中心でした。
もっと、早く気が付けばよかったぞね!!

もちろん、Map画像では、左上が、(x,y) = (0,0) です。

Rivz の地図では、
(1) 左上 M(+x,+y)  (4) 右上 M(-x,+y)
(2) 左下 M(+x,-y)  (3) 右下 M(-x,-y)

注) M() は、Meter 空間と言う意味にします。
  +x,+y = 10.525 [meter] (+210 [dot])
  -x,-y = -10.525 [meter] (-210 [dot])

これが、Map データ上では、
(3) 左上 M(-x,-y)  (4) 右上 M(-x,+y)
(2) 左下 M(+x,-y)  (1) 右下 M(+x,+y)

注1) (n) は、図面上の部屋の4角に当たる所に、番号を振りました。
Rviz の図面の左上から、反時計回りに、4角に割り振っています。
Rvizの角に対応する、Mapデータ角が、同じ(n) になります。

Rviz と、Mapデータでは、 (1) と (3) の角が入れ替わっています。
つまり、 直線 y=x での、線対称のようです。
Mapデータ の x,y を入れ替えれば、Rviz のデータになります。
つまり、 Mapデータ(x,y) の位置は、 M(y,x) の位置にあたります。

上のM(+x,+y) M(-x,-y)等を書いたのは、早見のためです。
Mapデータの原点は、左上なので、
3) 左上 M(-x,-y) にあたります。この場合、
x=0 は、 -210 から、y=0 は、-210 からそれぞれ軸に沿って変化すると言う意味です。
超、頭が痛くなるぞね!!

今後、Map データを、 Numpy 配列に入れて、操作しますが、
その際には、あくまでも、通常の(x,y) 配列として、内部処理をして、
最後に、move_base_simple/goal へPublish するときに、x,y を入れ替えします。

注2) Mapデータを、OpenCV で、上下反転、回転して、Rviz と同じ画像にしても、OKぞね。
 最初に試したのは、この方法でしたが、うまく行かないと思ったのですが、結局は、OKでした。
こちらの方が視覚上同じなので、便利かも。
でも、意図的に、線対称のデータにしてあるのであれば、何か意味があるような気がしてなりましぇん。

2. 実際のプログラムです。
最初は、 グリッド情報テーブル 作です。
class GetMap を作成します。

ちなみに、プログラム名は、mower_robo1.py です。

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

このブログ記事について

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

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

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

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

カテゴリ

ウェブページ

サイトナビ