While working on importing the Fetch robot into Isaac Sim, I noticed an issue with the
omni.isaac.ros_bridge.ROS1PublishJointState node, specifically when working with a robot with a non-fixed base.
When importing the URDF with the base is fixed, the joint states are consistent with what is expected based on the URDF and the readings of the joint positions in Isaac Sim. However, when the base is not fixed, which is necessary as this is a mobile manipulation platform, the behavior is incorrect. The joint readings in the joint prims within the Isaac Sim UI are the same as before, which are correct, but the published joint states for some of these joints (but not all) are inverted from what they should be. This means that the readings for some of the joints are being inverted when publishing to the joint states ROS topic.
I have been able to replicate this on the Panda arm as well in which the first four joints are inverted only when the base is not fixed. I replicated this by importing the Panda URDF and adding a simple ActionGraph that published the joint states using the
omni.isaac.ros_bridge.ROS1PublishJointState node. The results can be seen below for the first joint of the Panda arm:
panda_joint1 UI (1st joint)
Echoing ROS joint state topic (notice that panda_joint1 is negative unlike above)
header: seq: 4765 stamp: secs: 1538 nsecs: 169965619 frame_id: '' name: [panda_joint4, panda_joint5, panda_joint3, panda_joint6, panda_joint2, panda_joint7, panda_joint1] position: [0.5236, 0.5235, -0.5236, 0.0, -0.5236, 0.0, -0.5236] velocity: [0.0008, 0.0019, -0.0003, 0.0, -0.0004, 0.0, 0.0005] effort: [-0.4321, 0.0787, -0.1563, 0.2315, 0.4689, -0.0735, -0.0421]
Echoing ROS joint state topic
header: seq: 55 stamp: secs: 2382 nsecs: 949946737 frame_id: '' name: [panda_joint1, panda_joint2, panda_joint3, panda_joint4, panda_joint5, panda_joint6, panda_joint7] position: [0.5236, 0.0, 0.0, -0.0698, 0.0, 0.0, 0.0] velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] effort: [0.0, -4.7777, 0.0, -1.8668, 0.0, 1.137, 0.0]