読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

ROSのbagファイルの圧縮・解凍方法と便利ツールの紹介

ROS Programming Python

ROSプログラミング

ROSプログラミング

目次

はじめに

ROSのbagファイルは

ロボットの開発において非常に重要ですが、

画像データや、点群データなどを

保存していると、

データ量が非常に多くなりがちです。

 

ROSのデフォルトツールであるrosbagには、

実はbagファイルの圧縮・解凍の機能がついています。

rosbag/Commandline - ROS Wiki

この機能を使うと普通に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コマンドラインツールを作りました。

github.com

 

上記のツールは、

複数のbagファイルを圧縮したり、

解凍したりするコマンドラインツールです。

 

指定したディレクトリ以下を再帰的に検索して

複数のbagファイルを一括で圧縮したり、解凍したりできます。

 

また、このツールは圧縮、解凍は

マルチプロセスで並列実行するようになっているため、

通常のコマンドライン実行よりも高速に実行できます。

 

複数のbagファイルを処理すると、

下記のようにすべてのCPUを最大限に利用して処理してくれます。

f:id:meison_amsl:20160514112612p:plain

 

使い方

上記の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.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

ROSプログラミング

ROSプログラミング