目次
はじめに
ROSのbagファイルは
ロボットの開発において非常に重要ですが、
画像データや、点群データなどを
保存していると、
データ量が非常に多くなりがちです。
ROSのデフォルトツールであるrosbagには、
実はbagファイルの圧縮・解凍の機能がついています。
この機能を使うと普通にbagファイルを保存した時よりも、
約半分から1/5になりました。
(bagファイルのデータによります)
今回は、このrosbagによるbagファイルの圧縮と解凍方法と、
それを利用した便利ツールを紹介したいと思います。
bagファイルの圧縮と解凍方法
下記のように、
いくつかの方法があります。
rosbag recordでbagファイルに保存しながら圧縮
rosbag recordに
-jというオプションを付けることで、
rosbag recordでトピックを保存しながら、
bagファイルを圧縮することができます。
$ rosbag record -j /chatter
データを圧縮しながら保存するため、
通常のrosbag recordよりは計算コストが発生するようですが、
自分のPCの場合はあまり気になりませんでした。
指定したbagファイルを圧縮
圧縮せずに保存したbagファイルを
後処理で圧縮したい場合は
$ rosbag compress hoge.bag
とすることでbagファイルを圧縮することができます。
圧縮する前のbagファイルは*.orig.bagという名前でバックアップされます。
この圧縮されたbagファイルを
$ rosbag play hoge.bag
としても解凍しながらデータを再生してくれるので便利です。
指定したbagファイルを解凍
前述の方法で圧縮したbagファイルを
解凍する場合は
$ rosbag decompress hoge.bag
とします。
指定したディレクトリ以下のbagファイルを一括で圧縮・解凍するPythonスクリプト
上記のbagファイルを圧縮・解凍する機能は非常に便利ですが、
あるディレクトリ以下のbagファイルを
一括で、かつ、高速に処理するために、
Pythonコマンドラインツールを作りました。
上記のツールは、
複数のbagファイルを圧縮したり、
解凍したりするコマンドラインツールです。
指定したディレクトリ以下を再帰的に検索して
複数のbagファイルを一括で圧縮したり、解凍したりできます。
また、このツールは圧縮、解凍は
マルチプロセスで並列実行するようになっているため、
通常のコマンドライン実行よりも高速に実行できます。
複数のbagファイルを処理すると、
下記のようにすべてのCPUを最大限に利用して処理してくれます。
使い方
上記のGitHubのコードをDLして、
下記のようにコマンドラインから実行するだけです。
カレントディレクトリ以下のbagファイルを一括圧縮する
$ python rosbag_compress.py
/home/Desktop/bag 以下のbagファイルを一括圧縮する
$ python rosbag_compress.py -p /home/Desktop/bag
/home/Desktop/bag 以下のbagファイルを一括解凍する
$ python rosbag_compress.py -d -p /home/Desktop/bag
上記の方法で、一括圧縮、解凍した場合、
元のbagファイルが.orig.bagという拡張子で残ってしまいますが、
これらのファイルを一括で削除したい場合は下記の-rオプションを利用します。
$ python rosbag_compress.py -r -p /home/Desktop/bag
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。