主要内容

velodyneROSMessageReader

威力登ROS的消息

描述

velodyneROSMessageReader对象从Velodyne收集的VelodyneScan ROS消息中读取点云数据®激光雷达传感器。要将此点云数据作为点云对象读入工作区,请使用readFrame对象的功能。要检查消息集中的其他点云,请使用hasFrame对象的功能。

创建

描述

例子

veloReader= velodyneROSMessageReader (公司devicemodel为一组VelodyneScan ROS消息创建一个Velodyne ROS消息读取器对象公司指定的设备模型devicemodel

veloReader= velodyneROSMessageReader (公司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”

请注意

指定捕获扫描的设备模型以外的设备模型可能会导致校准不正确的点云。

此属性是只读的。

Velodyne校准XML文件的名称,指定为字符向量或字符串标量。每个设备型号都包含一个默认的校准文件。

此属性是只读的。

文件中点云的总数,指定为正整数。

此属性是只读的。

文件的总持续时间,指定为持续时间标量,单位是秒。

此属性是只读的。

第一个点云的时间戳,指定为持续时间标量,单位是秒。

开始和结束时间是相对于前一个小时指定的。例如,如果文件从13:58到14:05记录了7分钟,那么:

  • 开始时间= 58分钟= 3480秒

  • EndTime开始时间+ 7分钟= 65分钟= 3900秒

此属性是只读的。

最后一个点云读取的时间戳,指定为持续时间标量,单位是秒。

开始和结束时间相对于整个小时。例如,如果数据是在下午1:58到2:05的7分钟内记录的,那么:

  • 开始时间= 58分钟= 3840秒

  • EndTime开始时间+ 7分钟= 65分钟= 3900秒

此属性是只读的。

点云帧的时间戳(以秒为单位),指定为持续时间向量。向量的长度等于向量的值NumberOfFrames财产。向量中第一个元素的值与元素的值相同开始时间财产。您可以使用此属性读取在不同时间捕获的点云帧。

中读取点云帧的时间戳时间戳财产。的开始时间作为输入readFrame对象函数来读取对应的点云帧。

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

当前点云读取的时间戳,指定为持续时间标量,单位是秒。当你阅读点云使用readFrame对象函数,则对象使用最近读的点云更新此属性。您可以使用重置对象函数将此属性重置为默认值。缺省值匹配开始时间财产。

对象的功能

hasFrame 确定是否有其他威力登点云在ROS消息中可用
readFrame 从ROS消息中读取点云帧
重置 重置CurrentTime的属性velodyneROSMessageReader对象设置为默认值

例子

全部折叠

Velodyne ROS消息以一种需要解释的格式存储数据,然后才能用于进一步处理。MATLAB®可以帮助您格式化Velodyne ROS消息,方便使用。在本例中,您可以探索如何操作VelodyneScan处理来自Velodyne激光雷达的消息。

先决条件:使用基本ROS消息

加载示例消息

加载示例Velodyne消息。这些信息由Velodyne激光雷达传感器收集的数据填充。

负载(“lidarData_ConstructionRoad.mat”

VelodyneScan消息

VelodyneScan消息是ROS消息,包含Velodyne LIDAR扫描包。的标准ROS格式VelodyneScan消息,方法是创建适当类型的空消息。使用结构格式的消息以获得更好的性能。

emptyvelscan = rosmessage(“velodyne_msgs / VelodyneScan”“DataFormat”“结构”
emptyveloScan =带字段的结构:MessageType: 'velodyne_msgs/VelodyneScan'头:[1×1 struct]报文:[0×1 struct]

既然你创建了一个空消息,emptyveloScan不包含任何有意义的数据。为方便起见,载货lidarData_ConstructionRoad.mat文件中包含一组VelodyneScan中完全填充和存储的消息公司变量。中的每个元素公司单元格数组是VelodyneScanROS消息结构。每个的主要数据VelodyneScan消息在属性时,它包含多个VelodynePacket消息。通过创建适当类型的空消息,可以看到VelodynePacket消息的标准ROS格式。

emptyveloPkt = rosmessage(“velodyne_msgs / VelodynePacket”“DataFormat”“结构”
emptyveloPkt =带字段的结构:MessageType: 'velodyne_msgs/VelodynePacket'邮票:[1×1 struct]数据:[1206×1 uint8]

创建Velodyne ROS消息阅读器

velodyneROSMessageReader对象读取点云数据VelodyneScanROS消息基于其指定的模型类型。请注意,提供不正确的设备模型可能会导致不正确校准的点云。类中的消息“HDL32E”模型。

veloReader = velodyneROSMessageReader(msgs,“HDL32E”
veloReader = velodyneROSMessageReader带属性:VelodyneMessages: {28×1 cell} DeviceModel: 'HDL32E' CalibrationFile: 'M:\jobarchive\Bdoc21b\2021_06_16_h16m50s15_job1697727_pass\matlab\toolbox\shared\pointclouds\utilities\velodyneFileReaderConfiguration\HDL32E.xml' NumberOfFrames: 55 Duration: 2.7477秒StartTime: 1145.2秒EndTime: 1147.9秒timestamp:[1145.2 sec 1145.2 sec 1145.3 sec 1145.3 sec 1145.4 sec 1145.4 sec 1145.5 sec 1145.5 sec 1145.6 sec 1145.6 sec 1145.7 sec 1145.7 sec 1145.8 sec 1145.8 sec 1145.9 sec 1145.9 sec…

提取点云

在此帮助下,您可以从原始数据包消息中提取点云velodyneROSMessageReader对象。通过提供特定的帧号或时间戳,可以从中提取一个点云velodyneROSMessageReader对象使用readFrame对象的功能。如果你打电话readFrame没有帧号或时间戳,它提取序列中的下一个点云基于CurrentTime财产。

创建表示第一个点云读取后一秒的持续时间标量。

timeDuration = velereader。StartTime + seconds(1);

读取在给定时间期间或之后记录的第一个点云。

ptCloudObj = readFrame(veloReader,timeDuration);

访问位置点云中的数据。

ptCloudLoc = ptCloudObj.Location;

重置CurrentTime的属性veloReader到默认值

重置(veloReader)

显示所有点云

您还可以循环遍历输入Velodyne ROS消息中的所有点云。

定义x - y -,而且z -轴限pcplayer在米。标记坐标轴。

Xlimits = [-60 60];Ylimits = [-60 60];Zlimits = [-20 20];

创建点云播放器。

玩家= pcplayer(xlimits,ylimits,zlimits);

标记坐标轴。

包含(球员。轴,“X”(m));ylabel(球员。轴,“Y (m)”);zlabel(球员。轴,“Z”(m));

在输入消息的0.3秒处捕获第一个感兴趣的点云。设置CurrentTime属性从那里开始读取点云。

veloReader。CurrentTime=veloReader。开始时间+ seconds(0.3);

显示点云流2秒。若要检查是否有新的帧可用并继续超过2秒,请删除最后一个帧条件。通过调用来遍历文件readFrame阅读点云。使用点云播放器显示它们。

(hasFrame(veloReader) && isOpen(播放器)&& (veloReader.)CurrentTime < veloReader。开始时间+ seconds(2))) ptCloudObj = readFrame(veloReader); view(player,ptCloudObj.Location,ptCloudObj.Intensity); pause(0.1);结束

提示

  • 提供不正确的设备模型将导致不正确校准的点云。

  • 不提供校准文件可能导致不准确的结果。

版本历史

R2020b中介绍