Objekterkennung mit LiDAR-Sensor
Autor: SDE Team 2021/2022
Betreuer: Ulrich Schneider
Auswertung der Messdaten
LiDAR Daten
Der Begriff LiDAR setz sich aus „Light Detection And Ranging“ zusammen. Dabei nutzt der LiDAR einen rotierenden Laser, über den die Entfernungen gemessen werden. In Abbildung 1 ist eine beispielhafte Visualisierung des Sensorbilds zu erkennen.
Gut zu erkennen sind hier die jeweiligen Distanzen, die bei einem Umlauf gemessen wurden. Der hier verwendete Sensor hat einen Messbereich von 240°. In diesem Umkreis kann so die Lage von etwaigen Hindernissen bestimmt werden.
Laden der Messdaten
Mit dem Code der Datei startUBH2MAT.m werden die Messdaten geladen und in einer .mat-Datei gespeichert.
%**************************************************************** % Modul : startUBH2MAT.m * % * % Datum : 24. Juni 2021 * % * % Funktion : Messdaten der Dateien LiDAR.ubh laden und * % verarbeiten * % * % * % * % * % Implementation : MATLAB R2020a * % * % Author : SDE-Team 20/21 * % * % Bemerkung : - * % * % * % Letzte Änderung : 29. Juni 2021 * % * %****************************************************************
%% MALTAB initisalisieren clear all; close all; clc
%% Dateipfad temporär hinzufügen dateiPfad = ['C:\Users\svenp\Documents\SVN\HSHL\MTR_SDE_Praktikum\trunk\'... 'Workshops\10 - Objekterkennung mit LiDAR - Schneider\Daten']; addpath(dateiPfad);
dateiName = 'Lidar.ubh'; % Eingangsdatei nSamples = 682; % Anzahl der Messwerte
%% Datei öffnen fileID= fopen(dateiName); if fileID == -1 error("Datei ist nicht vorhanden"); end
daten={};
%% Winkel berechnen Aufloesung = (120--120)/(nSamples-1);% Winkelauflösung aWinkel= -120:Aufloesung:120 ; % [-a:Aufloesung:a];
%% Einmalige Winkelberechnung acosdw = cosd(aWinkel); % Array mit nSamples Einträgen asindw = sind(aWinkel); % Array mit nSamples Einträgen
%% Schleife solange die Datei nicht abgearbeitet wurde % Zeile aus Datei lesen while ~feof(fileID) daten=[daten {fgetl(fileID)}]; end % Zeitstempel in s auslesen timestamp = daten(32:6:end); %[ms] timestamp = cellfun(@str2num,timestamp); Zeit = (timestamp(1,:)-timestamp(1,1))./1000; %[s]
%Log Time logTime = daten(34:6:end);
%%Schrägentfernungen range = daten(36:6:end); range= str2num(char(range));
RangeScan= reshape(range,[682,336])';
% KOS-Trafo Polar- zu kartesische Koordinaten xMesswerte=asindw.*RangeScan./1000; yMesswerte=acosdw.*RangeScan./1000;
%% Daten speichern stSaveFileName = 'Messdaten.mat'; save(stSaveFileName, "Zeit","RangeScan","xMesswerte","yMesswerte"); disp([stSaveFileName,' wurde gespeichert...']) fclose(fileID); % .uhb Datei schließen
Darstellung der Messdaten
Über das Skript startDarstellungDerMessdaten.m können die Messdaten dargestellt werden. Aufgabe 1.4 Zyklisches Laden der Messdaten Über die Funktion LadeMessdaten.m werden die Messdaten für ein Frame geladen:
function [z,dt,aRangeScan] = LadeMessdaten(i) % LADEMESSDATEIN läd die Messdaten für ein Frame Messwerte = load("Messdaten.mat"); dt = Messwerte.Zeit(i); z = [Messwerte.xMesswerte(i,:); Messwerte.yMesswerte(i,:)]; aRangeScan = Messwerte.RangeScan; end
Mit dem Skript testeLadeMessdaten.m lässt sich die Funktion testen:
%% MALTAB initisalisieren clear all; close all; clc %% Figure vorbereiten % ROI festlegen xROI = [-5; 5]; yROI = [0; 5]; fRange = 5.5; % m figure('units','normalized','outerposition',[0 0 1 1]); h = plot(0,0,'b.'); %hold on set(gca,'XDir','reverse'); line([-fRange fRange], [0 0]) line([0 0], [-fRange fRange]) xlabel('y in m'); ylabel('x in m'); ylim manual xlim manual hAxis = gca; hAxis.XLimMode = 'manual'; hAxis.YLimMode = 'manual'; xlim(xROI) ylim(yROI) %% Messdaten darstellen nStart = 1; % Startframe; nEnde = 336; % Anzahl der Frames for nFrame=nStart:nEnde % Zyklusschleife über alle Messzyklen %% Messwerte [z, dt, aRangeScan] = LadeMessdaten(nFrame); X = z(1,:); Y = z(2,:); set(h, "XData",X ); set(h, "YData", Y); refreshdata title(["Frame: ",num2str(nFrame)]); pause(0.01); end
Spezifikationsübersicht des URG-04LX
Name des Produkts | Laser Entfernungsmesser |
---|---|
Lichtquelle | Halbleiter Laserdiode (Wellenlänge 785 nm) |
Versorgungsspannung | 5VDC |
Maximale Reichweite | 0,002 m bis 5,6 m |
Messbereich | 0,006 m bis 4 m |
Messauflösung | 0,001 m |
Genauigkeit (20mm - 1000mm) | ± 0,03 m |
Genauigkeit (1000mm - 4000mm) | ± 3 % |
Horizontaler Scanwinkel | 240° |
Winkelauflösung | 0,36° |
Anzahl Scanschritte | 683 |
Scangeschwindigkeit | 100 ms/scan |
Schnittstelle | RS-232 (seriell) |