Projekt 27: Carolo-Cup: Unterschied zwischen den Versionen
(61 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 72: | Zeile 72: | ||
=Schematische Übersicht= | =Schematische Übersicht= | ||
[[Datei:Übersicht.png|400px|Fahrzeugübersicht]] | [[Datei:Übersicht.png||400px|Fahrzeugübersicht]] | ||
• Kamera erhält Input über Aufnahme der Umgebung | • Kamera erhält Input über Aufnahme der Umgebung | ||
• Raspberry verarbeitet die Kameradaten und übergibt via RS232-Schnittstelle relevante Daten zum Arduino | • Raspberry verarbeitet die Kameradaten und übergibt via UART/RS232-Schnittstelle relevante Daten zum Arduino | ||
• Arduino verarbeitet die erhaltenen Daten und wandelt diese in Lenk- und Fahrsignale für die Aktoren um | • Arduino verarbeitet die erhaltenen Daten und wandelt diese in Lenk- und Fahrsignale für die Aktoren um | ||
• Wird der RC-Modus aktiviert, erhält der Empfänger direkte Lenk- und Fahrsignale von der Fernbedienung, welche sofort an die entsprechenden Aktoren weitergeleitet werden | • Wird der RC-Modus aktiviert, erhält der Empfänger direkte Lenk- und Fahrsignale von der Fernbedienung, welche sofort an die entsprechenden Aktoren weitergeleitet werden | ||
Zeile 82: | Zeile 82: | ||
=Technische Übersicht= | =Technische Übersicht= | ||
Nachfolgend die technischen Daten und verbauten Komponenten des autonomen Fahrzeugs. | Nachfolgend die technischen Daten und verbauten Komponenten des autonomen Fahrzeugs.<br/> | ||
<br/> | |||
==Daten rund ums Fahrzeug== | ==Daten rund ums Fahrzeug== | ||
Zeile 121: | Zeile 122: | ||
=Software= | =Software= | ||
Das Software-Team hat sich mit der Entwicklung eines einfachen Fahrspurerkennungs- und Verfolgungs-Algorithmus befasst.<br/> | Das Software-Team hat sich mit der Entwicklung eines einfachen Fahrspurerkennungs- und Verfolgungs-Algorithmus befasst. | ||
Zusätzliche war der Aufbau einer Kommunikationsschnittstelle zwischen Raspberry und Arduino in Abstimmung mit dem anderen Team ein wichtiger Bestandteil.<br/> | |||
<br/> | <br/> | ||
Zeile 169: | Zeile 171: | ||
====Datenübertragung an Arduino==== | ====Datenübertragung an Arduino==== | ||
Die Datenübertragung an den Arduino erfolgt seriell mit einer Baudrate von 9600 Baud über die RS232-Schnittstelle. Vor der Datenübertragung wird die Soll-Geschwindigkeit des Fahrzeuges in Abhängigkeit vom Soll-Lenkwinkel ermittelt. Die Übertragung erfolgt in einem 32 Byte großen Datensatz, in welchem Platz für zukünftige Datensätze bereits eingeplant ist (siehe Schnittstellenbeschreibung). | Die Datenübertragung an den Arduino erfolgt seriell mit einer Baudrate von 9600 Baud über die RS232-Schnittstelle. Vor der Datenübertragung wird die Soll-Geschwindigkeit des Fahrzeuges in Abhängigkeit vom Soll-Lenkwinkel ermittelt. Die Übertragung erfolgt in einem 32 Byte großen Datensatz, in welchem Platz für zukünftige Datensätze bereits eingeplant ist (siehe Schnittstellenbeschreibung). | ||
<br/> | |||
==Weiteres== | |||
[[Datei:testaufbau.jpg|thumb|links|600px|Testaufbau auf der Abschlussmesse]] | |||
===Testaufbau=== | ===Testaufbau=== | ||
Zu Testzwecken sowie Konfiguration der Parameter erfolgte ein Testaufbau. Für diesen wurde ein Video einer Autobahnfahrt auf einem Bildschirm abgespielt und das Fahrzeug davor platziert. Mit einem, an den Raspberry Pi angeschlossenen, Bildschirm erfolgte die Auswertung und Parametrierung des implementierten Fahrspurerkennungs-Algorithmus. | Zu Testzwecken sowie Konfiguration der Parameter erfolgte ein Testaufbau. Für diesen wurde ein Video einer Autobahnfahrt auf einem Bildschirm abgespielt und das Fahrzeug davor platziert. Mit einem, an den Raspberry Pi angeschlossenen, Bildschirm erfolgte die Auswertung und Parametrierung des implementierten Fahrspurerkennungs-Algorithmus. | ||
<br/> | |||
===Besondere Herausforderungen=== | ===Besondere Herausforderungen=== | ||
Als besonders große Herausforderung stellte sich die Installation der Tiefenbildkamera von ASUS heraus. Nach Installation der OpenNI-Bibliotheken liessen sich zwar Tiefenbildinformationen auslesen, jedoch wurde die RGB-Kamera nicht als solche im Linux-System erkannt. Nach einigen fehlgeschlagenen Installationsversuchen und manuellen Treiber-Kompilierungen wurde auf eine Lösung via Webcam zurückgegriffen um den Projektablauf nicht zu gefährden. | Als besonders große Herausforderung stellte sich die Installation der Tiefenbildkamera von ASUS heraus. Nach Installation der OpenNI-Bibliotheken liessen sich zwar Tiefenbildinformationen auslesen, jedoch wurde die RGB-Kamera nicht als solche im Linux-System erkannt. Nach einigen fehlgeschlagenen Installationsversuchen und manuellen Treiber-Kompilierungen wurde auf eine Lösung via Webcam zurückgegriffen um den Projektablauf nicht zu gefährden.<br/> | ||
<br/> | <br/> | ||
=Hardwareaufbau= | =Hardwareaufbau= | ||
[[Datei:4_hardware.png| | [[Datei:4_hardware.png|thumb|200px|rechts|Hardwareaufbau auf Fahrzeug]] | ||
===Planung=== | ===Planung=== | ||
Zeile 197: | Zeile 191: | ||
Vor Beginn der Tätigkeiten wurde ein Konzept des Autonomen Fahrzeuges ausarbeitet, dies beinhaltet die Systemkomponenten wie Arduino Mega 2560 und Raspberry Pi 2, Aktorik wie den Lenk-Servo und Fahrtreiber und Sensorik, wie der Fernbedienungsempfänger, Fahrencoder und Infrarot Abstandssensoren. Bei der Übertragungsphysik der Schnittstelle zwischen Arduino und Raspberry bieten sich verschiedene Möglichkeiten:<br/> Neben dem I²C Bus steht auch eine UART Schnittstelle zur Verfügung. Aufgrund der Erfahrungen bei vorangegangen Projekten und der einfacheren Software-Implementierung auf beiden Seiten wurde die UART-Schnittstelle als Übertragungshartware gewählt. Die Spannungsversorgung des Raspberry sowie des Arduino soll über eine USB Powerbank realisiert werden, die Versorgung des Antriebes aus einem RC-Batterypack. Der Arduino soll in diesem Konzept als IO-Schnittstelle fungieren, der Raspberry soll die Auswertung der Kamera durchführen und die gesamte Regelung des Fahrzeuges übernehmen. | Vor Beginn der Tätigkeiten wurde ein Konzept des Autonomen Fahrzeuges ausarbeitet, dies beinhaltet die Systemkomponenten wie Arduino Mega 2560 und Raspberry Pi 2, Aktorik wie den Lenk-Servo und Fahrtreiber und Sensorik, wie der Fernbedienungsempfänger, Fahrencoder und Infrarot Abstandssensoren. Bei der Übertragungsphysik der Schnittstelle zwischen Arduino und Raspberry bieten sich verschiedene Möglichkeiten:<br/> Neben dem I²C Bus steht auch eine UART Schnittstelle zur Verfügung. Aufgrund der Erfahrungen bei vorangegangen Projekten und der einfacheren Software-Implementierung auf beiden Seiten wurde die UART-Schnittstelle als Übertragungshartware gewählt. Die Spannungsversorgung des Raspberry sowie des Arduino soll über eine USB Powerbank realisiert werden, die Versorgung des Antriebes aus einem RC-Batterypack. Der Arduino soll in diesem Konzept als IO-Schnittstelle fungieren, der Raspberry soll die Auswertung der Kamera durchführen und die gesamte Regelung des Fahrzeuges übernehmen. | ||
<br/> | <br/> | ||
[[Datei:Halterung2.jpeg|thumb|200px|rechts|KFZ-Nagivationssystem Halterung]] | |||
===Aufbau und Grundplatte=== | ===Aufbau und Grundplatte=== | ||
Zur Befestigung der Bauteile | Zur Befestigung der Bauteile wurde eine Trägerplatte konstruiert und gefertigt. Die Montage der Kamera sollte ebenfalls auf dieser Platte erfolgen. Die Kunstoffplatte ist die Basis des Fahrzeugaufbaus. Gefertigt wurde die Grundplatte aus PVC in einer Stärke von 5mm im zerspanenden Verfahren. Die Aufnahme der Kunstoffplatte wurde an die vorhandenen Bohrungen des RC-Fahrzeuges angepasst. Somit ist diese sehr leicht mit Abstandsbolzen montierbar ohne das Fahrzeug selbst zu verändern. Die Grundplatte trägt alle neuen Komponenten des Carolo-Cup-Fahrzeuges. Die Kamera ist dabei auf einem kleinen Turm befestigt. Um ein leichtes Aufsetzen der Fahrzeughaube zu ermöglichen, wird die Kamera mit einem KFZ-Navigationssystem Halterung Clip befestigt. Diese ermöglicht das leichte und dabei zugleich wiederholgenaue Abnehmen der XTion Kamera. Als Position für die Kamera-Halterung wurde eine Montage in der Nähe des Differentials vorgesehen. Dadurch ist die Kamera weniger Störungen durch Antriebs- und Lenkeinflüsse ausgesetzt und das Kamerabild damit deutlich stabiler, als bei einer Positionierung über der Vorderachse. Die Abbildung "Hardwareaufbau" rechts zeigt alle montierten Komponenten. | ||
<br/> | <br/> | ||
[[Datei:Stepdown.jpeg|thumb|200px|rechts|Einheitliches Spannungslevel herstellen mit Stepdown-Wandler]] | |||
===Verdrahtung der Komponenten=== | ===Verdrahtung der Komponenten=== | ||
Die Sensorik und Aktorik des Fahrzeuges erfolgt über den Arduino. Um eine leichtere Verdrahtung sowie die Spannungsversorgung und die Beschaltung der Komponenten zu ermöglichen wurde ein Prototyping-Shield für den Arduino Mega 2560 eingesetzt. Auf dem Prototyping-Shield wurden auch 2 Debug LEDs sowie ein Spannungsteiler zum Aufnehmen der Akkuspannung des Fahrmotors aufgebaut. Die am Anfang geplante Spannungsversorgung des Arduino und des Raspberry mittels Powerbank wurde aufgrund Verdrahtungs und Leistungsproblemen auf eine Versorgung von dem Fahrakku mittels Step-Down Wandler umgestellt. Dieser ermöglich eine | Die Sensorik und Aktorik des Fahrzeuges erfolgt über den Arduino. Um eine leichtere Verdrahtung sowie die Spannungsversorgung und die Beschaltung der Komponenten zu ermöglichen wurde ein Prototyping-Shield für den Arduino Mega 2560 eingesetzt. Auf dem Prototyping-Shield wurden auch 2 Debug LEDs sowie ein Spannungsteiler zum Aufnehmen der Akkuspannung des Fahrmotors aufgebaut. Die am Anfang geplante Spannungsversorgung des Arduino und des Raspberry mittels Powerbank wurde aufgrund Verdrahtungs und Leistungsproblemen auf eine Versorgung von dem Fahrakku mittels Step-Down Wandler umgestellt. Dieser ermöglich eine stabilisierte Spannungsversorgung mit konstanten 5V-DC Spannung bei einer maximalen Leistung von 50W→→10A. Die Anschlüsse der Aktorik wurde in Stecker-Bauweise ermöglich um ein leichtes Arbeiten an Einzelkomponenten und die Demontage der Trägerplatte zu ermöglichen. So viele Stecker mit dem Poka-Yoke-System wurden verwendet, um ein falsches Anschließen durch fachfremde Personen zu vermeiden.. | ||
<br/> | <br/> | ||
===Fernsteuerung=== | |||
Beim Einschalten der 40 MHz Fernbedienung (2.4 GHz sind nach CaroloCup-Regelwerk nicht zulässig) springt der Arduino sofort in eine Remote-Control-Schleife und verarbeitet nur noch die am 40 MHz Empfänger eingehenden Signale, ohne dabei die Lenk- und Steuersignale der Schnittstelle zu verarbeiten. Der RC-Modus ist ebenfalls vorgeschrieben und dient dazu, bei Problemen mit dem Programm schnell ein möglicherweise zur Gefahr werdendes Fahrzeug unter Kontrolle zu bringen oder sauber zu manövrieren. | |||
<br/> | |||
===Besondere Herausforderungen=== | |||
Die im nachhinein festgestellte Betriebsspannungs-Differenz zwischen Arduino und Raspberry 5V←→3,3V wurde mittels eine universellem Pegelwandler gelöst. Auch der RC-Fernbedienungsempfänger, der zwar eine Betriebsspannung von 5V hat, aber leider ein Signalpegel von 3,1 V aufweist wurde mit so einem Pegelwandler, erfolgreich an den Arduino angebunden. Weitere besondere Herausforderungen waren die kompakte Positionierung der Hardwarekomponenten, damit die Porsche-Verkleidung immer aufsetzbar bleibt. Zusätzlich wurde auf eine neutrale, im besten Falle 50:50 Gewichtsverteilung geachtet, um beste Fahreigenschaften gewährleisten zu können. Durch die niedrige Montage des LiPo-Akkus und der Aktoren erhalten wir einen sehr tiefen Schwerpunkt, also eine sichere, sportliche Straßenlage. Zusammen mit der genauen und präzisen Ansteuerung der Motoren bietet das Fahrzeug nun eine gute bis sehr gute Grundlage, um in Zukunft an dem CarloloCup-Wettbewerb teilnehmen zu können.<br/> | |||
<br/> | |||
== | =Aktueller Projektstand= | ||
Im 1. Quartal 2016, also mit Endes des GET-Fachpraktikums WS2015/2016, hat diese autonome Fahrzeug nun folgende technische Eigenschaften. | |||
Das Auto kann über eine Kamera empfangene Bilddaten auswerten und Abweichungen vom Soll-Wert direkt in Steuersignale umwandeln. Ein echter Regelkreis ist noch nicht implementiert. Die Steuerbefehle werden ausgeführt, also setzen die Motoren die Räder in Bewegung bzw. sorgen für Lenkeinschläge. Über Eingriffe durch die Fernbedienung ist das Fahrzeug frei vom Bediener aus steuerbar. Die Hardware ist verkabelt, dass Umbaumaßnahmen schnell und unkompliziert durchgeführt werden können. Das Auto ist als fahrbereit (ohne Regelung) zu bezeichnen, wobei von einer Fahrt über Kameradaten abzuraten ist, da je nach Oberfläche/ Reflexion der Wagen schnell zur Gefahr werden kann. Eine Steuerung über die Fernbedienung ist jederzeit möglich.<br/> | |||
<br/> | |||
=Ausblick= | |||
=== | ===Hardwareseitig=== | ||
*Fahrmotor-Encoder einbinden<br/> | *Fahrmotor-Encoder einbinden<br/> | ||
* | *Spur-/Sturz des Fahrwerks einstellen<br/> | ||
*Stoßdämpfer abstimmen<br/> | |||
*Aktuelle Geschwindigkeit/ Umdrehungen einlesen<br/> | |||
*Infrarot-Abstandssensoren implementieren<br/> | |||
*Fahrzeugbeleuchtung einbauen<br/> | *Fahrzeugbeleuchtung einbauen<br/> | ||
<br/> | |||
===Softwareseitig=== | |||
*Implementierung der AsusXtion Pro Live | |||
*Optimierung des Fahrspurerkennungs-Algorithmus | |||
*Sensorwerte einlesen und auswerten | |||
*Regelungskreis implementieren | |||
*Filter optimieren (z.B. Kalman-Filter) | |||
*Verteilung der Arbeitslast auf mehrere Prozessorkerne | |||
*Kamera-Kalibrierung | |||
*Optimierung der Fahrspurerkennung auf kurvigen Streckenabschnitten<br/> | |||
<br/> | <br/> | ||
Zeile 227: | Zeile 248: | ||
*Erweiterte Kenntnisse der Signaltechnik | *Erweiterte Kenntnisse der Signaltechnik | ||
*Bedienung der Linux-Konsole<br/> | *Bedienung der Linux-Konsole<br/> | ||
<br/> | |||
= Gesamtfazit= | |||
Nachdem nun dieses Projekt als abgeschlossen zählt, ist es angebracht noch ein Fazit zu ziehen, um Leser und Leserinnen die spannenden und interessanten, aber auch herausfordernden Anteile dieses Projektes vorzustellen. | |||
Im Gegensatz zu vielen anderen Gruppen, wurde dieses Team vor ein neues Projekt gestellt. Es gab nur wenige Möglichkeiten, Verknüpfungen zu anderen Projekten herzustellen und diese als Ressource zu nutzen. Dies war aber auch zugleich das Interessante und Spannende an diesem Thema, da man selber etwas erschafft, was identisch zu dem sein wird, wie man es selbst geplant hat. Man ist für sein Projektziel 100% selbst als Team verantwortlich, ohne Einflüsse von Vorgängern. Ein wesentlicher Vorteil war, dass man sich nicht in das Gedankengut einer vorherigen Gruppe einarbeiten musste und Stunde um Stunde investieren musste, um das Schema zu verstehen. Herausfordernd war natürlich das breite Spektrum an Aufgaben. Projektmanagement, Löten, Zerspanen, Programmieren, Signaltests etc. sind hierfür beispielhaft zu nennen. Durch eine gute Gruppenorganisation konnten die Projektziele aber erfolgreich erreicht werden. Wir blicken nun auf ein sauber konzipiertes Fahrzeug, welches eine gute Grundlage für den Wettbewerb bietet. | |||
Die Intention dieses Projektes ist definitiv, dieses nicht in einem Schrank stehen zu lassen, damit es gut aussieht, sondern, dass effektiv Studenten dran arbeiten und, wie diese Gruppe auch, viel Freunde und Interesse an Mechatronik haben.<br/> | |||
<br/> | <br/> | ||
Aktuelle Version vom 6. Februar 2016, 08:21 Uhr
Das Projekt 27: Carolo-Cup des Fachpraktikum Elektrotechnik (WS 15/16) im fünften Semester des Studiengangs Mechatronik dient der
ersten Planung und Entwicklung eines neuen autonomen Fahrzeugs. Hiermit wird eine solide Basis für die Teilnahme am CaroloCup-Wettbewerb geschaffen.
Autoren: Hendrik Buchheister, Gerhard Dick, Kai Jacobs, Rainer Heither, Pascal Siekmann
Betreuer: Prof. Schneider, Prof. Göbel
Vorwort
Das Projekt 27 in diesem Praktikum hatte das Ziel eine solide Grundlage für eine spätere Teilnahme am CaroloCup zu entwickeln.
Daher wurden sämtliche, bisher stattgefundene Aufbau- und Programmiermaßnahmen nach den Richtlinien des Wettbewerbes durchgeführt.
Die Inhalte der Grundlagendefinition ist unter “Erwartungen an die Projektlösung" aufzufinden.
Für die Durchführung dieses Projektes stand ein neues RC-Serienfahrzeug als Abbild eines Porsche GT3 im Maßstab 1:10 zur Verfügung.
Übersicht der Gruppeneinteilung
Das Projektteam 27 wurde von den Verantwortlichen in folgende, zwei Untergruppen unterteilt:
Team Arduino
Team Raspberry
Erwartungen an die Projektlösung
Folgende Erwartungen wurden zusammen mit den Professoren abgestimmt:
- Raspberry 2 zur Bildverarbeitung
- Implementierung einer Asus Xtion Kamera
- Arduino Mega 2560 als IO Schnittstelle
- Hardwareaufbau auf RC-Chassis
- Ansteuerung Lenk-Servo und Fahrtreiber
- Implementierung Fernbedienungs-Empfänger an Arduino
- Entwicklung der Kommunikationsschnittstelle zwischen Arduino und Raspberry 2
Meilensteinplan
Der Projektverlauf lässt sich übersichtlich in einem Gantt-Chart/ Meilensteinplan darstellen.
Hardware-Meilensteine
- Planung und Bestellung
- Entwicklung einer Kommunikationsschnittstelle
- Konstruktion und Fertigung der Grundplatte
- Bau einer einfach demontierbaren Kamerahalterung
- Montage aller Komponenten auf dem Fahrzeug
- Verkabelung sämtlicher Komponenten
- Erste Ansteuerung der Lenk- und Fahrmotoren
Software-Meilensteine
- Planung und Bestellung
- Entwicklung einer Kommunikationsschnittstelle
- Umfangreiche Programmierarbeiten
- Sicherstellen und Einpegeln der Spannungsversorgung
- Implementierung der Asus Xtion Kamera
- Implementierung des RC- Empfängers
- Erste Tests und Simulationen der Fahrspurerkennung
Schematische Übersicht
• Kamera erhält Input über Aufnahme der Umgebung • Raspberry verarbeitet die Kameradaten und übergibt via UART/RS232-Schnittstelle relevante Daten zum Arduino • Arduino verarbeitet die erhaltenen Daten und wandelt diese in Lenk- und Fahrsignale für die Aktoren um • Wird der RC-Modus aktiviert, erhält der Empfänger direkte Lenk- und Fahrsignale von der Fernbedienung, welche sofort an die entsprechenden Aktoren weitergeleitet werden
Technische Übersicht
Nachfolgend die technischen Daten und verbauten Komponenten des autonomen Fahrzeugs.
Daten rund ums Fahrzeug
Daten | Wert |
---|---|
Maßstab | 1:10 |
Abmessungen | L46xB19xH26 cm |
Motorleistung | 149 Watt |
Akku-Kapazität | 2200 mAh |
Gewicht | 1900 g |
Extras | Lanetracking, Remote Control |
Komponentenliste
• Maßstab 1:10 Porsche GT3 RS-Chassis • Asus Xtion Pro Live (Kamera) • Raspberry Pi 2 Model B • Arduino Mega 2560 • Arduino Prototyping Shield • Hacker Skalar 10 21.5T (Fahrmotor) • Hacker Tensoric 10 (Fahrtreiber) • LPR R- 7030 (Lenkmotor) • LiPo 11.1V 2200 mAh (Sekundärzelle) • Stepdown- Wandler • Futaba R143 F 40 MHz RC- Empfänger • Futaba T4EXA 40 MHz (Fernbedienung)
Software
Das Software-Team hat sich mit der Entwicklung eines einfachen Fahrspurerkennungs- und Verfolgungs-Algorithmus befasst.
Zusätzliche war der Aufbau einer Kommunikationsschnittstelle zwischen Raspberry und Arduino in Abstimmung mit dem anderen Team ein wichtiger Bestandteil.
Planung
Vor dem Start des Projektes erfolgten umfangreiche Recherchearbeiten zu dem Thema Fahrspurerkennung und –verfolgung. Hierbei wurden bereits entwickelte Algorithmen auf ihre Funktion untersucht, woraus sich ein allgemeines Vorgehen für die Fahrspurerkennung ableiten ließ. Anhand dieser Informationen wurde ein eigener, einfacher Algorithmus entwickelt, um erste Erfahrungen in der Thematik zu sammeln. Im Abschnitt Programmablauf wird der geplante Algorithmus näher erläutert.
Weil die Ansteuerung sämtlicher Hardware-Bauteile (Motoren, Sensoren, Fernbedienung) über einen Arduino Mega 2560 erfolgt, wurde zudem eine serielle Schnittstelle zur Kommunikation entwickelt. Diese Kommunikationsschnittstelle ist in der nachfolgenden Grafik einsehbar. Zeilenweise werden die im Byte codierten Informationen seriell übermittelt.
Raspberry Pi 2 Installation
Als Betriebssystem wurde eine Linux-Distribution namens „Debian“ auf dem Raspberry Pi 2 installiert. Zudem wurde OpenCV 3.0 installiert. Dabei handelt es sich um eine umfangreiche Ansammlung von Bildbearbeitungsbibliotheken in den Programmiersprachen C++ und Python. Die Wahl der Programmiersprache fiel auf Python, weil es sich dabei um eine leicht zu erlernende Skriptsprache mit umfangreichen Funktionen und einer großen Entwickler-Community handelt.
Nach einigen fehlgeschlagenen, beziehungsweise unvollständigen, Installationsversuchen der vorhandenen „Xtion Pro Live“-Tiefenbildkamera von Asus musste auf eine Alternativlösung auf Basis einer Webcam ausgewichen werden, um den weiteren Terminablauf des Projektes nicht zu gefährden.
Programmablauf
Im Folgenden wird der Ablauf des entwickelten Fahrspurerkennungs-Algorithmus näher erläutert.
Umwandlung in Graustufenbild
Für die weitere Verarbeitung wird das RGB-Farbbild der Fahrspuzr zunächst in ein Graustufenbild umgewandelt. Dies ist für die weitere Verarbeitung mit dem Canny-Edge-Detection-Algorithmus sowie dem Hough-Line-Transform-Algorithmus erforderlich. Zudem spart dieser Vorgang wertvolle Rechenzeit auf dem Raspberry Pi ein. Die zu verarbeitende Bilddatenmenge wird dabei um den Faktor 2/3 reduziert.
Bildbereiche isolieren
Im Anschluss wird das Bild in 2 Einzelbereiche (ROI – Regionsof Interest) isoliert, welche im nachfolgenden Prozess einzeln verarbeitet werden. Der Horizont, welcher für die weitere Isolierung der Fahrspurinformationen nicht notwendig ist, wird entfernt und das verbleibende Bild in linke und rechte Bildhälfte unterteil. Auf diesen Einzelbildern suchen die nachfolgenden Algorithmen jeweils nach Fahrspurinformationen für die linke und rechte Fahrspur.
Canny-Edge-Detection
Die im Vorfeld erzeugten Graustufen-Einzelbilder werden im Anschluss auf Kantenübergänge untersucht. Dieser Vorgang dient als Vorverarbeitung für den nachfolgenden Hough-Line-Transform. Kantenübergänge zwischen hellen und dunklen Bildbereichen werden hierbei detektiert. Die Bildpunkte der Kantenübergänge werden hierbei in einer binären Bildmatrix gespeichert.
Hough-Line-Transform
Im Anschluss untersucht der Hough-Line-Transform die binäre Bildmatrix auf gerade Linien. Im Idealfall, also ohne Lichtspiegelungen oder weiteren Störfaktoren, spiegeln die zuvor ermittelten Kantenübergänge die Kanten der Fahrspur wider. Je isolierten Bildbereich wird die längste dieser Linien als Position und Richtung der Fahrspur angenommen. Um Störfaktoren oder sprunghaften Richtungsänderungen entgegen zu wirken, glättet ein Tiefpassfilter die gewonnen Fahrspurinformationen.
Richtung des Fahrspurverlaufs ermitteln
Der Schnittpunkt zwischen den beiden detektierten Fahrspurlinien spiegelt annähernd die Richtung der Fahrspur wider. Auf geraden Streckenabschnitten ist diese Richtungsangabe genauer als auf kurvigen Streckenabschnitten. Die Differenz zwischen der Ist-Richtung und der Soll-Richtung wird für den weiteren Verlauf als Lenkwinkel angenommen und an den Arduino übergeben.
Datenübertragung an Arduino
Die Datenübertragung an den Arduino erfolgt seriell mit einer Baudrate von 9600 Baud über die RS232-Schnittstelle. Vor der Datenübertragung wird die Soll-Geschwindigkeit des Fahrzeuges in Abhängigkeit vom Soll-Lenkwinkel ermittelt. Die Übertragung erfolgt in einem 32 Byte großen Datensatz, in welchem Platz für zukünftige Datensätze bereits eingeplant ist (siehe Schnittstellenbeschreibung).
Weiteres
Testaufbau
Zu Testzwecken sowie Konfiguration der Parameter erfolgte ein Testaufbau. Für diesen wurde ein Video einer Autobahnfahrt auf einem Bildschirm abgespielt und das Fahrzeug davor platziert. Mit einem, an den Raspberry Pi angeschlossenen, Bildschirm erfolgte die Auswertung und Parametrierung des implementierten Fahrspurerkennungs-Algorithmus.
Besondere Herausforderungen
Als besonders große Herausforderung stellte sich die Installation der Tiefenbildkamera von ASUS heraus. Nach Installation der OpenNI-Bibliotheken liessen sich zwar Tiefenbildinformationen auslesen, jedoch wurde die RGB-Kamera nicht als solche im Linux-System erkannt. Nach einigen fehlgeschlagenen Installationsversuchen und manuellen Treiber-Kompilierungen wurde auf eine Lösung via Webcam zurückgegriffen um den Projektablauf nicht zu gefährden.
Hardwareaufbau
Planung
Vor Beginn der Tätigkeiten wurde ein Konzept des Autonomen Fahrzeuges ausarbeitet, dies beinhaltet die Systemkomponenten wie Arduino Mega 2560 und Raspberry Pi 2, Aktorik wie den Lenk-Servo und Fahrtreiber und Sensorik, wie der Fernbedienungsempfänger, Fahrencoder und Infrarot Abstandssensoren. Bei der Übertragungsphysik der Schnittstelle zwischen Arduino und Raspberry bieten sich verschiedene Möglichkeiten:
Neben dem I²C Bus steht auch eine UART Schnittstelle zur Verfügung. Aufgrund der Erfahrungen bei vorangegangen Projekten und der einfacheren Software-Implementierung auf beiden Seiten wurde die UART-Schnittstelle als Übertragungshartware gewählt. Die Spannungsversorgung des Raspberry sowie des Arduino soll über eine USB Powerbank realisiert werden, die Versorgung des Antriebes aus einem RC-Batterypack. Der Arduino soll in diesem Konzept als IO-Schnittstelle fungieren, der Raspberry soll die Auswertung der Kamera durchführen und die gesamte Regelung des Fahrzeuges übernehmen.
Aufbau und Grundplatte
Zur Befestigung der Bauteile wurde eine Trägerplatte konstruiert und gefertigt. Die Montage der Kamera sollte ebenfalls auf dieser Platte erfolgen. Die Kunstoffplatte ist die Basis des Fahrzeugaufbaus. Gefertigt wurde die Grundplatte aus PVC in einer Stärke von 5mm im zerspanenden Verfahren. Die Aufnahme der Kunstoffplatte wurde an die vorhandenen Bohrungen des RC-Fahrzeuges angepasst. Somit ist diese sehr leicht mit Abstandsbolzen montierbar ohne das Fahrzeug selbst zu verändern. Die Grundplatte trägt alle neuen Komponenten des Carolo-Cup-Fahrzeuges. Die Kamera ist dabei auf einem kleinen Turm befestigt. Um ein leichtes Aufsetzen der Fahrzeughaube zu ermöglichen, wird die Kamera mit einem KFZ-Navigationssystem Halterung Clip befestigt. Diese ermöglicht das leichte und dabei zugleich wiederholgenaue Abnehmen der XTion Kamera. Als Position für die Kamera-Halterung wurde eine Montage in der Nähe des Differentials vorgesehen. Dadurch ist die Kamera weniger Störungen durch Antriebs- und Lenkeinflüsse ausgesetzt und das Kamerabild damit deutlich stabiler, als bei einer Positionierung über der Vorderachse. Die Abbildung "Hardwareaufbau" rechts zeigt alle montierten Komponenten.
Verdrahtung der Komponenten
Die Sensorik und Aktorik des Fahrzeuges erfolgt über den Arduino. Um eine leichtere Verdrahtung sowie die Spannungsversorgung und die Beschaltung der Komponenten zu ermöglichen wurde ein Prototyping-Shield für den Arduino Mega 2560 eingesetzt. Auf dem Prototyping-Shield wurden auch 2 Debug LEDs sowie ein Spannungsteiler zum Aufnehmen der Akkuspannung des Fahrmotors aufgebaut. Die am Anfang geplante Spannungsversorgung des Arduino und des Raspberry mittels Powerbank wurde aufgrund Verdrahtungs und Leistungsproblemen auf eine Versorgung von dem Fahrakku mittels Step-Down Wandler umgestellt. Dieser ermöglich eine stabilisierte Spannungsversorgung mit konstanten 5V-DC Spannung bei einer maximalen Leistung von 50W→→10A. Die Anschlüsse der Aktorik wurde in Stecker-Bauweise ermöglich um ein leichtes Arbeiten an Einzelkomponenten und die Demontage der Trägerplatte zu ermöglichen. So viele Stecker mit dem Poka-Yoke-System wurden verwendet, um ein falsches Anschließen durch fachfremde Personen zu vermeiden..
Fernsteuerung
Beim Einschalten der 40 MHz Fernbedienung (2.4 GHz sind nach CaroloCup-Regelwerk nicht zulässig) springt der Arduino sofort in eine Remote-Control-Schleife und verarbeitet nur noch die am 40 MHz Empfänger eingehenden Signale, ohne dabei die Lenk- und Steuersignale der Schnittstelle zu verarbeiten. Der RC-Modus ist ebenfalls vorgeschrieben und dient dazu, bei Problemen mit dem Programm schnell ein möglicherweise zur Gefahr werdendes Fahrzeug unter Kontrolle zu bringen oder sauber zu manövrieren.
Besondere Herausforderungen
Die im nachhinein festgestellte Betriebsspannungs-Differenz zwischen Arduino und Raspberry 5V←→3,3V wurde mittels eine universellem Pegelwandler gelöst. Auch der RC-Fernbedienungsempfänger, der zwar eine Betriebsspannung von 5V hat, aber leider ein Signalpegel von 3,1 V aufweist wurde mit so einem Pegelwandler, erfolgreich an den Arduino angebunden. Weitere besondere Herausforderungen waren die kompakte Positionierung der Hardwarekomponenten, damit die Porsche-Verkleidung immer aufsetzbar bleibt. Zusätzlich wurde auf eine neutrale, im besten Falle 50:50 Gewichtsverteilung geachtet, um beste Fahreigenschaften gewährleisten zu können. Durch die niedrige Montage des LiPo-Akkus und der Aktoren erhalten wir einen sehr tiefen Schwerpunkt, also eine sichere, sportliche Straßenlage. Zusammen mit der genauen und präzisen Ansteuerung der Motoren bietet das Fahrzeug nun eine gute bis sehr gute Grundlage, um in Zukunft an dem CarloloCup-Wettbewerb teilnehmen zu können.
Aktueller Projektstand
Im 1. Quartal 2016, also mit Endes des GET-Fachpraktikums WS2015/2016, hat diese autonome Fahrzeug nun folgende technische Eigenschaften.
Das Auto kann über eine Kamera empfangene Bilddaten auswerten und Abweichungen vom Soll-Wert direkt in Steuersignale umwandeln. Ein echter Regelkreis ist noch nicht implementiert. Die Steuerbefehle werden ausgeführt, also setzen die Motoren die Räder in Bewegung bzw. sorgen für Lenkeinschläge. Über Eingriffe durch die Fernbedienung ist das Fahrzeug frei vom Bediener aus steuerbar. Die Hardware ist verkabelt, dass Umbaumaßnahmen schnell und unkompliziert durchgeführt werden können. Das Auto ist als fahrbereit (ohne Regelung) zu bezeichnen, wobei von einer Fahrt über Kameradaten abzuraten ist, da je nach Oberfläche/ Reflexion der Wagen schnell zur Gefahr werden kann. Eine Steuerung über die Fernbedienung ist jederzeit möglich.
Ausblick
Hardwareseitig
- Fahrmotor-Encoder einbinden
- Spur-/Sturz des Fahrwerks einstellen
- Stoßdämpfer abstimmen
- Aktuelle Geschwindigkeit/ Umdrehungen einlesen
- Infrarot-Abstandssensoren implementieren
- Fahrzeugbeleuchtung einbauen
Softwareseitig
- Implementierung der AsusXtion Pro Live
- Optimierung des Fahrspurerkennungs-Algorithmus
- Sensorwerte einlesen und auswerten
- Regelungskreis implementieren
- Filter optimieren (z.B. Kalman-Filter)
- Verteilung der Arbeitslast auf mehrere Prozessorkerne
- Kamera-Kalibrierung
- Optimierung der Fahrspurerkennung auf kurvigen Streckenabschnitten
Lernerfolge
- Programmierung mit Arduino/ Python
- Planung komplexer Systeme
- Verarbeitung von Kamera-Bilddaten
- Individuelle Problemlösungsstrategien
- Erweiterte Löt-Kenntnisse
- Erweiterte Kenntnisse der Signaltechnik
- Bedienung der Linux-Konsole
Gesamtfazit
Nachdem nun dieses Projekt als abgeschlossen zählt, ist es angebracht noch ein Fazit zu ziehen, um Leser und Leserinnen die spannenden und interessanten, aber auch herausfordernden Anteile dieses Projektes vorzustellen.
Im Gegensatz zu vielen anderen Gruppen, wurde dieses Team vor ein neues Projekt gestellt. Es gab nur wenige Möglichkeiten, Verknüpfungen zu anderen Projekten herzustellen und diese als Ressource zu nutzen. Dies war aber auch zugleich das Interessante und Spannende an diesem Thema, da man selber etwas erschafft, was identisch zu dem sein wird, wie man es selbst geplant hat. Man ist für sein Projektziel 100% selbst als Team verantwortlich, ohne Einflüsse von Vorgängern. Ein wesentlicher Vorteil war, dass man sich nicht in das Gedankengut einer vorherigen Gruppe einarbeiten musste und Stunde um Stunde investieren musste, um das Schema zu verstehen. Herausfordernd war natürlich das breite Spektrum an Aufgaben. Projektmanagement, Löten, Zerspanen, Programmieren, Signaltests etc. sind hierfür beispielhaft zu nennen. Durch eine gute Gruppenorganisation konnten die Projektziele aber erfolgreich erreicht werden. Wir blicken nun auf ein sauber konzipiertes Fahrzeug, welches eine gute Grundlage für den Wettbewerb bietet.
Die Intention dieses Projektes ist definitiv, dieses nicht in einem Schrank stehen zu lassen, damit es gut aussieht, sondern, dass effektiv Studenten dran arbeiten und, wie diese Gruppe auch, viel Freunde und Interesse an Mechatronik haben.
YouTube-Video
Das Projektvideo in YouTube ist durch Klicken erreichbar: https://youtu.be/S2Wc1OVaf88
Schwierigkeitsgrad
Anspruchsvoll (****)
Quellen
http://ceng.anadolu.edu.tr/cv/LaneDetection/LaneDetection.htm
http://de.mathworks.com/help/vision/examples/lane-departure-warning-system.html
http://hompi.sogang.ac.kr/fxlab/paper/45.pdf
http://www.cse.iitd.ernet.in/~pkalra/csl783/canny.pdf
http://www.massey.ac.nz/~mjjohnso/notes/59731/presentations/img_proc.PDF
http://cvpr.uni-muenster.de/teaching/ws12/ComputerVisionMustererkennungWS12/script/CVME-07-Segmentation-Hough.pdf
http://web.ipac.caltech.edu/staff/fmasci/home/astro_refs/HoughTrans_lines_09.pdf
→ zurück zum Hauptartikel: Fachpraktikum Elektrotechnik (WS 15/16)