Kalman-Filter zur Bestimmung der Geschwindigkeit aus den LIDAR-Daten: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
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 im Plot z. Bsp. der Streckenmessung herausgefunden werden, vgl. Abbildung ''Cursor im Matlab-Plot''.
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.

Cursor im Matlab-Plot (Originaldatei)

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