Ansteuerung Dynamixel Servo mit Raspberry Pi und Python – ohne U2D2

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.

Dynamixel Servo AX-12W
Dynamixel Servo AX-12W

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.

minibot Dynamixel servo Raspberry Pi 74LS241
Dynamixel Servo-Test mit Raspberry und Pi 74LS241

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):

minibot Dynamixel servo Raspberry Pi 74LS241
Dynamixel Servo-Test mit Raspberry und Pi 74LS241 (Blinky)

Und hier eine endlose Drehung des Servos:

minibot Dynamixel servo Raspberry Pi 74LS241
Dynamixel Servo-Test mit Raspberry und Pi 74LS241 (endless move)

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…

2 Gedanken zu „Ansteuerung Dynamixel Servo mit Raspberry Pi und Python – ohne U2D2“

  1. 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

Schreibe einen Kommentar

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