実験時のセンサデータとかをすべて記録しておけるrosbagはROSの便利機能の中でもかなり有用な機能です。センサが手元に無くても記録したデータを再生することで、システムがちゃんと動作するか確認することが出来ます。
一方でrosbagには独自の使い方があったりするので、ここで一度出来ること&出来ないことを確認してみたいと思います。
事前に今流れているトピックを確認する
rostopic list #例 rostopic list | grep cmd #「cmd」を含むものだけ表示
まず最初に記録すべきトピック、記録しなくてもいいトピックを見極めましょう。grepによる検索と合わせて使うことも多いです
record関連
特定のトピックだけrecord
rosbag record (トピック名) (トピック名) ... #例 rosbag record /joy /cmd_vel rosbag record -O input_data /joy #「input_data.bag」ファイルに「/joy」トピックを記録
特定のトピックだけを狙って記録する方法です。すべてのデータを記録するとファイルサイズがGB単位になって大変な時はこのやり方もありです。
しかし、あとになってこのデータ取っておけば良かった、となること多しなので慎重に決めましょう。
すべてのトピックをrecord
rosbag record -a
すべてのトピックを記録する方法です。後で完全にシミュレート出来ますが、ファイルサイズが膨大になります。小さなシステムならむしろおすすめです。再生したときにTFが上手く表示されない時は、下のplay –clockを使いましょう。
正規表現にマッチするトピックだけrecord
rosbag record -e "(正規表現)" #例 rosbag record -e "/MyRobot/.*" #「/MyRobot/」で始まるトピックのみ記録する rosbag record -e ".*(joy|lidar|imu).*" #「joy」「lidar」「imu」のいずれかを含むトピックのみ記録する
〇〇で始まるトピック等、一部のトピックだけ記録したいときや、センサからのメッセージだけ記録したいときによく使います。
正規表現にマッチするトピックだけ除外する
rosbag record -x "(正規表現)" #例 rosbag record -a -x ".*robot.*" #「robot」を含むトピックを除外する rosbag record -a -x ".*(image|velodyne).*" #「image」または「velodyne」を含むトピックを除外する
正規表現にマッチしたトピックだけを除外することができます。必ず-aオプションか-eオプションと共に使う必要があります。データが大きすぎてrecordするとbagファイルの容量が大きくなってしまうときに有効です。
play関連
ループ再生
rosbag play test.bag -l # または rosbag play test.bag --loop
bagファイルをリピート再生します。センサデータを使ってシステムのチェックを行いたい時等、何回も再生しなおすのが面倒な時に便利です。
ちなみに通常の方法でも同様ですが、再生中にスペースキーを押すとポーズが出来ます。さらに、ポーズ中に「s」キーを押すと0.1秒ずつ再生をすすめることができます。
bagファイルのクロックを使用
rosparam set /use_sim_time true #roscoreから出力されるクロックを停止 rosbag play test.bag --clock #bagファイルのクロックを出力
通常bagファイルを再生するときはroscoreのクロック(現在の時間)を使用しますが、時間が重要な場合(TFなど)はbagファイル記録時の時間を使うほうが良いです。一行目でroscoreのクロックを無効にし、二行目でバグファイルの時間を基準の時間として再生します。
倍速・スロー再生
rosbag play -r 0.5 test.bag
データを0.5倍速で再生します。データをゆっくり見たいときに。
途中から再生
rosbag play -s 45 -u 10 test.bag
45秒からスタートして10秒間再生します。一部だけ集中して見たい時や途中から見たいときに使います。-rや-lと合わせて使うことも多いです。
トピック名をリネームして再生
rosbag play test.bag tf:=tf_old
tfという名前のトピックをtf_oldにリネームして再生します。同じ名前のトピックがあってエラーが起きるときに使います。
検証関連
bagファイルの情報を表示
rosbag info test.bag
バグファイルにどんなトピックが記録されているか等の情報を見ることが出来ます。
ROS初心者の方はまずはこちらの本がオススメです。