velodyneROSMessageReader

Рид Велодайн сообщения ROS

Описание

velodyneROSMessageReader объект считывает данные об облаке точек из сообщений VelodyneScan ROS, собранных из 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'

Примечание

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

Свойства

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

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

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

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

Модель устройства Velodyne называет в виде 'VLP16', 'VLP32C', 'HDL32E', 'HDL64E', или 'VLS128'.

Примечание

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

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

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

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

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

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

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

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

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

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

  • StartTime = 58 min = 3 480 с

  • EndTime = StartTime + 7 min = 65 min = 3 900 с

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

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

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

  • StartTime = 58 min = 3 840 с

  • EndTime = StartTime + 7 min = 65 min = 3 900 с

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

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

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

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

Метка времени облака текущей точки, читающего в виде duration скаляр, в секундах. Когда вы читаете облака точек с помощью readFrame возразите функции, обновления объекта это свойство с последний раз облако точек чтения. Можно использовать 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. Вы видите стандартный формат ROS для VelodyneScan сообщение путем создания пустого сообщения соответствующего типа. Используйте сообщения в формате структуры для лучшей эффективности.

emptyveloScan = rosmessage("velodyne_msgs/VelodyneScan","DataFormat","struct")
emptyveloScan = struct with fields:
    MessageType: 'velodyne_msgs/VelodyneScan'
         Header: [1x1 struct]
        Packets: [0x1 struct]

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

emptyveloPkt = rosmessage("velodyne_msgs/VelodynePacket","DataFormat","struct")
emptyveloPkt = struct with fields:
    MessageType: 'velodyne_msgs/VelodynePacket'
          Stamp: [1x1 struct]
           Data: [1206x1 uint8]

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

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

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

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

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

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

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

timeDuration = veloReader.StartTime + seconds(1);

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

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 object. The axes object contains an object of type scatter.

Советы

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

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

Смотрите также

| | |

Введенный в R2020b