Heute möchte ich mit euch teilen, wie man einen Raspberry Pi mit dem Sphero RVR verbindet und dabei den RVR mit Python ansteuert.
Im ersten Schritt ging es mir darum den Akku-Zustand herauszubekommen, den diesen zeigt der RVR nicht an und auch in der App bekommt man ihn nicht einfach zu Gesicht.
Raspi auf RVR montieren
Ich habe zur Montage ich habe 3mm Kunststoff-Distanzbolzen, -Schrauben und -Muttern benutzt. Aber Achtung: die passen standardmäßig nicht in die Montagelöcher des Raspi; diese habe ich dazu vorsichtig auf 3mm aufgebohrt.
Raspi an RVR anschließen
Bevor es aber losgeht, gilt es erst einmal den Raspi mit der seriellen Schnittstelle des RVR zu verbinden. Die Verbindung ist simpel und hier perfekt beschrieben, so dass ich die Details auf dieser Seite nicht noch einmal wiederholen möchte.
Beachte aber, dass zumindest bei meinem – vermutlich einem der ersteren Versionen – RVR der Beipackzettel eine falsche Belegung der seriellen RVR-Buchse aufwies. Hier daher erneut die korrekte Belegung (rot):
Software auf dem Raspberry Pi (RVR SDK)
Als Betriebssystem empfiehlt sich Raspbian. Nachdem dieses installiert ist und der SSH-Zugang aktiviert wurde, geht es daran das SDK auf den Pi zu installieren. Dieses kann einfach mit git geklont werden:
git clone https://github.com/sphero-inc/sphero-sdk-raspberrypi-python.git
Laut Original-Anleitung werden weitere Abhängigkeiten installiert – einschließlich pipenv.
./first-time-setup.sh
Letzteres machte auf meinem Pi diverse Probleme. Ich habe diese virtuelle Umgebung derzeit nicht mehr genutzt. Ich habe dieses daher anschließend deinstalliert:
pip3 uninstall pipenv
Beim Starten der Beispiele gab es gleich zu Beginn diverse Fehlermeldungen. Offenbar gibt es hier noch weitere Abhängigkeiten, die wie folgt nachinstalliert werden mussten:
pip3 install aiohttp pyserial_asyncio
Auslesen des Batterie-Status
Sehr gut gefallen haben mir die zahlreichen Beispiele auf der Website von Sphero – wie eben auch das Auslesen des Batterie-Status.
Offenbar gibt es hier aber auch Probleme mit dem Code, die ich auch hatte. Der im Code angegebene Pfad musste in den Beispielen von
s.path.append(os.path.abspath(os.path.join(os.path.dirname(file), ‘../../../’)))
nach
s.path.append(os.path.abspath(os.path.join(os.path.dirname(file), ‘../../’)))
geändert werden.
Läuft bei mir!
Nun hat alles geklappt und der Code lief einwandfrei durch und gab auf der Shell den Akku-Status aus:
Als Nächstes soll eine remote Steuerung per Shell über die Tastatur („WASD“) ausprobiert werden.