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選択したメッセージ プロパティの時系列オブジェクトの作成
    timetableCreate timetable for selected message properties in ROS bag file
    canTransform変換が使用可能かどうかを確認
    getTransform2 つの座標系の間の変換を取得

    すべて折りたたむ

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

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

    bagMsgs = rosbagreader("ex_multiple_topics.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/tmp/Bdoc24a_2511836_3320146/tpd9b150c7/ros-ex26633229/ex_multiple_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: '/tmp/Bdoc24a_2511836_3320146/tpd9b150c7/ros-ex26633229/ex_multiple_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/Bdoc24a_2511836_3360848/tpe1f56baf/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 で導入