Contacts to ground in dorsal position

Hi,
I am using a model based on BVH-data in "On hands and knees"-Position so far.
Now I want to modify the script for other BVH-data to simulate the Dorsal position as well. I think I just have to change contacts to the ground so I thought about it. In my opinion the necessary contacts are the following: Head, both feet, maybe one or both hands, pelvis and back.

I've implemented everything except pelvis and back because I'm not sure, wich contact nodes will exactly get in touch with the ground.
Can you help be in this deliberation?

Thank you very much in advance!
Best regards
Alicia

Here is the code with the contacts I have so far:

AnyFolder Contact ={

  ConditionalContactClass HandContactLeft (
  BaseObject = Main.EnvironmentModel.GlobalRef,
  TargetObject = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand.Ref.PalmJoint,
  DisplayTriggerVolume = 0,
  DisplayTargetNode =1
  ) = {
    UserDefinedLimitLow = -0.1;
    UserDefinedLimitHigh = 0.1;
    UserDefinedRadiusLimit = 5;
    Strength = 1000;
    StaticFrictionCoefficient = 0.4;
    NormalDirection = Y;
    FrictionDirection1 = Z;
    FrictionDirection2 = X;
    
  };
  
  
    ConditionalContactClass HeadContact (
  BaseObject = Main.EnvironmentModel.GlobalRef,
  TargetObject = Main.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.SkullSeg.HEAD,
  DisplayTriggerVolume = 0,
  DisplayTargetNode =1
  ) = {
    UserDefinedLimitLow = -0.2;
    UserDefinedLimitHigh = 0.2;
    UserDefinedRadiusLimit = 5;
    Strength = 1000;
    StaticFrictionCoefficient = 0.4;
    NormalDirection = Y;
    FrictionDirection1 = Z;
    FrictionDirection2 = X;
    
  };

 
  ConditionalContactClass FootContactRight (
  BaseObject = Main.EnvironmentModel.GlobalRef,
  TargetObject = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.BigToeNode,
  DisplayTriggerVolume = 0,
  DisplayTargetNode =1
  ) = {
    UserDefinedLimitLow = -0.2;
    UserDefinedLimitHigh = 0.2;
    UserDefinedRadiusLimit = 5;
    Strength = 1000;
    StaticFrictionCoefficient = 0.4;
    NormalDirection = Y;
    FrictionDirection1 = Z;
    FrictionDirection2 = X;
    
  };
  
  
  
  ConditionalContactClass FootContactLeft(
  BaseObject = Main.EnvironmentModel.GlobalRef,
  TargetObject = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.BigToeNode,
  DisplayTriggerVolume = 0,
  DisplayTargetNode =1
  ) = {
    UserDefinedLimitLow = -0.2;
    UserDefinedLimitHigh = 0.2;
    UserDefinedRadiusLimit = 5;
    Strength = 1000;
    StaticFrictionCoefficient = 0.4;
    NormalDirection = Y;
    FrictionDirection1 = Z;
    FrictionDirection2 = X;
  };     
  
   
};

Hi Alicia,

Please have a look in the file BackRestSupport.any in the SeatedHumanModel of the repository. In this file a number of nodes are defined on the spine to be used for contact.

The definition of these points can be re-used and then you can create the contact object in the way you have already using some of these points. (The contact definition in the seatedhuman model is outdated in the way it is implemented, but the points defined you can used)

Best regards
Søren

1 Like

Hi Søren,
Thank you very much for your fast reply. I think I'm now done with implementing the contacts my model will have.
When I run the analysis I get an error message: ERROR(OBJ.MCH.MUS4): AnyMocap.any(63): InverseDynamicStudy.InverseDynamics: Muscle recruitment solver: solver aborted due to singular KKT matrix.
Can you help me finding out what the problem could be? I think it deals with muscle and joint lists etc. of my model, isn't it?
Best regards
Alicia

Please find in addition a picure of when the inverse dynamics failed.


Best regards
Alicia

Hi Alicia,

This error means the model failed to resolved the muscle recruitment, so there was no way to do the balance.
In you case i would look carefully again at the contact you have defined and check they are all valid.
Try to increase the limitlow+ high and the radius to ensure the contact is possible.

Additionally you could try to add more contact elements.

On the picture it might look like the right foot is somehow flipped but it is hard to see on image. If this is the case it could also cause the issue.
To resolve this try to obtain a better starting guess on the posture, this you can do in the TrialSpecific.any file. So try to get it closer to the markers. I think this might solve the problem.

Best regards
Søren

Hi Soren,
Thanks for your message. So by chanching the radius the model is running.
I have another question due to shoulder contacts in dorsal position. I would like to imlement one contact on each shoulder plate so therfore I will need a refnode to implement the ConditionalContactClass ShoulderContacts. My question is how do I get the vector defined in sRel? Is there any possibility to find a spot on the scapula and get the coordinates to define sRel?
Best reagrds
Alicia

Hi Alicia,

the simplest way would be to simply use an existing node on the scapula for this.

If you find scapula segment in the tree you can right click and click

ModelView->RefFrames->Show

Then you should see all frames on the segment and you can select one to use for contact.

If you can not find one that will work exactly you can still find a reasonable close one, then copy and modify.

Note that any AnyRefFrame can be visualized through the modeltree so that you can see its location and orientation.

Best regards
Søren

This topic was automatically closed 125 days after the last reply. New replies are no longer allowed.