🔁
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へ変換する方法は、下記を参考にさせていただきました。
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. トラブルシュート対応
- ファイルサイズが大きすぎる
terminal
# 圧縮を使用
ros2 bag record /topic --compression-format zstd
- 再生速度が遅い
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
- メモリ不足
terminal
# バッファサイズを制限
ros2 bag record /topic --max-cache-size 100000000
以上、Likeいただけると大変励みになりますので、よろしくお願いいたします。
Discussion