Im Februar 2016, in einem Workshop für Kinder haben Michael und ich einen Roboter gebaut.
An einem Raspberry Pi haben wir zunächst mittels CamJam Motor-Controller zwei Elektromotoren angeschlossen. Das ist eine sogenannte H-Brücke, diese erlaubt uns die Motoren in beide Richtungen anzusteuern und mit PWM-Signal auch die Drehzahl, bzw. die Geschwindigkeit zu regeln (das kann zwar die GPIO-Schnittstelle des Raspberry Pi auch, hat aber nicht genug Leistung). Die Steuerung haben wir in Python programmiert – hier ein Code-Beispiel.
So kann unser Roboter nun fahren. Um ihn fernzusteuern kann man die App Blynk verwenden (dafür muss der Raspberry Pi mit WLAN verbunden sein). Hier gibt es eine Anleitung. Eine weitere Möglichkeit, die wir auch umgesetzt haben, ist ein PS3-Joystick über Bluetooth.
Als Nächstes haben wir an unseren Roboter verschiedene Sensoren angeschlossen. Mit dem Infrarot-Sensor haben wir einen Linefollower programmiert. Dieser kann eine schwarze, auf dem Boden gemalte Linie folgen. Die Logik ist ganz einfach: solange der Sensor über die Linie ist, werden beide Motoren in eine Richtung angesteuert und der Roboter fährt gerade aus. Wenn er aber die Linie verliert, greift ein Such-Programm zu: die Motoren drehen in entgegengesetzte Richtungen (so dass der Roboter sich an der Stelle dreht) bis er die Linie wieder „sieht“. Die Drehrichtung wird im Such-Programm festgelegt, z. B. Motor A – vorwärts, Motor B – rückwärts. In manchen Fällen kann es aber dazu führen, dass man sich von der Linie dreht und schließlich in falsche Richtung zurückfährt. Das Problem wird gelöst, wenn das erste Drehen begrenzt wird und in der anderen Richtung gesucht wird, d.h. Motor A – rückwärts, Motor B – vorwärts. Hier ist der Code.
Mit dem Ultrasonic-Sensor kann der Roboter den Abstand zu einem Objekt messen und so beim Fahren den Hindernissen ausweichen. In regelmäßigen Abständen sendet er eine Reihe von Impulsen aus, indem wir den Trigger ansteuern und auf ein Echo hören. Sobald das Echo empfangen wird, wird die Zeit zwischen dem Aussenden und dem Empfang berechnet. Die Zeit mal Schallgeschwindigkeit geteilt durch Zwei (der Impuls geht den Weg zwei mal) ergibt den Abstand zum Objekt. Bei einem definierten Mindestabstand geben wir dem Roboter das Kommando zu stoppen, bzw. sich in eine andere Richtung zu bewegen. Den Code dazu gibt es hier.
Nun wollten wir unserem Roboter eine gute Figur geben. Wegen zwei separat angetriebenen Motoren, dachten wir sofort an einen Kettenantrieb, wie bei einem Bagger oder einer Pistenraupe. Nur sind diese seelenlos, deshalb haben wir uns für WALL-E entschieden. Der Korpus wird nach dieser Vorlage (etwas vergrößert) aus Pappelsperrholz gebaut (mit Leim zusammengeklebt) und mit bedrucktem Papier angeklebt.
Auch eine Kamera hat ihren Platz im Korpus gefunden und jetzt können wir sehen, was der WALL-E gerade tut. Die Infrarot-LEDs wandern in die Augen. Mit der Kamera können nicht nur Fotos geknipst, sondern auch Videos aufgenommen oder sogar live gestreamt werden.
Dabei war uns wichtig, eine geringere Latenz (Verzögerung) zu haben. Nach einigen Versuchen mit unterschiedlichen Software-Lösungen haben wir uns für den uv4l entschieden.
Die Arme und der Kopf wurden zunächst fest montiert (später bauten wir die Servomotoren ein). Jetzt sieht unser WALL-E so aus:
Am 05.06.2016 haben wir unseren WALL-E auf dem Raspberry Pi Summer Jam München 2016 vorgestellt und an einem Roboter-Wettbewerb teilgenommen. Hier ein Linefollower-Parkur:
Eine Stimme sollte WALL-E auch nicht fehlen. Dafür hat er einen Verstärker und einen Lautsprecher aus einem alten Kassettenrekorder bekommen.
Seine aus dem Film bekannten Sprüche wurden gleich auf die SD-Karte kopiert:
Den Lautsprecher bauten wir dann in den „Werkzeugkoffer“ ein:
Das etwas optimierte Kettenlaufwerk (immer noch aus LEGO):
Ein OLED-Display sollte uns den Status von WALL-E zeigen, z. B. mit welcher IP-Adresse wir auf ihn zugreifen können (wir nutzen DHCP, weil wir in unterschiedlichen Netzwerken unterwegs sind) und ob der PS3-Joystick verbunden ist. Außerdem leuchtet hier das Logo 😉
Um die Arme und den Kopf bewegen zu können, bekommt WALL-E ein paar Servo-Motoren. Diese werden über einen I2C-Servo-Controller angeschlossen.
3 Servo-Motoren landen im Oberteil, der 4. im linken Auge.
Die Stromversorgung des Raspberry Pi’s besteht aus einer LiPo-Batterie mit 6600mAh, einem PowerBoost, …
…einem USB/Solar-Charger, …
… und einer Solarpanel:
Die Elektromotoren werden von 4x AA-Akkus separat versorgt:
Linefollower Duo: mit einem 2. Infrarot-Sensor kann WALL-E viel besser eine Linie folgen.
Die Erkennung funktioniert hier nach einem anderen Prinzip: befindet sich die Linie zwischen den beiden Sensoren, fährt WALL-E gerade aus. Biegt die Linie ab, kommt sie unter einen der Sensoren und WALL-E dreht sich etwas in die entsprechende Richtung. Das funktioniert auch dann, wenn sich die Linie gar nicht zwischen den Sensoren befindet und erst „gefunden“ werden soll.
PS: WALL-E auf der FORSCHA am 05.11.2016 in München M.O.C.
Quellen: