Conservation of angular momentum issue in Isaac Sim and Isaac Labs using closed kinematic chain

Hi,

I am trying to simulate a quadruped with closed kinematic chains for legs in free fall and I am facing an issue with the conservation of angular momentum, If the robot starts with no movement, no angular velocity, and zero gravity it stays perfectly still and not moving or rotating over time. But if it does some movement, normally quite fast, and then freezes all its movements, the robot in some instances rotates slowly even though it starts with no movement of its articulated legs or body and ends with no movement the robot spins. The distribution after I tried all the things mentioned below is that 60% of the robots rotate nothing or less than 2 deg /sec, 30% rotate 2-5 deg/sec, and 10% rotate 5-15 deg/sec.

So there seems to be some phantom force applied to the robot causing it to gain rotational velocity when it is moving its legs fast.

Is this just an unsolved problem with using the closed kinematic chain as quadruped legs due to the way the simulator deals with the tree structure of the robot model, or is there a way to conserve angular momentum even with fast leg movements?

Some more information: The robot I am simulating uses the same leg structure as this post:
Simulating quadruped with “five bar linkage” legs

and sim settings as this post: Comment with settings

I am currently using both Isaac Labs and Isaac Sim to simulate and try to solve this, so that is why I am posting here, if needed I will also ask in the Isaac Labs Github discussion.

Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.

Isaac Sim Version

4.2.0
4.1.0
Ii tried both

Operating System

Ubuntu 20.04

GPU Information

  • Model: NVIDIA RTX A6000
  • Driver Version: Driver Version: 535.171.04 CUDA Version: 12.2

Topic Description

Detailed Description

(Describe the issue in detail, including what you were trying to do, what you expected to happen, and what actually happened)

I am trying to get the robot to use its legs to change its orientation in zero g. The legs of the quadruped robot are a five-bar closed kinematic chain design.

The problem described above is causing the policy to not learn how to stay still when it has rotated to its target orientation from the start orientation while using its legs.

Steps to Reproduce

  1. Make a closed kinematic chain robot as linked above, remove one joint from articulation
  2. Simulate it in zero-g, with no external force
  3. Move the leg motors faster than 250 deg/s (the motors I use are capable of going 2100 m/s) so I regularly reach speeds of over 1000 deg/sec
  4. Set dt to 1/480 or less, we use mostly standard settings from RL games, and for the solver, I have tried both PGS and TGS, and they both have the same issue.
  5. Simulate with safe initial conditions and no rotational velocity or angular velocity on any bodies or joints
  6. Then, move the legs fast and stop moving to observe the induced rotational velocity of the robot.

The main problem is the effect this has on the robot as this does not represent the realistic dynamics of a robot in free fall.

It was much worse before when we by accident had set the maximum velocity in the physic settings to 1000 deg/sec, then all of the robots would rotate fast. No, that this is removed it is less but still, it rotates when it should not.

I can provide USD over email if needed.

Screenshots or Videos

These are two examples of reorientation using the robot in zero-g. It reorients fast, then sometimes spins, and sometimes does not spin when it stops moving. One where it doesn’t move much(or what I would say is an acceptable amount) and one where it is a big problem.

Additional Information

What I’ve Tried

Things I have tried that did not solve it completely
Physics settings

  • Sim dt
  • dt on contact sensor
  • Different control rate
  • Different solver (PGA vs TGA)
  • With and without self collisions
  • Higher and lower position solver iterations
  • Higher and lower velocity solver iterations
  • Simulate on CPU

Closed kinematic chain

  • Smaller step since for convergence
  • Smaller tolerance for convergence
  • Higher max iteration

USD model

  • Checked for unusual values in the file
  • Check for solver settings
  • Vary from default settings
  • Vary paw masses

Initialization

  • Different initialization setup
    • Zero position
    • Default position
    • Random position
  • Different ranges for initialization angles

Controller and motor model

  • Different controller gains
  • More and less stiff and damped
  • Maximum velocity
  • Implicit and explicit motor model
  • Modifying the motor model no load speed

Environment

  • Different workstations - Different GPU’s
  • Isaac Sim standalone and Isaac labs
  • Isaac sim versions, 4.1, 4.2 for Isaac labs
  • Different robots with a closed kinematic chain

Related Issues

(If you’re aware of any related issues or forum posts, please link them here)

This seems to have a similar issue, but I could not find any constrain that I have that is similar to what solved it for him Isaac sim 4.0.0 problem, close kinematics chain generating internal force/torque

Simulating quadruped with “five bar linkage” legs

Comment with settings

Closed kinematics chain accuracy decreased in 4.0