velodyneROSMessageReader

Чтение сообщений ROS Velodyne

Описание

The velodyneROSMessageReader объект считывает данные облака точек из сообщений ROS VelodyneScan, собранных от Velodyne® датчик лидара. Чтобы считать эти данные облака точек в рабочую область как объект облака точек, используйте readFrame функция объекта. Чтобы проверить наличие дополнительных облаков точек в наборе сообщений, используйте hasFrame функция объекта.

Создание

Описание

пример

veloReader = velodyneROSMessageReader(msgs,devicemodel) создает объект программы чтения сообщений Velodyne ROS для набора сообщений VelodyneScan ROS msgs от заданной модели устройства devicemodel.

veloReader = velodyneROSMessageReader(msgs,devicemodel,'CalibrationFile',calibFile) создает velodyneROSMessageReader объект с заданными данными калибровки лидара Velodyne. Если вы не задаете файл калибровки, объект использует файл калибровки по умолчанию для указанной модели устройства с данными, полученными из руководства по устройству Velodyne.

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

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

Velodyne сканирует сообщения ROS, заданные как массив ячеек объектов сообщений VelodyneScan или массив структур. Тип сообщения velodyne_msgs/VelodyneScan. Этот аргумент устанавливает VelodyneMessages свойство.

Имя модели устройства, заданное как вектор символов:

  • 'VLP16'

  • 'VLP32C'

  • 'HDL32E'

  • 'HDL64E'

Примечание

Установка модели устройства, отличной от той, которая захватывала сканы, может привести к неправильной калибровке облаков точек.

Свойства

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

Это свойство доступно только для чтения.

Необработанные сообщения ROS Velodyne, заданные как массив ячеек объектов сообщений VelodyneScan или массива структур. Сообщения ROS имеют тип velodyne_msgs/VelodyneScan.

Это свойство доступно только для чтения.

Имя модели устройства Velodyne, заданное как 'VLP16', 'VLP32C', 'HDL32E', 'HDL64E', или 'VLS128'.

Примечание

Установка модели устройства, отличной от той, которая захватывала сканы, может привести к неправильной калибровке облаков точек.

Это свойство доступно только для чтения.

Имя XML- файл калибровки Velodyne, заданное как вектор символов или строковый скаляр. Каждая модель устройства включает файл калибровки по умолчанию.

Это свойство доступно только для чтения.

Общее количество облаков точек в файле, заданное в виде положительного целого числа.

Это свойство доступно только для чтения.

Общая длительность файла, заданная как duration скаляр, в секундах.

Это свойство доступно только для чтения.

Временная метка первого облака точек, заданная как duration скаляр в секундах.

Начало и конец задается относительно предыдущего часа. Для образца, если файл записан в течение 7 минут с 13:58 до 14:05, то:

  • StartTime = 58 мин = 3480 с

  • EndTime = StartTime + 7 мин = 65 мин = 3900 с

Это свойство доступно только для чтения.

Временная метка последнего чтения облака точек, заданная как duration скаляр, в секундах.

Начальное и конечное время относятся к целому часу. Для примера, если данные регистрируются в течение 7 минут с 13:58 до 14:05, то:

  • StartTime = 58 мин = 3840 с

  • EndTime = StartTime + 7 мин = 65 мин = 3900 с

Это свойство доступно только для чтения.

Временные метки систем координат облака точек в секундах, заданные как duration вектор. Длина вектора равна значению NumberOfFrames свойство. Значение первого элемента в векторе то же, что и у StartTime свойство. Вы можете использовать это свойство для чтения систем координат облака точек, захваченных в разное время.

Например, считайте временную метку системы координат облака точек из Timestamps свойство. Используйте время запуска как вход для readFrame функция объекта для чтения соответствующей системы координат облака точек.

veloReader = velodyneROSMessageReader(msgs,'HDL32E')
frameTime = veloReader.Timestamps(10);
ptCloud = readFrame(veloReader,frameTime);

Временная метка текущего чтения облака точек, заданная как duration скаляр, в секундах. Когда вы считываете облака точек, используя readFrame object function, объект обновляет это свойство с помощью последнего считанного облака точек. Вы можете использовать reset функция объекта, чтобы сбросить это свойство на значение по умолчанию. Значение по умолчанию соответствует StartTime свойство.

Функции объекта

hasFrameОпределите, доступно ли другое облако точек Velodyne в сообщениях ROS
readFrameСчитайте систему координат облака точек из сообщения ROS
resetСброс CurrentTime свойство velodyneROSMessageReader объект к значению по умолчанию

Примеры

свернуть все

Сообщения Velodyne ROS хранят данные в формате, который требует некоторой интерпретации, прежде чем их можно будет использовать для дальнейшей обработки. MATLAB ® может помочь вам, форматируя сообщения Velodyne ROS для простого использования. В этом примере можно исследовать, как VelodyneScan обрабатываются сообщения от Velodyne LiDAR.

Необходимые условия: Работа с базовыми сообщениями ROS

Загрузка выборок сообщений

Загрузите выборку сообщений Velodyne. Эти сообщения заполнены данными, собранными с датчика Velodyne LiDAR.

