見出し画像

Isaac Sim の ROS2 Transform Trees と Odometry を試す

「Isaac Sim」の「ROS2 Transform Trees」と「Odometry」を試したのでまとめました。

・Isaac Sim 5.1


前回

1. Transform Trees と Odometry

ROS 2 とロボットシミュレーションをつなぐとき、座標系の管理はとても重要です。たとえば、ロボット本体、車輪、LiDAR、IMU、カメラなどは、それぞれ異なる座標系を持っています。

Navigation や SLAM を動かすには、これらの座標系がどのような親子関係にあるのかを ROS 2 側で正しく把握できる必要があります。そのために使うのが Transform Trees (/tf)  Odometry (/odom) です。

1-1. Transform Trees(/tf)

Transform Tree」は、ロボットやセンサーの座標系同士の関係を表す仕組みです。ROS 2 では、この座標変換情報が主に「/tf」トピックで配信されます。

たとえば TurtleBot3 の場合、次のような座標系があります。

・base_link
・base_footprint
・base_scan
・imu_link
・wheel_left_link
・wheel_right_link

これらは単独で存在しているのではなく、親子関係を持っています。

・base_footprint
 ・base_link
  ・base_scan
  ・imu_link
  ・wheel_left_link
  ・wheel_right_link

このように、各フレームの位置関係をツリー構造で表したものが「Transform Tree」です。

ROS 2 のノードは「/tf」を参照することで、次のようなことができます。

・LiDAR がロボット本体のどこに付いているかを知る
・カメラ座標系の点をロボット座標系に変換する
・odom から見た base_link の位置を取得する
・Navigation や SLAM で必要な座標変換を行う

1-2. Odometry(/odom)

Odometry」は、ロボットが移動した結果として推定される、現在の位置・姿勢・速度の情報です。ROS 2 では、主に「/odom」トピックで配信されます。

Odometry を理解するときは、2つのフレーム「odom → base_link」を意識するとわかりやすいです。

・odom : Odometry の基準になる座標系
・base_link : ロボット本体の座標系

つまり Odometry は、odom フレームから見た base_link の位置・姿勢・速度 を表す情報です。ここでいう odom は、ロボットの移動開始時点や Odometry 計算開始時点を基準にした座標系です。そのため /odom は、必ずしもworld座標上の絶対位置ではありません。

たとえば、シミュレーション開始時にロボットがworld座標の x=3.0, y=2.0 に置かれていたとしても、Odometry ではその時点を基準として扱います。
そこからロボットが前に 1m 進むと、「/odom」には「基準位置から前に 1m 進んだ」という情報が出ます。

「/odom」には、主に以下の情報が含まれます。

・位置 : x, y, z
・姿勢 : quaternion
・線形速度 : vx, vy, vz
・角速度 : wx, wy, wz

Navigation では、この Odometry を使ってロボットの移動を追跡します。ただし、Odometry はあくまで移動量にもとづく推定です。実機では車輪の滑りやセンサー誤差によって、少しずつズレが蓄積します。

そのため、一般的な Navigation では「map → odom → base_link」のような「Transform Tree」を使います。

・map : 地図上の固定座標系
・odom : 短時間では滑らかにつながる、Odometry の基準座標系
・base_link : ロボット本体の座標系

2. ロボットと環境の準備

以下の記事の「2. URDF の準備」「4. URDF のインポート」と同様にロボットと環境を準備します。

3. Transform Trees のpublish

3-1. Transform Trees のpublish

(1) メニュー「Tools → Robotics → ROS 2 OmniGraphs → TF Publisher」を選択。

(2) 以下の項目を設定して、OKをクリック。
TF Publisher のAction Graphが追加されます。

・Target Prim : /World/turtlebot3_burger/base_footprint
/tfとして配信したい対象の Prim です。TurtleBot3 のような「Articulation Root」 を指定すると、その下にあるリンクの Transform Tree も配信されます。

・Parent Prim : /World
Target Prim の基準になる Prim です。未指定の場合は、「/World」を基準にした Transform として配信されます。

(3) Playボタン (▶) をクリック。

3-2. Transform Trees の確認

(1) ROS環境のセットアップ済みのターミナルを開く。

(2) /tf の確認。

