I am using the OpenSim API in MATLAB to extract the triangle proximity used in OpenSim JAM (https://github.com/opensim-jam-org/opensim-core) (from Smith2018ArticularContactForce) using a method called 'getTargetTriangleProximity' that depends only on State realised at Position stage:
Code: Select all
clear; close all;
import org.opensim.modeling.*
% read the model
osimModel = Model('lenhart2015.osim');
% get the tibio-femoral contact
contact = osimModel.get_ForceSet().get('tf_contact');
% get the Smith2018 contact force
smith_contact = Smith2018ArticularContactForce.safeDownCast(contact);
% initialise model
state = osimModel.initSystem();
% update position to default (all coordinates are zero)
coordset = osimModel.getCoordinateSet();
for nj = 0:coordset.getSize()-1
curr_coord = coordset.get(nj);
disp(['updating coordinate ', char(curr_coord.getName())])
curr_coord.setValue(state, 0.0);
% curr_coord.setSpeedValue(state, 0.0)
end
% I want the triangle proximity
smith_contact.getTargetTriangleProximity(state)
Code: Select all
Error using compute_smith_proximity
Java exception occurred:
java.lang.RuntimeException: SimTK Exception thrown at State.cpp:974:
Error detected by Simbody method getCacheEntry: State Cache entry was out of date at Stage Position. This entry depends on version 1 of
Stage Position but was last updated at version 0.
(Required condition 'version == m_dependsOnVersionWhenLastComputed' was not met.)
at org.opensim.modeling.opensimSimulationJNI.Smith2018ArticularContactForce_getTargetTriangleProximity(Native Method)
at org.opensim.modeling.Smith2018ArticularContactForce.getTargetTriangleProximity(Smith2018ArticularContactForce.java:848)
Any advice would be very helpful!
Thank you,
Luca