30代エンジニアの備忘録のカバー画像

30代エンジニアの備忘録

組み込み開発・信号処理・プログラミングの技術メモと短編小説

👁️ 【ROS2入門⑧】RViz2とrqt - ロボットの状態を見える化する可視化ツール

シリーズ この記事は「ROS2入門シリーズ」の一部です。 シリーズ目次を見る

ノードを ros2 run できる状態から、RViz2 で 3D 表示、rqt でトピックグラフを確認する入口を示します。デバッグ中に「トピックは流れているのに RViz が真っ白」となったとき Fixed Frame と frame_id を疑う場面が多いです。正本は RViz User Guide です。2026年5月時点、Ubuntu 22.04 + ROS 2 Humble 想定です。


RViz2 とは?3D 可視化ツールの基本

RViz2(ROS Visualization Tool 2)は、センサや TF、Path などを 3D ビューに重ねて確認するツールです(表示はトピック更新に追随します)。RViz User Guide も参照。

RViz2で表示できる主なデータ一覧
RViz2で表示できる主なデータ一覧
RViz2の起動
ros2 run rviz2 rviz2
# または
rviz2
turtlesimでRViz2を試す
# ターミナル1: turtlesim起動
ros2 run turtlesim turtlesim_node

# ターミナル2: RViz2起動
ros2 run rviz2 rviz2

RViz2での設定手順:

turtlesim だけでは座標情報やレーザデータが自動では出ません。初期状態の 3D ビューは空でも普通です。表示したい型(TF / Marker / RobotModel / LaserScan 等)を Add しないと見えません。

  1. Add ボタンをクリック
  2. By display type から表示したいデータ型を選択
  3. 表示中のトピックを指定
主なディスプレイタイプ
ディスプレイ 用途 サブスクライブする型
Axes 座標軸を表示 -
RobotModel URDFモデル robot_description
PointCloud2 LiDAR点群 sensor_msgs/PointCloud2
Image カメラ画像 sensor_msgs/Image
LaserScan 2D LiDAR sensor_msgs/LaserScan
Path 移動軌跡 nav_msgs/Path
TF 座標変換ツリー -
Marker カスタム図形 visualization_msgs/Marker
RViz2インターフェース構成
RViz2インターフェース構成

RViz2 でマーカーを表示する方法

PythonからRViz2に図形を描画するにはMarkerメッセージを使います。

from visualization_msgs.msg import Marker
from geometry_msgs.msg import Point

def publish_marker(self):
    marker = Marker()
    marker.header.frame_id = 'map'
    marker.header.stamp = self.get_clock().now().to_msg()
    marker.type = Marker.SPHERE
    marker.action = Marker.ADD
    marker.pose.position.x = 1.0
    marker.pose.position.y = 0.5
    marker.pose.position.z = 0.0
    marker.scale.x = 0.3
    marker.scale.y = 0.3
    marker.scale.z = 0.3
    marker.color.r = 1.0
    marker.color.g = 0.0
    marker.color.b = 0.0
    marker.color.a = 1.0
    self.marker_pub.publish(marker)

rqt とは?プラグイン形式のデバッグ GUI

rqt はプラグインベースの GUI デバッグツールです。Plugins メニューから rqt_graph、rqt_plot などを選びます。

# rqt起動
rqt
主なrqtプラグイン

rqt_graph - ノード・トピックの接続を図示化

ros2 run rqt_graph rqt_graph
表示例:

  [camera_node] --/camera/image--> [detection_node]
                                        |
                                   /objects
                                        |
                               [controller_node]

rqt_plot - トピックのデータをグラフ表示

ros2 run rqt_plot rqt_plot
# 表示したいトピックを指定例: /turtle1/pose/x

rqt_console - ログメッセージを一元管理

ros2 run rqt_console rqt_console

rqt_image_view - 画像トピックをリアルタイム表示

ros2 run rqt_image_view rqt_image_view

turtlesim で rqt_graph を試す手順

# ターミナル1
ros2 run turtlesim turtlesim_node

# ターミナル2
ros2 run turtlesim turtle_teleop_key

# ターミナル3
ros2 run rqt_graph rqt_graph

rqt_graphで以下の接続を確認できます:

[/teleop_turtle] --/turtle1/cmd_vel--> [/turtlesim]
rqt_graph ノード接続図
rqt_graph ノード接続図

可視化でつまずきやすい点

  • RViz2 の Global Options → Fixed Frame と、表示したいトピックの frame_id が噛み合わないと「何も出ない」ことが多い
  • トピックが一本化されていないと Add 後のドロップダウンで名前を取り違えやすい(ros2 topic list で先に確認)
  • rqt は 初回起動が重いことがあり、必要な画面は Plugins メニューから開く

RViz2 と rqt のまとめ

  • RViz2: TF やセンサ、Path などを 3D ビューに載せて確認するツール(表示はデータ更新に追随)
  • rqt_graph: ノード間の接続を図示化してデバッグしやすくなる
  • rqt_plot: データの時系列変化をグラフ表示
  • 開発中は RViz2 と rqt を 行き来しながら、接続と座標系の両方を確認するのが近道になりがちです
  • 次回(シリーズ⑨)では TF2(座標フレーム/変換)を扱う想定です