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