Setting the system state in a model with constraints

Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
POST REPLY
User avatar
Anantharaman Gopalakrishnan
Posts: 19
Joined: Fri Oct 10, 2008 2:38 pm

Setting the system state in a model with constraints

Post by Anantharaman Gopalakrishnan » Thu Mar 06, 2014 1:44 pm

Hi,

I've been trying to use the API to compute moment arms for my musculoskeletal model for different values of the generalized coordinates. Out of around 15 dofs in the model, only 4 are truly independent and each of the remaining 11 are functions of one of the 4, linked through a 'CoordinateCouplerConstraint'. I am thus only interested in computing moment arms about these 4 independent dofs.

In my C++ code, I tried using coordinate.setValue(state,Q), for the independent coordinates and expected that this procedure will automatically call system assembly to satisfy the constraints and automatically update the coordinate values for the corresponding dependent coordinates. This doesn't seem to be happening, and I'd be very grateful if someone could suggest how I could accomplish this? Thank you.


P.S: Another approach I tried was to first come up with a fairly accurate guess value for all 15 coordinates using an independently computed jacobian, and then do the following. This met with little success as well.

state.setQ(q_guess);
model.getMatterSubsystem().getSystem().projectQ(state);

User avatar
Ajay Seth
Posts: 136
Joined: Thu Mar 15, 2007 10:39 am

Re: Setting the system state in a model with constraints

Post by Ajay Seth » Mon Mar 10, 2014 4:03 pm

Coordinate does have a flag to enforce constraints (see defn):

Code: Select all

void Coordinate::setValue(SimTK::State& s, double aValue , bool enforceConstraints) const
The default for enforceConstraints is true.
If project() fails when you give it a "good" guess then it may indicate a problem with the constraint definition(s).
Perhaps the constraints are not consistent- that is satisfying one constraint requires violating another and the assembly solver is finding the least violation (the compromise) solution. If you have verified that the constraints have a feasible solution, then please post them here or post a relevant model so we can investigate. Thanks.

POST REPLY