AEP Gruppe B5 - SoSe17: Unterschied zwischen den Versionen
K (→Links) |
|||
(105 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
→ zurück zum Hauptartikel: [[Autonomes Fahren SoSe17|Informatikpraktikum 2 SoSe17]] | |||
---- | |||
[[Datei:Fahrzeug_Seite.jpg|400px|thumb|right|Seitenansicht des Fahrzeugs]] | |||
Das Modul Informatik 2 im zweiten Semester des Studiengangs Mechatronik beinhaltet ein Praktikum, das sich mit dem Thema des [https://de.wikipedia.org/wiki/Autonomes_Fahren autonomen Fahrens] beschäftigt. Dazu wurden die Aufgaben gestellt, ein Fahrzeug zu konstruieren (Lego) und einen Algorithmus zu implementieren, der dieses Fahrzeug autonom in einer Längsparklücke einparken lässt. Als Grundlage des technischen Aufbaus diente die Lego Mindstorms NXT Produktserie. Die Programmierung wurde mit der Software [https://de.wikipedia.org/wiki/Matlab Matlab] realisiert. | |||
== Team und Aufgabenverteilung == | == Team und Aufgabenverteilung == | ||
Anna Blankenstein: Programmierung, Dokumentation | [http://193.175.248.52/wiki/index.php/Benutzer:Anna_Blankenstein Anna Blankenstein]: Programmierung, Dokumentation | ||
[http://193.175.248.52/wiki/index.php/Benutzer:Felix_Bruchhage Felix Bruchhage]: Programmierung, Konstruktion, Lego Digital Designer | |||
[http://193.175.248.52/wiki/index.php/Benutzer:Luca_Di-Lillo#Kontakt Luca Di Lillo:] Programmierung, Konstruktion, Lego Digital Designer | |||
Zunächst musste ein PKW-Chassis mit Hilfe der Lego Mindstorm Komponenten aufgebaut werden. Dabei | == Hardware == | ||
Die Lenkung wurde über eine direkte Übersetzung mit einem Motor an der Lenkachse realisiert. Diese Lösung wurde gewählt um ein möglichst geringes Lenkspiel zu gewährleisten und um in der späteren Programmierung keine Umrechnung zwischen Motordrehung und Lenkwinkel berücksichtigen zu müssen. | Zunächst musste ein PKW-Chassis mit Hilfe der [https://de.wikipedia.org/wiki/Lego_Mindstorms Lego Mindstorm] Komponenten aufgebaut werden. Dabei sollte sich die Konstruktion möglichst nah an einem realen [[Datei:Differential besser.JPG|200px|thumb|right|NXT Motor mit Differential]]PKW orientieren. Das Fahrzeug verfügt über eine lenkbare Vorderachse, deren maximaler Lenkwinkel 40 ° beträgt. Als Antriebsachse wurde die Hinterachse gewählt. Zudem sollten ein [https://de.wikipedia.org/wiki/Ultraschall#Erzeugung_und_Registrierung_der_Ultraschallwellen Ultraschallsensor] sowie ein [https://de.wikipedia.org/wiki/Drehratensensor Gierratensensor] sinnvoll am Auto angebracht werden. | ||
Für einen kleineren Wendekreis wurde an der hinteren, angetriebenen Achse ein Differential angebracht. Dieses ermöglicht | Die Lenkung wurde über eine direkte Übersetzung mit einem Motor an der Lenkachse realisiert. Diese Lösung wurde gewählt, um ein möglichst geringes Lenkspiel zu gewährleisten und um in der späteren Programmierung keine Umrechnung zwischen Motordrehung und Lenkwinkel berücksichtigen zu müssen. | ||
Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt. Dieser wird genutzt um Abstände zu Objekten erfassen zu können. Er wird dazu eingesetzt, eine Parklücke zu erkennen. | Für einen kleineren Wendekreis wurde an der hinteren, angetriebenen Achse ein [https://de.wikipedia.org/wiki/Differentialgetriebe Differential] angebracht. Dieses ermöglicht, dass sich die Räder mit unterschiedlichen Geschwindigkeiten drehen können. | ||
Der Gyrosensor | Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt. Dieser wird genutzt, um Abstände zu Objekten erfassen zu können. Er wird dazu eingesetzt, eine Parklücke zu erkennen. Bei der Parklückenerkennung registriert er, wenn der seitliche Abstand groß genug ist, um einzuparken, und vermisst diesen Bereich automatisch beim Vorbeifahren. So kann er zudem erkennen, wann eine Parklücke ausreichend lang ist, bzw. wann sie zu schmal für den Einparkvorgang ist. | ||
Der Gyrosensor wurde waagerecht auf der anderen Seite möglichst nah am Fahrzeug-Schwerpunkt befestigt. Er detektiert geringste Winkeländerungen um die vertikale Achse und ermöglicht, eine geregelte Geradeausfahrt zu realisieren und zu erkennen, in welchem Winkel das Fahrzeug zur Fahrspur bzw. Parklücke steht. | |||
Die Motoren und Sensoren wurden mit dem Hauptrechner des Roboters, dem sog. NXT, verbunden. Dieser ist mittig auf dem Fahrzeug montiert, um ihn leicht zugänglich zu machen. | Die Motoren und Sensoren wurden mit dem Hauptrechner des Roboters, dem sog. NXT, verbunden. Dieser ist mittig auf dem Fahrzeug montiert, um ihn leicht zugänglich zu machen. | ||
==Fahrzeugparameter== | |||
{| class="wikitable" | |||
|- | |||
! style="width:50%"| Parameter !! style="width:40%"|Wert | |||
|- | |||
| Länge ||style="text-align:right"| 325 mm | |||
|- | |||
| Breite ||style="text-align:right"| 155 mm | |||
|- | |||
| Spurweite (vorn) ||style="text-align:right"| 155 mm | |||
|- | |||
| Spurweite (hinten) ||style="text-align:right"| 155 mm | |||
|- | |||
| Achsabstand ||style="text-align:right"| 240 mm | |||
|- | |||
| Max. Lenkeinschlag ||style="text-align:right"| 40 ° | |||
|- | |||
| Max. Geschwindigkeit ||style="text-align:right"| 0,40 m/s | |||
|} | |||
== Software == | |||
Als Software, um den Parkalgorithmus zu programmieren, wurde die Toolbox der RWTH Aachen in MATLAB genutzt. Dieses Programm ermöglicht es, Algorithmen zu entwickeln, die sowohl mit spezifischen Befehlen für den Lego-Rechner, als auch mit bekannten Kontrollstrukturen wie „for“- oder „while“-Schleifen aus Programmiersprachen wie C++ arbeiten. Im Vergleich zu den klassischen NXT Programmen, ist hier eine theoretisch unbegrenzte Programmgröße möglich. Des Weiteren bietet Matlab (Toolbox der RWTH Aachen) bereits implementierte komplexe numerische Funktionen und Algorithmen an, wie z.B. eine Routine für das Kalibrieren und Initialisieren des Gyroskops. Die erforderlichen Toolboxen und Bibliotheken lassen sich ganz einfach in der Programmierumgebung integrieren und nutzen. Hilfreich sind dabei auch die gut dokumentierten Befehlsbeschreibungen, die sich per Rechtsklick öffnen lassen, sowie die detailliert erläuterten Erklärungen und Beispiele, die sich auf der Internetseite der Firma [http://de.mathworks.com/ Mathworks] oder der [http://www.mindstorms.rwth-aachen.de/ RWTH Aachen] finden lassen. | |||
In den letzten beiden Terminen wurde die Programmier-Software geändert. Anstatt dem dateiorientierten, modularen Aufbau des Codes in MATLAB wurde nun das Simulationswerkzeug [https://de.wikipedia.org/wiki/Simulink Simulink] verwendet. Simulink ist eine Toolbox aus der Umgebung Matlab, die ein Editierfenster als Oberfläche bietet. Dort können sogenannte Funktionsblöcke per Drag and Drop eingefügt werden und logisch untereinander verbunden werden. Der Vorteil liegt darin, dass Simulink speziell konzipiert und daher gut geeignet ist für die Simulation dynamischer Systeme. Das Aussehen der programmierten Gesamtsysteme ähnelt den, aus der Systemtechnik bekannten, Blockschaltbildern, die zur Veranschaulichung von technischen Zusammenhängen verwendet werden. Da eine ergebnisreiche Realisierung mit Simulink aus Gründen der geringen Zeitfenster nicht mehr möglich war, entschieden wir unser Programm weiterhin mit Matlab zu gestalten. So konnten wir einige Verbesserungen umsetzen und den Algorithmus so zuverlässiger arbeiten lassen. | |||
== Einparkkonzept == | |||
'''Strategie zur Geradeausfahrt und Lückenerkennung''' | |||
Das Fahrzeug fährt zu Beginn parallel zu einer geraden Fahrspur. Damit keine ungewollten Querabweichungen entstehen, wird die Geradeausfahrt über Werte des Gyroskops geregelt und bei Bedarf gegengelenkt. Zur Ermittlung der Lenkgeschwindigkeit und -richtung, wird ein KI-[https://de.wikipedia.org/wiki/Regler Regler] eingesetzt (Berechnungsformel s.PAP Designer). | |||
Während dieser Geradeausfahrt detektiert das Fahrzeug über den Ultraschallsensor den Abstand zu Objekten, die sich rechts neben ihm befinden. Wird der Abstand groß genug für das seitliche Einparken, so wird angenommen, dass eine potentielle Parklücke beginnt. Zu diesem Zeitpunkt wird der interne Motor-[https://de.wikipedia.org/wiki/Drehgeber Drehgeber] zurückgesetzt. Er misst die gefahrene Strecke bis der zurückgelegte Weg 55 cm beträgt. Ist dieser Fall eingetreten, hat das Fahrzeug eine passende Lücke zum Einparken gefunden. | |||
Um das eventuell neben ihm stehende Fahrzeug nicht zu touchieren, fährt das Auto um ca. die halbe Fahrzeuglänge zusätzlich nach vorn. | |||
Wird ein nahestehendes Objekt erkannt, bevor die benötigte Parklückengröße gemessen wurde, wird die Parklücken-Suche unterbrochen und der Algorithmus startet von vorn. | |||
'''Strategie zum Einparken''' | |||
Nach der oben genannten ersten Phase des Einparkvorgangs wird bis zum maximalen Lenkeinschlag nach rechts eingelenkt. Im Anschluss beginnt die Rückwärtsfahrt. Hat das Fahrzeug einen Winkel von 40° bezogen auf seine Ausgangsposition erreicht, wird während des Fahrens maximal nach links eingelenkt. | |||
Das Fahrzeug stoppt, wenn es einen Winkel von 0° erreicht hat, also parallel zur Fahrspur in der Parklücke steht. Zum Schluss wird die Lenkung gerade ausgerichtet und bis zur Mitte der Lücke vorgefahren. Zu diesem Zeitpunkt endet das Programm. | |||
== | == Programmablaufpläne == | ||
[[Datei:Einparken Hauptprogramm(PAP).png|100px|Hauptprogramm]] | |||
[[Datei:Case 0 Lücke finden .png|400px|Case 0]] | |||
[[Datei:Case 1 Einparkvorgang (1).png|200px|Case 1]] | |||
[[Datei:Case 2 Einparkvorgang (2).png|200px|Case 2]] | |||
[[Datei:Case 3 Parkvorgang abschließen.png|200px|Case 3]] | |||
== Fazit == | |||
Durch das Informatik-Praktikum 2 konnten die Fertigkeiten in der Programmierung vertieft und an einem realitätsnahen Objekt angewendet werden. Außerdem flossen in dem Projekt mehrere Teilgebiete der Mechatronik zusammen. Es musste darauf geachtet werden, dass der mechanische Aufbau mit den elektronischen Komponenten und den später implementierten Algorithmen verträglich war. Weiterhin mussten wir uns bereits in Teile der [https://de.wikipedia.org/wiki/Regelungstechnik Regelungstechnik] einarbeiten. Die Lösungen für Teilprobleme und Aufgaben waren nicht immer leicht zu finden. Doch diese Schwierigkeiten verhalfen uns schließlich zu einem tieferen Verständnis und auch der Austausch mit Kommilitonen trug zu weiteren Verbesserungen bei. Durch die intensive Arbeit an dem Projekt konnten vielfältige Kenntnisse gewonnen werden. Diese Grundkenntnisse werden uns für die folgenden Semester weiterhin hilfreich sein. Auch die genutzten Programme werden häufig in der Industrie eingesetzt und können uns in unserem zukünftigen Beruf nützlich sein. | |||
---- | |||
→ zurück zum Hauptartikel: [[Autonomes Fahren SoSe17|Informatikpraktikum 2 SoSe17]] | |||
== Links == | |||
[https://svn.hshl.de/svn/Informatikpraktikum_2/trunk/Gruppen/SoSe2017/MTR_Inf2P_B5/Dokumente%20Abgabe/ SVN Ordner] | |||
== | |||
[https://www.youtube.com/watch?v=hsfd7uMgrEs&feature=youtu.be YouTube Video] |
Aktuelle Version vom 7. Juli 2017, 07:56 Uhr
→ zurück zum Hauptartikel: Informatikpraktikum 2 SoSe17
Das Modul Informatik 2 im zweiten Semester des Studiengangs Mechatronik beinhaltet ein Praktikum, das sich mit dem Thema des autonomen Fahrens beschäftigt. Dazu wurden die Aufgaben gestellt, ein Fahrzeug zu konstruieren (Lego) und einen Algorithmus zu implementieren, der dieses Fahrzeug autonom in einer Längsparklücke einparken lässt. Als Grundlage des technischen Aufbaus diente die Lego Mindstorms NXT Produktserie. Die Programmierung wurde mit der Software Matlab realisiert.
Team und Aufgabenverteilung
Anna Blankenstein: Programmierung, Dokumentation
Felix Bruchhage: Programmierung, Konstruktion, Lego Digital Designer
Luca Di Lillo: Programmierung, Konstruktion, Lego Digital Designer
Hardware
Zunächst musste ein PKW-Chassis mit Hilfe der Lego Mindstorm Komponenten aufgebaut werden. Dabei sollte sich die Konstruktion möglichst nah an einem realen
PKW orientieren. Das Fahrzeug verfügt über eine lenkbare Vorderachse, deren maximaler Lenkwinkel 40 ° beträgt. Als Antriebsachse wurde die Hinterachse gewählt. Zudem sollten ein Ultraschallsensor sowie ein Gierratensensor sinnvoll am Auto angebracht werden.
Die Lenkung wurde über eine direkte Übersetzung mit einem Motor an der Lenkachse realisiert. Diese Lösung wurde gewählt, um ein möglichst geringes Lenkspiel zu gewährleisten und um in der späteren Programmierung keine Umrechnung zwischen Motordrehung und Lenkwinkel berücksichtigen zu müssen. Für einen kleineren Wendekreis wurde an der hinteren, angetriebenen Achse ein Differential angebracht. Dieses ermöglicht, dass sich die Räder mit unterschiedlichen Geschwindigkeiten drehen können. Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt. Dieser wird genutzt, um Abstände zu Objekten erfassen zu können. Er wird dazu eingesetzt, eine Parklücke zu erkennen. Bei der Parklückenerkennung registriert er, wenn der seitliche Abstand groß genug ist, um einzuparken, und vermisst diesen Bereich automatisch beim Vorbeifahren. So kann er zudem erkennen, wann eine Parklücke ausreichend lang ist, bzw. wann sie zu schmal für den Einparkvorgang ist. Der Gyrosensor wurde waagerecht auf der anderen Seite möglichst nah am Fahrzeug-Schwerpunkt befestigt. Er detektiert geringste Winkeländerungen um die vertikale Achse und ermöglicht, eine geregelte Geradeausfahrt zu realisieren und zu erkennen, in welchem Winkel das Fahrzeug zur Fahrspur bzw. Parklücke steht. Die Motoren und Sensoren wurden mit dem Hauptrechner des Roboters, dem sog. NXT, verbunden. Dieser ist mittig auf dem Fahrzeug montiert, um ihn leicht zugänglich zu machen.
Fahrzeugparameter
Parameter | Wert |
---|---|
Länge | 325 mm |
Breite | 155 mm |
Spurweite (vorn) | 155 mm |
Spurweite (hinten) | 155 mm |
Achsabstand | 240 mm |
Max. Lenkeinschlag | 40 ° |
Max. Geschwindigkeit | 0,40 m/s |
Software
Als Software, um den Parkalgorithmus zu programmieren, wurde die Toolbox der RWTH Aachen in MATLAB genutzt. Dieses Programm ermöglicht es, Algorithmen zu entwickeln, die sowohl mit spezifischen Befehlen für den Lego-Rechner, als auch mit bekannten Kontrollstrukturen wie „for“- oder „while“-Schleifen aus Programmiersprachen wie C++ arbeiten. Im Vergleich zu den klassischen NXT Programmen, ist hier eine theoretisch unbegrenzte Programmgröße möglich. Des Weiteren bietet Matlab (Toolbox der RWTH Aachen) bereits implementierte komplexe numerische Funktionen und Algorithmen an, wie z.B. eine Routine für das Kalibrieren und Initialisieren des Gyroskops. Die erforderlichen Toolboxen und Bibliotheken lassen sich ganz einfach in der Programmierumgebung integrieren und nutzen. Hilfreich sind dabei auch die gut dokumentierten Befehlsbeschreibungen, die sich per Rechtsklick öffnen lassen, sowie die detailliert erläuterten Erklärungen und Beispiele, die sich auf der Internetseite der Firma Mathworks oder der RWTH Aachen finden lassen. In den letzten beiden Terminen wurde die Programmier-Software geändert. Anstatt dem dateiorientierten, modularen Aufbau des Codes in MATLAB wurde nun das Simulationswerkzeug Simulink verwendet. Simulink ist eine Toolbox aus der Umgebung Matlab, die ein Editierfenster als Oberfläche bietet. Dort können sogenannte Funktionsblöcke per Drag and Drop eingefügt werden und logisch untereinander verbunden werden. Der Vorteil liegt darin, dass Simulink speziell konzipiert und daher gut geeignet ist für die Simulation dynamischer Systeme. Das Aussehen der programmierten Gesamtsysteme ähnelt den, aus der Systemtechnik bekannten, Blockschaltbildern, die zur Veranschaulichung von technischen Zusammenhängen verwendet werden. Da eine ergebnisreiche Realisierung mit Simulink aus Gründen der geringen Zeitfenster nicht mehr möglich war, entschieden wir unser Programm weiterhin mit Matlab zu gestalten. So konnten wir einige Verbesserungen umsetzen und den Algorithmus so zuverlässiger arbeiten lassen.
Einparkkonzept
Strategie zur Geradeausfahrt und Lückenerkennung
Das Fahrzeug fährt zu Beginn parallel zu einer geraden Fahrspur. Damit keine ungewollten Querabweichungen entstehen, wird die Geradeausfahrt über Werte des Gyroskops geregelt und bei Bedarf gegengelenkt. Zur Ermittlung der Lenkgeschwindigkeit und -richtung, wird ein KI-Regler eingesetzt (Berechnungsformel s.PAP Designer). Während dieser Geradeausfahrt detektiert das Fahrzeug über den Ultraschallsensor den Abstand zu Objekten, die sich rechts neben ihm befinden. Wird der Abstand groß genug für das seitliche Einparken, so wird angenommen, dass eine potentielle Parklücke beginnt. Zu diesem Zeitpunkt wird der interne Motor-Drehgeber zurückgesetzt. Er misst die gefahrene Strecke bis der zurückgelegte Weg 55 cm beträgt. Ist dieser Fall eingetreten, hat das Fahrzeug eine passende Lücke zum Einparken gefunden. Um das eventuell neben ihm stehende Fahrzeug nicht zu touchieren, fährt das Auto um ca. die halbe Fahrzeuglänge zusätzlich nach vorn. Wird ein nahestehendes Objekt erkannt, bevor die benötigte Parklückengröße gemessen wurde, wird die Parklücken-Suche unterbrochen und der Algorithmus startet von vorn.
Strategie zum Einparken
Nach der oben genannten ersten Phase des Einparkvorgangs wird bis zum maximalen Lenkeinschlag nach rechts eingelenkt. Im Anschluss beginnt die Rückwärtsfahrt. Hat das Fahrzeug einen Winkel von 40° bezogen auf seine Ausgangsposition erreicht, wird während des Fahrens maximal nach links eingelenkt. Das Fahrzeug stoppt, wenn es einen Winkel von 0° erreicht hat, also parallel zur Fahrspur in der Parklücke steht. Zum Schluss wird die Lenkung gerade ausgerichtet und bis zur Mitte der Lücke vorgefahren. Zu diesem Zeitpunkt endet das Programm.
Programmablaufpläne
Fazit
Durch das Informatik-Praktikum 2 konnten die Fertigkeiten in der Programmierung vertieft und an einem realitätsnahen Objekt angewendet werden. Außerdem flossen in dem Projekt mehrere Teilgebiete der Mechatronik zusammen. Es musste darauf geachtet werden, dass der mechanische Aufbau mit den elektronischen Komponenten und den später implementierten Algorithmen verträglich war. Weiterhin mussten wir uns bereits in Teile der Regelungstechnik einarbeiten. Die Lösungen für Teilprobleme und Aufgaben waren nicht immer leicht zu finden. Doch diese Schwierigkeiten verhalfen uns schließlich zu einem tieferen Verständnis und auch der Austausch mit Kommilitonen trug zu weiteren Verbesserungen bei. Durch die intensive Arbeit an dem Projekt konnten vielfältige Kenntnisse gewonnen werden. Diese Grundkenntnisse werden uns für die folgenden Semester weiterhin hilfreich sein. Auch die genutzten Programme werden häufig in der Industrie eingesetzt und können uns in unserem zukünftigen Beruf nützlich sein.
→ zurück zum Hauptartikel: Informatikpraktikum 2 SoSe17