Projekt 27: Carolo-Cup
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).
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. 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 Einzelkomponen und die Demontage der Trägerplatte zu ermöglichen.
Fernsteuerung
Beim Einschalten der 40 MHz Fernbedienung (2.4 GH 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.
Ausblick
Hardwareseitig
- Fahrmotor-Encoder einbinden
- IR-Abstandssensoren
- 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
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)