This is a terrible way to do IK. It is numerically unstable and will give vastly different solutions upon slight changes to the input. Coordinated Cyclic Descent using twist and swing quaternions give much better results:
(typo: all instances of "Jacobian Transform" should be replaced by "Jacobian Transpose".)
This post only scratches the surface. There are many interesting topics in IK. Joint weights, null space optimization when the robot is overactuated wrt the end effector, self-intersection, singularities, stability when reaching for unreachable points, hybrid position/force control, ...
Another interesting point is that from a numerical optimization point of view, the Jacobian transpose method is analogous to gradient descent, while using its (pseudo) inverse is basically the Gauss-Newton algorithm.
Thanks for the feedback. Can you speak more to "null space optimization", "self intersection", and "hybrid position/force control"? High level descriptions of the situations would be helpful, thanks. Or links to resources.
3-joint inverse kinematics doesn't have a unique solution. You need an additional metric to pick the solution you want. Closest to previous position? Best looking?
2-joint inverse kinematics has a simple analytical solution, which can be found in robotics textbooks.
Often things like the normal of the end effector is important. Other important factors are reducing power consumption (and thus motor heat) by taking into account system momentum and static torque on joints.
I've even seen 5-joint arms in factories for when the robot needs to reach around something in order to drill a hole or install a component.
The problem essentially reduces to finding the roots of a system of polynomials. This article suggests solving the system basically with Newtons method (generalized to higher dimensions). But an alternative approach is to use Groebner bases[1] which can give you not just a single (arbitrary) solution (which is what Newtons method produces) but all solutions. SymPy has a good implementation of groebner bases if you want to try it out.
Can anyone with experience comment on the FABRIK algorithm [1] for solving IK? There's an online demo here [2]
Basically, do you think the FABRIK method would be better than the Jacobian methods for a use-case in 3-dimensional space only (e.g. being used on a robotic arm)? There's a project I am interested in joining that involves IK and just want to know a 3rd-party opinion.
Why are ahead-of-time inverse kinematics so much more popular than feedback control methods? The numerical iteration involved in this method seems a lot more expensive than the iteration used in feedback control, which is also simpler to implement.
In a robot you use inverse kinematics to decide at what angle you should be setting your joint angles and then feedback control set the joints to the correct angle (in a very simple robot). I'm not aware of any feedback control mechanism that would turn xyz-space feedback to joint-angle-space control without going through an inverse-kinematics step.
In both cases, you have to transform between the goal in operational space (e.g. end effector pose) and the joint positions. One drawback of using the Jacobian inverse approach for control is that command values can get arbitrarily large in singular configurations (of course there are more advanced techniques to handle these cases).
Our arms have an entire subspace of possible solutions (you can move your elbow around while keeping your hand in place). In robotics, there are a couple of measures that can be minimized/maximized while computing inverse kinematics. Work is one of them but also time to reach the goal configuration or its "dexterity" for moving on in a future command.
http://www.tandfonline.com/doi/abs/10.1080/2165347X.2013.823...