Hi, I am trying to velocity control the RidgebackFranka robot ( RidgebackFranka/ridgeback_franka.usd) in the nvcr.io/nvidia/isaac-sim:2022.1.1 docker image.
In particular I am sending the following:
a = ArticulationAction(joint_velocities=[0.2, 0., 0.], joint_indices=[0,1,2])
self._robots.apply_action(a)
The result is the following:
the robot over a few timesteps achieves a max. velocity of around 0.15
as it moves away from the origin, it then slows down. If I change the sign of the commands, it then accelerates again in the other direction, until it is further away from the origin and slows down again
So I have two questions:
why does it never achieve the actual target velocity but is always a bit slower
why does it then slow down, even though I continue to apply the same actions at each timestep?
Turns out even if never setting position targets, the underlying controller will assume position targets of 0. So the solution is to simulatenously pass in the current position as a target
That is correct - The joint drive has two configuration parameters:
Damping: It drives a proportional gain on the joint velocity. For position-based drives, if target velocity is set to zero it acts as a dampener and softens the joint response (akin to a Derivative gain in a PD controller)
Stiffness: It drives a proportional gain on the joint position. for velocity-based drives (only really recommended for wheels) it must be set to zero, otherwise it will interfere and fight with the target velocity - making the joint slower as it moves away from the target position - proportional to how far it is from the target position.