Heute möchte über meinen erfolgreichen Versuch berichten, wie ich einen Dynamixel Servo AX-12W mit einem Raspberry Pi angesteuert habe – und zwar ohne den teuren Spezial-Adapter U2D2 („USB to Dynamixel“) von ROBOTIS.
Benötigte Hardware
Benötigt wird lediglich ein kleines IC namens 74LS241 sowie die Python-Bibliothek PyAX-12. Warum wird dieser Baustein benötigt? Der Dynamixel-Servo kommuniziert über eine serielle Schnittstelle mit dem Raspberry Pi – aber nicht, wie „normalerweise“ üblich voll- sondern nur Halbduplex. Und da die serielle Schnittstelle des Raspi keine Halbduplex kann, braucht es diesen kleinen „Umschalter“ und die oben erwähnte Bibliothek.
Verkabelung
Verkabelt habe ich den Pi und den Servo wie hier gezeigt. Aber Achtung: Die dort genutzte Bibliothek unterstützt offenbar kein Python 3.
Bibliothek / Installation
Darum habe ich die zuvor erwähnte Library PyAX-12 verwendet.
Aus im Nachhinein nicht mehr ganz nachvollziehbaren Gründen, reagiert der Servo anfangs überhaupt nicht. Darum habe ich mit meinem Logic-Analyzer von Saleae versucht das ganze zu debuggen. Diese Versuche möchte ich euch nicht vorenthalten.
In oberen Teil des Screenshots sind sehr schön die Datenpakete an der seriellen Schnittstelle zu sehen; rechts mittig die Hex-Werte und unten in der Console der dazugehörige Code. Achtung: Hier ist es noch Code aus eine Bibliothek, die bei mir nicht lief!
Erfolg
Nach langer Fehlersuche (der Servo tat keinen Mucks) habe ich einfach die Verkabelung kurz neu aufgebaut und dann ging es. :) Hier der etwas andere „Blinky“ (die Servo-LED blinkt, er wurde also erkannt):
Und hier eine endlose Drehung des Servos:
Die korrekte Nutzung/Aufruf der Bibliothek
Wichtig sind beim Aufrufen des Beispiele die richtigen Parameter! Damit es mit dem Pi und dem Servo klappt, muss es so aussehen:
cd develop/pyax12/examples
./scan.py --port /dev/ttyAMA0 --baudrate 1000000 --rpi
Nur mit dem letzten Parameter –rpi reagiert der Servo am Raspberry Pi!
ROS – Robot Operating System
Und was ist mit ROS? Nachdem ich dachte, nun könnte ich einfach die fertigen ROS-Pakete wie Dynamixel nutzen. Aber wie wird dort die Ansteuerung des 74LS241 realisiert? Tja, hier kommt die schlechte Nachricht. Die Antwort lautet: gar nicht. :-/
Die Antwort findet sich in diesem Issue auf GitHub. Die Antwort hier lautet sinngemäß:
Außerdem ist der UART [die serielle Schnittstelle] des Raspberry Pi extrem instabil in der Übertragungsgeschwindigkeit. Daher ist eine high-speed-Kommunikation unmöglich und wird nicht empfohlen.
Wer also ROS mit dem Raspberry Pi nutzen möchte – so wie ich – kommt um den nicht wirklich günstigen USB-zu-Dynamixel Adapter wohl nicht herum. Ich habe ihn daher schon mal für mich bestellt…
Hi Markus,
Was ist denn mit einen USB-2-UART-Adapter, wenn die eingebaute UART-Schnittstelle des Pi´s nicht stabil genug ist.
( RPi –> USB-UART-Adapt. –> 74LS241 –> AX-12W )
Nur ne schnelle Überlegung, bevor man den offiziellen Adapter besorgt. ;)
Grüße aus Ostfriesland (aus der Dunkelkammer ;) )
Thomas alias der_kaputte
Hi Thomas,
ja, sowas könnte man sich sicher bauen, aber der muss ja eben dann immer diesen Pin triggern zum Umschalten. Und das müsste man dann noch in die offiziellen ROS-Pakete mit einbauen. Siehe Antwort hier: https://github.com/ROBOTIS-GIT/DynamixelSDK/issues/208#issuecomment-404328097
Aber diese Zeit habe ich aktuell nicht verfügbar, so dass ich dann auf den fertigen Adapter zurückgreife…