3-D激光雷达点云中的路缘检测
复制命令复制代码
此示例演示如何检测激光雷达点云中的路缘。路缘是一条石头或混凝土线,将道路连接到人行道。路缘用作道路可行驶区域的分隔符。在没有GPS信号的情况下,检测路缘位置对于自动驾驶应用中的路径规划和安全导航非常重要。
此示例使用来自Hesai和Scale的PandaSet数据集的子集。PandaSet包含使用Pandar64传感器捕获的各种城市场景的激光雷达点云扫描。
介绍
激光雷达点云中的路缘检测涉及检测相对于自我车辆的道路的左右路缘。激光雷达传感器安装在车辆的顶部。
使用以下步骤检测激光雷达传感器捕获的点云数据中的路缘:
提取感兴趣的区域(ROI)
对公路和越野点进行分类
使用越野点识别道路形状
使用道路点检测候选路缘点
下载激光雷达数据集
数据集的大小为5.2GB,它包含个预处理的有组织的点云。其中,此示例使用27个点云的子集。每个点云都指定为一个64xx3数组。基本事实数据包含13个类的语义分割标签。点云以PCD格式存储,地面实况数据以PNG格式存储。
使用本示例末尾定义的帮助程序函数下载PandaSet数据集。helperDownloadPandasetData
%Setrandomseedtogeneratereproducibleresultsrng("default");[ptCloudData,labelsData]=helperDownloadPandasetData;
选择数据集的第一帧以进行进一步处理。可视化点云。
ptCloud=ptCloudData{1};labels=labelsData{1};%Visualizetheinputpointcloudwithcorrespondinggroundtruthlabelsfigurepcshow(ptCloud.Location,labels)view(2)title("InputLidarPointCloud")
预处理数据
作为检测路缘点的预处理步骤,首先从点云中提取感兴趣区域,并将其中的点分类为公路点或越野点。
根据激光雷达传感器的安装位置,点云数据稀疏到一定距离之外。要确保提取的点云密度足够大,以便进一步处理,请在传感器的有限距离内指定ROI。
%DefineROIinmetersxLim=[-];yLim=[-];roiIdx=ptCloud.Location(:,:,1)=xLim(1)...ptCloud.Location(:,:,1)=xLim(2)...ptCloud.Location(:,:,2)=yLim(1)...ptCloud.Location(:,:,2)=yLim(2);
使用以下标签将点云分为公路点和越野点:
1—未标记
2—植被
3—地面
4—道路
5—道路标记
6—人行道
7—汽车
8—卡车
9—其他车辆
10—行人
11—道路护栏
12—标志
13—建筑物
labels(~roiIdx)=nan;%Theon-roadpointsconsistofground,roadandsidewalkonRoadLabelsIdx=(labels==3
labels==4
labels==6);%Theoff-roadpointsconsistofbuildingsandotherobjectsoffRoadLabelsIdx=(labels==2
labels==11
...labels==12
labels==13);%Visualizethepointcloud,alongwithon-roadandoff-roadpoints.figuresubplot(1,3,1)pcshow(select(ptCloud,roiIdx))view(2)title("CroppedInputPointCloud")subplot(1,3,2)pcshow(select(ptCloud,onRoadLabelsIdx))view(2)title("On-roadPointCloud")subplot(1,3,3)pcshow(select(ptCloud,offRoadLabelsIdx))view(2)title("Off-roadPointCloud")
如果数据集中不提供语义标签,则可以使用深度学习网络对其进行计算。有关更多信息,请参阅使用SqueezeSegV2深度学习网络的激光雷达点云语义分割示例。
检测道路形状
将梁模型应用于越野点以检测道路形状。有关梁模型的详细信息,请参阅[1]和[2]。
从发射点发射一系列光束。在此示例中,发射点是激光雷达传感器在自我车辆上的位置。
根据传感器的角度分辨率将光束划分为光束区域。在此示例中,角度分辨率为1度。
确定相对于发射点的光束角度和光束长度。
对于每个光束区域,确定发射点与该区域中最近点之间的距离,以及发射点与该区域中最远点之间的距离。
计算光束区域的归一化光束长度,作为发射点与该区域中的点之间的最短距离和最长距离的比率。
将脚趾查找算法的自定义版本[3]应用于归一化的光束长度以查找道路形状。
每个脚趾片的中心角度是相对于发射点的道路分割角度。
%Selecttheoff-roadpointcloudoffRoadPtCloud=select(ptCloud,offRoadLabelsIdx);%UsethehelperRoadSegmentationAngleshelperfunctiondefinedattheend%ofthisexampleto