David,
These are good questions and it's good to see that you want to get to the bottom of this.
In robotics, inverse kinematics is only concerned with the position/orientation of the end effector. If the robot has more than 6 DOF, this is an underdetermined problem, with an infinite number of solutions. This is mentioned in the paper you cited. In animation, they solve the same problem when they need to have a hand or foot in a specified location.
In OpenSim, we want to find the skeleton pose that puts all markers where the motion capture system saw them. Unless the number of markers is very small, this is an overdetermined problem, with no exact solution. Therefore, we look for a least-squares solution. The least squares optimization problem is described here:
https://simtk-confluence.stanford.edu:8 ... tics+Works
That page mentions a "general quadratic programming solver" but this is not a quadratic programming problem. Each function x_i(q) is a nonlinear function (it's the forward kinematics of the skeleton, which involves cos, sin, in complex combinations). Sequential quadratic programming (SQP) could be used with such a nonlinear model.
However, SQP won't be the fastest method because it does not take advantage of the special structure of the optimization objective: it is a sum of squares of functions of (q). For such nonlinear least squares problems, the Levenberg-Marquardt problem is the recommended method. Gauss-Newton is simpler and faster but less robust. With the LM or GN methods, the Hessian matrix of the optimization objective is approximated very efficiently from the Jacobian matrix of the functions in the summation [1,3].
Maybe someone from the OpenSim team can clarify which algorithm is actually used.
There is also some confusion about terminology. The early papers on marker-based IK used the term "global optimization" [2]. Here, "global" refers to optimizing the pose of multiple body segments at the same time, rather than one body segment at a time, as was done traditionally with three markers on a segment. This is an unfortunate term, because "global optimization" already has a very specific meaning in the field of optimization! The title also mentions "constraints". This refers to having joints (kinematic constraints) in the model. It's not a constrained optimization when a forward kinematic model is used. "Inverse kinematics" is a better term, but then it gets confused with the traditional end-effector IK problems. More accurate would be "least-squares inverse kinematics".
You would never want to use global optimization for IK, it is too slow, and you may end up in a local optimum. This is somewhat paradoxical, usually we use global optimization to avoid local optima. Musculoskeletal IK has many local optima, where the skeleton is twisted, but those are easy to avoid by using a neutral pose as initial guess for a local (gradient-hessian-based) optimization in the first frame of data. Each subsequent frame then uses the previous frame's solution as an initial guess. Often, you need only one or two iterations of the solver.
Apparently, the term "direct kinematics" is sometimes used to indicate the method where the (6-DOF) pose of a single segment is estimated from 3 or more markers. That's not a great term either, because "direct kinematics" is already a synonym for forward kinematics.
Personal/historical note: I worked on a proprietary marker-based IK code for Motion Analysis Corp. This was not published or patented, but commercially available in 1997 under the name "Mocap Solver". It had a lot of impact in the animation industry and I completely underestimated its potential for biomechanics research. In 1999, Vicon had a similar capability [2]. In the same year, it was independently developed by Zoran Popovic at Carnegie Mellon University who described it in one paragraph in his PhD dissertation. SIMM (a precursor of OpenSim) used Mocap Solver and made it compatible with musculoskeletal models.
--
Ton van den Bogert
[1] Numerical Recipes in Fortran, 2nd edition, 1992, chapter 15.
[2] Lu TW, O'Connor JJ (1999) Bone position estimation from skin marker co-ordinates using global optimisation with joint constraints. J Biomech 32(2):129-134.
[3] van den Bogert et al. (2013) A real-time system for mechanical analysis of human movement. Medical and Biological Engineering and Computing.