How can I assemble the soilidworks file with the human body in Anybody?

hello everyone . I will be appreciate If you can help me .
I am going to learn how to define the interaction between human body and a CAD file in Anybody .
I have a CAD file that I exported it to the anybody .
I opened it in the Anybody , then I opened the gait example in the software .. I have these 2 models separate . now , how can I assemble these together ? is there any option in anybody that can assemble these models automatically ? or I have to create nodes and define the interaction ?
I watched the webcasts "AnyBodyWebcast-2016.11.03-ModelingHuman-ExoskeletonInteractionWithAnyBody" and "AnyBodyWebcast-2018.02.28-SimulationsAsAToolForHumanCenteredExoskeletonDesign" .... but I cant understand how define the interaction....
If you have exprience in it or you know what should I do or watch to learn , I will be so grateful to help me . thank you

Hi Reyhaneh,

It is a good question.

The only example we have available for this currently is the one related to the webcast. https://github.com/AnyBody/support/wiki/Example-from-the-exoskeleton-webcast

Please note that there are two steps in this modeling task.

Kinematics: First you will have to connect the exo and the human kinematically. Here you need to make up your mind if you want this connection to be kinematically determined or not.

  • Kinematic determined: If you go for a kinematic determined solution you will need to add exactly the same amount of constraints between the exo and the human as you have dof in the exo. So as example an exo with two parts connected by a revolute joint would need exactly 7 constraints to the human for it to work.

  • Kinematic overdetermined: If you want the to capture sliding between the exo and the human better you may want to use an over determined approach so add more constraints between exo and human but have these as soft then the solver will make a compromise between them.

Make sure to have no reactions to be on when you create these drivers (Reaction.Type= {Off})

Kinetics: Here you need to ensure forces are transmitted correctly

These are the fundamental steps, I recommend to do it in steps first kinematics then kinetics, hope it helps.

Best regards
Søren

Hi Søren

I have the same problem. I want to import Exo into the plug in gait model, the exoskeleton I use comes from the SitToStand file in the wiki. I tried to follow the code in SitToStand, but I found that there are some differences in the Plug in Gait model.

When I imported Exo, it was not in the same position as the HumanModel and it is also larger than the HumanModel. I followed the method in SitToStand to add constraints, but dof and constraints of the human model in plug in gait are 174.

Can you tell me how to match the position of the exoskeleton and the HumanModel and how to add constraints? Any help would be great appreciaate. Thank you in advance.

Best wishes
Sam

Hi Sam,

For a segment the initial position is defined using the properties, r0 and Axes0, So you can change these values to get a different loading position, you can do this by finding the AnySeg objects in the exo model and alter the r0 and Axes0 values. r0 gives the position and Axes0 is the orientation, the easiest way to change orientation is to write e.g. Axes0 = RotMat(40*pi/180,x); or similar.

The constraints which are used in the example from the wiki should also be working in the mocap based model since the exo and human is the same, so I would start with the same constraints.

In general I would use this approach to attach an exo to the human, it is important to keep a running model and not to attempt the full solution from the start, so the idea is to start which something that runs, then gradually work towards the human EXO connection wanted.

  1. Make sure the human model run kinematically
  2. Bring the exo into the model
  3. Adjust r0 and axes0 to match human position
  4. Add drivers to ALL DOF in exo
  5. Ensure the model run kinematically, this model will not have any human EXO connection
  6. Create drivers between pelvis and equivalent exo segment, remove equivalent drivers from previous step, check that model runs. So if you add 6 constraints between EXO and human remove the equivalent 6 drivers added in step 4.
  7. Remove hip drivers from EXO model replace them by connection to the human, ensure the model is running.
  8. Continue this approach until EXO is driven by human motion, for each change ensure the model is running

Best regards
Søren

