Beschreibung: Dieses Tutorial beschreibt, wie man einen Joint Controller mit einem oder mehreren Robotis Dynamixel Servomotoren herstellt.
Alle hier erstellten Dateien sollten in my_dynamixel_tutorial gespeichert werden, das wir im vorherigen Tutorial erstellt haben.
roscd my_dynamixel_tutorial
1. Schritt: Die Parameter des Controllers festlegen
Zuerst erstellen wir eine Konfigurationsdatei mit allen für den Dynamixel Controller notwendigen Parametern. Fügen Sie folgenden Text in die Datei tilt.yami:
tilt_controller:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: tilt_joint
joint_speed: 1.17
motor:
id: 4
init: 512
min: 0
max: 1023
Bemerkung: Die Identifikation des Motors muss der ID Ihres Dynamixel Aktors zugewiesen sein.
Hier sind weitere Informationen zur .yami Datei. Im Bereich “motor” gibt es vier Parameter: “id”, “init”, “min” und “max”.
- Der id Parameter ist willkürlich, Sie können jede beliebige Zahl auswählen, außer Sie verwenden andere Dynamixel, dann muss die ID des Dynamixel spezifisch sein.
- Der init Parameter hat 4096 Werte, diese gehen von 0 bis 4095. Dieser Parameter bezieht sich auf die Ausgangsposition des Joints (engl. “joint initial position”, deshalb init). Eine volle Drehung entspricht 360 Grad, setzen wir also den init auf 1365, so bewegt sich der Motor um 120 Grad aus seiner Ausgangsposition heraus, mit der ursprünglichen Referenz 0.
- Der min Parameter ist die minimale Drehung, die ein Motor schafft, hier gelten die gleichen Regeln wie für den init Parameter.
- Der max Parameter ist die maximale Drehung, die ein Motor schafft und folgt den gleichen Regeln wie die Parameter zuvor.
2. Schritt: Eine Startdatei erstellen
Als nächstes müssen wir eine Startdatei erstellen, die die Parameter des Controllers auf den Server für die Parameter lädt und den Controller startet. Kopieren Sie folgenden Text in die Datei start_tit_controller.launch:
<launch>
<!– Start tilt joint controller –>
<rosparam file=”$(find my_dynamixel_tutorial)/tilt.yaml” command=”load”/>
<node name=”tilt_controller_spawner” pkg=”dynamixel_controllers” type=”controller_spawner.py”
args=”–manager=dxl_manager>
–port pan_tilt_port
tilt_controller”
output=”screen”/>
</launch>
3. Schritt: Den Controller starten
Zuerst müssen wir den Controller Manager Node starten. Im vorherigen Tutorial wurde erklärt, wie. Nachdem der Controller Manager läuft, laden wir schließlich den Controller:
roslaunch my_dynamixel_tutorial start_tilt_controller.launch
Dieser Node lädt den Dynamixel Controller und beendet ihn; die Ausgabe sieht in etwa so aus:
process[tilt_controller_spawner-1]: started with pid [4567]
[INFO] 1295304638.205076: ttyUSB0 controller_spawner: waiting for controller_manager to startup in global namespace…
[INFO] 1295304638.217088: ttyUSB0 controller_spawner: All services are up, spawning controllers…
[INFO] 1295304638.345325: Controller tilt_controller successfully started.
[tilt_controller_spawner-1] process has finished cleanly.
Wenn alles sauber gestartet ist, sollte im Terminal “Controller tilt_controller successfully started” stehen.
Jetzt listen wir alle Themen und Dienste auf, mit denen der Dynamixel Controller aufwartet:
rostopic list
Relevante Themen:
/motor_states/ttyUSB0
/tilt_controller/command
/tilt_controller/state
Das Thema /tilt_controller/command erwartet eine std_msgs/Float64 Nachricht , die den Winkel des Joints festlegt.
Das Thema /tilt_controller/state gibt den aktuellen Status des Motors aus, die Art der Nachricht hier is dynamixel_msgs/JointState.
Relevante Dienste:
/restart_controller/ttyUSB0
/start_controller/ttyUSB0
/stop_controller/ttyUSB0
/tilt_controller/set_compliance_margin
/tilt_controller/set_compliance_punch
/tilt_controller/set_compliance_slope
/tilt_controller/set_speed
/tilt_controller/set_torque_limit
/tilt_controller/torque_enable
Ein paar der Dienste verändern die Parameter des Joints, wie Geschwindigkeit, Drehmomentgrenze des Motors, Übereinstimmungs-Spielraum und Neigung, etc.
4. Schritt: Den Motor bewegen
Um den Motor auch zu bewegen, müssen wir den gewünschten Winkel im Thema /tilt_controller/command angeben, und zwar so:
rostopic pub -1 /tilt_controller/command std_msgs/Float64 — 1.5
Das war’s! Jetzt bewegt sich der Motor!