Main Content

BagSelection

rosbag の選択を保存するためのオブジェクト

R2019b 以降

説明

BagSelection オブジェクトは、rosbag 内のメッセージのインデックスです。これを使用して、rosbag からメッセージ データを抽出したり、特定の条件に基づいてメッセージを選択したり、メッセージ プロパティの timeseries を作成したりできます。

rosbag を使用して rosbag を読み込み、BagSelection オブジェクトを作成します。

select を使用して、時間やトピックなどの条件で rosbag をフィルター処理します。

作成

説明

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

他の構文については、rosbag を参照してください。

bagsel = select(bag) は、BagSelection オブジェクト bag 内のすべてのメッセージを含むオブジェクト bagsel を返します。

この関数は、元の BagSelection オブジェクトの内容を変更しません。返されるオブジェクト bagsel は、指定したメッセージ選択を含む新しいオブジェクトです。

他の構文と、時間やトピックなどの条件でフィルター処理する方法については、select を参照してください。

プロパティ

すべて展開する

この プロパティ は読み取り専用です。

rosbag ファイルの絶対パス。文字ベクトルとして指定します。

データ型: char

この プロパティ は読み取り専用です。

選択内容にある最初のメッセージのタイムスタンプ。秒単位のスカラーとして指定します。

データ型: double

この プロパティ は読み取り専用です。

選択内容にある最後のメッセージのタイムスタンプ。秒単位のスカラーとして指定します。

データ型: double

この プロパティ は読み取り専用です。

選択内容にあるメッセージ数。スカラーとして指定します。rosbag をはじめて読み込むとき、このプロパティは rosbag 内のメッセージ数をもちます。select でメッセージのサブセットを選択すると、このプロパティはこのサブセット内のメッセージ数を示します。

データ型: double

この プロパティ は読み取り専用です。

選択内容にあるトピックの table。table として指定します。table の各行は、1 つのトピック、このトピックのメッセージ数、メッセージ タイプ、およびタイプの定義を示します。次に例を示します。

             NumMessages       MessageType                              MessageDefinition                       
             ___________    _________________    _______________________________________________________________

    /odom    99             nav_msgs/Odometry    '# This represents an estimate of a position and velocity in …'

データ型: table

この プロパティ は読み取り専用です。

使用可能な座標系のリスト。文字ベクトルの cell 配列として返されます。座標系間の特定の変換が使用可能かどうかを確認するには canTransform を、変換をクエリするには getTransform を使用します。

データ型: cell array

この プロパティ は読み取り専用です。

選択内容にあるメッセージのリスト。table として指定します。table の各行は、1 つのメッセージを示します。

データ型: table

オブジェクト関数

canTransform変換が使用可能かどうかを確認
getTransform2 つの座標系の間の変換を取得
readMessagesrosbag からのメッセージの読み取り
selectrosbag 内のメッセージのサブセットを選択
timeseries選択したメッセージ プロパティの時系列オブジェクトの作成

すべて折りたたむ

rosbag ログ ファイルを読み込み、選択した条件に基づいて特定のメッセージを解析します。

rosbag ログ ファイルにあるすべてのメッセージの BagSelection オブジェクトを作成します。

bagMsgs = rosbag('ex_multiple_topics.bag');

メッセージのサブセットを、タイムスタンプとトピックに基づいて選択します。

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

選択内容にあるメッセージを cell 配列として取得します。

msgs = readMessages(bagMsgs2);

特定のメッセージ プロパティを時系列として返します。

ts = timeseries(bagMsgs2,'Pose.Pose.Position.X', ...
           'Twist.Twist.Angular.Y');

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/Bdoc23b_2355056_2483765/tpac26ba68/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.

バージョン履歴

R2019b で導入