gizatt / pydrake_kuka

MIT License
5 stars 5 forks source link

Question about output from InverseKinTraj #8

Closed rickyduh closed 5 years ago

rickyduh commented 5 years ago

When I compute the inverse kinematics of a trajectory from Point A to Point B using the following command: results = ik.InverseKinTraj(tree, ts, q_seed, q_nom, constraints, options)

I can access the results using results.info[0].

I assume if results.info[0] returns 1, then the IK was feasible and if it returns a value other than 1, then the IK was not feasible. Is this a correct assumption?

In addition, for the full trajectory, results.info[0] only returns one value. I would have though that it would return an array of values where each result corresponds to a single knot point in the IK trajectory. Since it only return one value, what point does that correspond to? Is it the final point in the IK trajectory? Or does a value other than 1 mean that one of the points was infeasible in the entire trajectory and a returned value of 1 means that ALL of the points in the trajectory are feasible?

gizatt commented 5 years ago

This question is getting enough into the meat of Drake that I'd recommend you move it over to the Drake Stackoverflow tag -- if you have trouble getting responses let me know and I can remind the Drake devs to check it out.

The return info types are specified in a header somewhere, but generally, info 1 is "safe" and anything else is dangerous. It depends on what solver backend is being used (Snopt vs Ipopt for nonlinear optimizations, the old IK interface that this repo uses makes it hard to tell which is being used), but Info 13 is "infeasible" while info 100 is more like "numerical issues" and is usually actually OK.

The solve status is for the entire trajectory optimization -- if any single point is infeasible, the whole trajectory is infeasible.

rickyduh commented 5 years ago

Ok great, this was helpful! Thank you for letting me know.