Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

readMessages

rosbag からのメッセージの読み取り

説明

msgs = readMessages(bag) は、BagSelection オブジェクト bag 内のすべてのメッセージからデータを返します。メッセージは、メッセージの cell 配列で返されます。

BagSelection オブジェクトを取得するには、rosbag を使用します。

msgs = readMessages(bag,rows) は、rows で指定されている行内のメッセージからデータを返します。行の範囲は [1, bag.NumMessages] です。

msgs = readMessages(___,"DataFormat","struct") は、前述のいずれかの入力引数セットを使用して、構造体の cell 配列としてデータを返します。構造体を使用したほうが、メッセージ オブジェクトを使用する場合より大幅に時間を短縮できます。また、カスタム メッセージ データは、rosgenmsg を使用してメッセージの定義を読み込むことなく、直接読み取ることができます。

すべて折りたたむ

rosbag を読み込んで、トピックと時間でフィルター処理します。

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

すべてのメッセージを cell 配列として返します。

allMsgs = readMessages(bagselect2);

最初の 10 個のメッセージを cell 配列として返します。

firstMsgs = readMessages(bagselect2,1:10);

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)

入力引数

すべて折りたたむ

rosbag 内に含まれているすべてのメッセージ。BagSelection オブジェクトとして指定します。

BagSelection オブジェクトの行。n 要素ベクトルとして指定します。ここで n は、メッセージの取得元の行数です。ベクトルの各エントリは、bag 内の番号付きメッセージにそれぞれ対応します。行の範囲は [1, bag.NumMessage] です。

出力引数

すべて折りたたむ

ROS メッセージ データ。オブジェクト、メッセージ オブジェクトの cell 配列、または構造体の cell 配列として返されます。データは、rosbag を使用して作成された BagSelection オブジェクトから取得されます。構造体の cell 配列としてメッセージを取得するには、関数内で 'DataFormat','struct' を指定しなければなりません。構造体を使用したほうが、メッセージ オブジェクトを使用する場合より大幅に時間を短縮できます。また、カスタム メッセージ データは、rosgenmsg を使用してメッセージの定義を読み込むことなく、直接読み取ることができます。

R2019b で導入