IK was solved by applying the RMPflow descriptor only for the index finger, and it seems to work well. However, the problem is that when the target position goes out of the workspace, the FPS drops rapidly.
"standalone_examples/api/omni.isaac.franka/follow_target_with_rmpflow.py " always keeps above 140 fps, but my hand example shows 30~90 fps.
One thing I suspect is that Hand’s structure is more complex than Franka’s.
@PARKBONG Sorry for a delayed reply. Yes, the easiest solution would be to change the max_iterations and descent_termination_delta parameters. Inverse Kinematics is not able to easily determine that a target position is outside the workspace of the robot, and so it runs for max iterations before giving up. So playing with these number may help your use-case. But you can also add your own layer of processing to make a bigger impact on the performance.
For instance, you since the finger is moving in an arc, it is probably simple for you to check whether a target position is going to be outside the workspace and simply clip the target position to be within the workspace. Or you could have two instances of IK where one has a short horizon for giving up, and you see if it got close to a candidate target position before giving it to the long-running IK.
I meant that for a specific robot, you as the programmer would be able to make some simple sanity checks. There is not a general tool for this in Isaac Sim right now. Looking at your specific robot, you can probably make a pretty accurate bound for the workspace because the finger is only three revolute joints moving in a parallel plane attached to the knuckle. So the furthest the tip of the finger could be from the knuckle is if the finger is straight. And the finger tip is somewhere on a plane relative to the knuckle. So the valid workspace coordinates are probably somewhere within a circle of radius finger_length around the knuckle.