Hi Daniel,
My colleague Lauranne (laul.sins) and me are working on a shoulder model involving a total anatomical prosthesis (glenoid and humerus components). We are using the FDK algorithm to control the translation of the humeral head with the following functions:
AnyKinLinear GHLin = {
AnyRefNode &scapula_gh = …Seg.Scapula.gh.ghProth;
AnyRefNode &humerus_gh = …Seg.Humerus.gh;
};
AnyKinEqSimpleDriver GHLinCon = {
AnyKinMeasure &ref = .GHLin;
DriverPos = {0.0015,0.004,0.00};
DriverVel = {0,0,0};
Reaction.Type={Off,Off,Off};
CType = {ForceDep,ForceDep,ForceDep};
};
AnyForce TranslationalGHStiffness = {
AnyKinLinear &ref = .GHLin;
F=-7000*{0,(ref.Pos[1]-.GHLinCon.DriverPos[1]),(ref.Pos[2]-.GHLinCon.DriverPos[2])};
};
AnyForceSurfaceContact ProtheseContact = {
AnySurfSTL &master = …Seg.Humerus.HumProthNode.ProtHumSTL;
AnySurfSTL &slave = …Seg.Scapula.GlenPos.GleneSTL;
PressureModule = 5.5e8;
};
The “ghProth” node on the scapula has the orientation of the glenoid component (major axis = y; minor axis = x).
We chose the humeral head component as the master surface, since it is made of an harder material (titanium) compared to the glenoid component (plastic).
The pressure module and the translational stiffness were found by iteration, by looking at the level of penetration and the converge of the solution.
Moreover, in the AnyBodyStudy function, we put:
...
tEnd = 8.0;
Gravity = {0.01, -9.81, 0.01};
nStep = 100;
InverseDynamics.ForceDepKinOnOff=On;
InverseDynamics.Criterion.Type=MR_MinMaxAux;
InverseDynamics.Criterion.AuxQuadraticTerm.Weight = 0.05;
InverseDynamics.ForceDepKin.MaxIteration = 50;
…
The STL surfaces (in mm) are enclosed with the thread. Is the mesh pattern and size seem correct ?
Thank you.
Pierre