Open francesco-romano opened 6 years ago
cc @pattacini @S-Dafarra @traversaro @DanielePucci
Out of sheer curiosity, have you ever tried to resort to a different parametrization of the orientation, for example, the axis-angle or the quaternion?
In my experience, RPY might bring about headaches.
I started developing the library by using quaternion parametrisation. Unfortunately we never tested on the robot this representation, and I remember some complains by the IPOPT derivative checker.
@francesco-romano I had my past developments focused on the use of axis-angle, for which we have access to good descriptions of the derivative (ref. Sciavicco-Siciliano)
That's great. We could extend this enum supporting also axis-angle
Just to provide some data:
Ipopt was using ma27
.
@S-Dafarra thanks a lot for the plots! Just a curiosity, which were the characteristics of the machine used for the tests? Probably, it would be nice to write them here as per reference
Regarding this kind of performance analysis, I think it would be to worth to have cpp interface for reading the Statistics of the IK?
For my understanding, at the moment performance statistics (e.g. Number of Iterations
) can be only retrieved setting high verbosity and parsing the std output.
Regarding this kind of performance analysis, I think it would be to worth to have cpp interface for reading the Statistics of the IK?
I am not sure it would make sense to wrap all that in a iDynTree-specific API. I think it could make more sense to expose some way to return opaque pointers to the internal IPOPT structures (documenting in a super clear way that the method is super unsupported) in a way that Ipopt::SolveStatistics
can be used in some profiling test. See std::thread::native_handle
( https://en.cppreference.com/w/cpp/thread/thread/native_handle ) to see how a similar pattern is implemented in the C++ standard library.
In this issue we collect timing statistics regarding the inverse kinematics with the aim of finding (and removing) potential bottlenecks.
The IK is configured in the following way:
In general IK returns in less than 10 iterations, a part some sporadic cases.
Here is a very long run (longest)
Here is the second most long run
Here a more "common" run