ros2 topic echo /tf
transforms:
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: World
  child_frame_id: base_footprint
  transform:
    translation:
      x: 8.6011212260928e-05
      y: -7.156713400036097e-05
      z: 0.015263657085597515
    rotation:
      x: -1.310438392465585e-06
      y: -0.002601725049316883
      z: -0.000370661960914731
      w: 0.999996542930603
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: base_footprint
  child_frame_id: base_link
  transform:
    translation:
      x: -3.322554176232728e-10
      y: 2.226485662504274e-11
      z: 0.009999998845160007
    rotation:
      x: 5.159108695806935e-10
      y: 2.095681628233592e-09
      z: -6.3169149910891065e-09
      w: 0.9999999403953552
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: base_link
  child_frame_id: caster_back_link
  transform:
    translation:
      x: -0.08099998533725739
      y: 1.879237210289375e-09
      z: -0.00400000112131238
    rotation:
      x: -0.7068250179290771
      y: -4.407201270595351e-09
      z: -6.05359673500061e-09
      w: 0.7073882222175598
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: base_link
  child_frame_id: base_scan
  transform:
    translation:
      x: -0.031999994069337845
      y: 1.2735767995764036e-10
      z: 0.1719999462366104
    rotation:
      x: 2.3294433049159124e-10
      y: -1.3968998180402536e-09
      z: 9.307223880483662e-10
      w: 0.9999998807907104
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: base_link
  child_frame_id: wheel_left_link
  transform:
    translation:
      x: -7.020381498357153e-10
      y: 0.07999996840953827
      z: 0.022999994456768036
    rotation:
      x: -0.7068250775337219
      y: -0.00028285806183703244
      z: -0.0002831231104210019
      w: 0.707388162612915
- header:
    stamp:
      sec: 122
      nanosec: 450006386
    frame_id: base_link
  child_frame_id: wheel_right_link
  transform:
    translation:
      x: 1.5143212239721038e-09
      y: -0.07999998331069946
      z: 0.022999996319413185
    rotation:
      x: -0.7068250775337219
      y: 0.00036742817610502243
      z: 0.00036768452264368534
      w: 0.7073882222175598
---

(3) Transform Trees全体の確認。

ros2 run tf2_tools view_frames

以下の2つのファイルを出力します。

・frames_XXXX-XX-XX_XX.XX.XX.gv
Graphviz 用の元ファイル。TF ツリー構造をテキストで表したもの

・frames_XXXX-XX-XX_XX.XX.XX.pdf
.gv を図としてレンダリングした確認用ファイル

4. Odometry のpublish

4-1. Odometry のpublish

(1) メニュー「Tools → Robotics → ROS 2 OmniGraphs → Odometry Publisher」を選択。

(2) 以下の項目を設定して、OKをクリック。
Odometry Publisher のAction Graphが追加されます。

・Articulation Root : /World/turtlebot3_burger/base_footprint
ロボット全体を表す Prim

・Chassis Prim : /World/turtlebot3_burger/base_link
ロボット本体の基準になる Prim

4-2. Odometry の確認

(1) ROS環境のセットアップ済みのターミナルを開く。

(2) /odom の確認。
/odom は、odom 座標系から見た base_link の位置・姿勢・速度を表します。

ros2 topic echo /odom
header:
  stamp:
    sec: 181
    nanosec: 183342782
  frame_id: odom
child_frame_id: base_link
pose:
  pose:
    position:
      x: 3.586948259978826e-09
      y: -3.937237479952689e-09
      z: 3.037065806226913e-06
    orientation:
      x: 1.7471796262639784e-05
      y: 2.2032909829450666e-05
      z: 4.903551199178982e-06
      w: 0.9999999995926212
  covariance:
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
twist:
  twist:
    linear:
      x: -1.1270090283233003e-07
      y: -3.3559405210326076e-07
      z: -1.9951801277784398e-06
    angular:
      x: -4.480965435504913e-05
      y: 1.4838282368145883e-05
      z: -2.7358501029084437e-06
  covariance:
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
---

(3) Transform Trees全体の確認。

ros2 run tf2_tools view_frames

4-3. Odometry の更新タイミング

通常の Odometry では、odom はロボット移動に合わせて動くものではありません。ただし、Navigation 全体では次のような Transform Tree になることがあります。

・map
 ・odom
  ・base_link

この場合、「odom -> base_link」は Odometry が更新します。一方で、「map -> odom」は AMCL や SLAM などの Localization が更新することがあります。つまり、map から見た odom の位置は補正によって変わることがあります。



いいなと思ったら応援しよう!