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. Zusätzlich sind erste Praxistests geplant.
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 der CaroloCup-Veranstaltung durchgeführt.
Die Inhalte der Grundlagendefinition ist unter “Erwartungen an die Projektlösung" aufzufinden.
Übersicht der Gruppeneinteilung
Das Projektteam 27 wurde von den Verantwortlichen in folgende, zwei Untergruppen unterteilt.
Team Arduino
- Hendrick Buchheister
- Kai Jacobs
Team Raspberry
- Gerhard Dick
- Pascal Siekmann
- Rainer Heither
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
Das ganze Projekt hatte eine Dauer von insgesamt 15 Wochen und wurde von uns in fünf Hardware- und acht Software- Meilensteine aufgeteilt.
Hardware-Meilensteine
- Planung und Bestellung
- Konstruktion und Fertigung der Grundplatte
- Bau einer einfach demontierbaren Kamerahalterung
- Montage aller Komponenten auf dem Fahrzeug
- Verkabelung sämtlicher Komponenten
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 Ansteuerung der Lenk- und Fahrmotoren
- Erste Tests und Simulationen der Fahrspurerkennung
siehe "Projekt 27 Meilensteinplan"
Schematische Übersicht
Ablauf:
- Kamera nimmt Umgebung (Input) wahr
- Raspberry verarbeitet die Kameradaten und übergibt via RS232-Schnittstelle relevante Daten zum Arduino
- Arduino verarbeitet diese Daten und wandelt diese in Lenk- und Fahrsignale für die Motoren um
- Wird über das Einschalten der Fernbedienung der RC-Modus aktiviert, erhält der Empfänger Signale, die direkt über den Arduino in Lenk- und Fahrsignale umgewandelt werden
Technische Übersicht
Nachfolgend die technischen Daten und verbauten Komponenten des autonomen Fahrzeugs.
Technische Daten
• Maßstab: 1:10 • Abmessungen in cm: L x B x H 46 x 19 x 26 • Motorleistung: 149 Watt • Akku- Kapazität: 2200mAh • Gewicht: 1,4kg • Extras: Lane Assist; 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 Entwickicklung eines einfachen Fahrspureerkennungs- und Verfolgungs- Algorithmus beschäftigt.
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 heraus kristallisierte. 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 Grafik „Schnittstellenbeschreibung“ näher erläutert wird.
Raspberry Pi2 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 Bildbereitungsbibliotheken 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 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 finden Sie den Ablaufplan des Programmes.
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 der 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.
Nächste Schritte
- 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
Hardwareaufbau
planung bestellung
positionierung konstruktion
verkabelung
signaltest/ justierung
akku/fernbedienung
alpha tests
Schwierigkeitsgrad
Anspruchsvoll (****)
→ zurück zum Hauptartikel: Fachpraktikum Elektrotechnik (WS 15/16)