Objekterkennung mit LiDAR-Sensor: Unterschied zwischen den Versionen
Zeile 5: | Zeile 5: | ||
=Auswertung der Messdaten= | =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. | 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. | In Abbildung 1 ist eine beispielhafte Visualisierung des Sensorbilds zu erkennen. | ||
Abbildung 1: UrgBenri Visualisierungssoftware | [[Datei:UrgBenriVisualisierungssoftware.png|800px|thumb|left|Abbildung 1: UrgBenri Visualisierungssoftware]] | ||
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. | 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. | 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. | Über das Skript startDarstellungDerMessdaten.m können die Messdaten dargestellt werden. | ||
Aufgabe 1.4 Zyklisches Laden der Messdaten | Aufgabe 1.4 Zyklisches Laden der Messdaten |
Version vom 12. Juli 2021, 15:49 Uhr
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) |