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