Simulation statischer und dynamischer Ziele: Unterschied zwischen den Versionen
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 48: | Zeile 48: | ||
== Vorgehensweise == | == Vorgehensweise == | ||
# | # Das Erstellen\Plot der Fahrbahn in einer Figur erfolgt mit der Funktion PlotFahrbahn.m. | ||
Um die Fahrbahn in einer Figur darzustellen, sollte dazu eine Funktion names PostionDerObjekte.m angelegt, in der die | |||
für die Darstellung der Fahrbahn gebrauchten Funktionen und Befehle eingefügt werden sollten.Hier wurde die Fahrbahn | |||
mit Kreuzung( PAR_Modi_Schalter_Fahrbahn_int = 1;) ausgewählt. | |||
[[Datei:PlotFahrbahn.PNG|thumb|rechts|300px|Abbildung1:Das geplotete Fahrbahn]] | |||
<source line lang="matlab" style="font-size:small"> | |||
function []=PostionDerObjekte() | |||
%% Laden verschiedener Fahrbahnformen %%%%%%%%%%%%% | |||
% 0: Rundkurs ohne Kreuzung | |||
% 1: Rundkurs mit Kreuzung | |||
PAR_Modi_Schalter_Fahrbahn_int = 1; | |||
figure | |||
hold on | |||
plotFahrbahn() | |||
axis(gca,'equal'); | |||
xlabel('x in m'); | |||
ylabel('y in m'); | |||
end | |||
</source> | |||
# Auswahl von 6 Positinen per Mausklick auf der dargestellten Fahrbahn. | |||
Die Auswahl der Position mit Mausklick an der die Objekte erstellt werden sollen erfolgt | |||
mit der Funktion | |||
[[Datei:Auswahl_Position4.PNG|thumb|mitte|250px|Abbildung2:Auswahr 6 Positionen]] | |||
[a b]=ginput(). | |||
<source line lang="matlab" style="font-size:small"> | |||
[a, b] = ginput(nMaxObjekte) | |||
</source> | |||
# Speicherung ausgewählter Objekte in einer mat-File. | |||
Es ist harmlos, wenn die ausgewählten Optionen direkt in mat-Datei gespeichert werden, da die Optionen noch bearbeitet werden müssen.Wenn sich die Position Beispielweise am Rand der Fahrbahr befinden,sollen die zum einen nähsten zu der Mittelinie der inneren oder äußeren Fahrspur gehörigen Punkt wandert werden, diese Punkte können mit diesem Algorithmus gefunden werden. | |||
<source line lang="matlab" style="font-size:small"> | |||
Dist = sqrt((X-a(i)).^2+(Y-b(i)).^2); | |||
[~ , ObjIdx] = min(Dist) ; | |||
</source> | |||
Diese Punkte werden später als die Position der zu plotenden Objekte benutzt.Die X-Y Koordinaten von Mittelinie der äußeren Spur wurde schon unter FahrbahnMitKreuzung.mat gespeichert, dies braucht man nicht zu bestimmen.Ein Schwerpunkt ist die Mittelinie von der inneren Fahrspur zu finden ,dafür sind die folgenden Spalten zuständig,einschlägige Befehle sind am Anfang der gesamten Programmierung definiert. | |||
<source line lang="matlab" style="font-size:small"> | |||
%% ERzeugen der Mittlinie zwischen A und B | |||
iMax = length(PAR_SenKam_BahnZ_f64); | |||
X = PAR_SenKam_BahnZ_f64(1,:); X(1,iMax+1)=PAR_SenKam_BahnZ_f64(1,1); %Ende mit Anfang verbinden | |||
Y = PAR_SenKam_BahnZ_f64(2,:); Y(1,iMax+1)=PAR_SenKam_BahnZ_f64(2,1); %Ende mit Anfang verbinden | |||
% Schleife 黚er alle Datenpunkte | |||
for i=1:iMax | |||
Winkel_deg = atan2((Y(i+1)-Y(i)),(X(i+1)-X(i)))*180/pi; % Kurs | |||
n1=[sind(Winkel_deg);-cosd(Winkel_deg)]; % Normalenvektor | |||
ABmitte(:,i)=PAR_SenKam_BahnZ_f64(:,i)-0.41*n1; | |||
end | |||
save('MittelinieZwischenA_und_B','ABmitte'); | |||
X2=ABmitte(1,:); | |||
Y2=ABmitte(2,:); | |||
</source> | |||
[[Datei:ABmittelinie.PNG|thumb|250px|Abbildund3: Die Mittlinie der inneren Fahrspur]] | |||
# Die Objekte sollen auf den beiden Fahrbahnen erscheinen | |||
Um die Objekte auf beiden Fahrspruren zu setzen, muss festgestellt, | |||
auf welcher Spur die ausgewählten Position sich befinden,eine | |||
"for-Schleife" und ein Algorithmus dienen dazu. | |||
Die Schleife wird folgend beschrieben. | |||
<source line lang="matlab" style="font-size:small"> | |||
if Dist>=0.205 | |||
PAR_SenAbs_ObjektListe_f64(i,:) = [ i X2(ObjIdx) Y2(ObjIdx) 0.20 0.3 Ausrichtungswinkel_deg 0 100]; | |||
save('ObjektPlatzierung','PAR_SenAbs_ObjektListe_f64'); | |||
else | |||
PAR_SenAbs_ObjektListe_f64(i,:) = [ i X(ObjIdx) Y(ObjIdx) 0.20 0.3 Ausrichtungswinkel_deg 0 100]; | |||
save('ObjektPlatzierung','PAR_SenAbs_ObjektListe_f64'); | |||
end | |||
</source> | |||
[[Datei:Objekte.PNG|thumb|300px|Abbildung4:Objekte auf beisen Kursen]] | |||
== Fazit == | == Fazit == |
Aktuelle Version vom 21. Mai 2019, 10:54 Uhr
Autor: Wu (ehem. Liu)
Aufgabenstellung
- Meilenstein 1
- Einarbeitung in die Simulation
- Simulation statischer Ziele in beiden Kursen
- Erstellen Sie in SVN einen Entwicklungs-Zweig (Branch).
- Arbeiten Sie in einem Testordner unter
Demos/Hinzufuegen_von_statischen_Objekten
- Stellen Sie die Fahrbahn mit den vorhandenen Funktionen dar (siehe.
Demos\Darstellung_der_Fahrbahn\
) - Schreiben Sie eine GUI mit der Sie Objekte mit Mausklick in die Fahrbahn einfügen (
ginput
). - Berücksichtigen Sie die Krümmung der Kurve, so dass das Fahrzeug mittig in der Fahrbahn erscheint.
- Speichern Sie die Objekte in einer MAT-Datei (
save
). - Laden Sie die Objekte in der Offline-Simulation (
load
).
- Testdokumentation
- Dokumentation im Wiki
- Meilenstein 2
- Simulation dynamischer Ziele in beiden Kursen
- Testdokumentation
- Ziel an Kreuzung hat Vorfahrt
- Testdokumentation
- Dokumentation im Wiki
- Meilenstein 3
- Bau dynamischer Ziele
- Testdokumentation
- Dokumentation im Wiki
- Meilenstein 4
- inbetriebnahme dynamischer Ziele auf dem Testparkours
- Testdokumentation
- Dokumentation im Wiki
Autor: ehemals Wu (beendet)
Einleitung
Dieses Projekt wurde im Rahmen des Praktikums Systementwurf des Studiengangs Mechatronik an der Hochschule Hamm-Lippstadt durchgefuhrt. Das Projekt ist ein Teilbereich der OSE - Objekt- und Spurerkennung.Im diesen Artikel wird dargestellt,wie die statischen und statischen Objekte auf die Fahrbahn gesetzt und von Fahrzeug ausgeweicht werden können.
Anforderungen
Folgend werden Anforderungen aufgelistet:
- Darstellung\Simulation der Fahrbahn mit vorhandenen Funktionen in einer Figur (PlotFahrbahn.m)
- Auswahl von 6 Positinen per Mausklick auf der dargestellten Fahrbahn.
- Speicherung ausgewählter Objekte in einer mat-File.
- Hochladen der gespeicherten Objekte in die offline.m.
- Die Objekte\Hindernisse konnen auf beiden Fahrspuren erzeugt werden.
- Die Objekte\Hindernisse sollen mittig ausgerichtet werden.
- Kruemmung der Fahrbahn soll bei der Positionierung der Objekte berucksichtigt werden.
Vorgehensweise
- Das Erstellen\Plot der Fahrbahn in einer Figur erfolgt mit der Funktion PlotFahrbahn.m.
Um die Fahrbahn in einer Figur darzustellen, sollte dazu eine Funktion names PostionDerObjekte.m angelegt, in der die für die Darstellung der Fahrbahn gebrauchten Funktionen und Befehle eingefügt werden sollten.Hier wurde die Fahrbahn mit Kreuzung( PAR_Modi_Schalter_Fahrbahn_int = 1;) ausgewählt.
function []=PostionDerObjekte()
%% Laden verschiedener Fahrbahnformen %%%%%%%%%%%%%
% 0: Rundkurs ohne Kreuzung
% 1: Rundkurs mit Kreuzung
PAR_Modi_Schalter_Fahrbahn_int = 1;
figure
hold on
plotFahrbahn()
axis(gca,'equal');
xlabel('x in m');
ylabel('y in m');
end
- Auswahl von 6 Positinen per Mausklick auf der dargestellten Fahrbahn.
Die Auswahl der Position mit Mausklick an der die Objekte erstellt werden sollen erfolgt mit der Funktion
[a b]=ginput().
[a, b] = ginput(nMaxObjekte)
- Speicherung ausgewählter Objekte in einer mat-File.
Es ist harmlos, wenn die ausgewählten Optionen direkt in mat-Datei gespeichert werden, da die Optionen noch bearbeitet werden müssen.Wenn sich die Position Beispielweise am Rand der Fahrbahr befinden,sollen die zum einen nähsten zu der Mittelinie der inneren oder äußeren Fahrspur gehörigen Punkt wandert werden, diese Punkte können mit diesem Algorithmus gefunden werden.
Dist = sqrt((X-a(i)).^2+(Y-b(i)).^2);
[~ , ObjIdx] = min(Dist) ;
Diese Punkte werden später als die Position der zu plotenden Objekte benutzt.Die X-Y Koordinaten von Mittelinie der äußeren Spur wurde schon unter FahrbahnMitKreuzung.mat gespeichert, dies braucht man nicht zu bestimmen.Ein Schwerpunkt ist die Mittelinie von der inneren Fahrspur zu finden ,dafür sind die folgenden Spalten zuständig,einschlägige Befehle sind am Anfang der gesamten Programmierung definiert.
%% ERzeugen der Mittlinie zwischen A und B
iMax = length(PAR_SenKam_BahnZ_f64);
X = PAR_SenKam_BahnZ_f64(1,:); X(1,iMax+1)=PAR_SenKam_BahnZ_f64(1,1); %Ende mit Anfang verbinden
Y = PAR_SenKam_BahnZ_f64(2,:); Y(1,iMax+1)=PAR_SenKam_BahnZ_f64(2,1); %Ende mit Anfang verbinden
% Schleife 黚er alle Datenpunkte
for i=1:iMax
Winkel_deg = atan2((Y(i+1)-Y(i)),(X(i+1)-X(i)))*180/pi; % Kurs
n1=[sind(Winkel_deg);-cosd(Winkel_deg)]; % Normalenvektor
ABmitte(:,i)=PAR_SenKam_BahnZ_f64(:,i)-0.41*n1;
end
save('MittelinieZwischenA_und_B','ABmitte');
X2=ABmitte(1,:);
Y2=ABmitte(2,:);
- Die Objekte sollen auf den beiden Fahrbahnen erscheinen
Um die Objekte auf beiden Fahrspruren zu setzen, muss festgestellt, auf welcher Spur die ausgewählten Position sich befinden,eine "for-Schleife" und ein Algorithmus dienen dazu. Die Schleife wird folgend beschrieben.
if Dist>=0.205
PAR_SenAbs_ObjektListe_f64(i,:) = [ i X2(ObjIdx) Y2(ObjIdx) 0.20 0.3 Ausrichtungswinkel_deg 0 100];
save('ObjektPlatzierung','PAR_SenAbs_ObjektListe_f64');
else
PAR_SenAbs_ObjektListe_f64(i,:) = [ i X(ObjIdx) Y(ObjIdx) 0.20 0.3 Ausrichtungswinkel_deg 0 100];
save('ObjektPlatzierung','PAR_SenAbs_ObjektListe_f64');
end