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/Bdoc21a_1606923_210056/tp4754acd0/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. The axes 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 で導入