Lidar Objekterkennung mit Matlab/Simulink und EV3: Unterschied zwischen den Versionen
Zeile 58: | Zeile 58: | ||
=== Programmierung der Funktion <code>main_EV3</code> in Matlab=== | === Programmierung der Funktion <code>main_EV3</code> in Matlab=== | ||
[[Bild:Lidar_EV3.png|thumb|left| | [[Bild:Lidar_EV3.png|thumb|left|550px|Programmablaufplan über das gesamte Projekt]] | ||
<div style="width:600px; height:550px; overflow:auto; border: 2px solid #088"> | <div style="width:600px; height:550px; overflow:auto; border: 2px solid #088"> |
Version vom 2. Juli 2017, 12:17 Uhr
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 zeitlicher Lichtpuls ausgesandt. Die Pulslaufzeit ist die Zeit, die der Lichtstrahl braucht, um zur Quelle reflektiert zu werden. Durch Messen dieser Laufzeit kann man über die Lichtgeschwindigkeit die Distanz zwischen Quelle und Objekt ermitteln. Der Faktor 0,5 trägt dem Umstand Rechnung, dass das Licht die Entfernung zum Objekt hin und zurück durchlaufen muss. Die Lichtgeschwindigkeit wird durch das umgebende Medium mit dem Brechungsindex reduziert.
Der Vorteil dieses Verfahrens ist die geringe Reaktionszeit. Das Verfahren hat Messbereiche von einem Meter bis mehrere 10 Kilometer. Der Nachteil ist die erforderliche Messung sehr kurzer Zeiten (Nano- bis Picosekunden), es ist daher schwierig, eine höhere Auflösung als einige Zentimeter zu erreichen.
Um die Anforderung an die Zeitmessung zu verringern, werden Verfahren eingesetzt, bei denen der Laserstrahl selbst frequenzmoduliert oder mit einem hochfrequenten Signal moduliert wird.
Hokuyo URG-04LX-UG01
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. [2]
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 Daten zu dekodieren. Die dekodierten Daten werden 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
%........................................................................%
% 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
- MATLAB Driver for Hokuyu URG family
- Simulink (and Matlab) Support Package for LEGO MINDSTORMS EV3 Hardware