load('lidarData_ConstructionRoad.mat')

Сообщения VelodyneScan

VelodyneScan сообщения являются сообщениями ROS, которые содержат пакеты сканирования Velodyne LIDAR. Вы можете увидеть стандартный формат ROS для VelodyneScan сообщение путем создания пустого сообщения соответствующего типа.

emptyveloScan = rosmessage('velodyne_msgs/VelodyneScan')
emptyveloScan = 
  ROS VelodyneScan message with properties:

    MessageType: 'velodyne_msgs/VelodyneScan'
         Header: [1x1 Header]
        Packets: [0x1 VelodynePacket]

  Use showdetails to show the contents of the message

Поскольку вы создали пустое сообщение, emptyveloScan не содержит никаких значимых данных. Для удобства загруженные lidarData_ConstructionRoad.mat filecontines набор VelodyneScan сообщения, которые полностью заполнены и хранятся в msgs переменная. Каждый элемент в msgs массив ячеек является VelodyneScan Struct сообщения ROS. Основные данные в каждом VelodyneScan сообщение находится в Packets свойство, оно содержит несколько VelodynePacket сообщений. Вы можете увидеть стандартный формат ROS для сообщения VelodynePacket, создав пустое сообщение соответствующего типа.

emptyveloPkt = rosmessage('velodyne_msgs/VelodynePacket')
emptyveloPkt = 
  ROS VelodynePacket message with properties:

    MessageType: 'velodyne_msgs/VelodynePacket'
          Stamp: [1x1 Time]
           Data: [1206x1 uint8]

  Use showdetails to show the contents of the message

Создайте Velodyne ROS Message Reader

The velodyneROSMessageReader объект считывает данные облака точек из VelodyneScan Сообщения ROS на основе заданного типа модели. Обратите внимание, что предоставление неправильной модели устройства может привести к неправильной калибровке облаков точек. Этот пример использует сообщения от 'HDL32E' модель.

veloReader = velodyneROSMessageReader(msgs,'HDL32E')
veloReader = 
  velodyneROSMessageReader with properties:

    VelodyneMessages: {28x1 cell}
         DeviceModel: 'HDL32E'
     CalibrationFile: '/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/shared/pointclouds/utilities/velodyneFileReaderConfiguration/HDL32E.xml'
      NumberOfFrames: 55
            Duration: 2.7477 sec
           StartTime: 1145.2 sec
             EndTime: 1147.9 sec
          Timestamps: [1x55 duration]
         CurrentTime: 1145.2 sec

Извлечение облаков точек

Можно извлечь облака точек из сообщения необработанных пакетов с помощью этого velodyneROSMessageReader объект. Путем предоставления определенного номера системы координат или временной метки, одно облако точек может быть извлечено из velodyneROSMessageReader объект с использованием readFrame функция объекта. Если вы звоните readFrame без номера системы координат или временной метки он извлекает следующее облако точек в последовательности на основе CurrentTime свойство.

Создайте скаляр длительности, который представляет одну секунду после первого чтения облака точек.

timeDuration = veloReader.StartTime + duration(0,0,1,'Format','s');

Считывайте первое облако точек, записанное в указанное время или после него.

ptCloudObj = readFrame(veloReader,timeDuration);

Доступ к Location данные в облаке точек.

ptCloudLoc = ptCloudObj.Location;

Сбросьте CurrentTime свойство veloReader к значению по умолчанию

reset(veloReader)

Отображение всех облаков точек

Можно также закольцовывать все облака точек во входных сообщениях Velodyne ROS.

Задайте пределы осей X, Y и Z для pcplayer в метрах. Пометьте оси.

xlimits = [-60 60];
ylimits = [-60 60];
zlimits = [-20 20];

Создайте проигрыватель облака точек.

player = pcplayer(xlimits,ylimits,zlimits);

Пометьте оси.

xlabel(player.Axes,'X (m)');
ylabel(player.Axes,'Y (m)');
zlabel(player.Axes,'Z (m)');

Первое интересующее облако точек захватывается в 0,3 секунды во входные сообщения. Установите CurrentTime свойство к тому времени, чтобы начать чтение облаков точек оттуда.

veloReader.CurrentTime = veloReader.StartTime + seconds(0.3);

Отображать поток облака точек в течение 2 секунд. Чтобы проверить, доступна ли новая система координат и продолжить работу за последние 2 секунды, удалите последний while состояние. Итерация через файл путем вызова readFrame для чтения в облаках точек. Отобразите их с помощью проигрывателя облака точек.

while(hasFrame(veloReader) && isOpen(player) && (veloReader.CurrentTime < veloReader.StartTime + seconds(2)))
    ptCloudObj = readFrame(veloReader);
    view(player,ptCloudObj.Location,ptCloudObj.Intensity);
    pause(0.1);
end

Figure Point Cloud Player contains an axes. The axes contains an object of type scatter.

Совет

  • Предоставление неправильной модели устройства приведет к неправильной калибровке облаков точек.

  • Отсутствие файла калибровки может привести к неточным результатам.

См. также

| | |

Введенный в R2020b