Torque Control Model Parameter

@toni.sm @Ossama_Ahmed I’m applying custom torque controller in IsaacSim. The controller works well in Bullet but not good in IsaacSim. The “damping” and “stiffness” parameters are set 0.1 and 1e4 as Bullet, the robot joints fluctuate as the following video when the controller starts. In bullet, the robot will hold still with the same parameter.


When he “damping” and “stiffness” parameters are set 100 and 0 , the robot can hold without fluctuation. But more than 1k Nm torque are needed to command joints to move. What’s the control mechanism under Physx used by IsaacSim? What’s the difference between torque control mechanism under IsaacSim and Bullet?

Hello! would you be able to share the USD file(s) for me to check? If the robot was imported using a URDF, the urdf source should suffice.

in either case, here’s some things you can do to check the scene integrity:

  1. Check that the robot is set as articulation (the main robot prim, or the robot base prim should have Articulation Root API)
    1.1) Check that Enable Self-collisions is disabled, to be sure that it’s not a inter-collision problem causing the instability
    1.2) Update the solver Position/Velocity Iteration count in the Articulation Root Properties
  2. Check the stage unit and robot dimensions to make sure the asset is in the correct scale.
  3. Check the robot individual rigid bodies mass properties to ensure they are correct, sometimes they may be default to a high density material, causing the drives to not be able to maintain balance

The robot drive Stiffness and Damping are PD parameters for the joint pose, respectively. so making a stiffness equal zero means your robot will only try to compensate for deviations on the joint velocity, which may lead to fluctuation. if your robot has a position drive, you need to set a Stiffness parameter for it to follow the position target.

Thanks for replying. I want to clarify that If I’m aimed to applying pure torque control, the damping and stiffness have to be set 0?

yes - that should work. you can have a small damping component to represent the internal energy loss of the system. This would help the physics to maintain simulation stability.

Hi @rgasoto I’ve tried all solutions above but didn’t work. The robot still fluctuates. Here is my urdf and generated usd file.
Uploading: flexiv_rizon4.usd…
flexiv_rizon4.urdf (7.2 KB)

Hello, I was unable to download the USD file. it seems it didn’t come through.
for the URDF, are you able to package it on a zip folder containing the robot meshes as well?

@rgasoto I’ve reuploaded them, the usd file is imported using urdf importer.
robot.zip (1.3 MB)
flexiv_rizon4_kinematics.usd (4.4 MB)

The joint drive is a PD controller on the joint position and velocity target. The stiffness is the proportional gain to the position, and the damping is the Derivative gain on the position, and the proportional gain on the velocity target.

For position target control set parameters for both Stiffness and Damping above zero.
For a velocity control, set the stiffness to zero and damping to something above zero.
For direct joint effort control, set both drive parameters to zero, and use the Advanced properties of the revolute joint tab to define a stiffness / damping (both values need to be above zero).
For absolute precision, set the stiffness to float_max (1e40), and add some damping for internal energy loss.

1 Like