라이다 데이터에서 지면점 및 비지면점 추출
velodyneFileReader
함수를 사용하여 PCAP 파일에서 라이다 데이터를 읽어옵니다.
veloReader = velodyneFileReader("lidarData_ConstructionRoad.pcap","HDL32E");
시간 구간을 지정하여 입력 라이다 데이터에서 일련의 라이다 데이터 프레임을 추출합니다.
veloReader.CurrentTime = veloReader.StartTime + seconds(0.5); StopTime = veloReader.StartTime + seconds(10);
Figure 창을 구성하고 pcplayer
함수를 사용하여 입력 라이다 데이터 프레임과 추출된 지면점을 표시합니다.
fig = figure(Position=[0 0 800 600]); xlimits = [-30 30]; ylimits = [-30 30]; zlimits = [-10 20]; hPanel = uipanel(fig,Position=[0 0.5 1 0.5]); hPlot = axes(hPanel); player = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot); hPanel_groundData = uipanel(fig,Position=[0 0 0.5 0.5]); hPlot_groundData = axes(hPanel_groundData); player_groundData = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot_groundData); hPanel_nongroundData = uipanel(fig,Position=[0.5 0 0.5 0.5]); hPlot_nongroundData = axes(hPanel_nongroundData); player_nongroundData = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot_nongroundData);
라이다 데이터 프레임을 읽어오고 segmentGroundFromLidarData
함수를 사용하여 라이다 데이터에서 지면점을 추출합니다. 그런 다음, 추출된 지면점의 인덱스를 사용하여 프레임에서 비지면점을 분할합니다.
while (hasFrame(veloReader) && veloReader.CurrentTime < StopTime) % Read a lidar data frame ptCloud = readFrame(veloReader); % Extract ground points from lidar data frame groundPtsIdx = segmentGroundFromLidarData(ptCloud); ptCloudGround = select(ptCloud,groundPtsIdx,OutputSize="full"); % Extract non-ground points from lidar data frame ptCloudNonGround = select(ptCloud,~groundPtsIdx,OutputSize="full"); % Display the input lidar data and the extracted points view(player,ptCloud) title(hPlot,"Input Lidar Data") view(player_groundData,ptCloudGround) title(hPlot_groundData,"Extracted Ground Points") view(player_nongroundData,ptCloudNonGround) title(hPlot_nongroundData,"Extracted Non-Ground Points") colormap(autumn) pause(0.01); end