Lidar Objekterkennung mit Matlab/Simulink und EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Nora Werner

Betreuer: Prof. Dr.-Ing. Ulrich Schneider

→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017


Lidar

Ein Lidar (Abkürzung für engl. light detection and ranging) ist ein Verfahren bzw. ein Gerät zur Ortung von Objekten. Basis hierfür bilde die Messung der Reflexion eines gepulsten Laserstrahls in Abhängigkeit der Zeit nach dessen Aussendung.[1]


Puls-Laufzeitverfahren

Bei der Laufzeitmessung wird ein Lichtpuls ausgesandt. Als Pulslaufzeit wird die Zeit bezeichnet, die ein Lichtstrahl benötigt um zur Quelle zurückreflektiert zu werden. Durch Messen dieser Laufzeit kann über die Lichtgeschwindigkeit und die Distanz zwischen Lichtquelle und Objekt ermitteln werden. Zusätzlich muss ein Faktor von 0,5 in die Rechnung mit einfließen, da der Lichtstrahl die Entfernung zweimal (hin und zurück) überwinden muss. Der Vorteil dieses Verfahrens ist die geringe Reaktionszeit. Ein großer Nachteil hingegen ist, dass die die Messung selbst in sehr kurzen Zeitabständen (Nano- bis Picosekunden) erfolgen muss. Daher ist eine Messung im Nahbereich (wenige Zentimeter) problematisch und der Fehler ist verhältnismäßig groß. [2]


Hokuyo URG-04LX-UG01

Scan-Radius des Lidars

Der URG-04LX ist ein Laserscanner für Flächen. Die Lichtquelle des Sensors ist ein Infrarotlaser mit 785 nm (Laserklasse 1). Der Scanbereich ist einHalbkreis von 240° mit einem maximalen Radius von 4.000 mm. Der Abtastwinkel zwischen zwei Werten beträgt 0,36°. Insgesamt beträgt die Auflösung auf den Scanbereich 683 Schritte. Der Durchmesser des Lasers ist bei einer Entfernung von 2.000 mm höchstens 20 mm, die maximale Abweichung beträgt 40 mm bei 4.000 mm. Grundlage für die Distanzmessung bildet die Messung der Phasenverschiebung. Dadurch wird der Einfluss von Farbe und Reflexionsgrad des detektierten Objekts minimal gehalten. [3]

Bezeichnung Spezifikation
Lichtquelle Laser (max. 0,8 mW) der Klasse 1 mit λ = 785 nm
Detektierungsbereich möglicher Bereich: 20 - 5.600 mm, idealer Bereich: 60 - 4.095 mm
Auflösung 1 mm
Winkelgeschwindigkeit 360°/s
Winkelbeschleunigung


Implementierung in Matlab

Matlab-Treiber für das URG-04LX Lidar

Quelle des Treibers: MATLAB Driver for Hokuyo URG family

Mithilfe von Funktionen des Treibers kann eine serielle Verbindung über USB mit dem Lidar aufgebaut werden. Hierfür muss der richtige COM-Port in das Skript run.m eingetragen und anschließend ausgeführt werden. Am Ende der Initialisierung wird die Funktion main_EV3.m aufgerufen, die den kontinuierlich auszuführende Programmcode enthält. In jedem Zyklus der main wir die Funktion LidarScan() aufgerufen, die für das Empfangen der Daten vom Sensor verantwortlich ist. Die Funktion selbst nutzt die Funktion decodeSCIP(), um die empfangenen Daten zu dekodieren. Diese Informationen werden dann in einem Array gespeichert, aus dem anschließend die Abstandswerte in 0,36°-Intervallschritten gelesen werden können.


Programmierung der Funktion main_EV3 in Matlab

Programmablaufplan über das gesamte Projekt
%........................................................................%
%   Code zur Kollisionserkennung eines Lego EV3 mit einem URG-Lidar      %
%                                                                        %
% Das Lidar hat eine Winkelauflösung von 1024 Abstufungen auf 360°. Der  %
% Abstand wird von Schritt 44 bis 725 gemessen (-120° bis 120°). Da für  %
% dieses Projekt lediglich der Abstand zu einem Hindernis direkt vor     %
% dem Lidar entscheidend ist, wird der Abstand nur für 0° bzw. Schritt   %
% 384 benötigt.                                                          %
%                                                                        %
%   Autor von 'Scan_EV3.m': Nora Werner                                  %
%........................................................................%


function main_EV3

global A  lidar
%........................................................................%
%Lego Mindstorm konfigurieren

mylego = legoev3('usb')         % Verbindung auf USB festlegen
beep(mylego)                    % kurzes akustisches Signal
mymotor = motor(mylego,'A')     % Motor an Port A des EV3
mymotor.Speed = -50             % Motorgeschwindigkeit auf 50% des Maximums


%........................................................................%    
% Code für die Kollisionserkennung des Lego EV3 mit einem URG-Lidar
   while (1)
    [A] = LidarScan(lidar); % Abstandswerte in Array/1D-Matrix schreiben

    abstand = A(384)    	% Abfrage der Distanz zum Hindernis bei 0°
 
    if abstand > 250    	% Vergleich Abstandsgrenze zum Objekt (in mm)
        start(mymotor)  	% Motor starten    
    else 
        stop(mymotor)   	% Motor stoppen 
    end
 

  
%........................................................................%
% Code zur Erkennung des Tastendrucks in der Mitte des EV3 zum Beenden des
% Programms
   button = readButton(mylego,'center');

   if button == 1  
     % Motoren stoppen und Verbindung zum EV3 beenden
     beep(mylego)
     stop(mymotor)
     clear mylego
     % serielle Verbindung zum Lidar trennen und Lidar ausschalten
     fprintf(lidar,'QT');
     fclose(lidar);
     close all;
    end   
  end 
end

Verwendete Support Packages für Matlab


Einzelnachweise

  1. [1], Spektrum.de - Lexikon der Physik - Lidar. Abgerufen am 18.05.2017.
  2. Mitschrift der Vorlesung Signalverarbeitende Systeme am 29.06.2017 von Prof. Dr.-Ing. Ulrich Schneider im Studiengang Business and Systems Engineering an der Hochschule Hamm-Lippstadt.
  3. [2], Scanning Laser Range Finder URG-04LX-UG01 Specifications - PDF. Abgerufen am 18.05.2017.