Main Content

rosbagreader

rosbag ログ ファイル情報にアクセス

R2021b 以降

    説明

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

    作成

    説明

    bagreader = rosbagreader(filepath) はインデックス可能な rosbagreader オブジェクト bagreader を作成します。このオブジェクトには、入力パス filepath の rosbag ログ ファイルから得られるすべてのメッセージが含まれます。入力引数 filepathFilePath プロパティを設定します。データにアクセスするには、readMessages または timeseries を呼び出して、関連データを抽出します。

    プロパティ

    すべて展開する

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

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

    データ型: char

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

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

    データ型: double

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

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

    データ型: double

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

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

    データ型: double

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

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

    データ型: table

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

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

    データ型: cell

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

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

    データ型: table

    オブジェクト関数

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

    すべて折りたたむ

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

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

    bagMsgs = rosbagreader("ros_multi_topics.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/mathworks/devel/bat/Bdoc23b/build/matlab/examples/ros/data/ros_multi_topics.bag'
              StartTime: 201.3400
                EndTime: 321.3400
            NumMessages: 36963
        AvailableTopics: [4x3 table]
        AvailableFrames: {0x1 cell}
            MessageList: [36963x4 table]
    
    

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

    bagMsgs2 = select(bagMsgs,...
        Time=[bagMsgs.StartTime bagMsgs.StartTime + 1],...
        Topic='/odom')
    bagMsgs2 = 
      rosbagreader with properties:
    
               FilePath: '/mathworks/devel/bat/Bdoc23b/build/matlab/examples/ros/data/ros_multi_topics.bag'
              StartTime: 201.3400
                EndTime: 202.3200
            NumMessages: 99
        AvailableTopics: [1x3 table]
        AvailableFrames: {0x1 cell}
            MessageList: [99x4 table]
    
    

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

    msgs = readMessages(bagMsgs2)
    msgs=99×1 cell array
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
        {1x1 Odometry}
          ⋮
    
    

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

    ts = timeseries(bagMsgs2,...
        'Pose.Pose.Position.X', ...
        'Twist.Twist.Angular.Y')
      timeseries
    
      Timeseries contains duplicate times.
    
      Common Properties:
                Name: '/odom Properties'
                Time: [99x1 double]
            TimeInfo: tsdata.timemetadata
                Data: [99x2 double]
            DataInfo: tsdata.datametadata
    

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

    rosbag を読み込みます。

    bagMsgs = rosbagreader("ros_turtlesim.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/tmp/Bdoc23b_2355056_2487336/tp109708d3/ros-ex81142742/ros_turtlesim.bag'
              StartTime: 1.5040e+09
                EndTime: 1.5040e+09
            NumMessages: 6089
        AvailableTopics: [6x3 table]
        AvailableFrames: {2x1 cell}
            MessageList: [6089x4 table]
    
    

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

    frames = bagMsgs.AvailableFrames
    frames = 2x1 cell
        {'turtle1'}
        {'world'  }
    
    

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

    tf = getTransform(bagMsgs,'world',frames{1})
    tf = 
      ROS TransformStamped message with properties:
    
         MessageType: 'geometry_msgs/TransformStamped'
              Header: [1x1 Header]
           Transform: [1x1 Transform]
        ChildFrameId: 'turtle1'
    
      Use showdetails to show the contents of the message
    
    

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

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

    バージョン履歴

    R2021b で導入