Roboter? Fernsteuerauto?

In der c’t Make habe ich von dem Roboterbausatz der IGS Mühlenberg gelesen. Der hat mich so fasziniert, dass ich ihn gerne bauen wollte. Leider klappte es mit dem 3D Drucker, der mir zur Verfügung stand, nicht, die Bauteile in ausreichender Präzision zu drucken. Aufgeben wollte ich aber auch nicht gleich und habe zufällig mitbekommen, dass Microsoft jetzt auch auf den Maker- und Internet-of-Things-Zug aufspringen will. Na dann mal los.

Auf der Microsoft-Seite zum Thema habe ich die Zeichnung für einen Roboter aus Holz gefunden. Die sieht so aus …

zeichnung… und soll eigentlich mit einer CNC-Fräse geschnitten oder gebrannt werden. Da ich so eine nicht habe (was nicht ist, kann aber noch werden …), musste also die Laubsäge ran. Besonders hat mir gefallen, dass man die Bauteile später stecken kann und nicht etwa schrauben oder kleben muss.

Bevor es an die Laubsägearbeiten geht, muss ich mich um den Antrieb kümmern. Der soll über zwei Servos und nicht wie sonst häufig üblich, über Motoren, erfolgen. Normalerweise haben Servos einen festen Drehwinkel (z.B. -90 Grad bis +90 Grad) und eignen sich damit beispielweise zur Bewegung eines Ruders in einem Schiff. Für den kontinuierlichen Antrieb eines beweglichen Objektes sind sie damit aber zunächst nicht geeignet. Glücklicherweise lassen sich Servos so “modifizieren”, dass sie sich kontinuierlich drehen. Eine schöne Anleitung dazu findet man etwa hier. Da ich die Schritte nur übernommen habe, gebe ich keine vollständige Anleitung sondern lediglich ein paar Impressionen wieder:

servoHat alles geklappt, steuert man nun bei den Servos die Geschwindigkeit und nicht mehr den Stellungswinkel. Der Antrieb des Bots wird über je einen Servo pro Hinterrad gemacht. Wenn man ordentliche Servos hat (ich verwende zweimal den TowerPro MG995), dann bekommt man damit auch ordentlich Schub hin. Die Steuerung hat das gleiche Prinzip wie ein Kettenfahrzeug. Will man beispielsweise nach links lenken, dann dreht man das linke Rad einfach ein wenig langsamer. Vorwärts kommt man, indem beide Räder mit der gleichen Geschwindigkeit drehen. Um stabil zu stehen, benötigt man natürlich noch ein drittes Rad. Das kann aber fix montiert werden und hat kaum Einfluss, weder auf Antrieb noch auf Lenkung.

Bei einem normalen Servo steuert man die Position über die Pulslänge des anliegenden Signals. Dieses Signal muss also kontrolliert erzeugt werden. Auf dem Roboter soll bei mir ein Raspberry Pi die Kontrolle übernehmen. Leider hat der on-board keine Möglichkeit, ein solches Signal zu erzeugen (ein Arduino im Vergleich kann das). Aber, gibt es da nicht auch was von Adafruit? Ja, gibt es: den PCA9685. Der lässt sich als I2C-Gerät mit dem Raspberry Pi verbinden und kann dann bis zu 16 Servos bequem steuern.

servo_controllerDamit ist die Hardware fertig. Vorne und hinten werden in der mobilen Variante (wenn der Roboter frei herumfährt) noch zwei Batterieblöcke angefügt; einer für den Raspberry Pi und einer für die Servos. Der Raspberry Pi verlangt exakt 5V. Dies stelle ich durch das Zwischenschalten eines kleinen Spannungswandlers sicher (Pololu 5V 600mA Step-Down Spannungsregler D24V6F5, gibt es wie viele weitere wunderbare Dinge bei Exp-Tech).

Fertig sind alle Komponenten …

bot_auseinander_gebaut… und so sieht er am Stück aus:

botEin ferngesteuertes Fahrzeug wird es aber natürlich erst, wenn man es auch aus der Ferne steuern kann. Das soll per Smartphone geschehen. Für den Raspberry Pi habe ich dazu zunächst eine Software geschrieben, die den Roboter steuern kann und dazu die Servos geeignet anspricht. Diese Komponente habe ich hinter einem leichtgewichtigen Webserver versteckt und mit einer rudimentären REST-Schnittstelle versehen. Ob es wirklich die optimale Lösung ist, dass man ein ferngesteuertes Fahrzeug per Webschnittstelle steuert, das sei dahingestellt. Für diesen Prototypen reicht es allemal. Für die Steuerung braucht man auf der anderen Seite noch eine App. Das ist eine hervorragende Gelegenheit, sich mal die neue Programmiersprache von Apple dazu anzuschauen: Swift. Erster Eindruck: Prima! Damit habe ich eine iOS-App geschrieben, die primär zwei Slider zur Verfügung stellt, einen für die Geschwindigkeit und einen für die Lenkung.

appBewegt man die Slider, werden die aktuellen Werte an die Webschnittstelle des Bots gesendet und dort für die Ansteuerung der Servos verwendet. Jetzt müssen nur noch der Bot und das Smartphone in ein gemeinsames Netzwerk (z.B. mein WLAN) und es kann losgehen: Bot-Demo-Video.

Webschnittstelle? War da nicht schonmal was? Ja, das ist technologisch das gleiche wie es auch bei meiner Heimautomatisierung zum Einsatz kommt. Und könnte man das nicht so ähnlich auch bei dem halbfertigen Boot machen? Ja, kann man. Und wird man. Stay tuned.