ROS2 GPS Localization 時のスタティックマップの東西南北、に関する、おんちゃんの勝手な解釈。
大学、高専でロボット関連の授業を受けていれば当たり前の事かも知れないが、
なにせ、おんちゃんは独学なので、知識のなさを露呈しちょります。
もし間違っていたら、勘弁しとうせ。
ROS2 LC29H-EA GPS RTK を作る。
で、GPS RTK を使って、部屋の中でロボットの走行テストをしているときに、ふと湧き上がってきた疑問な点を、
おんちゃんながらの、勝手な解釈を書いてみました。
部屋の中で、LC29H-EA + RTK で地球上の位置を取得して、ロボットをうごかしているけれど、GPS だと、東西南北があるよね?
これは、スタティックマップでは、どっちら方になるのじゃろ?
1. 今、気になっている事。
GPS だと東西南北の方向がある。なのに、
robot_localization/navsat_transform_node
robot_localization/ekf_node
は、そもそものロボットの起動時の東西南北の方向 を気にしないのだろうか?
ロボットが、例えば、西に向かって動くばあい、GPS の情報もそれを反映すると思う。
しかし、Rviz2 で見えている、static Map の方角はどうなんだろう?
たまたま今は、x 軸を西にして、static Map を作ったので、ロボットを西に向かわせると、
x軸上を増加方向に進んでいるので、
見た目は破綻が出ていない。しかし、これで良いのだろうか?
色々考えてみた、どうやら、
Static Map を作る時の SLAM で、その時の起動時のロボットの向きが、x軸になる。
x軸の向きが、北向きなら、北向きのマップに、西向きなら西向きのマップになる。
つまり、Map の x軸を、東西南北のどちら向きにしているかで、決まる。
自分で、マップを作るときに、実際の土地をGNSSで測定して、マップを描く際に、x軸を
北にすれば、北向きのマップに仕上がる。という事になる。
まあ、通常の地図は、y軸が北なので、x軸は東になるのか。-- x軸、東向きのマップ。
map.yaml には、
resolution: 0.05
origin: [-2.88, -2.91, 0]
があるが、向き情報は無い。
tf-map の原点は、origin: [-2.88, -2.91, 0] と resolution: 0.05 と、map.pgm の画像サイズで決まる、
向きは、x軸方向が、0.0[radian] だろう。
localization の時の、開始時のロボットの位置と向きは、tf-map > tf-odom で指定される。
これは、 tf2_ros/static_transform_publisher を使って、launchファイルで指定ができる。
下記は、そのlanch ふぁいるの抜粋じゃ。
tf-map -> tf-odom をいじれば、スタート時の、ロボットの位置と向きを指定できる。
注) tf-odom をいじったほうが良いか、ロボットの方の tf-odom -> tf-base_footprint をいじるべきかは、もう少し検討が必要か。
ちなみに、屋外での gps 走行は、tf-odom -> tf-base_footprint を出すのは、robot_localization/ekf_node です。
State Estimation Nodes でみてみると、
~initial_state で指定できるみたいです。これをいじれば、OKか。
Starts the filter with the specified state. The state is given as a 15-D vector of doubles, in the same order as the sensor configurations.
For example, to start your robot at a position of (5.0,4.0,3.0), a yaw of 1.57, and a linear velocity of (0.1,0.2,0.3), you would use:
今まで、おんちゃんは、実機で部屋のマップを作る時、ロボットをいつも西向きにしていたので、西向きのマップを作っていたことになる。
そして、そのマップを使って、Localization をするときも、ロボットを同じ位置と向きで始めていたので、
おのずと+x 方向に動かせば、西にロボットを動かしていた事になる。
ちなみに、Localization でロボットが起動後に、実際移動した場合、その情報は、
tf-odom -> tf-base_footprint で示される。
ロボットが良く、/odom トピックを出力するが、それは、tf-odom からの距離と方角を示している。と思う。