#keywords logs, logging, data
<<Include(Menus/ROSGraphConcepts)>>
''bag''は、ROSにおける[[Messages|message]]のdataを蓄えるROSにおけるファイルフォーマットの一つです。Bags -- それらの拡張子が'.bag'であるが故の名前 --はROSの中で重要な役回りを持ちます。そして、それを蓄えたり処理したり解析したり可視化したりするようなツールが豊富に存在します。

== Computation Graphのオンラインでの使用 ==
Bagsは基本的に[[rosbag]]によって作られます。[[rosbag]]は、一つ以上のROSの[[Topics|topics]]に対してサブスクライブさせて、連続したメッセージのデータを受け取るたびにファイルの中に''蓄えます''.これらのバグファイルは、情報を取得した同じtopicに対してかまたは、リマップされた新しいtopicに対してデータを送り、記録時と同じような状態を''再現''することができます。

ROS Computation Graphの中でバグファイルを使用することは、一般的にROSのnodesに同じデータを渡すこととなんら違いはありませんが、メッセージデータの中に蓄えられたタイムスタンプ付のデータを使用すると、問題のあたりの時間まわりを実行することができます。これのために、[[rosbag]]ツールは、データをファイルに記録するときの時間に対応した[[Clock|simulated clock]]をパブリッシュするオプション機能がついてます。

バグファイルのフォーマットは、ROSのネットワークのトランスポート層で使われるのと同じ表現でメッセージを蓄えるので、記録するのにも再現するのにもとても効率のよいものとなっております。

== オフラインでの使用とデータのマイグレーション ==
BagsはデータのログをとるためのROSにおける主要な機構ですので、オフラインのときの様々なツールが存在します。使用者は、バグファイルのツールチェインを用いて、近いうちに使うため、データセットを記録し、可視化し、ラベル付を行い、保存します。バグファイルは、PR2ロボットの長期のハードウェア診断のログの記録をするためにも使われます。

[[rxbag]]のようなツールは、値をプロットしたり、イメージを表示したりして、バグファイルを''可視化''することができます。また、[[rostopic]]のコマンドを用いて、コンソールからすぐにバグファイルのデータを検査することもできます。

[[rosrecord]]のパッケージにある''programmatic APIs''はC++ や Pythonのパッケージに蓄えられたメッセージを反復させることができます。より迅速なバグファイルの実行をするには、[[rosbag]]がバグファイルを''rebagging''することをサポートしており、特定のフィルタに一致するメッセージを新しいバグファイルに抜き出すことを可能にします。

バグファイルに蓄えられたデータは、価値の高いものが多いため、バグファイルは[[msg]]ファイルが更新されたときでも、簡単にマイグレートできるようにデザインされています。バグファイルのフォーマットは、対応するメッセージデータの[[msg]]ファイルを蓄え、[[rosbagmigration]]のようなツールは、バグファイルが古くなったときに、自動的にバグファイルをアップデートするためのルールを書くことができるようにしてくれます。

== Bag ツール ==

 * [[rosbag]]: 記録や再現、そのほかの行動をするための統合されたコンソールツール.
 * [[rxbag]]: バグファイルデータを可視化するためのグラフィカルなツール.
 * [[rostopic]]: `echo`と`list`のコマンドはバグファイルのときも使用できます。

=== 古いツール ===

以下のツールは、[[rosbag]]に内包されましたが、未だにサポートされています。

 * [[rosrecord]]
 * [[rosrecord|rosplay]]
 * [[rosrecord|rosrebag]]

== Bag フォーマット ==
バグファイルの[[Bags/Format|基礎となるフォーマット]]は、ユーザと関連があってはなりません。変更には従いつつも、後方の互換性については、プログラムのアクセスライブラリやカスタムの変更ライブラリによって保持されます。