Objekterkennung mit LiDAR-Sensor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 5: Zeile 5:
=Auswertung der Messdaten=
=Auswertung der Messdaten=


Aufgabe 1.1 LiDAR Daten
==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.
Aufgabe 1.2 Laden der Messdaten
 
==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.
Aufgabe 1.3 Darstellung der Messdaten
 
  %****************************************************************
  % 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, 14: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.

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.

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)



Bewertung der Messwerte

Abstand der Messwerte

Segmentierung