Hi Søren
Thanks for your detailed answer. Now I simplified the Exo in SitToStand into one segment , which has 6 degrees of freedom.I created a node in the middle of the human thigh to connect with Exo. Should I create 6 constraints on the thighs? How do I create it? Is it by connecting the six nodes on the exoskeleton to the nodes on the human body? I wrote six constraints like this.
AnyKinEq Thigh_Connection_Right1 =
{
AnyKinLinear lin =
{
AnyRefFrame& ref0 = Main.Model.EXO_ROBOT.THIGH_PART___1.ForceRefPoint1;
AnyRefFrame& ref1 = Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh.ThighNode;
Ref = 0;
};
MeasureOrganizer = {1};

AnyKinRotational rot =
{
AnyRefFrame & ref0 = Main.Model.EXO_ROBOT.THIGH_PART___1.ForceRefPoint1;
AnyRefFrame & ref1 = Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh.ThighNode;
Type = PlanarAngles;
};
Reaction.Type = {Off};
};
But I got this error when running inverse kinetic analysis:
ERROR(OBJ.MCH.KIN3): C:/U..s/A..n/D..s/A..x/A..o/T..s/A..p/AnyMoCapModel.any (101): InverseDynamicStudy.InitialConditions: Kinematic analysis failed in time step 0: Velocity analysis is not completed. Can you tell me how to solve it? Thank you very much.

Best wishes
Sam

Hi Sam,

Essentially you have a measure with 2 x 3 DOF with the linear and rotational measure.

But... you have the line
MeasureOrganizer={1};

Which means you are driving y coordinate of your linear measure only so not all six

Best regards
Søren

Hi Søren
Thank you for your reply. Is it correct to change to this? But I still got the same error. Can you tell me how to add constraints? Should I find six nodes on the human and exoskeleton and connect them? Thank you again.
AnyKinEq Exo_Thigh_Connection =
{
AnyKinLinear lin =
{
AnyRefFrame &base = Main.HumanModel.BodyModel.Right.Seg.Thigh.AttachmentNode;
AnyRefFrame &target = Main.Model.EnvironmentModel.EXO.ThighAttNode;
Ref = 0;
};
AnyKinRotational rot =
{
AnyRefFrame &base = Main.HumanModel.BodyModel.Right.Seg.Thigh.AttachmentNode;
AnyRefFrame &target = Main.Model.EnvironmentModel.EXO.ThighAttNode;
Type = PlanarAngles;
};
Reaction.Type = {Off, Off, Off, Off, Off, Off};
};

Best wishes
Sam

Hi Sam,

Yes this is in principle correct and should run, there is however no guarantee that the position of the exo is then correct wrt to thigh.

The AnyKinEq object you are using drivers all DOF to zero, which may not be what you want.

Instead you can use AnyKinEqSimpleDriver instead, it allows the postion to be specified,,

So something like this,

 AnyKinEqSimpleDriver Exo_Thigh_Connection =
{
AnyKinLinear lin =
{
AnyRefFrame &base = Main.HumanModel.BodyModel.Right.Seg.Thigh.AttachmentNode;
AnyRefFrame &target = Main.Model.EnvironmentModel.EXO.ThighAttNode;
Ref = 0;
};
AnyKinRotational rot =
{
AnyRefFrame &base = Main.HumanModel.BodyModel.Right.Seg.Thigh.AttachmentNode;
AnyRefFrame &target = Main.Model.EnvironmentModel.EXO.ThighAttNode;
Type = RotAxesAngles;  //this has been changed to make it easier to work with
};
Reaction.Type = {Off, Off, Off, Off, Off, Off};

DriverPos ={0,0,0,0,0,0};  //adjust exo positon wrt to thigh here first three coordinates are linear x y  z //next three are rotations  sequence is Z,y,x  (this comes from the rotational measure.)
DriverVel ={0,0,0,0,0,0};
};

Best regards
Søren

Hi Søren

Thanks for your quick reply, it helpes me a lot. After adding this code, the degrees of freedom and constraints of the model are the same. But I have some problems when running the analysis.

1.Exo will not follow the human body when I run the kinematics analysis. Is this normal?

