Das Hardware-Interface verwenden
Dieser Bereich beschreibt die robco_ros2-Integration in der mit RobFlow 7.x
ausgelieferten Form. Er wurde nicht für RobFlow 8 aktualisiert, und die
Schnittstelle ist in aktuellen Systemen nicht verfügbar.
Das Paket robco_hardware stellt ein ros2_control-Hardware-Interface bereit, über das
ros2_control-Controller mit RobCo-Robotern kommunizieren können.
Die folgenden Command-Interfaces werden unterstützt:
effort: Der Roboter nimmt Drehmomentbefehle anposition,velocityundacceleration: Diese drei Command-Interfaces müssen alle gleichzeitig aktiv sein; sie werden für das Trajektorien-Streaming verwendet
Das Hardware-Interface konfigurieren
Die Verwendung des Hardware-Interface setzt eine URDF-Datei zur Beschreibung des Roboters voraus. Unter Eine URDF-Datei erstellen ist beschrieben, wie Sie eine solche Datei erzeugen. Passen Sie anschließend die unten genannte Launch-Datei so an, dass sie die richtige Datei für Ihre Roboterkonfiguration lädt.
Die im Paket robco_bringup enthaltenen Launch-Dateien und Konfigurationen gelten für eine
Beispielkonfiguration des Roboters und sollten als Grundlage für eigene Dateien für Ihre
spezifische Roboterkonfiguration dienen. Aufgrund des modularen Aufbaus von RobCo-Robotern
kann keine generische Konfiguration bereitgestellt werden, die für alle Konfigurationen
passt.
Im Paket robco_bringup finden Sie eine Beispiel-Launch-Datei
(robco_controller.launch.py). Damit das Hardware-Interface korrekt arbeitet, stellen Sie
sicher, dass:
- die Launch-Datei auf die richtige URDF-Datei verweist
- die URDF-Datei zur Roboterkonfiguration passt und die
ros2_control-Konfiguration enthält - die Konfiguration in
robco_bringup/config/controllers.yamlkorrekt ist
Damit die Launch-Datei eine andere URDF-Datei lädt, können Sie sie anpassen oder in ein eigenes Paket kopieren.
Wie Sie die URDF-Datei an eine bestimmte Roboterkonfiguration anpassen und für
ros2_control konfigurieren, ist unter
Eine URDF-Datei erstellen beschrieben.
Die Datei controllers.yaml wird an den ros2_control-Controller-Manager übergeben und
konfiguriert alle gestarteten Controller. Die folgende Konfiguration dient als Beispiel:
controller_manager:
ros__parameters:
update_rate: 1000
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
robco_controller:
type: joint_trajectory_controller/JointTrajectoryController
robco_controller:
ros__parameters:
joints:
- joint0_joint
- joint1_joint
- joint2_joint
- joint3_joint
- joint4_joint
- joint5_joint
command_interfaces:
- position
- velocity
- acceleration
state_interfaces:
- position
- velocity
#interpolation_method: 'none'
gains:
joint0_joint: { p: 100.0, d: 0.0, i: 1.0 }
joint1_joint: { p: 100.0, d: 0.0, i: 1.0 }
joint2_joint: { p: 100.0, d: 0.0, i: 1.0 }
joint3_joint: { p: 100.0, d: 0.0, i: 1.0 }
joint4_joint: { p: 100.0, d: 0.0, i: 1.0 }
joint5_joint: { p: 100.0, d: 0.0, i: 1.0 }
Wenn Sie diese Konfiguration an einen neuen Roboter anpassen, achten Sie darauf, dass die
Gelenknamen mit denen aus der URDF-Datei übereinstimmen. Beachten Sie, dass die
Gelenk-Makros _joint an die Namen der Drive-Module anhängen, um daraus die Namen der
eigentlichen URDF-Gelenkelemente zu bilden! Hat das Drive-Modul also name="joint2", lautet
der Name des Gelenks joint2_joint.
Passen Sie außerdem den Parameter command_interfaces an den Satz von Command-Interfaces an,
der verwendet werden soll. Die unterstützten Kombinationen finden Sie unter
Bereitgestellte Command-Interfaces.
Schließlich müssen möglicherweise weitere Controller-Parameter angepasst werden. In der
Konfiguration oben gibt es beispielsweise für den JointTrajectoryController Gain-Werte für
jedes Gelenk.
Das Hardware-Interface starten
ros2 launch robco_bringup robco_controller.launch.py
Diese Launch-Datei startet die folgenden Nodes:
controller_manager: der zentrale Node im ros2_control-Frameworkrobot_state_publisher: liest die Gelenkzustände und gibt auf Basis der in der URDF-Datei definierten Kinematik Transformationen antfauscontroller_manager-Spawner, der einenjoint_state_broadcaster-Controller startet, um die vom Roboter empfangenen Gelenkzustände zu publizierencontroller_manager-Spawner, der einenjoint_trajectory_controller(in der Konfigurationrobco_controllergenannt) startet, um Trajektorien über die Command-Interfaces auf dem Roboter auszuführen
Sie kann als Ausgangspunkt für komplexere Setups dienen.
Den ROS-Streaming-Modus auf dem Roboter aktivieren
RobCo-Roboter mit aktivierter ROS-2-Schnittstelle publizieren Gelenkzustände, sobald der
interne Controller auf der Control Unit erfolgreich gestartet ist. Schreibzugriff (das Senden
von Befehlen) ist jedoch standardmäßig deaktiviert. Um ROS-Gelenkbefehle zu aktivieren, muss
der Roboter in den Streaming-Modus versetzt werden. Diese Funktion ist in der RobFlow-UI noch
nicht verfügbar, kann aber durch einen HTTP-PUT-Request an den Endpunkt /ros-control der
RobFlow-API aktiviert werden.
Derzeit handelt es sich um eine Beta-Funktion, daher muss in RobFlow der Beta-Update-Kanal aktiviert sein, um diesen Endpunkt nutzen zu können. Um den Beta-Update-Kanal zu aktivieren, öffnen Sie die Seite der Roboterkonfiguration, wechseln auf den Tab "Update Channel" und stellen von "Stable" auf "Beta" um:

