exponenta event banner

BagSelection

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

Описание

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

Загрузите розбаг.

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

Загрузите розбаг.

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