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選択したメッセージ プロパティの時系列オブジェクトの作成
timetableCreate timetable for selected message properties in ROS bag file

すべて折りたたむ

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/Bdoc24a_2511836_3320146/tpd9b150c7/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 で導入