主要内容

hasFrame

确定是否有其他威力登点云在ROS消息中可用

描述

例子

isAvailable= hasFrame (veloReader确定Velodyne中是否有另一个点云可用®ROS的消息。

例子

全部折叠

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.StartTime + seconds(0.3);

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

(hasFrame(veloReader) && isOpen(播放器)&& (veloReader.)CurrentTime < veloReader。StartTime + seconds(2))) ptCloudObj = readFrame(veloReader);视图(球员,ptCloudObj.Location ptCloudObj.Intensity);暂停(0.1);结束

输入参数

全部折叠

Velodyne ROS消息读取器,指定为velodyneROSMessageReader对象。

输出参数

全部折叠

帧可用性指示器,作为逻辑返回1真正的),当后面的帧可用或逻辑0)当稍后的帧不可用时。

版本历史

R2020b中介绍