AEP Gruppe B3 - SoSe18: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 64: Zeile 64:
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.


'''Strategie zum Einparken'''
==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 ==

Version vom 6. Juli 2018, 13:05 Uhr

→ zurück zum Hauptartikel: Informatikpraktikum 2 SoSe18


Seitenansicht des Fahrzeugs

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

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 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

Simulink Motor B
Simulink Motor B
Simulink Geregelt fahren
Simulink Hauptprogram
Matlab PaP



















































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 SoSe18

Links

Link-SVN

Youtube-Video