前回はROS2のプログラムを色々作成してみました。
これまでに作成したノードでは、カメの動きをリアルタイムで観察してきました。
しかし、実験結果を記録して後から再生したい場合もあります。
ROS2にはそのための便利な機能 rosbag2(ロスバッグツー) があります。
この章では、カメの動きを記録し、後からそのデータを再生する方法を学びます。

rosbag2とは?
rosbag2は、ROS2で通信されるトピックデータをそのまま保存・再生できるツールです。
機能 | 説明 |
---|---|
record(記録) | トピック通信をファイルに保存する |
play(再生) | 保存したトピック通信を再送信する |
info(情報表示) | 保存データの中身を確認する |
たとえば、/turtle1/cmd_vel
(速度指令)と/turtle1/pose
(位置情報)を記録しておけば、
後からまったく同じ動きを再現できます。
トピックの記録
まずは事前準備として前回作成したlaunchファイルを動かしましょう。
source install/setup.bash
ros2 launch turtle_playground rotate_demo.launch.py

カメが回り続けています。
では送られているトピックを記録してみます。
すべてのトピックを記録する場合は以下のコマンドを別のターミナルで実行してください。
ros2 bag record -a
-a
は「all」の意味で、現在通信しているすべてのトピックを記録します。
数秒間カメを動かしたら Ctrl + C
で停止してください。
完了すると、次のようなフォルダが作られます。
rosbag2_2025_10_14-12_30_05/
├── metadata.yaml
└── data_0.db3
.db3
はSQLite形式のデータベースファイルで、内部にトピックデータが保存されています。

特定のトピックのみ記録する場合は以下のコマンドを実行します。
ros2 bag record /turtle1/cmd_vel /turtle1/pose
→ カメの速度と位置情報だけを記録します。
内容の確認は以下のコマンドで確認できます。末尾のファイル名は手元のものに変更してください。
ros2 bag info rosbag2_2025_10_14-12_30_05
以下のように出力されます。

→ どのトピックを、どの型で、何件記録したかがわかります。
トピックの再生
turtlesimだけを起動しておきます。
ros2 run turtlesim turtlesim_node
次に、記録したデータを再生します。末尾のファイル名は記録したものに変えてください。
ros2 bag play rosbag2_2025_10_14-12_30_05

記録した時と同じようにカメが動き出します。
これは、bagファイルに記録された /cmd_vel
データが再送信されているためです。
Launchファイルでの記録
このrosbag2はLaunchファイルでも記録することができます。
launchファイルを作成します。
launch/turtle_record.launch.py
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# turtlesim ノード
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim'
),
# カメを動かす publisher ノード
Node(
package='turtle_playground',
executable='turtle_vel_publisher',
name='publisher'
),
# rosbag2 の記録を同時に開始
ExecuteProcess(
cmd=[
'ros2', 'bag', 'record',
'/turtle1/cmd_vel',
'/turtle1/pose',
'-o', 'turtle_record_bag' # 出力フォルダ名を指定
],
output='screen'
),
])
ビルドして実行してみましょう。
cd ~/ros2_ws
colcon build --packages-select turtle_playground
source install/setup.bash
ros2 launch turtle_playground turtle_record.launch.py
しばらくしたらCtrl+Cで終了します。
Launch終了後に、次のフォルダが生成されています。
turtle_record_bag/
├── metadata.yaml
└── data_0.db3
再生して確認してみましょう。
ros2 run turtlesim turtlesim_node
ros2 bag play turtle_record_bag

