sensitivity of jacobian transpose force mapping

Simbody is useful for internal coordinate and coarse grained molecule modeling, large scale mechanical models like skeletons, and anything else that can be modeled as bodies interconnected by joints, acted upon by forces, and restricted by constraints.
POST REPLY
User avatar
Daniel Krueger
Posts: 24
Joined: Fri Jul 09, 2010 12:05 am

sensitivity of jacobian transpose force mapping

Post by Daniel Krueger » Sun Nov 08, 2015 6:01 am

Hi all,
I am working on an inverse kinematics solution that accounts for static equilibrium conditions.
The goal is to find system configurations q that
a) satisfy several kinematic tasks (e.g. reaching for an object)
b) allow the system to be in static equilibrium meaning that in mobility space all forces acting on the system (gravity, actuators, muscles) sum up to zero: sum (tau)=0
Therefore I am looking for an elegant way to form the Jacobian of these equilibrium conditions with respect to the system configuration. Here an example:
To map a force F acting on a rigid body into mobility space (tau) we can use the system jacobian transpose operator: tau=~Jsys*F
What I am heading for is the sensitivity of this mapping with respect to the current configuration q: d (~Jsys*F)/dq !
Is there a way to get this analytically from simbody? My first Idea was to abuse the jacobian "bias" operators of SimbodyMatterSubsystem for this purpose since they compute Jdot*u which is in some way related to dJ/dq....
Best regards,
Daniel

User avatar
Michael Sherman
Posts: 807
Joined: Fri Apr 01, 2005 6:05 pm

Re: sensitivity of jacobian transpose force mapping

Post by Michael Sherman » Mon Nov 09, 2015 11:14 am

Hi, Daniel. Calculating da/dq analytically is difficult, but solving a(q)=0 is usually easy to do numerically so you probably don't need an analytic da/dq. You can find static equilibrium using IpOpt, for example, which will compute da/dq numerically when needed. Simbody has a class called LocalEnergyMinimizer that does exactly that, although it formulates the problem as minimizing potential energy rather than finding a=0.

You can form and factor da/dq yourself using Simbody's Differentiator class or with your own perturbation code. The primary difference between an analytic and numerical Jacobian da/dq is the precision with which it can be obtained: 6 decimal places with first order differentiation, 10 with second order, and 14 or so analytically or with automatic differentiation. The numerical methods are usually somewhat faster also.

Even for systems with no constraints a=inv(M)*f is an ugly thing to differentiate. The more technically difficult part is dM/dq but in practice df/dq can be worse since that term involves arbitrary user-written forces.

Regards,
Sherm

POST REPLY