SoSe24 - Praktikum Systementwurf - Spurpolynom
Autoren: | Yunkai Lin, Xiangyao Liu, Yuhan Pan |
Thema: | Spurpolynom |
Workshoptermin 9: | 20.06.2024 |
Lernzielkontrolle 3: | 04.07.2024 |
Einleitung
In diesem Workshop lernen Sie, wie Bilddaten von Fahrzeugkameras verarbeitet werden, um Fahrspuren zu erkennen und zu analysieren. Der Fokus liegt auf der Transformation von Bildkoordinaten in Fahrzeugkoordinaten und der Erstellung von Polynomen zur Darstellung der Fahrspur. Zudem wird die Berücksichtigung des Blindbereichs und die Ermittlung der Mittellinie für die Querregelung behandelt.
Spurpolynom
In diesem Abschnitt werden die grundlegenden Konzepte und Techniken zur Ermittlung von Spurpolynomen erläutert. Dies umfasst die Theorie der Polynombildung, die Transformation von Bild- zu Fahrzeugkoordinaten, die Berücksichtigung des Blindbereichs sowie die Ermittlung des Spurpolynoms für die Querregelung.
Beschreibung die Theorie der Polynombildung
Die Polynombildung ist ein Verfahren zur Annäherung oder Interpolation von Datenpunkten durch ein Polynom. Ein Polynom n-ten Grades hat die Form: Die Koeffizienten werden so bestimmt, dass die Summe der quadrierten Abweichungen minimiert wird (Methode der kleinsten Quadrate).
Beschreiben Sie die KOS-Trafo Bild- zu Fahrzeugkoordinaten
Die KOS-Transformation wandelt Bildkoordinaten (u, v) in Fahrzeugkoordinaten (X, Y, Z) um. Zuerst werden Bildkoordinaten in Kamerakoordinaten umgerechnet, dann werden diese in Fahrzeugkoordinaten transformiert unter Berücksichtigung der Kameraposition und -neigung.
Berücksichtigung des Blindbereichs
Der Blindbereich umfasst Bereiche, die von der Kamera nicht erfasst werden können. Um den Blindbereich zu berücksichtigen, werden nur sichtbare Bereiche des Bildes in die Fahrzeugkoordinaten transformiert und weiterverarbeitet, indem sie geometrisch berechnet und maskiert werden.
Wie wird das Spurpolynom für die Querregelung aus den Spurpolynomen der Fahrbahnmarkierungen ermittelt?
Das Spurpolynom für die Querregelung wird aus den Spurpolynomen der linken und rechten Fahrbahnmarkierungen berechnet. Die Mittellinie der Fahrspur wird als Mittelwert der Positionen der linken und rechten Fahrbahnmarkierungen bestimmt und anschließend durch ein Polynom approximiert, das geglättet wird, um eine stabile Querregelung zu ermöglichen.
PAP
PAP Ihrer Lösung
Programmablaufplan |
PAP Ihrer Lösung |
Quelltext
- MATLAB Quelltext Ihrer Lösung mit Header und Kommentaren.
- Beachten Sie die Programmierrichtlinien für MATLAB®.
zeigeSpurpolynom.m |
%****************************************************************
% Hochschule Hamm-Lippstadt *
%****************************************************************
% Modul : SDE-Praktikum *
% *
% Datum : 20.06.2024 *
% *
% Funktion : zeigeSpurpolynom *
% *
% Implementation : MATLAB 2024a *
% *
% Req. Toolbox : - *
% *
% Author : Yuhan Pan,Xiangyao Liu,Yuhnkai Lin *
% *
% Bemerkung : *
% *
% Letzte Änderung : 03.07.2024 *
% *
%***************************************************************/
%% MATLAB initialisieren
clc; clear all; close all;
%% Pfade einstellen und Parameter laden
addpath 'C:\Semesterordner\SS2024\Team_3_Liu_Pan_Lin\Termin_9\Aufgabe_6'
% Parameter einstellen
Kameraneigung = 10; % Kameraneigung, Einheit: Grad
Kamerahoehe = 27.5 / 100; % Kamerahöhe über Boden, Einheit: Meter
FahrzeugfrontKamera = 27 / 100; % Abstand von Fahrzeugfront bis Kamera, Einheit: Meter
Fahrzeugbreite = 20 / 100; % Fahrzeugbreite, Einheit: Meter
% Winkel in Radiant umrechnen
Kameraneigung_rad = deg2rad(Kameraneigung);
% Video und Auflösung laden
stDateiname = 'GeradeInKurve_IPT.mp4';
hVideo = VideoReader(stDateiname);
width = hVideo.Width;
height = hVideo.Height;
% Berechnung der tatsächlichen Entfernung pro Pixel
d_per_pixel = Fahrzeugbreite / width; % tatsächliche Entfernung pro Pixel, Einheit: Meter
% cell-array mit Fahrbahnmarkierungen laden
load('GeradeInKurve_Segmente.mat')
[~, nMaxBilder] = size(Fahrbahnmarkierung);
% Video-Schreibobjekt öffnen
outputVideo = VideoWriter('GeradeInKurve_Spurpolynom.mp4', 'MPEG-4');
open(outputVideo);
% Initialisierung der Matrix zur Speicherung der Polynomkoeffizienten
PolyCoeffsHistory = zeros(nMaxBilder, 3); % Angenommen, es gibt drei Koeffizienten für das quadratische Polynom
for nBild = 1:nMaxBilder % Schleife über alle Frames
aFrame = readFrame(hVideo); % Bild laden
%% Fahrspurmasken auslesen
Fahrbahn = Fahrbahnmarkierung{nBild};
aLinkeFahrspur = Fahrbahn(:,:,1);
aMittelFahrspur = Fahrbahn(:,:,2);
aRechteFahrspur = Fahrbahn(:,:,3);
%% Fahrspuren einfärben
% Farbkanäle trennen
R = aFrame(:,:,1);
G = aFrame(:,:,2);
B = aFrame(:,:,3);
% Grün
R(aLinkeFahrspur) = 0;
B(aLinkeFahrspur) = 0;
% Rot
G(aMittelFahrspur) = 0;
B(aMittelFahrspur) = 0;
% Gelb
B(aRechteFahrspur) = 0;
aRGBBild = cat(3, R, G, B); % Bild zusammenfügen
%% Fahrspuren in Vektoren kopieren
[yRechts, xRechts] = find(aRechteFahrspur);
[yMitte, xMitte] = find(aMittelFahrspur);
% Sicherstellen, dass die Stichprobenpunkte einzigartig sind
[yRechts, uniqueIdxRechts] = unique(yRechts);
xRechts = xRechts(uniqueIdxRechts);
[yMitte, uniqueIdxMitte] = unique(yMitte);
xMitte = xMitte(uniqueIdxMitte);
% Punkteanzahl ausgleichen
if length(xRechts) > 1 && length(xMitte) > 1
if length(xRechts) > length(xMitte)
xMitteInterp = interp1(yMitte, xMitte, yRechts, 'linear', 'extrap');
yMitteInterp = yRechts;
xRechtsInterp = xRechts;
yRechtsInterp = yRechts;
else
xRechtsInterp = interp1(yRechts, xRechts, yMitte, 'linear', 'extrap');
yRechtsInterp = yMitte;
xMitteInterp = xMitte;
yMitteInterp = yMitte;
end
% Berechnung der Mittellinie der rechten Fahrspur
xB = (xRechtsInterp + xMitteInterp) / 2;
yB = (yRechtsInterp + yMitteInterp) / 2;
% Umrechnung in Fahrzeugkoordinaten
xF = (xB - width / 2) * d_per_pixel; % Querkoordinate, Einheit: Meter
yF = (height - yB) * d_per_pixel; % Längskoordinate, Einheit: Meter
% Punkte in eine Matrix umwandeln
aWegpunkte = [xF'; yF'];
% Quadratische Polynominterpolation durchführen
PolynomKoeffizienten = interpoliereFahrspur(aWegpunkte, 2);
% Speicherung der aktuellen Polynomkoeffizienten
PolyCoeffsHistory(nBild, :) = PolynomKoeffizienten;
% Polynomkoeffizienten mit gleitendem Durchschnitt glätten
if nBild > 1
windowSize = 5; % Größe des gleitenden Durchschnittsfensters
for j = 1:3
startIdx = max(1, nBild - windowSize + 1);
PolyCoeffsHistory(nBild, j) = mean(PolyCoeffsHistory(startIdx:nBild, j));
end
end
%% Weiße Parabel zeichnen (Querregelung)
xVehicle = linspace(min(xF), max(xF), 100);
yFitQuer = polyval(PolyCoeffsHistory(nBild, :), xVehicle);
% Umrechnung der Fahrzeugkoordinaten in Bildkoordinaten
xVehicle_img = (xVehicle / d_per_pixel) + width / 2;
yFitQuer_img = height - (yFitQuer / d_per_pixel);
% Sicherstellen, dass die interpolierten Punkte im Bildbereich liegen
validIdxQuer = (yFitQuer_img >= 1) & (yFitQuer_img <= height);
for i = 1:length(xVehicle_img)
if validIdxQuer(i)
yCoord = round(yFitQuer_img(i)); % y-Wert in Bildkoordinaten umrechnen
if yCoord > 0 && yCoord <= height && round(xVehicle_img(i)) > 0 && round(xVehicle_img(i)) <= width
aRGBBild(yCoord, round(xVehicle_img(i)), 1) = 255; % R
aRGBBild(yCoord, round(xVehicle_img(i)), 2) = 255; % G
aRGBBild(yCoord, round(xVehicle_img(i)), 3) = 255; % B
end
end
end
end
% Ergebnis im Video speichern
writeVideo(outputVideo, aRGBBild);
end
% Video-Schreibobjekt schließen
close(outputVideo);
% Polynomkoeffizienten speichern
save('Spurpolynom.mat', 'PolyCoeffsHistory');
%% Hilfsfunktion
function PolynomKoeffizienten = interpoliereFahrspur(aWegpunkte, n)
% Berechnung der kleinsten Quadrate Lösung für die n-te Ordnung der Polynominterpolation
A = ones(size(aWegpunkte, 2), n + 1);
for k = 1:n
A(:, k) = aWegpunkte(1, :).^(n + 1 - k);
end
b = aWegpunkte(2, :)';
PolynomKoeffizienten = A \ b; % Kleinste Quadrate Lösung
end
|
Ergebnisse
- Darstellung der Ergebnisse
- Links zu den Arbeitsergebnissen
Analyse
Beschreibung | Das Problem ist.. | Das Problem ist nicht... |
---|---|---|
Was genau ist das Problem? | ||
Wo tritt das Problem auf? | Beispiel | Beispiel |
Wie zeigt sich das Problem? | Beispiel | Beispiel |
Wann tritt das Problem auf? | Beispiel | Beispiel |
Warum ist es ein Problem? | Beispiel | Beispiel |
Nr. | Beschreibung |
---|---|
1 | Warum? |
Nr. | Maßnahme | Verantwortung | Termin | Status |
---|---|---|---|---|
1 | Max Mustermann |
Hinweis: Die Maßnahmen müssen nicht umgesetzt werden.
Zusammenfassung
- Zusammenfassung
- Diskussion der Ergebnisse
- Ausblick
- Lessons Learned
Beantwortung der Lernzielkontrollfragen
1. Wie lassen sich die Spurpolynome für die 3 Segmente bestimmen?
Die Spurpolynome werden durch Extrahieren der Fahrspurpunkte und Anwenden der Methode der kleinsten Quadrate bestimmt.
2. Welche Vor- und Nachteile hat die Polynombildung?
Vorteile: Einfache Implementierung Flexibilität bei Kurvenformen
Nachteile: Oszillationen bei höhergradigen Polynomen Überanpassung Numerische Instabilität
3. Wie könnten die Nachteile behandelt werden?
Verwendung niedrigerer Polynome Einsatz von Spline-Interpolation Anwendung von Glättungstechniken
4. Wie lauten die Umrechnungsfaktoren Pixel in m in xF- und yF-Richtung?
xF-Richtung:Fahrzeugbreite / Bildbreite in Pixel yF-Richtung:(2 * (Kamerahöhe + Abstand zur Fahrzeugfront) * tan(Kameraneigung)) / Bildhöhe in Pixel
5. Wie wird der Blindbereich vorm Fahrzeug berücksichtigt?
Nur die sichtbaren Bereiche des Bildes werden transformiert und weiterverarbeitet.
6. Wie wird das Spurpolynom für die Querregelung aus den Spurpolynomen der Fahrbahnmarkierungen ermittelt?
Die Mittellinie wird als Mittelwert der Positionen der linken und rechten Fahrbahnmarkierungen bestimmt und durch ein Polynom approximiert.
→ zurück zum Hauptartikel: Praktikum SDE | SDE-Team 2024/25 | Lernzielkontrolle 3