Translate

python でbag ファイルを読み取る方法

こんにちは。
ROSとかrealsense を扱っていると、bagファイルをよく扱うことがありますよね。bagファイルはlinuxだとうまく使えるのかもしれないけど、windowsだとなかなかうまく扱うのが難しいような印象を受けます。

私もよくbagファイルのデータをもらって扱うことがあるのですが、bagファイルそのものを読み取るのはなかなかに難しく、一度csvファイルで吐き出してから扱うといったことが良くあります。

そこで今回はpythonを使ってbagファイルを読み取る方法について備忘録として残しておこうと思います。

pythonでbagファイルを読み取るにはbagpyを使う。



ではいったいpythonでbagファイルを扱うためには一体どのような方法をとる必要があるのでしょうか。

pythonにはいろいろなパッケージが用意されていて、自分にとって必要なパッケージを入れてカスタマイズしていくのが普通です。その中にももちろんpythonでbagファイルを扱うことができるモジュールが存在します。それが「bagpy」と呼ばれるものです。

自分のpythonにbagpyを入れるのはとても簡単です。たいていのpythonを使っている人であれば、anacondaを使ってパッケージ管理をしていると思いますのでその前提で話します。

pythonにbagpyを入れる方法は簡単で、anacondaの中にあるanaconda promptのを開き、pip install bagpyをつけ加えるだけになります。これでpythonでbagファイルを扱う準備ができました。

pythonでbagファイルを開くためのコード

実際にpythonでbagファイルを開くためのコードがこちらになります。

#必要なパッケージのインポート
import bagpy 

import glob
import sys


csvfiles =[]
#ファイル検索
bag_filename = glob.glob("bagファイル名")
b = bagpy.bagreader(bag_filename[25])
for t in b.topics:
    data = b.message_by_topic(t)
    csvfiles.append(data) 


基本的にはこれだけになります。このコードを走らせると、bagファイルと同じディレクトリ内にフォルダが生成されて、そのフォルダ内にbagファイルに格納されているデータがcsv形式で吐き出されるようになりますので、その中から自分で必要なデータを取り出して使うといった感じになります。

コード自体はとても短く、非常に簡単だと思います。おそらくこれを使うのはそもそもが結構マニアックだと思うので、もし使う機会のある人がいましたら参考にしてもらえると幸いです。

たいていの場合には、bagファイルを使う人はそもそもROSに精通していて、熟知していることが多いと思います。この記事のターゲットとしては、ROSで生成されたbagファイルを他の人から受け取ったけどその扱いかたがわからないという人向けかなと思っています。