exponenta event banner

readMessages

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

Описание

пример

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

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

пример

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

пример

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

Примечание

В следующем выпуске Панель инструментов ROS будет использовать структуры сообщений вместо объектов для сообщений 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);

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

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