Roboter HaBuRo1
Ein Auto-Roboter mit Webkamera für autonomes Fahren
Bastelprojekt
HaBuRo ist ein Auto-Roboter mit Webkamera für autonomes Fahren. Ein Raspberry Pi, Modell 2, steuert den HaBuRo.
Fahrbefehle und weitere Kommandos erhält der HaBuRo vom TrekStor-SurfTab-Windows10.
Die Raspberry Pi Applikation wurde mit Python erstellt, auf dem SurfTab läuft eine,
vom Touchscreen gesteuerte, Qt-C++-Applikation.
Zwei XBee-Funkmodule übertragen die Steuerbefehle. Für die Webkamera ist eine WLAN-Verbindung erforderlich.
Sechs Gleichstrommotoren sorgen für den Antrieb, diese werden von vier Entfernungsmesser beeinflusst.
Für die Kurvensteuerung sorgt ein Kompass-Modul. Kurven werden gefahren, indem eine Antriebsseite
vorwärts- und die gegenüberliegende Seite rückwärts dreht. Die Motoren werden über eine H-Bridge L298N gesteuert.
Dieser erlaubt auch eine Pulsweitenmodulation-Ansteuerung.
Parallel zum autonomen Fahren können alle Fahrtrichtungen über Touch-Befehle zusätzlich beeinflusst werden.
Zwei Stoßstangen mit Grenztastern sorgen für den Not-Halt. Eines der sechs Laufräder verfügt über eine
Umdrehungsblende aus Sperrholz. Diese Blende signalisiert der Gabellichtschranke die Umdrehungen des HaBuRo.
Informationen und Fehlermeldungen sendet der HaBuRo per Audio über einen Lautsprecher.
Mal sehen ob da irgendetwas mit Sprachsteuerung geht! Momentan plappert er seine Meldungen
so vor sich hin. Eine Servo-Dreh-Kippmechanik inklusiv Schwenkarm sorgt für Videoaufnahmen im 360°-Bereich.
Der HaBuRo ist 620 Millimeter lang und 380 Millimeter breit. Er wiegt 1,2 Kilogramm.
Ein 12Volt, 4300mA Akku sorgt für die Antriebsenergie. Der Raspberry Pi und alle Sensoren
werden vom 7,2 Volt, 4300mA Akku mit Energie versorgt. Ein "Step-Down-Converter" sorgt für die
genaue 5 Volt Versorgung. Zielsetzung war hier eine geringe Wärmeentwicklung verbunden mit einem
hohen Wirkungsgrad. Ein Schaltregler des Typs 7805 leistet das nicht.
Die Akkuspannungen werden auf Entladeschlussspannung überwacht. Es gibt beim HaBuRo Busmodule für 3,3 Volt und 5 Volt.
Damit ist der Raspberry Pi überfordert. Ein Bus-Level-Shifter sorgt für Abhilfe. Zwei von insgesamt vier
Ultraschall-Entfernungsmesser werden von einem Mikrokontroller PIC16F872 verwaltet.
Die Begründung liegt in der Ressourcen-Optimierung im Bereich der vielen Verzögerungszeiten
für Rückmeldungen der Sensoren. Jedoch ist auf der Programmiereben Python eine
Parallelprogrammierung (Thread) unumgänglich. Der HaBuRo besitzt sechs parallele Programme.
Keine Angst! Das ist bei der Programmiersprache Python kein großes Problem.
Nachtfahrten kann der HaBuRo auch. Vier superhelle Leuchtdioden sorgen für Beleuchtung,
diese werden per Relaiskarte angesteuert.
Parallel zu den Versuchsaufbauten wurde diese Dokumentation erstellt.
Dieses geschah durch Erstellung von Arbeitsblätter und Notizen. Sie sind
leider manchmal mit unterschiedlichen Schriftgrößen erstellt worden. Ich habe
jetzt keine Lust mehr das zu korrigieren. Weiterhin liegt mir die Schreiberei nicht so,
deshalb überwiegen Bilder in dieser Dokumentation. Die größten Schwierigkeiten waren:
Den Kompass aus dem magnetische Störfeld zu bringen, Kurvenoptimierung, speicherschonendes Video-Streaming,
Motorbefestigung, und Zeitverhalten Ultraschall. Während der Bauzeit habe ich ungefähr 15 Stunden
im Internet gesurft. Na Ja! Da kann ich dann berichten, dass es nur eine Webseite gibt, die in
Sachen Programmierung und Elektronik zielführend ist: stackoverflow.com! Einige Deutsche Foren
sind ein Graus. Die kennen nur eine Umgangsform: Beleidigung.
Wie kriegt der HaBuRo1 die Kurve? Eine kleine Funktionsbeschreibung!
Nach dem Einschalten bootet der Raspberry Pi und startet das HaBuRo1-Python-Programm automatisch.
Zuerst werden alle Module geprüft. Alle Ergebnisse werden akustisch gemeldet.
Am TrekStor-SurfTab-Windows10 muss eine Laufzeit eingegeben werden. Der HaBuRo fährt los.
Sobald der vordere Entfernungsmesser ein Hindernis erkennt (Distanz kleiner 40 cm) werden die
Entfernungsmesser rechts / links abgefragt. Melden beide ein Hindernis, erfolgt eine Rückwärtsfahrt.
Wenn keiner der Rechts- Linkssensoren eine ausreichende Kurvendistanz melden,
dann fährt der HaBuRo so lange Vor und Zurück bis die Laufzeit beendet ist.
Meldet einer der Rechts- Linkssensoren eine ausreichende Wendedistanz,
dann wird eine Kurve in Wendedistanz-Richtung eingeleitet.
In Abhängigkeit eines Zufallsgenerators wird der Kompass aufgefordert,
einen Winkel von größer 90° und kleiner 270° zu liefern.
Der Roboter dreht nun mit reduzierter Geschwindigkeit.
Parallel dazu verändert der Kompass seinen Istwinkel.
Ist der Sollwinkel größer als der Istwinkel, dann ist die Kurve beendet und der Roboter fährt vorwärts.
Versagen die Sensoren und der Roboter knallt gegen ein Hindernis, dann sorgen die Stoßstanken
für eine sofortige Abschaltung und der Spaß hat ein Ende. Jedoch kann der Anwender
einen neuen Fahrbefehl auslösen. Dafür gibt es einen Taster auf der Geschwindigkeitsmesser-Platine.
Zentrale Figur für die Kurvensteuerung ist ein Schrittwerk!
Schaue bitte im Python-Hauptprogramm ab Zeile 155.
Fahrwerk
Python Programm Fahrwerk
Python Software Umdrehungsmessung und digitale Eingänge
5 Volt Spannungsversorgung Raspberry Pi, Mikro-USB!
Der Kamera-Arm ist mit drei Servos ausgerüstet. Diese Servos werden per Pulslängenmodulation angesteuert.
Weil der Raspberry Pi nur eine begrenzte Anzahl von GPIO-Digitalausgänge besitzt,
und die Ansteuerung per I²C-Bus sehr bequem ist, und weiterhin die Verdrahtung reduziert
habe ich ein Servomodul der Firma Adafruit eingesetzt. Dieses Modul wird vom Raspberry
Pi mittels I²C-Bus angesteuert.
Adafruit liefert auch eine Python-Bibliothek für die Software und ich empfehle dir
diese Library zu verwenden. Auf der Webseite des Anbieters wird das Servomodul sehr gut erklärt.