AEP Gruppe B3 - SoSe18: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
---- | ---- | ||
[[Datei:Auto.jpg|400px|thumb|right|Seitenansicht des Fahrzeugs]] | [[Datei:Auto.jpg|400px|thumb|right|Seitenansicht des Fahrzeugs]] | ||
Das Modul Informatik II im zweiten Semester des Studiengangs Mechatronik beinhaltet ein Praktikum, das sich mit dem Thema des | Das Modul Informatik II im zweiten Semester des Studiengangs Mechatronik beinhaltet ein Praktikum, das sich mit dem Thema des autonomen Fahrens beschäftigt hat. Dazu wurde die Aufgabe gestellt, ein Fahrzeug zu konstruieren (Lego) und einen Algorithmus zu programmieren, der dieses Fahrzeug autonom in einer Längsparklücke einparken lässt. Als Grundlage des technischen Aufbaus diente die Mindstorms NXT von Lego. Die Programmierung wurde mit der Software Matlab und Simunlink realisiert. | ||
Zeile 18: | Zeile 18: | ||
== Hardware == | == Hardware == | ||
Zunächst wurde ein PKW-Chassis mit Hilfe der | Zunächst wurde ein PKW-Chassis mit Hilfe der Lego Mindstorm Komponenten aufgebaut. Dabei sollte sich die Konstruktion möglichst nah an einem realen [[Datei:Differential1.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 Ultraschallsensor sowie ein Gierratensensor sinnvoll am Auto angebracht werden. | ||
Die Lenkung wurde über | Die Lenkung wurde über ein Schneckenradgetriebe, welches von einem Motor angesteuert wird, realisiert. Diese Lösung wurde gewählt, um ein möglichst geringes Lenkspiel zu gewährleisten und um eine möglichst feinfühlige Lenkung zu verwirklichen. | ||
Für einen kleineren Wendekreis wurde an der hinteren, angetriebenen Achse ein | 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. Hierbei dreht das Kurveninnere Rad langsamer wie das Kurvenäußere Rad. | ||
Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt | Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt. 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 Gyrosensor wurde waagerecht in mittiger Position auf dem Fahrzeug 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. | ||
Zeile 47: | Zeile 47: | ||
== Software == | == 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 | 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 | 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 == | == Einparkkonzept == | ||
Zeile 54: | Zeile 54: | ||
'''Strategie zur Geradeausfahrt und Lückenerkennung''' | '''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- | 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: Kp * Gierrate + Kd * Gierwinkel = Lenkpower). | ||
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- | 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 42 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. | Um das eventuell neben ihm stehende Fahrzeug nicht zu touchieren, fährt das Auto um ca. 5 cm 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. | 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. | ||
Zeile 63: | Zeile 63: | ||
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. | 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. | 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. | ||
==Programm-Ablauf-Plan== | |||
[[Datei:PaP Simulink Motor B.PNG|links|mini|Simulink Motor B]] | |||
[[Datei:PaP Simulink Motor A.PNG|links|mini|Simulink Motor B]] | |||
[[Datei:PaP Simulink Lenkung berechnen.PNG|links|mini|Simulink Geregelt fahren]] | |||
[[Datei:PaP Simulink Hauptprogram.PNG|links|mini|Simulink Hauptprogram]] | |||
[[Datei:Autonomes Einparken B3.png|links|mini|Matlab PaP]] | |||
== Fazit == | == 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 | 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. | ||
== Links == | |||
[https://svn.hshl.de/svn/Informatikpraktikum_2/trunk/Gruppen/SoSe2018/MTR_Inf2P_B3 Link-SVN] | |||
---- | ---- | ||
→ zurück zum Hauptartikel: [[Autonomes Fahren SoSe18|Informatikpraktikum 2 SoSe18]] | → zurück zum Hauptartikel: [[Autonomes Fahren SoSe18|Informatikpraktikum 2 SoSe18]] | ||
[https://youtu.be/eerl96zdAjg Youtube-Video] | |||
[https://youtu.be/eerl96zdAjg] |
Aktuelle Version vom 8. August 2018, 14:30 Uhr
→ zurück zum Hauptartikel: Informatikpraktikum 2 SoSe18
Das Modul Informatik II im zweiten Semester des Studiengangs Mechatronik beinhaltet ein Praktikum, das sich mit dem Thema des autonomen Fahrens beschäftigt hat. Dazu wurde die Aufgabe gestellt, ein Fahrzeug zu konstruieren (Lego) und einen Algorithmus zu programmieren, der dieses Fahrzeug autonom in einer Längsparklücke einparken lässt. Als Grundlage des technischen Aufbaus diente die Mindstorms NXT von Lego. Die Programmierung wurde mit der Software Matlab und Simunlink realisiert.
Team und Aufgabenverteilung
Marie Henning: Programmierung, Dokumentation
Hagen Heuer: Programmierung, Konstruktion, Lego Digital Designer
Sebastian Hoffmann: Programmierung, Konstruktion, Lego Digital Designer
Hardware
Zunächst wurde ein PKW-Chassis mit Hilfe der Lego Mindstorm Komponenten aufgebaut. 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 ein Schneckenradgetriebe, welches von einem Motor angesteuert wird, realisiert. Diese Lösung wurde gewählt, um ein möglichst geringes Lenkspiel zu gewährleisten und um eine möglichst feinfühlige Lenkung zu verwirklichen. 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. Hierbei dreht das Kurveninnere Rad langsamer wie das Kurvenäußere Rad. Der Ultraschallsensor wurde auf der rechten Seite im unteren Bereich des Chassis mittig zwischen den Achsen befestigt. 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 in mittiger Position auf dem Fahrzeug 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 | 245 mm |
Breite | 165 mm |
Spurweite (vorn) | 140 mm |
Spurweite (hinten) | 150 mm |
Achsabstand | 160 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: Kp * Gierrate + Kd * Gierwinkel = Lenkpower). 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 42 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. 5 cm 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.
Programm-Ablauf-Plan
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.
Links
→ zurück zum Hauptartikel: Informatikpraktikum 2 SoSe18