Zum Hauptinhalt springen

Das Hardware-Interface verwenden

Veraltete Dokumentation

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 an
  • position, velocity und acceleration: Diese drei Command-Interfaces müssen alle gleichzeitig aktiv sein; sie werden für das Trajektorien-Streaming verwendet

Das Hardware-Interface konfigurieren

hinweis

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.

warnung

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.yaml korrekt 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-Framework
  • robot_state_publisher: liest die Gelenkzustände und gibt auf Basis der in der URDF-Datei definierten Kinematik Transformationen an tf aus
  • controller_manager-Spawner, der einen joint_state_broadcaster-Controller startet, um die vom Roboter empfangenen Gelenkzustände zu publizieren
  • controller_manager-Spawner, der einen joint_trajectory_controller (in der Konfiguration robco_controller genannt) 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:

Aktivieren des Beta-Update-Kanals in RobFlow

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

Senden des ros-control-Requests von der API-Docs-Seite in RobFlow

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

RobFlow zeigt den ROS-Streaming-Zustand an

hinweis

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.