Applying a force to moving arm model

Hello there,

I want to add a force to the detailed hand model and therefor I loaded the "FreePostureFullBodyShoulderRhythmMove.Main" model.
I tried to get the dumbbell from the tutorial into the right hand.
I was able to load the stl file into the model by using the environment.any, but I couldn't connect it to the right hand. So I chose another way to get the dumbbell in my model (I know its not the right way): I modified the HandSeg.any of the AAUHuman folder by adding these lines:

 AnyRefNode dumbbellNode = {
    sRel = {0,0,0};
    ARel = RotMat (90*pi/180, y);
    AnyDrawSTL DrwSTL = {
      FileName ="dumbbell.stl";
      ScaleXYZ = {0.001, 0.001, 0.001};
      RGB = {0.2,0.4,0.5};
    };

After that the dumbbell was connected to the hand and it was possible to put a load on it.
The load was added in the main file :

  AnyFolder Loads = {
AnyForce3D Dumbbell = {
  AnyRefNode &dumbbellNode = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.Carpals.dumbbellNode;
  F = {0,-100,0};
};

Is there a way to link the dumbbell with the hand without modifying the AAUHuman ?
I saw that the box in the StandingLift model is connected with the hands by joints. But only with SimpleDriver and not with Interpolation joints.
Is it possible (and necessary) to adapt that to my model?

The other problem is that I get the following error by using a force over 30N...

WARNING(OBJ.MCH.MUS3) : C:/U..s/A..r/D..s/D..t/FreePostureFullBodyStatic.Main.any(107) : Study.InverseDynamics : Overloaded muscle configuration.
I think that problem is caused by the way I attached the force to the model. Am I right?

Thanks for your support,
Stefan

I am using the newest version of AnyBodyModelingSystem.

Hi Stephan,

this is not solving your problem, but I am using the glove node to apply forces to the hands, for example:
AnyForce3D Fr = {
F = {0,0,-1*.ForceFunction(Main.Studies.InverseDynamicStudy.t)[0]/2};
AnyRefFrame &HandRef = Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Glove.ConnectionNode;
};

Regards,

Patrick

Thanks for your help pat____

I modified the model and included your example, but I am getting the same error message after a few iteration steps

WARNING(OBJ.MCH.MUS3) : C:/U..s/A..r/D..s/D..t/FreePostureFullBodyStatic.Main.any(107) : Study.InverseDynamics : Overloaded muscle configuration.
In my understanding your approach just switches the force contact point from the dumbbell node to the glove.

Thanks again,

Stefan

Stefan,

you are right, but I though you would also want to know if there was a way to “link the dumbbell with the hand without modifying the AAUHuman” (see above) …

Have a look here:
http://www.anybodytech.com/index.php?id=926
There are a few words on overloaded muscles.

Regards,

Patrick

Hi Stefan,
According to me, your problem is related to how the shoulder model (and especially deltoid muscle) is defined. On what I saw, you cannot add a big mass in the hand (dumbbell) without an overloaded configuration. You can change or modify the problem a little by choosing another recruitment type but I think it will not change the core of the problem.

Of what I know, the next release will contain a new model of the deltoid, using the AnyKinSPSheet, what could help to produce a more physiological recruitment of deltoid fibbers.

Hope my answer is clear…

Best regards,
Lauranne

Hi Stefan,

I think the problem is somewhere else. The detailed hand model has “joint-muscles”, when you apply a load of 30N to one single finger bone, this joint muscle will be overloaded. It has probably nothing to do with deltoid etc.

Solution 1: distribute the load to many segments (recommended)

Solution 2: Try to model the interaction between handle of dumbbell and fingers (might be very difficult)

Hi Amir,

thanks a lot for your help! I have distributed the force to several segments and finally it works very well:).

But there is one more thing, where I am still working on.
I try to set up specific movements of the right arm. Therefore I have defined the angels of the joints according to the selected time series. When I run the simulation there is always a gap in the initial position of the angels. Where do the values for the initial position come from? I thought I have defined them with the first item of the time series?!

Many thanks,
Stefan

Have you looked into the Manequin file?

Hi Amir,

in the Manequine file (ManequineInterpolation.any) of the FreeProstureFullBodyShoulderRhytmMove Model :cool: I have defined for each joint the “timeseries”. I tried to find a solution in the last days, but unfortunately I wasn’t successful. Even in the basic model (without any changes) there is a gap (e.g. different position of legs, bones of the shoulder) between the defined initial position (in MannequineInterpolation.any) and the starting position of simulation.

Do you know where the problem is?

Best regards,
Stefan

Stefan,

I’m sorry, but I cannot really follow. I can only see a jump during the 3 steps of initial condition.

Hello Amir,

for a better understanding I will give you an example (from MannequinInterpolation.Any):

AnyFolder Right ={

AnyVector GlenohumeralFlexionVec =0.5*{10,45,90} ;
AnyVector GlenohumeralAbductionVec ={ 10,45,90};
AnyVector GlenohumeralExternalRotationVec ={10,40,80}

…}

I don’t understand where the initial positions are defined. Doesn’t the first value in the braces define the starting position of the angles of the joints in the simulation? When I (re)load the model the angles of joints in the shown model accord exactly to the values in the braces. After starting the simulation the angles of the joints changes instantly to a new (unknown) position. What is the reason for this?

For my application it is necessary to define and control exactly the angles of the joints. How can I manage this?

Thanks for your support,
Stefan

Hey,

the model uses the first angle for the initial position. However, there will be an interpolation between time 0 and 1 sec. Did you change anything with the time-vector, or the analysed time frame? That could result that if time 0 is outside the time frame, the initial position will be outside the given angles as well.

Hey,

I didn’t change anything. I am just using the basic model with no modifications.

Which time-vector do you mean? Am I right that the analysed time frame is defined by the nsteps?

Regard,
Stefan

Stefan,

I used that as Input:

  AnyVector GlenohumeralFlexionVec =0.5*{10,45,90} ;
  AnyVector GlenohumeralAbductionVec ={ 10,45,90}; 
  AnyVector GlenohumeralExternalRotationVec ={10,40,80}; 

I run the Model and find in the interface folder:

Main.Study.Output.Abscissa.t Main.Study.Output.Model.HumanModel.Right.ShoulderArm.Jnt.ClaviculaProtractionDriver.ClaviculaProtractionRhythm.HumerusFlexion.Pos[0] Main.Study.Output.Model.HumanModel.Right.ShoulderArm.InterfaceFolder.GlenohumeralExternalRotation.Pos[0] Main.Study.Output.Model.HumanModel.Right.ShoulderArm.Jnt.ClaviculaProtractionDriver.ClaviculaProtractionRhythm.HumerusElevation.Pos[0]
0.00E+00 8.73E-02 1.75E-01 1.75E-01
6.71E-03 9.14E-02 1.82E-01 1.83E-01
1.34E-02 9.55E-02 1.89E-01 1.91E-01
2.01E-02 9.96E-02 1.96E-01 1.99E-01

0.0873 * 180 / pi = 5
0.175 * 180 / pi = 10

that means initial angle is 5, 10 and 10

Hi Amir,

thank you very much for your support. Finally I got it. To determine the movement I was just looking at the “Model View” (graphical output) and not at the Output of ChartFX (numerical output). So I was confused about the gap between the angels of the joints after loading the model and performing the Inverse Dynamics analysis.

Thanks again!

Regard,
Stefan