Kalman-Filter zur Bestimmung der Geschwindigkeit aus den LIDAR-Daten: Unterschied zwischen den Versionen
K (Zeilenumbrüche, Formatierung) |
K (Rechtschreibung) |
||
Zeile 68: | Zeile 68: | ||
end | end | ||
Diese Befehlsfolge befindet sich im Script ''PlotData.m''. <br/> | Diese Befehlsfolge befindet sich im Script ''PlotData.m''. <br/> | ||
Dadurch können die nicht verwendbaren Messungen schnell identifiziert werden, da ohne genaue Betrachtung der Daten ein erster Eindruck möglich ist. Desweiteren kann für die jeweilige Messung der ungefähre zeitliche Rahmen bestimmt werden. Dies kann mit dem Cursor | Dadurch können die nicht verwendbaren Messungen schnell identifiziert werden, da ohne genaue Betrachtung der Daten ein erster Eindruck möglich ist. Desweiteren kann für die jeweilige Messung der ungefähre zeitliche Rahmen bestimmt werden. Dies kann mit dem Cursor z. Bsp. im Plot der Streckenmessung herausgefunden werden, vgl. Abbildung ''Cursor im Matlab-Plot''. | ||
[[Datei:Lid004 Strecke.PNG|mini|zentriert|600px|Cursor im Matlab-Plot [[Medium:Datei.ogg| (Originaldatei)]]]] | [[Datei:Lid004 Strecke.PNG|mini|zentriert|600px|Cursor im Matlab-Plot [[Medium:Datei.ogg| (Originaldatei)]]]] | ||
Es stellte sich heraus, dass nur folgende Messungen von Null verschiedene Daten enthalten | Es stellte sich heraus, dass nur folgende Messungen von Null verschiedene Daten enthalten |
Version vom 17. Januar 2015, 19:46 Uhr
Autor: Daniel Block
Bearbeiten Sie nachfolgende Aufgaben bis zum Abgabetermin und stellen Sie Ihre Lösung bis zum Abgabetermin Prof. Göbel vor. Gehen Sie systematisch in den in SDE vermittelten Schritten
- Theorie
- Konzept
- Modellierung
- Umsetzung
- Testing
vor.
Die erstellten Dateien wurden, wenn nicht anders angegeben, im Ordner MTR_SDE_Praktikum/trunk/Daten/Kalman-Filter zur Bestimmung der Geschwindigkeit aus den LIDAR-Daten gespeichert.
LIDAR steht im gesamten Artikel für den auf dem AMR des SDE-Praktikums verbauten Laser-Scanner mit einem Rundumlaser.
Konzept
Als Aufgabenstellung ist anhand der LIDAR-Messwerte die Egogeschwindigkeit des Fahrzeugs in Längsrichtung mittels Kalman-Filter zu schätzen.
Aufzeichnung
Zeichnen Sie im Praktikum mit Hilfe des Teams Deitel/Groß eine Geradeausfahrt auf ein stehendes Ziel (z.B. Karton) auf. Diese Aufzeichnung sollte auch die aus den Hallsensoren ermittelte Geschwindigkeit und Position enthalten.
Die Aufzeichnung geschieht mit dem AMR des SDE-Praktikums gesteuert über dSPACE ControlDesk®. Das genaue Vorgehen bei einer Messung mit ControlDesk® mit Hilfe eines selbst konfigurierten Recorders wird in dem Artikel Messungen mit dSPACE ControlDesk beschrieben.
Es wird eine einfache Geradeausfahrt mit relativ langsamer Geschwindigkeit auf ein stehendes Hindernis aufgezeichnet. Als Hindernis werden nacheinander ein Rollcontainer und ein Papierkarton verwendet. Jede Art von Messunge wird mehrmals wiederholt, um die Messdaten dadurch zu validieren. Da die Kommunikation zwischen dem LIDAR und der dSPACE-Autobox zwischendurch abbricht, sind ebenfalls mehrere Messungen erforderlich. Aus den Aufzeichungsdaten kann dann für die Auswertung ein geeigneter Datensatz ausgewählt werden.
Folgende Daten werden aufgenommen:
- Streckenmessung Hallsensoren SenVx_sx_K_f64
- Geschwindigkeit Hallsensoren SenVx_vx_K_f64
- Winkel der Objekte Signal_Object_angle als Array [5x1]
- Tiefe der Objekte Signal_Object_depth als Array [5x1]
- Wahrscheinlichkeit der Objekte Signal_Object_plausibility als Array [5x1]
- Geschwindigkeit der Objekte Signal_Object_speed als Array [5x1]
- Breite der Objekte Signal_Object_width als Array [5x1]
- X-Koordinate der Objekte Signal_Object_x als Array [5x1]
- Y-Koordinate der Objekte Signal_Object_y als Array [5x1]
- Parameter der Objekte Signal_Object_params als Array [5x1]
- Zähler der Objekte Signal_Object_count
Die Messdaten werden als mat-File exportiert und können in Matlab eingelesen werden.
Die Mess-Dateien als exportierte mat-Files liegen in im SVN-Archiv des SDE-Pratkikums unter MTR_SDE_Praktikum/trunk/Software/CaroloCupFahrzeug/dSPACE/Carolo Cup Fahrzeug/Inbetriebnahme/Measurement Data/. Es sind die Dateien lid001.mat bis lid015.mat.
Schnittstelle zu Matlab
Lesen Sie die Messwerte in Matlab (nicht Simulink) ein.
Da die Qualität und Verwendbarkeit der Messdaten untersucht werden muss, werden zunächst alle Messungen geladen. Dies geschieht mit dem load-Befehl in Matlab. Hier ein Beispiel:
% Datei mit Pfad und Dateinamen festlegen Datei=([Pfad,Name]); messung = load(Datei);
Um eine schnelle Übersicht der getriggerten Signale zu bekommen, können die Signale in eine separate char-Variable gespeichert werden. Dabei muss berücksichtigt werden, dass die Messdaten in einer struct-Variabel gespeichert sind.
%% Namen der Signale extrahieren % enthaltene Namen aus einer Messung (hier lid001) auslesen for k=1:45 namen_Signale.cell(k) = cellstr(lid001.Y(1,k).Name); end % Signalnamen an Matlab-Konvention anpassen, entfernen eckiger Klammern for ii=1:45 namen_Signale.cell(ii)=strrep(namen_Signale.cell(ii), '[',); namen_Signale.cell(ii)=strrep(namen_Signale.cell(ii), ']',); end % in char konvertieren namen_Signale=char(namen_Signale.cell);
Diese beiden Befehle sind in dem Script NamenAuslesen.m zusammengefasst.
Von den aufgenommenen Messungen können, wie oben angedeutet, evt. nicht alle verwendet werden. Deswegen werden die einzelnen Signale der Messungen in separaten Plots visualisiert. Hier ist das beispielhaft für die Messung lid008.mat gezeigt.
for ii=1:length(lid008.Y) figure plot(lid008.X.Data,lid008.Y(1,ii).Data) xlabel('t [s]') ylabel(strrep(lid008.Y(1,ii).Name,'_','\_')) grid on, box on end
Diese Befehlsfolge befindet sich im Script PlotData.m.
Dadurch können die nicht verwendbaren Messungen schnell identifiziert werden, da ohne genaue Betrachtung der Daten ein erster Eindruck möglich ist. Desweiteren kann für die jeweilige Messung der ungefähre zeitliche Rahmen bestimmt werden. Dies kann mit dem Cursor z. Bsp. im Plot der Streckenmessung herausgefunden werden, vgl. Abbildung Cursor im Matlab-Plot.
Es stellte sich heraus, dass nur folgende Messungen von Null verschiedene Daten enthalten
Messung | Messzeitraum in s |
---|---|
lid004.mat | 23.5 |
lid005.mat | 14.8 |
lid007.mat | 27.75 |
lid008.mat | 16.7 |
Für das Laden der Messdaten wurde eine separate Funktion MessungLaden.m geschrieben. Nachdem die Variable für die Daten als leere struct-Variable angelegt wurde, wird der Benutzer in einem Dialogfenster nach der einzulesenden Datei gefragt.
%% Messung extrahieren aus Mat-Datei % Mat-Datei laden % Benutzer bekommt Pfad-, Dateinamen- und Dateiformat-Vorschlag [Name,Pfad]=uigetfile({'*.m;*.fig;*.mat;*.slx;*.mdl','MATLAB Files (*.m,*.fig,*.mat,*.slx,*.mdl)'; '*.m', 'Code files (*.m)';'*.fig','Figures (*.fig)';'*.mat','MAT-files (*.mat)'; ... '*.mdl;*.slx','Models (*.slx, *.mdl)';'*.*', 'All Files (*.*)'},'Dateiauswahl',... '..\..\Software\CaroloCupFahrzeug\dSPACE\Carolo Cup Fahrzeug\Inbetriebnahme\Measurement Data\lid004.mat'); Datei=([Pfad,Name]); messung = load(Datei);
Mit der Funktion fieldnames lassen sich in struct-Variablen die Namen der Ebenen auslesen. In der ersten Ebene lässt sich hier somit der ursprüngliche Name des mat-Files abspeichern.
% Messungsnamen auslesen name_messung = fieldnames(messung);
Im Weiteren wird die Struktur der Messung in die erste Ebene der Variable verschoben. Sollte das nicht möglich sein, wird eine Fehlermeldung ausgegeben.
% in erste Ebene der Struktur verschieben if length(name_messung) == 1 messung = messung.(name_messung{1}); else % Fehlermeldung, falls nicht möglich fprintf('Messstruktur nicht lesbar, bitte Aufbau der Struktur überprüfen. In der ersten Ebene muss die Messdatei mit seinem Namen stehen'); end
Die Signale werden nun in die zuvor erstellte Variable geschrieben.
% Ergebnisstruktur nur mit den Signalen füllen Messdaten.(messung.Y(ii).Name) = messung.Y(ii).Data';
Rohdatenverarbeitung
Extrahieren Sie aus LIDAR-Messwerten das stehende Objekt. Sie dürfen gern den Algorithmus aus der Vorlesung verwenden.
Modellierung
Erstellen Sie ein System- und ein Messmodell.
Als Systemmodell ist ein Ruck-Null-Modell zu wählen.
Der Zustandsvektor lautet
Nutzen Sie ein Kalman-Filter-Tracking, um die Geschwindigkeit und Position des Egofahrzeugs kontinuierlich aus den stehenden Objekten zu bestimmen. Hierzu dürfen keine Toolboxen verwendet werden.
Ergebnisdarstellung
Stellen Sie die Schätzung in je einem Diagramm und der Messung gegenüber und diskutieren Sie diese.
Plausibilisieren Sie die Strecke und die Geschwindigkeit über die mit dem Hallsensor gemessenen Referenzdaten.
Code Review
Machen Sie für Ihren Quelltext ein Code Review und dokumentieren Sie dieses in der Vorlage (\Anforderungsmanagement\Testverfahren).
Modultest
Führen Sie für Ihre Quellen einen Komponententest durch und dokumentieren Sie diesen entsprechend der Vorlesung Reliability Engineering. Simulieren Sie hierzu die Eingangsdaten, stellen Sie die Ergebnisse dar und diskutieren Sie diese.
Systemtest
Prüfen Sie, ob Ihr Modell negative Auswirkungen auf das Gesamtsystem (EPA, BSF) hat. Führen Sie Ihre Ergebnisse Herrn Prof. Göbel vor und übernehmen Sie nach der Abnahme das Modell in den Hauptzweig (trunk).
Dokumentation
Dokumentieren Sie alle Daten in SVN und die Ergebnisse in diesem Artikel. Berücksichtigen Sie dabei die Kriterien für wissenschaftliches Arbeiten sowie die Anforderungsunterlagen von SDE (z.B. Schnittstellendokumentation.docx, Namenskonventionen.pdf, Lastenheft_AutonomesFahrzeug.docx).
→ zurück zum Hauptartikel: Geschwindigkeitsermittlung