2.When I run the inverse dynamics analysis, it shows: Muscle recruitment solver: solver aborted due to to singular KKT matrix. When I put Reaction.Type = ON, I can run the inverse kinetic analysis. If I want to run inverse kinetic analysis with Reaction OFF. Could you tell me how to do it?

Thanks again

Best wishes
Sam

Hi Sam,

No it sounds as your constraints are not part of the study... please ensure that you either include these constraints in the study or make a reference to them form the study, otherwise they are just loaded in the model, but the study do not "know" it should make use of them.

Concerning the KKT error you will need to either create reactions between the exo and the human using real reactions forces or you will need to have contact elements there like i wrote a few post back.

Best regards
Søren

Hi Søren

Thank you for your reply. I would like to ask you a few more questions. I don’t understand the Contact element in SitToStand. Why the Interaction between People and Exo uses CreateAnyGeneralForce6DOF? Is it the Contact element? This is not the same as SeatedHuman. And could you tell me what is the meaning of ConditionalContactClass RobotFootSupport_Left_1 in the AnyFolder Robot_External_Forces directory? Is it used to measure ground reaction forces?And why is ConditionalContactClass not used between Human and Exo?
Thanks again for your patience

Best wishes
Sam

Hi Sam,

The conditional contact class account for friction, so you can related a normal force to the amount of friction force possible, we often use this element for estimating GRF and many other things such as contact between exo and human or a chair. The other class creates as i remember it artificial muscles in all six DOF, which can also be fine this is a simpler approach.

I recently updated the wiki page on this topic please see Wiki on EXO human connection

Best regards
Søren

Hi Søren

Is there a difference between the results obtained using conditional contact class and CreateAnyGeneralForce6DOF? I used CreateAnyGeneralForce6DOF in the SitToStand model to connect the human and the exoskeleton, because I think this method is simpler, the human and the exoskeleton can run inverse dynamics analyse, but I don’t know whether the interaction force I calculated is correct. Do I need to modify or add something? Thank you in advance.

#include "CreateAnyGeneralForce6DOF.any"
AnyFolder Robot_Human_Interactions_Thigh =
{
CreateAnyGeneralForce6DOF Thigh_Forces(
TargetFrame =Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh,
BaseFrame =Main.Model.EXO_ROBOT.THIGH_PART___1.ForceRefCoordSys1)=
{
strength_Fx = 1000;
strength_Fy = 1000;
strength_Fz = 1000;
strength_Mx = 1000 ;
strength_My = 1000 ;
strength_Mz = 1000 ;
};
};

Best regards
babaozhou

Hi Babaozhou,

Yes, the results may differ. In the conditional contact case, shear forces are linked to the normal forces via friction. And in the latter case you assume that the thigh is rigidly linked to exo and there is an almost perfect load transfer between those segments. You need to decide how the load will be transferred in your exo.

Regards,
Pavel

Hi Pavel

Thank you for your reply. Do you recommend using CreateAnyGeneralForce6DOF to measure the interaction force between human and exoskeleton? Will the result be accurate?

Sorry I don’t understand the meaning of the thigh is rigidly linked to exo and there is an almost perfect load transfer between those segments. Could you explain a bit more?Thank you very much.

Best regards
babaozhou

The general forces will compute the amount of support needed to balance the thigh and apply as much force/torque (6 dof) as needed through the general muscles (subject to the muscle recruitment solution). This force will be estimated between ref. frames you specified in the code. This kind of approach is used when you do not care how the load is transferred between 2 segments. Can also be replaced with a reaction force.

The frictional contact elements will assume points of contact between thigh and exo, where normal direction of force will be proportional to the frictional components of forces. Such elements could help you compute the force occurring in, say, straps attaching exoskeleton to the body. Due to the additional proportionality constraint, the amount of contact elements, and positioning - you may find a different solution as compared to the general forces. The human muscles may need to work more in one or the other scenario.

So it is really up to you to choose one or the other methods depending on your research question. I cannot recommend anything specific without knowing what you want to do exactly. You could probably start with the general muscles and assume that the exo provides support in every direction.

P.

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