🔁

ROS 2: rosbag2の機能と使い方

に公開

海洋ロボコンをやってた人です。

今回はrosbag2のチップスを記載していきます。

基本的な使い方から、実験時に使用するチップスを備忘録として紹介します。

修正点等あればご遠慮なくご指摘ください。

以下箇条書きになりますが、何卒宜しくお願い致します。

1. rosbag2とは

ROS2のbag機能は、ROSメッセージをファイルに記録し、後で再生するための強力なツールです。
デバッグ、テスト、データ分析、システム開発において不可欠な機能であり、実証実験や実機実験ないしはシミュレーション環境でのデータ解析にも使用できます。

基本的なコマンドはWiki: rosbag に記載があり、今はチュートリアルでもBeginner-Recording-And-Playing-Back-Dataとして、紹介がされています。

2. record(記録)

ROSメッセージファイルを記録する方法で、基本的な使い方は下記になります。

出力ファイル名を指定しなければ、「rosbag2_2025_06_20-10_25_25」のように日時がファイル名として適用されます。

# 基本的な記録
ros2 bag record /camera/pointcloud

# 複数のトピックを記録
ros2 bag record /camera/pointcloud /mapData /map /scan

# 全てのトピックを記録
ros2 bag record -a

# 出力ファイル名を指定
ros2 bag record -o rtabmap_bag /camera/pointcloud /mapData /map /scan

# 出力ファイル名を指定して、全てのトピックを記録
ros2 bag record -a -o data

2.1. record option

オプション 説明
-o, --output 出力ファイル名指定 ros2 bag record -o test_data /cmd_vel
-a, --all 全トピック記録 ros2 bag record -a
--compression-mode 圧縮モード ros2 bag record --compression-mode file /topic
--compression-format 圧縮形式 ros2 bag record --compression-format zstd /topic
--max-bag-duration 最大記録時間 ros2 bag record --max-bag-duration 60 /topic
--max-bag-size 最大ファイルサイズ ros2 bag record --max-bag-size 1000000 /topic
-x, --exclude 除外トピック ros2 bag record -a -x '/rosout.*'
--include-hidden-topics 隠しトピック含む ros2 bag record -a --include-hidden-topics

3. play(再生)

記録したROSメッセージファイルは、playコマンドを使用して再生できます。

再生速度やループ再生なども可能なため、取得した実測値を用いてシミュレーションでさらに改善・改良というPDCAを回すことができますね。

# 基本的な再生
ros2 bag play <bag_file>

# 再生速度を調整
ros2 bag play <bag_file> --rate 0.5  # 半分の速度
ros2 bag play <bag_file> --rate 2.0  # 2倍の速度

# ループ再生
ros2 bag play <bag_file> --loop

# 開始時間を指定
ros2 bag play <bag_file> --start-offset 10  # 10秒後から開始

3.1. play option

オプション 説明
--rate 再生速度 ros2 bag play bag_file --rate 0.5
--loop ループ再生 ros2 bag play bag_file --loop
--start-offset 開始オフセット ros2 bag play bag_file --start-offset 5.0
--duration 再生時間制限 ros2 bag play bag_file --duration 30.0
--topics 特定トピックのみ ros2 bag play bag_file --topics /cmd_vel /odom
--qos-profile-overrides-path QoS設定ファイル ros2 bag play bag_file --qos-profile-overrides-path qos.yaml

4. rosbag2 to csv

rosbag2からcsvへ変換する方法は、下記を参考にさせていただきました。

https://zenn.dev/xen_nippon/articles/0ae35719f6cc44

terminal
ros2 bag play rtabmap_bag
ros2 topic echo /scan_data --csv --qos-history keep_all --qos-reliability reliable > output.csv

指定したトピックデータをcsvとして保存する ( 上記では "/scan_min_data" )

5. トラブルシュート対応

  1. ファイルサイズが大きすぎる
terminal
# 圧縮を使用
ros2 bag record /topic --compression-format zstd
  1. 再生速度が遅い
terminal
# QoS設定を調整
ros2 bag play bag_file --qos-profile-overrides-path fast_qos.yaml
fast_qos.yaml
# fast_qos.yaml
/high_freq_topic:
  history: keep_last
  depth: 1
  reliability: best_effort
  durability: volatile
  1. メモリ不足
terminal
# バッファサイズを制限
ros2 bag record /topic --max-cache-size 100000000


以上、Likeいただけると大変励みになりますので、よろしくお願いいたします。

Discussion