Raspberry Pi Roboter: Ultraschall Autopilot

Projekte

Raspberry Pi Roboter: Automatisch Hindernissen ausweichen (Teil 4)

Gallery

Unser Roboter kann inzwischen schon einiges und selbst ferngesteuert werden. Jedoch wollen wir zusätzlich einen Autopilot Modus erstellen, wodurch der Raspberry Pi Roboter selbstständig seinen Weg suchen kann. Putzroboter u.ä. nutzen vergleichbare Methoden, um nicht an einem Hindernis stecken zu bleiben.

Wir nutzen dafür einen Servo Motor und einen Ultraschallsensor, womit wir die Entfernung messen. Anschließend erweitern wir den bisherigen Code und lassen den Roboter dorthin fahren, wo am meisten Platz ist.

 

 

Zubehör

Diese Erweiterung setzt im Grunde nur auf zwei Komponenten, nämlich den Motor zum Drehen und außerdem auf das Ultraschall Modul zum Bestimmen der Entfernung. Insbesondere habe ich diese Teile verwendet:

Daneben brauchen wir außerdem noch die Jumper Kabel, Heißkleber und evtl. noch das Breadboard.

 

 

Befestigung des Motors und Ultraschallsensors

Bevor wir mit dem Anschluss fortfahren, müssen wir die beiden Module an der Roboter Karosserie befestigen. Dafür nutzen wir den Heißkleber, womit wir zuerst den Servo Motor an der Vorderseite (über dem Vorderrad und vor den IR Line-Follow Sensoren). Meine Karosserie hatte einen Papierüberzug über dem Plastik, welchen ich an der zu klebenden Stelle entfernt habe, damit der Kleber besser haftet.

Anschließend habe ich einen der beigefügten Aufsätze des Servomotors genommen und darauf das HC-SR04 Modul mit Heißkleber befestigt (siehe Bilder). Der Aufsatz lässt sich außerdem einfach auf dem Motor fixieren und auch wieder abnehmen. Die Kabel des Servos kannst du an der unteren Seite der Karosserie zum Pi führen (in der Mitte befindet sich ein Loch). Die Jumperkabel vom Ultraschallsensor habe ich zusammengeklebt und mit ein wenig Spielraum an einer Stelle befestigt. Diesen Schritt solltest du allerdings noch abwarten, bis wir die Funktionalität testen und damit auch die beste Position der Kabel finden.

 

Aufbau und Verkabelung

In den vorherigen Tutorials haben wir einige der GPIOs bereits mit den bisherigen Modulen belegt. Für dieses Tutorial benötigen wir jedoch nur drei zusätzliche GPIOs, wobei ich GPIO12, 13 (US Sensor) und 22 (Servo) verwende. Falls du andere IO Pins nutzen willst, musst du dies im Code später auch entsprechend anpassen.

Das Ultraschallmodul wird über die 5V des Pi’s mit Strom versorgt, wohingegen der Servomotor über die Batterien angeschlossen werden sollte. Masse / Ground vom Raspberry Pi und den Batterien sind (wie bisher auch) weiterhin miteinander verbunden.

Raspberry Pi Roboter Servo + Ultraschall Steckplatine

Neben den bisher angeschlossenen Modulen, kommen Servomotor und Ultraschallsensor (links) dazu.

Der Ultraschallsensor (ECHO) ist über einen 330Ω Widerstand an GPIO13 angeschlossen und außerdem über einen 10kΩ Widerstand an GND. Die genaue Funktionsweise des US Sensors habe ich bereits in einem vorherigen Tutorial beschrieben. Ebenso sieht es auch mit der Verwendung des Servomotors mittels PWM aus.  Details zu beiden Modulen findest du dafür auch in den entsprechenden Tutorials.

 

Raspberry Pi Roboter Code erweitern

Um im Folgenden Distanzen von verschiedenen Richtungen aus messen zu können, erstellen wir eine neue Datei, in welcher wir für das bewegliche Ultraschallmodul eine Klasse definieren:

sudo nano ultrasonic.py

Die Klasse hat nur wenige Funktionen (zum rotieren und messen) und fällt deshalb nicht all zu lang aus:

Gespeichert wird im Editor wie immer mit STRG+O und geschlossen mit STRG+X.

Bevor wir fortfahren wollen wir den Ultraschallsensor noch richtig positionieren. Dazu kannst du testweise die Python Konsole öffnen (sudo python) und folgende Zeilen eingeben (geschlossen wird mit exit()):

Wir lassen den Servo Motor also um 90° rotieren und fixieren nun das Ultraschall Modul mittig auf dem Servomotor, sodass die „Augen“ direkt nach vorne schauen. Das machen wir, da der Motor gleich jeweils 90° nach links und recht rotieren wird und dabei die Entfernungen misst, auf welche wir daraufhin  den Roboter reagieren lassen.

Anschließend müssen wir unsere bisherige robot.py Datei noch erweitern. Dafür importieren wir am Anfang die gerade erstellte Klasse:

Außerdem muss die Klasse initiliaisert werden. In der robot.py Datei, ergänzen wir die die Parameter der __init__ Funktion und fügen eine Zeile hinzu, sodass die Funktion folgend aussieht:

Nun können wir die Funktion, die auf die gemessenen Distanzen reagiert und den Roboter entsprechend steuert, am Ende unserer Robot-Klasse anlegen:

 

Autopilot testen

Es wird Zeit den Autopilot Modus zu testen, weshalb wir eine kleine Testdatei erzeugen, in der die Roboter-Klasse geladen wird und der Ultraschall-Autopilot gestartet wird:

sudo nano test_us.py

Die Datei enthält lediglich folgenden Inhalt:

Nachdem die Datei gespeichert wurde, platzieren wir den Roboter auf dem Boden und rufen die Python Datei von der Konsole aus auf (abgebrochen werden kann mit STRG+C):

sudo python test_us.py

Wichtig: Falls dein Roboter sich zu schnell oder zu langsam dreht, liegt das aller Wahrscheinlichkeit nach an einer falsch eingestellten Geschwindigkeit. Im ersten Tutorial der Reihe haben wir bereits u.a. die Geschwindigkeit auf einer Geraden (DIST_PER_SEC) und für eine Drehung (SEC_PER_TURN) definiert. Da diese jedoch vom Untergrund abhängig ist, muss sie ggf. angepasst werden. Ich hatte z.B. beim Testen die Geschwindigkeit auf dem Tisch gemessen, welche aber von der tatsächlichen Geschwindigkeit auf dem Fußboden abweicht, weshalb erst eine Anpassung die Funktionen richtig arbeiten ließ.

 

Weiter geht es mit dem Folgen der eigenen Stimme.

, , , , , , , ,


2 Kommentare

  1. Hans sagt:

    Hallo,

    eines ist mir noch nicht klar, wo sind der Raspi und das Steckbord?
    Beide müssen doch auf dem „Wagen“ untergebracht sein?

    Danke und beste Grüße
    Hans

  2. Hans sagt:

    Entschuldigung, ich habe es auf dem Bild gesehen,
    Steht alles hinten ‚drauf.

    Hans

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!