Hi, I recently experimented with some inverse kinematics solvers other than KDL/PickIK/BioIK and stumbled upon RelaxedIK and its derivatives. Because it is implemented in Rust and has a very poor ROS wrapper, I reimplemented the basic algorithm in C++ as a MoveIt plugin. The results are very good and, at least on the examples I already tested, outperform all three solvers mentioned above.
Would you be interested in including this solver as a third mode next to the global and local modes?
Example benchmarking
This quantitative example is with the UR10 robot on a small table, IK is calculated for all red arrows on the table, the robot must not collide with the table.


Success rates (ur10 on small_table):
RelaxedIK: 1.0
BioIK: 1.0
PickIK: 0.88
KDL: 1.0
Solve times (ms) (ur10 on small_table):
RelaxedIK: 2.06 ms ± 1.37 ms
BioIK: 3.31 ms ± 1.91 ms
PickIK: 24.23 ms ± 20.29 ms
KDL: 8.19 ms ± 6.20 ms
Note that PickIK with default parameters only managed to solve 88 of 100 points within the time frame of one second.
Hi, I recently experimented with some inverse kinematics solvers other than KDL/PickIK/BioIK and stumbled upon RelaxedIK and its derivatives. Because it is implemented in Rust and has a very poor ROS wrapper, I reimplemented the basic algorithm in C++ as a MoveIt plugin. The results are very good and, at least on the examples I already tested, outperform all three solvers mentioned above.
Would you be interested in including this solver as a third mode next to the global and local modes?
Example benchmarking
This quantitative example is with the UR10 robot on a small table, IK is calculated for all red arrows on the table, the robot must not collide with the table.


Note that PickIK with default parameters only managed to solve 88 of 100 points within the time frame of one second.