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