BagSelection

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

Описание

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

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

Используйте select, чтобы отфильтровать rosbag по критериям, таким как время и тема.

Создание

Синтаксис

bag = rosbag(filename)
bagsel = select(bag)

Описание

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/BR2019ad_1062519_57051/mlx_to_docbook5/tp003f1b1f/robotics-ex61825935/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)

Представленный в R2015a