Dieses Dynamixel Tutorial beschreibt, wie Sie den Joint Controller mit Dynamixel im Multi-turn Modus verwenden.
Level des Tutorials: MITTEL
1. Der Multi-turn Modus
Mit dem Multi-turn Modus erreicht der Dynamixel Servomotor eine Zielposition größer als 4095 (4095 entspricht 2pi, das Ergebnis in rad). Mit dem aktivierten Multi-turn Modus erreicht der Servomotor eine maximale Zielposition entsprechend 6 oder 7 Drehungen. In diesem Beispiel verwenden wir einen Dynamixel MX-28 , der im Multi-turn Modus, mit dem Ausgangswert 0, Werte zwischen -24576 und 24576 annehmen kann.
Der Multi-turn Modus ist nur für manche Servomotoren verfügbar, daher lesen Sie vorher in der Betriebsanleitung nach, ob er auch bei Ihrem Motor verfügbar ist und wo seine Grenzen liegen.
2. Werte und Nachrichten
Wenn Sie die Parameter des Servomotors in die .yami Datei eingeben, ist wichtig, dass die Grenzen des Winkels im Dynamixel Binärwert (im ersten Tutorial mit 0/4095 festgelegt) angegeben werden, während der Wert in joint_controller/command in rad angegeben wird. Wenn der Servomotor also eine komplette Drehung als Grenze haben soll und Sie nur positive Positionswerte herausgeben wollen, werden die Grenzen auf 0/4095 gesetzt und die Ausgangsposition des Motors wird als 0 angenommen. Wenn der Servomotor nun zu seiner maximalen Position (4095) gehen soll, wird der Wert bei 6,28 (2pi) liegen.
3. Schritt: Den Multi-turn Modus konfigurieren
Es gibt viele Wege, den Dynamixel in den Multi-turn Modus zu konfigurieren. Das ROS-Paket dynamixel_driver; enthalten in dynamixel_motor, hat viele Nodes, die die Grenzen konfigurieren, aber es gibt auch Alternativen, wie Mixcell, Dynamixel Workbench und Smart Servo Framework.
4. Schritt: Konfigurationsdatei
Angenommen, Sie wollen Ihrem Dynamixel Servomotor maximale Umdrehungen geben, und Sie haben dies bereits im Multi-turn Modus festgesetzt, und seine ID ist 1, dann sollte die Konfigurationsdatei so aussehen:
tilt_controller:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: tilt_joint
joint_speed: 1.0
motor:
id: 1
init: 24576
min: 0
max: 49152
5. Schritt: Die Grenzen verstehen
Der Ausgangswert, festgelegt als 24576, wird als Position 0 angenommen, wenn wir eine negative Zielposition senden, wird sich der Servomotor gegen den Uhrzeigersinn drehen. Wenn wir aber einen positiven Wert senden, wird er sich im Uhrzeigersinn drehen, weil die Referenz sowohl des negativen, als auch des positiven Werts bei 24576 liegen. Der maximale Wert, den der Servomotor erreichen kann, liegt bei 37,7, die Grenze der Umdrehungen multipliziert mit 2pi.
init: 24576
min: 0
max: 49152
6. Schritt: Laufen lassen
Starten Sie den controller_manager.
roslaunch my_dynamixel_tutorial controller_manager.launch
Starten Sie den tilt_controller.
roslaunch my_dynamixel_tutorial start_tilt_controller.launch
7. Schritt: Bewegen lassen
Damit sich der Servomotor bewegt, ist das gleiche Vorgehen wie im vorherigen Dynamixel Tutorial notwendig, aber jetzt erhalten Sie größere Werte als 2pi.
rostopic pub -1 /tilt_controller/command std_msgs/Float64 — 9