Articulation Root only forwarding joint commands to some joints


Environment specs:
Running IsaacSim Version 2023.1.1-rc.8
Kit SDK Version 105.1.2
Client Library Version 2.38.12

I have been trying to resolve this problem for many hours now. I have a mobile robot with a Kinova arm attached to it. I have a simple ActionGraph setup that accepts joint commands for velocity/position from ROS2. I can verify the velocity/position commands are making it to the articulation controller. When I give a velocity command to the wheels (front_wheel_joint & back_wheel_joint), they move, but any position/velocity command given to joint1 (robotic arm base joint), causes the Articulation Controller to become highlighted yellow, and joint1 does not move. I can manually move joint1 by chanigng its Target Position or Target Position in the joint_1 drive panel. When I replace the kinova arm with the isaacsim-packaged franka arm (in the same simulatino), the commands get thru the articulation controller to the arm joints. I have looked over the Kinova & Franka URDF, and cannot find a difference.

The repo is here: GitHub - keenan88/isaacsim_ros2_greenhouse at dev.
World USD, robot base, and kinova arm URDF here: isaacsim_ros2_greenhouse/humble_ws/src/antworker_description/description at dev · keenan88/isaacsim_ros2_greenhouse · GitHub
Robot base + kinova URDF:
worker_with_arm.txt (11.5 KB)

To replicate the issue:

  1. Launch the USD file
  2. Open another terminal with ROS2 sourced and run: ros2 topic pub --once /joint_command sensor_msgs/msg/JointState “{name:[front_wheel_joint, rear_wheel_joint], velocity:[1.57, 1.57]}”. This should start the robot wheels moving.
  3. In the same terminal, run sensor_msgs/msg/JointState ros2 topic pub --once /joint_command sensor_msgs/msg/JointState “{name:[front_wheel_joint, rear_wheel_joint, joint1], velocity:[1.57, 1.57, 1.57]}”. If you open up the action graph, you will see that the wheels don’t move, and the Articulation Controller in the Action graph gets highlighted yellow. If you hover over the articulation controller, it says “Warning: Joint 1”.

Action Graph when arm joint is given a velocity:

The terminal output is basically the same:

I don’t understand why the articulation gets thru to the wheels and works with the Franka Emika arm, but not with the Kinova. Any insight would be greatly appreciated.

Thank you

Issue has been resolved. Not entirely sure which of these changes resolved the issue, but I learned/changed:

  1. Only 1 articulation root was used, though I could not find any documentation that explicitly stated this was necessary (source: Articulations — Omniverse Extensions latest documentation)

  2. Prims in the stage tree were organized to have no prims with rigid body APIs as children of other prims with rigid body APIs (source: Simulation of multiple RigidBodyAPI's in a hierarchy).

  3. I commented out as many of the cache volumes as possible when launching Isaac Sim in my docker container, in case something cached from a previous Isaac Sim crash was causing a problem when I restarted my Isaac Sim docker container. You can see my docker files (and launch my project was a demo if you want) here: GitHub - keenan88/isaacsim_ros2_greenhouse at 45d1f382ba7075aeab50d741c0dee3ce347d3230.

I hope this helps out someone else as they learn to use Isaac Sim.

There can be multiple articulation roots in your “World” stage. The structure look like this.

/Robot_1_prim ↔ Articulation_root

/Robot_2_prim ↔ Articulation_root