Launch中に記録されたカメの動きが、再び再生されます。
これで、完全自動記録 → 再生の流れが完成です。
課題8
turtle_playground
パッケージに新しい Launch ファイルを作成し、
turtlesimの起動とカメの動作、rosbag2による記録を同時に実行できるようにしなさい。
- 記録するトピックは
/turtle1/pose
と/turtle1/cmd_vel
のみ。
- 出力フォルダ名は
my_turtle_bag
とする。
- 実行コマンドは以下で起動できること。
ros2 launch turtle_playground my_record.launch.py
解答例はこちら
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtle_playground',
executable='turtle_vel_publisher',
name='publisher'
),
ExecuteProcess(
cmd=['ros2', 'bag', 'record',
'/turtle1/pose', '/turtle1/cmd_vel',
'-o', 'my_turtle_bag'],
output='screen'
)
])
Node()
で通常のノードを起動。
ExecuteProcess()
で外部コマンド(ros2 bag)を同時実行。
output='screen'
により、ターミナル上で進行ログを表示。
rqtでROS2の通信を可視化
これまでの章では、Turtlesimを使ってノード・トピック・サービス・アクションの動作を
コマンドラインで確認してきました。
しかし、システムが複雑になると、
「どのノードが、どのトピックを送受信しているのか」が分かりづらくなります。
そこで登場するのが rqt(アールキュート)です。
rqtは、ROS2の情報をGUI(グラフィカル・ユーザー・インターフェース)で可視化するツールです。
rqt(ROS Qt-based framework)は、ROSノード群を視覚的に表示・管理するツール群の総称です。
複数のプラグインを組み合わせて、グラフ表示・ログ確認・データプロットなどが可能です。
代表的なプラグインには以下のものがあります。
ツール名 | 用途 |
---|---|
rqt_graph | ノードとトピックの通信関係をグラフ表示 |
rqt_console | ノードのログ出力(get_logger() など)を閲覧 |
rqt_logger_level | 各ノードのログレベルを変更 |
rqt_plot | トピックデータをリアルタイムにグラフ表示 |
rqt_reconfigure | パラメータを動的に変更(ROS1互換) |
まずrqt本体を起動します。
ros2 run rqt_gui rqt_gui

Turtlesimとパブリッシャーを起動します。
source install/setup.bash
ros2 launch turtle_playground rotate_demo.launch.py
この状態でrqt_graphを使ってみましょう。
GUI上のPlubins→Introspection→Node Graphタブをクリックします。
すると、次のような関係図が表示されます:

Nodes onlyとなっているところをNodes/Topics(all)に変えます。
GUI上で右上の×を押すと各プラグインを削除できます。

- 四角:ノード
- 丸:トピック
- 矢印:通信の方向(パブリッシャー→サブスクライバー)
ノードの通信構造を視覚的に確認できるため、デバッグや設計理解にとても役立ちます。
rqt_consoleでログを確認する
ROS2ノードの中では self.get_logger().info()
を使ってメッセージを出力しています。
これらはターミナルにも表示されますが、rqt_consoleを使うとログを時系列で整理して閲覧できます。
Plubins→Logging→Consoleをクリックします。

以下のように表示されます。

フィルタ機能を使えば、特定ノードや特定レベル(INFO, WARN, ERROR)のログだけ表示可能です。
長時間動作させた際のログ解析にも便利です。
rqt_plotでデータをグラフ表示
トピック /turtle1/pose
にはカメの位置情報が送られています。
このデータをリアルタイムにプロットしてみましょう。
一度rqtをctrl+Cで終了し、必要なライブラリ等をインストールします。
sudo apt update
sudo apt install -y ros-humble-rqt-plot python3-pyqtgraph python3-pyqt5.qtsvg
sudo apt install -y ros-humble-rqt-gui ros-humble-rqt-graph
以下のコマンドで起動します。
ros2 run rqt_plot rqt_plot
Topicに表示したいトピック名を入力し、+ボタンをクリックするとグラフが追加されます。
トピック例:
/turtle1/pose/y

課題9
turtle_playground
パッケージを使い、rqtの各ツールを活用して以下を観察しなさい。
ros2 launch turtle_playground turtle_color.launch.py
を起動
ros2 run rqt_graph rqt_graph
でノード間通信を確認
ros2 run rqt_plot rqt_plot
で/turtle1/pose/x
と/turtle1/pose/y
をプロット
ros2 run rqt_console rqt_console
でturtle_vel_publisher
のログを確認

次回はこちら