Closing Loops in Articulation Causing Non-physical Behavior

Hi everyone,

I want to use Isaac Sim to simulate robots with closed chain mechanisms. This means the articulation will not form a tree structure. As indicated in [Articulations — Omniverse Extensions documentation], closing loop is possible with one joint being excluded from articulation.

I modified the humanoid robot to test if it will work. I create a distance joint between right_hand and left_hand. Then I exclude the left_lower_arm joint from articulation. When I press the play button, the humanoid suddenly flew away.

The behavior of humanoid without closing loop:

After create closing loop:

Besides, I have created robots with closed chain mechanisms, but I cannot control the joint angles using set_joint_positions and set_joint_position_targets in ArticulationView class. And sometimes it just flew away like the humanoid. I cannot really find out the reasons, which is pretty confusing. I think it might be because the articulation can still not well support closing loops at the moment?

Really appreciate it if you can help me!

Anybody can help? Thanks

can you send us the usd that you are using so we can investigate? thanks.

Thanks qwan.

The problem of my closed-chain robot in Isaac Sim is that the behavior of the robot using ArticulationView.set_joint_positions and ArticulationView.set_joint_velocities is not as expected.

Currently I developed a simple testing task following the pipeline of OmniIsaacGymEnvs. (GitHub - NVIDIA-Omniverse/OmniIsaacGymEnvs: Reinforcement Learning Environments for Omniverse Isaac Gym)

The task does not include any reinforcement learning training and I use the script to check if my robot really works as expected. The process of the task is that, at the beginning of each episode, the robot will return back to its initial states as shown in the image below (using set_joint_positions and set_joint_velocities). And for the first 100 timesteps, the robot is expected to hold still as I set the initial joint velocities to zeros. From then on, the robot will randomly move its joints to random angles.

However, after resetting the robot to initial joint positions and velocities, the robot still moves in the first 100 timesteps as shown in the following video, which is pretty strange.

But if I disable the joint so that it no longer a closed-chain, the problem disappears as shown in the following video (I disabled the joint called a__closed_chain_revolute under /module/a__link3_intermediate).

The usd file that I used:
The codes to test the robot: GitHub - AlanSunHR/OmniIsaacGymEnvs: Reinforcement Learning Environments for Omniverse Isaac Gym
And the usd file is located in OmniIsaacGymEnvs/omniisaacgymenvs/usds/omni_closed_test/omni_closed_test.usd

Thanks a lot in advance!

By the way, the robot has three active driving DoFs. But it has 6 revolute joints (3 joints are passive, zero-friction hinge). I excluded the joint on the top from the articulations so that the articulation is not a close loop according to the documentation. Besides, I deleted the angular drives for passive joints. Is it the right way to make free joints (joints that are not drived and free to rotate)?


Have you solved the problem?
I am also suffering from a closed loop.
Just executing a USD with a closed loop with spherical joints causes uncountable problems in Isaac SIM, even though it claims support on closed loops.

Hello, does it work now? I especially wanted to work on this software because it claims that it supports closed loops