BagSelection

Объект для хранения rosbag выбор

Описание

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

Использование rosbag загрузить rosbag и создать BagSelection объект.

Использование select отфильтровать rosbag по критериям, таким как время и тема.

Создание

Описание

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

Смотрите rosbag для других синтаксисов.

пример

bagsel = select(bag) возвращает объект, bagsel, это содержит все сообщения в BagSelection объект, bag.

Эта функция не изменяет содержимое исходного BagSelection объект. Объект возврата, bagsel, новый объект, который содержит заданный выбор сообщения.

Смотрите select для других синтаксисов и отфильтровать по критериям, таким как время и тема.

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

             NumMessages       MessageType                              MessageDefinition                       
             ___________    _________________    _______________________________________________________________

    /odom    99             nav_msgs/Odometry    '# This represents an estimate of a position and velocity in …'

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

bagMsgs = rosbag('ex_multiple_topics.bag');

Выберите подмножество сообщений на основе их метки времени и темы.

bagMsgs2 = select(bagMsgs,'Time',...
           [bagMsgs.StartTime bagMsgs.StartTime + 1],'Topic','/odom');

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

msgs = readMessages(bagMsgs2);

Возвратите определенные свойства сообщения как временные ряды.

ts = timeseries(bagMsgs2,'Pose.Pose.Position.X', ...
           'Twist.Twist.Angular.Y');

Получите информацию из rosbag. Задайте полный путь к rosbag, если это не уже доступно на пути MATLAB®.

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

Загрузите rosbag.

bag = rosbag('ros_turtlesim.bag');

Получите список доступных систем координат.

frames = bag.AvailableFrames;

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

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 пара "имя-значение" при чтении сообщений. Смотрите первую структуру в возвращенном массиве ячеек структур.

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 поля от структуры. Эти поля представляют xy положения робота во время записи rosbag.

xPoints = cellfun(@(m) double(m.X),msgStructs);
yPoints = cellfun(@(m) double(m.Y),msgStructs);
plot(xPoints,yPoints)

Figure contains an axes. The axes contains an object of type line.

Введенный в R2019b