主要内容

使用Velodyne ROS消息合作

Velodyne ROS消息以一种格式存储数据,该格式需要一些解释才能用于进一步处理。Matlab®可以通过格式化Velodyne ROS消息来帮助您,以便于使用。在此示例中,您可以探索如何Velodynescan处理了来自Velodyne Lidar的消息。

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

加载示例消息

加载样本velodyne消息。这些消息填充了从Velodyne激光雷达传感器收集的数据。

加载(“ lidardata_constructionRoad.mat”

Velodynescan消息

Velodynescan消息是包含Velodyne LiDAR扫描数据包的ROS消息。您可以看到标准ROS格式Velodynescan通过创建适当类型的空消息来消息。使用结构格式的消息以更好地性能。

empterveloscan = rosmessage(“ velodyne_msgs/velodynescan”,,,,“ dataformat”,,,,“结构”
emptyveloscan =带有字段的结构:MSSAGETYPE:“ Velodyne_msgs/velodynescan”标头:[1×1 struct]数据包:[0×1 struct]

由于您创建了一个空的消息,empterveloscan不包含任何有意义的数据。为方便起见,负载lidardata_constructionroad.mat文件包含一组Velodynescan完全填充并存储在味精多变的。每个元素味精单元阵列是一个VelodynescanROS消息结构。每个中的主要数据Velodynescan消息在数据包属性,它包含多个VelodyNepacket消息。您可以通过创建适当类型的空消息来看到VelodyNepacket消息的标准ROS格式。

emptyvelvekt = rosmessage(“ velodyne_msgs/velodynepacket”,,,,“ dataformat”,,,,“结构”
emption veloingkt =带有字段的结构:MessageType:“ Velodyne_msgs/velodynepacket”邮票:[1×1结构]数据:[1206×1 UINT8]

创建Velodyne ROS消息阅读器

Velodynerosmessagereader对象从中读取点云数据VelodynescanROS消息基于其指定的模型类型。请注意,提供不正确的设备模型可能会导致不正确的校准点云。本示例使用来自“ HDL32E”模型。

veloreader = velodynerosmessagereader(msgs,“ HDL32E”
veloReader = velodyneROSMessageReader with properties: 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持续时间:2.7477秒开始时间:1145.2秒末期:1147.9 sec时间戳:[1145.2 SEC 1145.2 SEC 1145.3 SEC 1145.3 SEC 1145.3 SEC 1145.4 SEC 1145.4 SEC 1145.5 SEC 1145.5 SEC 1145.5 SEC 1145.6 SEC 1145.6 SEC 1145.6 SEC 1145.7 SEC 1145.7 SEC 1145.8 SEC 1145.8 SEC 1145.8 SEC 1145.8 SEC 1145.8 SEC 1145.8 SEC 1145.8:1145.2秒

提取点云

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

创建一个持续时间标量,该标量表示第一点云读数后一秒钟。

timeDuration = veloreader.starttime +秒(1);

阅读给定时间持续时间或之后记录的第一点云。

ptcloudobj = readframe(veloreader,timeDuration);

使用权地点点云中的数据。

ptcloudloc = ptcloudobj.location;

重置当前时间财产的Veloreader到默认值

重置(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秒捕获。设置当前时间属性到那个时候开始从那里开始读取点云。

veloreader.currenttime = veloreader.starttime +秒(0.3);

显示点云流2秒。要检查是否有新框架并继续2秒钟,请删除最后一个尽管健康)状况。通过调用文件遍历文件readframe读取点云。使用点云播放器显示它们。

尽管(Hasframe(veloreader)&& iSopen(player)&&(veloreader.currenttime 结尾