Main Content

rosbag

rosbag ログ ファイルを開いて解析

説明

bag = rosbag(filename) はインデックス可能な BagSelection オブジェクト bag を作成します。このオブジェクトには、パス filename の rosbag から得られるすべてのメッセージ インデックスが含まれます。BagSelection オブジェクトを取得するには、rosbag を使用します。データにアクセスするには、readMessages または timeseries を呼び出して、関連データを抽出します。

"rosbag" または bag は、ROS メッセージ データを保存するためのファイル形式です。これは、主に ROS ネットワーク内のメッセージのログを作成するために使用されます。この bag をオフライン解析、可視化、およびストレージに使用できます。rosbag の詳細については、ROS Wiki ページを参照してください。

bagInfo = rosbag('info',filename) は、filename にある rosbag の内容に関する情報を構造体 bagInfo として返します。

rosbag info filename は、filename にある rosbag の内容に関する情報を、MATLAB® コマンド ウィンドウに表示します。情報にはメッセージ数、開始時間と終了時間、トピック、メッセージ タイプが含まれます。

すべて折りたたむ

rosbag から情報を取得します。rosbag がまだ MATLAB® パスで利用できない場合、rosbag への絶対パスを指定します。

bagselect = rosbag('ex_multiple_topics.bag');

メッセージのサブセットを、時間とトピックでフィルター処理して選択します。

bagselect2 = select(bagselect,'Time',...
    [bagselect.StartTime bagselect.StartTime + 1],'Topic','/odom');

rosbag ログ ファイルについての情報を表示するには、rosbag info filename を使用します。ここで filename は rosbag (.bag) ファイルです。

rosbag info 'ex_multiple_topics.bag'
Path:     /tmp/Bdoc22a_1891349_144573/tp3d6a7d1d/ros-ex32890909/ex_multiple_topics.bag
Version:  2.0
Duration: 2:00s (120s)
Start:    Dec 31 1969 19:03:21.34 (201.34)
End:      Dec 31 1969 19:05:21.34 (321.34)
Size:     23.6 MB
Messages: 36963
Types:    gazebo_msgs/LinkStates [48c080191eb15c41858319b4d8a609c2]
          nav_msgs/Odometry      [cd5e73d190d741a2f92e81eda573aca7]
          rosgraph_msgs/Clock    [a9c97c1d230cfc112e270351a944ee47]
          sensor_msgs/LaserScan  [90c7ef2dc6895d81024acba2ac42f369]
Topics:   /clock               12001 msgs  : rosgraph_msgs/Clock   
          /gazebo/link_states  11999 msgs  : gazebo_msgs/LinkStates
          /odom                11998 msgs  : nav_msgs/Odometry     
          /scan                  965 msgs  : sensor_msgs/LaserScan 

rosbag を読み込み、利用可能な座標系を確認することで、rosbag (.bag) ファイルから変換を取得します。これらの座標系から、getTransform を使用して、2 つの座標系の間の変換をクエリします。

rosbag を読み込みます。

bag = rosbag('ros_turtlesim.bag');

使用可能な座標系のリストを取得します。

frames = bag.AvailableFrames;

2 つの座標系の間の最新の変換を取得します。

tf = getTransform(bag,'world',frames{1});

特定の時間に使用可能な変換をチェックし、その変換を取得します。canTransform を使用して、変換が使用可能かどうかを確認します。rostime を使用して時間を指定します。

tfTime = rostime(bag.StartTime + 1);
if (canTransform(bag,'world',frames{1},tfTime))
    tf2 = getTransform(bag,'world',frames{1},tfTime);
end

rosbag を読み込みます。

bag = rosbag('ros_turtlesim.bag');

特定のトピックを選択します。

bSel = select(bag,'Topic','/turtle1/pose');

メッセージを構造体として読み取ります。メッセージを読み取るときに、名前と値のペア DataFormat を指定します。返された構造体の cell 配列で、最初の構造体を検査します。

msgStructs = readMessages(bSel,'DataFormat','struct');
msgStructs{1}
ans = struct with fields:
        MessageType: 'turtlesim/Pose'
                  X: 5.5016
                  Y: 6.3965
              Theta: 4.5377
     LinearVelocity: 1
    AngularVelocity: 0

メッセージから xy 点を抽出し、ロボットの軌跡をプロットします。

cellfun を使用して、構造体から X フィールドおよび Y フィールドをすべて抽出します。これらのフィールドは、rosbag 記録時にロボットの xy 位置を表します。

xPoints = cellfun(@(m) double(m.X),msgStructs);
yPoints = cellfun(@(m) double(m.Y),msgStructs);
plot(xPoints,yPoints)

Figure contains an axes object. The axes object contains an object of type line.

入力引数

すべて折りたたむ

アクセスする rosbag のファイルの名前とパス。string スカラーまたは文字ベクトルとして指定します。相対パスまたは絶対パスを指定できます。

出力引数

すべて折りたたむ

rosbag メッセージの選択。BagSelection オブジェクト ハンドルとして返されます。

rosbag の内容に関する情報。構造体として返されます。この構造体には、rosbag ファイルとその内容に関連するフィールドが含まれます。以下は、構造体としての rosbag のサンプル出力です。

Path:     \ros\data\ex_multiple_topics.bag
Version:  2.0
Duration: 2:00s (120s)
Start:    Dec 31 1969 19:03:21.34 (201.34)
End:      Dec 31 1969 19:05:21.34 (321.34)
Size:     23.6 MB
Messages: 36963
Types:    gazebo_msgs/LinkStates [48c080191eb15c41858319b4d8a609c2]
          nav_msgs/Odometry      [cd5e73d190d741a2f92e81eda573aca7]
          rosgraph_msgs/Clock    [a9c97c1d230cfc112e270351a944ee47]
          sensor_msgs/LaserScan  [90c7ef2dc6895d81024acba2ac42f369]
Topics:   /clock               12001 msgs  : rosgraph_msgs/Clock   
          /gazebo/link_states  11999 msgs  : gazebo_msgs/LinkStates
          /odom                11998 msgs  : nav_msgs/Odometry     
          /scan                  965 msgs  : sensor_msgs/LaserScan 

バージョン履歴

R2019b で導入