Определите, доступно ли другое облако точек Velodyne в сообщениях ROS
определяет, доступно ли другое облако точек в Velodyne® Сообщения ROS.isAvailable
= hasFrame(veloReader
)
Сообщения 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
veloReader
— Читатель сообщения Velodyne ROSvelodyneROSMessageReader
объектЧитатель сообщения Velodyne ROS в виде velodyneROSMessageReader
объект.
isAvailable
— Индикатор доступности системы координатtrue
или 1
| false
или 0
Индикатор доступности системы координат, возвращенной как логический 1
TRUE
) когда более поздняя система координат доступна или логический 0
ложь
) когда более поздняя система координат не доступна.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.