readMessages

Чтение сообщений из rosbag

Описание

пример

msgs = readMessages(bag) возвращает данные из всех сообщений в BagSelection объект, bag. Сообщения возвращаются в массив ячеек.

Чтобы получить BagSelection объект, использование rosbag.

пример

msgs = readMessages(bag,rows) возвращает данные из сообщений в строках, заданных rows. Область значений строк: [1, bag.NumMessages].

пример

msgs = readMessages(___,"DataFormat","struct") возвращает данные как массив ячеек структур, используя любой из предыдущих входных параметров. Использование структур может быть значительно быстрее, чем использование объектов сообщений, и пользовательские данные сообщений могут считываться непосредственно без загрузки определений сообщений с помощью rosgenmsg.

Примечание

В следующем релизе ROS Toolbox будет использовать структуры сообщений вместо объектов для сообщений ROS.

Чтобы использовать структуры сообщений, установите "DataFormat" аргумент имя-значение в "struct". Для получения дополнительной информации см. раздел Структуры сообщений ROS.

Примеры

свернуть все

Читайте rosbag и фильтруйте по теме и времени.

bagselect = rosbag('ex_multiple_topics.bag');
bagselect2 = select(bagselect,'Time',...
[bagselect.StartTime bagselect.StartTime + 1],'Topic','/odom');

Возвращает все сообщения как массив ячеек.

allMsgs = readMessages(bagselect2);

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

firstMsgs = readMessages(bagselect2,1:10);

Загрузите 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.

Входные параметры

свернуть все

Все сообщения, содержащиеся в rosbag, указаны как BagSelection объект.

Строки BagSelection объект, заданный как n элемент, где n количество строк для извлечения сообщений. Каждая запись в векторе соответствует пронумерованному сообщению в пакете. Область значений строк: [1, bag.NumMessage].

Выходные аргументы

свернуть все

Данные сообщения ROS, возвращенные как объект, массив ячеек объектов сообщения или массив ячеек структур. Данные поступают из BagSelection объект, созданный с помощью rosbag. Вы должны задать "DataFormat","struct" в функции получения сообщений как массива ячеек структур. Использование структур может быть значительно быстрее, чем использование объектов сообщений, и пользовательские данные сообщений могут считываться непосредственно без загрузки определений сообщений с помощью rosgenmsg.

Вопросы совместимости

расширить все

Изменение поведения в будущем релизе

См. также

| |

Введенный в R2019b