Applied efforts to joints do not reach the desired value

Hey!

I’ve been playing around with the Dynamic Control lib to set desired torque to specific joints. I’m using a Jetbot imported right out of the box. I’m trying to apply the same torque to both joints but with opposite sign so it rotates around its vertical axis. In order to apply a torque, the joint drive stiffness and damping are set to zero, btw.

from omni.isaac.dynamic_control import _dynamic_control

dc = _dynamic_control.acquire_dynamic_control_interface()

art = dc.get_articulation("/World/jetbot")

left_wheel_dof = dc.find_articulation_dof(art, "left_wheel_joint")
right_wheel_dof = dc.find_articulation_dof(art, "right_wheel_joint")

dc.wake_up_articulation(art)
dc.set_dof_effort(left_wheel_dof, 0.05)
dc.set_dof_effort(right_wheel_dof, -0.05)

I’m sensing the current torque at each timestep with the Isaac Read Effort Sensor Node in OmniGraph, and I see that both joints do not reach the desired value, both stay close but not these are not precise, causing unexpected behaviors. I expect that these torques are quite similar to each other, even though they are a little bit off from the passed value.

image
image

It seems that I’m missing some low-level explanation here that I cannot find elsewhere. Any idea?