Maximum Joint Velocity ignored

In my custom robotic arm, I set the joint “maximum joint velocity” to a very low value like 0.0001. However, when I change the joint drive target, the joint moves as fast as always. Is the “maximum joint velocity” ignored when there’s a joint drive? How do I set the maximum velocity of a joint then?

Maximum joint velocity should work for joints that are part of the articulation, please can you double check that your joint belongs to an articulation (there should be articulation root in the hierarchy).

The joints are definitely part of an articulation. I’m using an ArticulationController with the LulaKinematicsSolver to get it to move. It moved too quickly, so I tried setting the max joint velocity. It still moved too quickly.

To simplify things I loaded the USD of the arm by itself, set the max joint velocity to a low value, and then set the target position in the drive. It still moved too quickly.

I’ve been able to get it to move slowly by setting the max_force in the drive.

I tried this using the Isaac Examples → Manipulation → Follow Target example and the max joint velocity seemed to be ignored too.

There’s a message on the console that seems related – I’m not sure what it means though – in what circumstance does the max joint velocity apply?

Any ideas on this?

Just found a big clue. I had the physicsScene “Time Steps Per Second” set to 60 and the maximum joint velocity set crazy low, like 0.00001, and the maximum joint velocity was totally ignored. When I changed the “Time Steps Per Second” to 1000, all of a sudden the joint started moving way slower (relative to the simulation time). At this higher time steps per second the maximum joint velocity was honored.

So seems there’s an error in the code that is comparing the velocity to the maximum joint velocity – probably somewhere the physics step size time isn’t being honored.

Hi @dan.sandberg - we recently found that joint velocity limits were not respected by joint drives. This is fixed, but did not make the last release. What we can recommend as a workaround is switching to the PGS solver, and GPU simulation in particular. Please let me know if that works for you.

Changing the Solver Type to “PGS” in the PhysicsScene didn’t seem to help. I tried setting “Enable GPU Dynamics” as well, and that didn’t help either. Presumably that’s not the right way to enable “GPU simulation”? How should I do it?

Are you sure you have the right physics scene selected?

I used the filter to check that there’s only one physics scene. I have the joint max velocity set to 0.01, but the arm takes 1.5 seconds to get to the target when time steps per second is set to 60, and 15 seconds when it’s set to 600. So the max velocity seems to be ignored.

Can you confirm that it works for you with a given arm? If so tell me which arm and I’ll try to replicate.

Sorry, correction — the max joint speed is ignored at 100 time steps per second but honored at 1000 time steps per second.