Считывание кадра облака точек из сообщения ROS
считывает следующий кадр облака точек из сообщений Velodine ROS и возвращает ptCloud = readFrame(veloReader)pointCloud объект. Следующий кадр облака точек - это первое облако точек, доступное при значении или после значения CurrentTime свойство объекта чтения сообщений Velodine ROS veloReader.
считывает облако точек с указанным номером кадра из сообщений Velodine ROS.ptCloud = readFrame(veloReader,frameNumber)
считывает первое облако точек, доступное на указанной отметке времени или после нее ptCloud = readFrame(veloReader,frameTime)frameTime.
Сообщения 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

veloReader - считыватель сообщений Velodine ROSvelodyneROSMesasgeReader объектСчитыватель сообщений Velodine ROS, указанный как velodyneROSMessageReader объект.
frameNumber - Номер кадра требуемого облака точекНомер кадра требуемого облака точек, заданный как положительное целое число. Номера кадров являются последовательными в velodyneROSMessageReader объект.
frameTime - Время кадра требуемого облака точек duration скалярВремя кадра требуемого облака точек, указанное как duration скаляр в секундах. Функция возвращает первый кадр, доступный на указанной отметке времени или после нее.
ptCloud - Облако точекpointCloud объектОблако точек, возвращенное как pointCloud объект.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.