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

rosbag2とは?
rosbag2は、ROS2で通信されるトピックデータをそのまま保存・再生できるツールです。
| 機能 | 説明 |
|---|---|
| record(記録) | トピック通信をファイルに保存する |
| play(再生) | 保存したトピック通信を再送信する |
| info(情報表示) | 保存データの中身を確認する |
たとえば、/turtle1/cmd_vel(速度指令)と/turtle1/pose(位置情報)を記録しておけば、
後からまったく同じ動きを再現できます。
トピックの記録
まずは事前準備として前回作成したlaunchファイルを動かしましょう。
source install/setup.bashros2 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_wscolcon build --packages-select turtle_playgroundsource install/setup.bashros2 launch turtle_playground turtle_record.launch.pyしばらくしたらCtrl+Cで終了します。
Launch終了後に、次のフォルダが生成されています。
turtle_record_bag/
├── metadata.yaml
└── data_0.db3再生して確認してみましょう。
ros2 run turtlesim turtlesim_noderos2 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.bashros2 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 updatesudo apt install -y ros-humble-rqt-plot python3-pyqtgraph python3-pyqt5.qtsvgsudo apt install -y ros-humble-rqt-gui ros-humble-rqt-graph以下のコマンドで起動します。
ros2 run rqt_plot rqt_plotTopicに表示したいトピック名を入力し、+ボタンをクリックするとグラフが追加されます。
トピック例:
/turtle1/pose/y
課題9
turtle_playground パッケージを使い、rqtの各ツールを活用して以下を観察しなさい。
ros2 launch turtle_playground rotate_with_param.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のログを確認

次回はこちら

