はじめに
前回の記事では、
- ROS2 の座標系の基本整理
- 仮想オドメトリーをCLIで確認
-
/cmd_vel→ 自己位置計算 →/odompublish
まで行いました。
👉 前回記事
今回はその続きとして、
TF(座標変換)を追加し、RViz2で座標系を視覚的に理解する
ことを目標にします。
今回も以下の自社サイトで公開している下記記事の 要約版 です。
全体構成(今回の位置づけ)
- エンジニアとしてのROS2理解(理論整理)
- CLIでオドメトリー確認(数値で読む)
- TF追加 + RVizで可視化(今回)
今回は「見た目」ではなく、
フレーム構造を読めるようになることが目的です。
ここでのフレーム構造とは、
- どの座標系を基準にしているか
- その座標系同士がどういう親子関係になっているか
- どのフレームから見た位置・姿勢なのか
を明確に整理できることを指します。
このように見えるようにします。

1. TFツリーの構造
今回作る構成は非常にシンプルです。
odom
└── base_link
-
odom: ワールド座標 -
base_link: ロボット本体
この1本のツリー構造が成立していることが重要です。
2. 仮想オドメトリー + TF
前回のノードでは、
/cmd_vel → 速度積分 → x, y, yaw
/odom publish
まで実装しました。
今回はさらに、
odom → base_link
を TF として publish します。
3. なぜTFが重要か
オドメトリーの数値だけでは、
- どの座標基準か?
- どの向きを基準にしているか?
が明確になりません。
TFを追加することで、
「どのフレームから見た位置か」
をROS2全体で共有できるようになります。
4. RViz2で可視化
RViz2を起動し、以下を設定します。
- Fixed Frame:
odom - Add:
- TF
- Axes(base_link)
- Odometry(/odom)
- Grid
見るポイント
① Axes(base_link)
- ロボットの向きが分かる
- 回転すると軸がその場で回る
② Odometry(矢印)
- 位置 + 姿勢が同時に見える
- 前進+回転で円弧になる
③ TF表示
- odom → base_link がつながっている
- フレームの親子関係が可視化される
5. 実行手順(最小)
ターミナル3つ:
各ターミナルでそれぞれ以下を実行します。
ros2 run ros2_virtual_odometry virtual_odometry_node
ros2 run teleop_twist_keyboard teleop_twist_keyboard
rviz2
teleopで操作すると、
- Axesが回転
- 矢印が移動
- TFツリーは維持
が確認できます。
teleopの画面が以下です。
キーボードから操作します。

6. 実務視点の整理
今回あえて URDFは使っていません。
理由は、
座標系の理解が最優先だから
です。
実務では tf2 が変換を処理します。
しかし重要なのは:
- フレーム設計
- 親子関係の整合性
- Fixed Frame の理解
です。
数式を書くことよりも、
「どのフレームからどのフレームへ変換しているか」
を説明できることが重要です。
まとめ
今回行ったこと:
- 仮想オドメトリーにTF追加
- RViz2でフレームを可視化
- odom / base_link の関係を理解
これにより、
- 数字だけでなく空間として理解できる
- TF構造を説明できる
ようになります。
今回はここまでです。またいろいろと書きたいと思います。
ありがとうございます。
