0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rvizを見る前に知っておきたい ROS2の /cmd_vel と /odom の関係

Posted at

ここ数年はROS2にも取り組んでいます。ということで本記事は、以下の自社サイトで公開している下記記事の 要約版 です。

まず「なぜ ROS2 の動作がこう見えるのか」という前提を整理し、 その後ターミナルだけで /cmd_vel/odom の関係を体感します。

🔗 前提の解説(座標系・オドメトリ・変換)
https://independence-sys.net/main/?p=7363

🔗 実践編(ノードを動かしながら理解する)
https://independence-sys.net/main/?p=7373

ROS2 は
「動かしてみたけど、何が起きているのか分からない」
という壁に当たりやすいミドルウェアだと思います。

特に、

  • /cmd_vel を送っているのに、なぜこう動くのか
  • /odom の数値が何を意味しているのか
  • rviz で見ているけど、結局よく分からない

と感じたことがある方は多いのではないでしょうか。

※ rviz は、ROS2 が扱っている座標系や自己位置、センサーデータなどを
 3D/2D で可視化するための公式ビジュアライザです。

この記事では、rviz を使わず
ターミナルに表示される数値とログだけを使って、

  • /cmd_vel/odom の関係
  • ロボット目線とワールド座標の違い

を体感的に理解することを目的にします。

最低限の前提(考え方だけ)

ROS2 では、次のような役割分担があります。

  • /cmd_vel
    → ロボット目線の速度命令(前進・回転)
  • /odom
    → ワールド座標系で表現された自己位置の結果

重要なのは、
同じ動きでも「どの視点で見るか」で意味が変わるという点です。

  • /cmd_vel は「ロボットから見た命令」
  • /odom は「世界から見た結果」

この視点の違いをつなぐのが「変換」です。

ここでの変換は、数学的な厳密さよりも
**「どう見たいか」「どう使いたいか」**という
アプリケーション都合の問題だと考えれば分かりやすくなります。

(この考え方の詳細は自社サイトの記事で整理しています)

仮想オドメトリで関係を単純化する

今回は、実センサーや実機は使いません。

代わりに、

  • /cmd_vel を受け取る
  • 速度を時間で積分する
  • 「完璧に命令通り動いたとした場合の自己位置」を /odom として出す

という 仮想オドメトリノードを使います。

これにより、

  • センサー誤差
  • ハードウェア依存
  • ノイズ

を一切考えずに、
/cmd_vel → /odom の関係だけに集中できます。

ターミナルで「分かる瞬間」

構成はとてもシンプルです。

  • teleop で /cmd_vel を送る
  • 仮想オドメトリで /odom を生成する
  • /odom を subscribe して、人間向けに解釈して表示する

odom_analyzer_node では、
ワールド座標系で表現された移動量を
ロボットの向きを使って「前進/後退」「左/右旋回」に変換し、

ターミナルに 1行で状態を表示します。

実際に操作すると、

  • 前進キー → FORWARD と表示され、x が増える
  • 後退キー → BACKWARD と表示され、x が減る
  • 左旋回 → LEFT
  • 右旋回 → RIGHT

という対応関係がそのまま確認できます。

ここで初めて、

「ああ、/cmd_vel の命令が
こうやって /odom の数値になっているのか」

という感覚がつかめます。

rviz を使わない理由

rviz はとても便利ですが、
最初から使うと「結果」しか見えません。

  • なぜそう見えるのか
  • どの視点で見ているのか
  • 数値がどう変換されたのか

が分からないまま「分かった気」になりがちです。

今回のように、

  • 数値
  • ログ
  • 1行の表示

だけで確認すると、
後から rviz を見たときに
「rviz が何を可視化しているのか」がはっきりします。

再現用コード(GitHub)

今回使用したコードは GitHub にまとめています。

仮想オドメトリと解析ノードを含む最小構成です。

(ROS2の環境が出来ていればですが) clone → build → run ですぐ試せます。

まとめ

  • /cmd_vel はロボット目線の命令
  • /odom はワールド座標での結果
  • 変換は「数式」より「視点の違い」
  • rviz は理解した後に使うと強力

ROS2 は、
開発現場のエンジニアにとっては「勉強するもの」ではなく
「動かしながら理解するもの」 だと感じています。

このアプローチが、
ROS2 を触り始めたエンジニアの助けになれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?