ROS ログ ファイル (rosbag)
はじめに
rosbag または bag は、ROS メッセージ データを保存するための ROS のファイル形式です。これらの bag は多くの場合、1 つ以上の ROS トピックにサブスクライブし、受け取ったメッセージ データを効率的なファイル構造で保存することにより作成されます。MATLAB® では、これらの rosbag ファイルの読み取り、メッセージ データのフィルター処理や抽出ができます。以下の節では、MATLAB® での rosbag の構造と、データを抽出するためのワークフローの詳細を説明します。
MATLAB の rosbag 構造体
rosbag ログファイルにアクセスする場合、rosbag を呼び出し、オブジェクトのファイル パスを指定します。MATLAB はその後、rosbag からのすべてのメッセージのインデックスが含まれる BagSelection オブジェクトを作成します。
BagSelection オブジェクトには、rosbag に関連する以下のプロパティがあります。
FilePath: rosbag ファイルの絶対パスの文字ベクトル。StartTime: 最初のメッセージが記録された時間を表すスカラー。EndTime: 最後のメッセージが記録された時間を表すスカラー。NumMessages: ファイルに含まれるメッセージの数を表すスカラー。AvailableTopics: bag に記録されたトピックとメッセージ タイプのリスト。これは各トピックのメッセージの数、メッセージ タイプ、メッセージの定義を一覧表示する table データとして保存されます。table データ型の詳細については、table 内のデータへのアクセスを参照してください。この table の出力例を以下に示します。ans = NumMessages MessageType MessageDefinition ___________ ______________________ _________________ /clock 12001 rosgraph_msgs/Clock [1x185 char] /gazebo/link_states 11999 gazebo_msgs/LinkStates [1x1247 char] /odom 11998 nav_msgs/Odometry [1x2918 char] /scan 965 sensor_msgs/LaserScan [1x2123 char]MessageList: bag にあるすべてのメッセージのリスト。メッセージが記録された時点のタイム スタンプで行が並べ替えられます。このリストにはインデックス付けができ、リストの一部をこの方法で選択できます。selectを呼び出すと、タイム スタンプ、トピック、またはメッセージ タイプに基づきサブセットを選択できます。
また、BagSelection オブジェクトにはすべてのメッセージのインデックスが格納されていることに注意してください。ただし、データの抽出には関数を使用しなければなりません。これらの情報の抽出の詳細について、インデックスに基づいてメッセージを cell 配列として取得する場合は readMessages を、指定したプロパティのデータを時系列として読み取る場合は timeseries を参照してください。
rosbag の選択のワークフロー
rosbag を扱う際、データの抽出方法について一般的な手順があります。
rosbag を読み込む:
rosbagとファイル パスを呼び出し、ファイルを読み込んでBagSelectionを作成します。使用可能なメッセージを調べる:
BagSelectionのプロパティ (AvailableTopics、NumMessages、StartTime、EndTime、MessageList) を調べ、解析のためにメッセージのサブセットを選択する方法を決めます。メッセージを選択する:
selectを呼び出して、目的のプロパティに基づきメッセージを選択します。メッセージ データを抽出する:
readMessagesまたはtimeseriesを呼び出し、メッセージ データを cell 配列または時系列データ構造体として取得します。データを可視化、解析、または処理する: 抽出したデータを特定の用途のために使用します。データをプロットしたり、データを処理するためのアルゴリズムを開発できます。
以下の図も、このワークフローを示したものです。

制限
MATLAB では、rosbag のサポートについていくつかの制限があります。
参考
rosbag | readMessages | BagSelection