exponenta event banner

velodyneROSMessageReader

Считывание сообщений Velodine ROS

Описание

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

Создание

Описание

пример

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

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

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

развернуть все

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

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

  • 'VLP16'

  • 'VLP32C'

  • 'HDL32E'

  • 'HDL64E'

Примечание

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

Свойства

развернуть все

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

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

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

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

Примечание

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

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

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

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

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

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

Общая продолжительность файла, указанная как 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 объект обновляет это свойство с помощью последнего считанного облака точек. Вы можете использовать reset для сброса этого свойства до значения по умолчанию. Значение по умолчанию соответствует StartTime собственность.

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

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

Примеры

свернуть все

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

Предпосылки: Работа с основными сообщениями ROS

Загрузить примеры сообщений

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

load('lidarData_ConstructionRoad.mat')

Сообщения VelodureScan

VelodyneScan сообщения - это сообщения ROS, содержащие пакеты сканирования Velodine 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 filecontains набор VelodyneScan сообщения, которые полностью заполнены и хранятся в msgs переменная. Каждый элемент в msgs массив ячеек является VelodyneScan Структура сообщения ROS. Первичные данные в каждом VelodyneScan сообщение находится в Packets свойство, оно содержит несколько VelodynePacket сообщения. Стандартный формат ROS для сообщения VelodurePacket можно просмотреть путем создания пустого сообщения соответствующего типа.

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

Создание модуля чтения сообщений Velodine ROS

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)

Показать все облака точек

Во входных сообщениях Velodine 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