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:

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:
git clone -b external_joint_state https://github.com/ulikoehler/franka_description.gitSie 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).
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:
./scripts/visualize_franka.sh arm_id:=fr3Beachten Sie, dass es anfangs seltsam aussehen wird, da rviz2 keine Standard-Joint States kennen wird. Dies ist normal und erwartet:

Welche genauen Joint States erwartet der robot_state_publisher?
Zuerst habe ich das /joint_states-Topic aufgezeichnet mit
ros2 topic echo /joint_states > joint_states.txtBasierend auf der Ausgabe:
---
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:
./publish_custom_joint_states.pykönnen wir sehen, dass sich der Roboter gemäß den sinusförmigen Joint States bewegt, die wir veröffentlichen:
