I am using a mocap-driven full body human model. This human model is seated in a chair with front rest. The chairs position and the front rest is also driven by mocap data.
The situation is the following: the human is seated without the front rest and at some points it leans on to the front rest. I have the motion of the front rest (from the mocap-data) and the force-displacement function of the front rest. I wounder how I can model this contact force between the front rest and the human when they are only in contact under some periods of the simulation? Is there some functionality to solve this?
I would recommend you to see our ‘SeatedHuman’ example in the AMMR.
Then you can find the ‘Support.any’ file and you can find the many use of our conditional contact elements there.
Following is one piece of code examples:
AnyFolder FootSupportBackRight = {
AnyRefFrame &BaseObject =....EnvironmentModel.Seg.FootRest;
AnyRefFrame &TargetObject =....HumanModel.Right.Leg.Seg.Foot.HeelJoint;
AnyRefFrame &StrengthObject=TargetObject; //Node used for strength measurement, occasionally this is different from the target object
AnyFolder &DrawRef=Main.DrawSettings; //reference to the folder which contains drawsettings
//low limit for the strength measure function, if the distance measured along Direction[0] is below this val. the strength will be zero (negative)
AnyVar UserDefinedLimitLow=-0.05;
//high limit for the strength measure function, if the distance measured along Direction[0] is above this val. the strength will be zero
AnyVar UserDefinedLimitHigh=0.05;
//high limit for the strength measure function, if the radius measured along the plane with Direction[0] as normal is above this val. the strength will be zero
AnyVar UserDefinedRadiusLimit=0.7;
AnyVar [b]Strength [/b]=.Strength; //strength of muscles
AnyVar StaticFrictionCoefficient=.StaticFrictionCoefficient; //Friction coefficient
AnyVar ScaleFactor =1; //scale factor for draw vectors it can be set differently than by the drawsettings
AnyIntArray Direction={0,1,2}; //first element gives normal direction
#include "<ANYBODY_PATH_TOOLBOX>\FrictionContactMuscles\ContactSurfaceLinPush.any"
};
Here you can define the amount of strength for your individual conditional contact element.
I would recommend you to make your own implementation for this strength based on the distance or the time. Then you can achieve what you think.
Thanks for you answer. I think this is helpful for me. I am using the ConditionalContactClass. I have a contact between two segments and not foot to ground for example. I wonder if this function is transferring the reaction forces to both segments in the contact and not only the TargetObject?
Can you please explain to me the meaning of the strength parameter. Is this the maximum force that can be attained in the normal direction of the contact?
We are working with the conditionalcontactclass and have read in the paper by Fluit et al (2014) that contact is achieved if velocity is smaller than 0,8m/s. We are thinking about increasing this value, but have not found any place in the file structure where this can be made.
The file FootPlateConditionalContact.any isn’t to be found in the current repository (AMMR) that we use, nor is the setting LimitVelHigh (when checking other “conditional contact files”). We did find both the file and the setting in an older gait model/application (which is not useful presently). We use the ConditionalContact class for emulating a contact between the spine and a back rest. And, when the “contact node” on the spine is moving too fast (just above 0.8 m/s) we get a discontinuity in the contact force that has unwanted consequences (eg. iliopsoas has to work when it should not). We need to understand how the conditionalcontactclass has defined LimitVelHigh?