主要内容

segmentGroundFromLidarData

从有组织的激光雷达数据中分割接地点

描述

例子

groundPtsIdx= segmentGroundFromLidarData (ptCloud分段组织三维激光雷达数据,ptCloud,分为地面部分和非地面部分。激光雷达传感器必须水平安装,以便在激光雷达扫描中观察到最靠近传感器的所有接地点。

要使用这个函数,地平面必须沿着x-y飞机。您可以使用pctransform在使用前旋转传感器数据segmentGroundFromLidarData

groundPtsIdx= segmentGroundFromLidarData (ptCloud名称=值使用一个或多个名称-值对设置属性。将每个属性名用引号括起来。例如,segmentGroundFromLidarData (ptCloud ElevationAngleDelta = 5)

例子

全部折叠

从一个有组织的激光雷达点云中分割出地点和非地点。从这些分割创建有组织的点云,并显示它们。

装上激光雷达,点云。

Ld =负载(“drivingLidarPoints.mat”);

从组织好的激光雷达点云中分割出地面点。

groundPtsIdx = segmentGroundFromLidarData(ld.ptCloud);

方法创建只包含这些接地点的有组织的点云选择函数。显示这个点云。

groundPtCloud = select(ld.ptCloud,groundPtsIdx);图pcshow (groundPtCloud)

创建一个只包含非地面点的有组织的点云。指定阈值为0.5米。

nonGroundPtCloud = select(ld.ptCloud,~groundPtsIdx,)“OutputSize”“全部”);distThreshold = 0.5;[labels,numClusters] = segmentLidarData(nonGroundPtCloud,distThreshold);

显示非地面点云簇。

figure colormap(hsv(numClusters)) pcshow(nonGroundPtCloud.Location,labels) title(“点云团”

将Velodyne PCAP®加载到工作空间。

velodyneFileReaderObj = velodyneFileReader(“lidarData_ConstructionRoad.pcap”“HDL32E”);

使用pcplayer创建一个点云播放器。定义它的x-,y- - - - - -,z-axes限制,以米为单位,并标记其轴。

Xlimits = [-40 40];Ylimits = [-15 15];Zlimits = [-3 3];玩家= pcplayer(xlimits,ylimits,zlimits);

标记pc机轴。

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

设置标记点的颜色图。使用RGB三元组指定绿色为地平面点,红色为障碍点。

颜色= [0 1 0;10 0 0];greenIdx = 1;redIdx = 2;

遍历Velodyne PCAP文件中的点云,使用readFrame读入数据。从每个点云中分割接地点。将所有接地点涂成绿色,非接地点涂成红色。绘制得到的激光雷达点云。

colormap (player.Axes、颜色)标题(球员。轴,“激光雷达点云的分段地平面”);i = 1:velodyneFileReaderObj。NumberOfFrames读取当前帧。ptCloud = velodyneFileReaderObj.readFrame(i);创建标签数组。colorLabels = 0 (size(ptCloud.Location,1),size(ptCloud.Location,2));找到接地点。groundPtsIdx = segmentGroundFromLidarData(ptCloud);%地图颜色地面指向绿色。colorLabels(groundPtsIdx (:)) = greenIdx;%地图颜色非地面指向红色。colorLabels(~groundPtsIdx (:)) = redIdx;绘制结果。视图(球员,ptCloud.Location colorLabels)结束

{

输入参数

全部折叠

点云,指定为apointCloud对象。ptCloud是一个有组织的点云,它存储[xyz的点坐标——- - - - - -N3矩阵。

名称-值参数

例子:ElevationAngleDelta = 5将仰角阈值设置为5度。

标识地面点的仰角差阈值,指定为非负标量。该函数计算一个标记的接地点与其相邻的4个连接点之间的仰角差。如果差值低于阈值,则邻域点被标记为地。的典型值ElevationAngleDelta都在[5,15]度范围内。增加这个值以包含更多来自不平整地面的点。

初始仰角阈值,用于识别扫描线上最接近激光雷达传感器的接地点,指定为非负标量。当仰角低于这个值时,函数将一个点标记为地面。的典型值InitialElevationAngle都在15到30度之间。

输出参数

全部折叠

地面点索引,返回为——- - - - - -N逻辑矩阵。具有真正的值,1,表示接地点。具有值,0,表示非接地点。

参考文献

[1] Bogoslavskyi, I.“稀疏三维激光扫描的高效在线分割”。摄影测量、遥感与地球信息科学杂志.Vol. 85, no . 1, 2017, pp. 41-52。

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

在R2018b中引入