Sobald der Beta-Kanal aktiviert ist, kann der Controller in den ROS-Streaming-Modus versetzt
werden, indem der folgende JSON-Body an den Endpunkt /ros-control gesendet wird:
true
Mit curl geht das wie folgt, sofern die Control Unit des Roboters unter 192.168.3.1
erreichbar ist:
curl -X PUT -H 'Content-Type: application/json' -d 'true' http://192.168.3.1/api/v3.0/ros-control
Alternativ ist das aus dem Browser möglich: Rufen Sie
http://192.168.3.1/docs auf, suchen den Endpunkt /ros-control,
klicken auf "Try it out" und dann auf "Execute".

Der Statusbereich oben rechts in der RobFlow-UI sollte nun anzeigen, dass sich der Roboter im Streaming-Modus befindet:

Sobald der Streaming-Modus aktiviert ist, überwacht der interne Controller die eingehenden Nachrichten. Wird 50 Millisekunden lang keine Nachricht empfangen, wird der Streaming-Modus automatisch beendet und der Roboter bremst ab, um jede Bewegung zu stoppen. Das Hardware-Interface und die ROS-2-Controller sollten daher gestartet werden, bevor der Roboter in den Streaming-Modus versetzt wird.
Einsatzmöglichkeiten des Hardware-Interface
Das von robco_ros2 bereitgestellte ros2_control-Hardware-Interface lässt sich auf
verschiedene Weise nutzen. Weitere Informationen finden Sie in der
offiziellen ros2_control-Dokumentation.
Für den Einstieg mit den mitgelieferten Launch-Dateien können Sie mit rqt_joint_trajectory_controller einfache Gelenkbewegungen kommandieren.