rosbagreader

Доступ rosbag информация о файле журнала

    Описание

    rosbagreader объект является индексом сообщений в rosbag. Можно использовать его, чтобы извлечь данные о сообщении из rosbag, выбрать сообщения на основе определенных критериев или создать временные ряды свойств сообщения.

    Создание

    Описание

    пример

    bagreader = rosbagreader(filepath) создает индексируемый rosbagreader объект, bagreader, это содержит все сообщения от rosbag файла журнала во входе path filepath. filepath входной параметр устанавливает свойство FilePath. Чтобы получить доступ к данным, можно вызвать readMessages или timeseries извлекать соответствующие данные.

    Свойства

    развернуть все

    Это свойство доступно только для чтения.

    Абсолютный путь к rosbag файлу в виде вектора символов.

    Типы данных: char

    Это свойство доступно только для чтения.

    Метка времени первого сообщения в выборе в виде скаляра в секундах.

    Типы данных: double

    Это свойство доступно только для чтения.

    Метка времени последнего сообщения в выборе в виде скаляра в секундах.

    Типы данных: double

    Это свойство доступно только для чтения.

    Количество сообщений в выборе в виде скаляра. Когда вы сначала загружаете rosbag, это свойство содержит количество сообщений в rosbag. Если вы выбираете подмножество сообщений с select, свойство показывает количество сообщений в этом подмножестве.

    Типы данных: double

    Это свойство доступно только для чтения.

    Таблица тем в выборе в виде таблицы. Каждая строка в таблице перечисляет одну тему, количество сообщений для этой темы, типа сообщения и определения типа.

    Типы данных: table

    Это свойство доступно только для чтения.

    Список доступной координаты структурирует в виде массива ячеек из символьных векторов. Использование canTransform проверять, доступны ли определенные преобразования между системами координат, или getTransform запрашивать преобразование.

    Типы данных: cell

    Это свойство доступно только для чтения.

    Список сообщений в выборе в виде таблицы. Каждая строка в таблице перечисляет одно сообщение.

    Типы данных: table

    Функции объекта

    selectВыберите подмножество сообщений в rosbag
    readMessagesСчитайте сообщения из rosbag
    timeseriesСоздайте объект временных рядов для выбранных свойств сообщения
    canTransformПроверьте, доступно ли преобразование
    getTransformПолучите преобразование между двумя координатными системами координат

    Примеры

    свернуть все

    Загрузите rosbag файл журнала и проанализируйте определенные сообщения на основе выбранных критериев.

    Создайте rosbagreader объект всех сообщений в rosbag файле журнала.

    bagMsgs = rosbagreader("ros_multi_topics.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/mathworks/devel/bat/BR2021bd/build/matlab/toolbox/robotics/robotexamples/ros/data/bags/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/BR2021bd/build/matlab/toolbox/robotics/robotexamples/ros/data/bags/ros_multi_topics.bag'
              StartTime: 201.3400
                EndTime: 202.3200
            NumMessages: 99
        AvailableTopics: [1x3 table]
        AvailableFrames: {0x1 cell}
            MessageList: [99x4 table]
    
    

    Получите сообщения в выборе как массив ячеек.

    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 (.bag) файлы путем загрузки rosbag и проверки доступных систем координат. От этих систем координат используйте getTransform запрашивать преобразование между двумя координатными системами координат.

    Загрузите rosbag.

    bagMsgs = rosbagreader("ros_turtlesim.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook4/tp81864dc2/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'  }
    
    

    Получите последнее преобразование между двумя координатными системами координат.

    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