How to send joint torque command to Isaac Sim

Hello, I want to implement some controller to control robot arm position in Isaac Sim. I have developed my controller on Isaac SDK (c++) and the controller provides control input as torque. Does any components of Robot Engine Bridge can send torque command to Isaac Sim ?. Right now, I only able to send joint position by Joint Control component.

Currently only position and velocity control are supported.
The composite message doesn’t have a Measure that corresponds directly to torque on a joint

What proto message are you using with your controller?

I used composite proto.

Got it, which measure in the proto do you use to specify torque?

Right now, I can’t specify torque directly, but I know that joint drive in Isaac Sim computes joint torque with this equation.

torque = stiffness × (targetPosition - p) + damping × (targetVelocity - v)

Then, I set damping = 0 and use Position Measure to send targetPosition = torque/stiffness + p which should turn above equation into just torque. However, with this work around method there are some limitations. Such as, the position feedback (p) from Isaac Sim only has value within [-2pi, 2pi] and simulation step size of Isaac Sim maybe isn’t small enough, so the behavior of my robot arm look unrealistic.

Do you have plan to support torque control in the future ?

From the Isaac Sim side there is already support to specify joint torques/efforts via the dynamic control API. The issue is that there isn’t proper support in the Composite proto for torque/effort messages from the Isaac SDK side.

It is possible to write a pyalice app to receive a custom effort message and then pass this onto dynamic control to do the joint control via a isaac sim extension/python script, I’ll make a note to add an example for this to make sure it would work.

1 Like