Wie man ROS2 visualize_franka.sh mit externem /joint_state-Input ausführt

Das visualize_franka.sh-Skript aus dem franka_description verwendet die Joint State Publisher-GUI, die eine grafische Oberfläche hat, die ständig Joint States veröffentlicht:

Joint State Publisher GUI

Während dies ein großartiges Werkzeug zum interaktiven Einstellen der Gelenkpositionen ist, blockiert es, da es ständig Joint States veröffentlicht, jede andere Software daran, Joint States auf dasselbe Topic zu veröffentlichen. Während Sie können Joint States auf dasselbe Topic veröffentlichen, wird die GUI einfach Ihren Joint State mit ihrem eigenen überschreiben.

Modifizieren von franka_description zur Akzeptanz externer Joint States

Um dies zu umgehen, müssen wir die launch/visualize_franka.launch.py modifizieren, um die Joint State Publisher-GUI nicht zu starten. Der Robot State Publisher wird sich ohnehin auf /joint_states abonnieren, sodass Sie einfach Ihre eigenen Joint States in dieses Topic injizieren können.

Der einfache Weg ist, meinen Fork zu klonen, der die Modifikation bereits enthält und auf meinem jazzy-Port von franka_description basiert:

ros2_visualize_franka.sh
git clone -b external_joint_state https://github.com/ulikoehler/franka_description.git

Sie können auch launch/visualize_franka.launch.py selbst modifizieren: Löschen Sie einfach den Node()-Aufruf, der die Joint State Publisher-GUI startet. Der folgende Diff zeigt Ihnen, welche Zeilen zu löschen sind (die Zeilen mit --Präfix).

visualize_franka_launch_diff.py
             robot_state_publisher_spawner_opaque_function,
-            Node(
-                package="joint_state_publisher_gui",
-                executable="joint_state_publisher_gui",
-                name="joint_state_publisher_gui",
-            ),
             Node(
                 package="rviz2",
                 executable="rviz2",

Ausführen des modifizierten Skripts

Führen Sie visualize_franka.sh wie gewohnt aus:

run_visualize_franka.sh
./scripts/visualize_franka.sh arm_id:=fr3

Beachten Sie, dass es anfangs seltsam aussehen wird, da rviz2 keine Standard-Joint States kennen wird. Dies ist normal und erwartet:

RViz2 no default joint state

Welche genauen Joint States erwartet der robot_state_publisher?

Zuerst habe ich das /joint_states-Topic aufgezeichnet mit

record_joint_states.sh
ros2 topic echo /joint_states > joint_states.txt

Basierend auf der Ausgabe:

joint_states_example.yaml
---
header:
  stamp:
    sec: 1736718274
    nanosec: 6300566
  frame_id: ''
name:
- fr3_joint1
- fr3_joint2
- fr3_joint3
- fr3_joint4
- fr3_joint5
- fr3_joint6
- fr3_joint7
- fr3_finger_joint1
- fr3_finger_joint2
position:
- -2.7437
- 0.8697321200000001
- 0.8121960000000001
- -2.2966916299999998
- -0.6359528999999999
- 2.9597191999999994
- 0.32752674000000015
- 0.038372
- 0.038372
velocity: []
effort: []

können Sie sehen, dass in unserem Fall 8 Einträge im name-Feld und 8 Einträge im position-Feld erwartet werden. Die velocity- und effort-Felder sind leer.

Veröffentlichen eigener Joint States

Jetzt können wir das Skript aus unserem Beitrag ROS2 Python script to publish custom joint states verwenden, um unsere eigenen Joint States auf das /joint_states-Topic zu veröffentlichen.

Durch Ausführen des Skripts aus jenem Beitrag:

run_publish_custom_joint_states.sh
./publish_custom_joint_states.py

können wir sehen, dass sich der Roboter gemäß den sinusförmigen Joint States bewegt, die wir veröffentlichen:

Franka Custom Joint States


Check out similar posts by category: ROS, Robotics, Python