hasFrame
确定是否有其他威力登点云在ROS消息中可用
描述
确定Velodyne中是否有另一个点云可用®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
中完全填充和存储的消息公司
变量。中的每个元素公司
单元格数组是VelodyneScan
ROS消息结构。每个的主要数据VelodyneScan
消息在包
属性时,它包含多个VelodynePacket
消息。通过创建适当类型的空消息,可以看到VelodynePacket消息的标准ROS格式。
emptyveloPkt = rosmessage(“velodyne_msgs / VelodynePacket”,“DataFormat”,“结构”)
emptyveloPkt =带字段的结构:MessageType: 'velodyne_msgs/VelodynePacket'邮票:[1×1 struct]数据:[1206×1 uint8]
创建Velodyne ROS消息阅读器
的velodyneROSMessageReader
对象读取点云数据VelodyneScan
ROS消息基于其指定的模型类型。请注意,提供不正确的设备模型可能会导致不正确校准的点云。类中的消息“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);结束
输入参数
veloReader
- - - - - -Velodyne ROS消息阅读器
velodyneROSMessageReader
对象
Velodyne ROS消息读取器,指定为velodyneROSMessageReader
对象。
输出参数
isAvailable
-帧可用性指标
真正的
或1
|假
或0
帧可用性指示器,作为逻辑返回1
(真正的
),当后面的帧可用或逻辑0
(假
)当稍后的帧不可用时。
版本历史
R2020b中介绍
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。