BagSelection

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

Описание

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

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

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

Создание

Описание

bag = rosbag(filename) создает индексируемую BagSelection объект, bag, который содержит все индексы сообщений из rosbag в входе пути, 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_1684407_61364/mlx_to_docbook2/tpdfefb16c/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