Person on gymnastics rings

Hi,

First, I am having some trouble with a model of a person hanging from gymnastics rings. When I have the model close to the configuration I need it in, and use the 3E arm muscle model, the kinematic constraints ARE resolved, but then the program says that all of the muscles of the upper arm have no strength and are overloaded because they’ve been over stretched. When I use the simple muscle model, I do not get any errors. How can I fix this?

Second, when I try to change the angles of the arm using an “intermediate” mannequin file (MannequinI.any), after the kinematics are run, the body goes supine. I think this has to do with the joint at the glove/ring interface (I’ve used a revolute joint about the x axis). The tutorial briefly mentioned being able to do skew angles, but it linked to a website that does not exist, so I’m not sure how to fix it for the different angles I need.

I’m using AnyBody 5.1, AMMR 1.4.1, and have attached the files I’ve modified.

Thank you,
Megan

Hi Megan,

When you use the 3E muscles make sure to run the calibration sequence before any other analysis. This very important to avoid the problem of muscles being too much streched. To do so simply use the RunApplication, it will automatically run the calibration first and then the inverse dynamic.

For the body position i think the problem comes from the CoMDriver. It seems that the connection hand/handles allows the body to rotate around the global Z axis, and this rotation is controlled by the CoMDriver. That means the whole body will rotate until the CoM is placed above the GlobalRef. You will have to change this part of the drivers to avoid it.

Best regards, Sylvain.

Sylvian,
Thank you for your response. When using the 3E muscles, I had been making sure to run the calibration before the inverse dynamics when I was getting that error. I did as you suggested, to use the RunApplication, and the issue was not resolved. HOWEVER, after further thought, I decided I didn’t need to use the 3E muscles as the simple ones are fine for what I’m trying to do.

As for the body position, this was the result of a side study, so I may investigate it at a later time.

I have a new problem. My first model was static, and now I’m trying to add in motion. What I want to do is to drive the left hand 90 degrees from below the shoulder to next to it, which would just be a 90 degree external rotation of the GH joint. In my body model, I already have GH joint external rotation as not driven. I think the problem is with my ring/hand/glove drivers, but I can’t seem to figure out my problem. I’ve copied in the relevant segments of EnviromentModel.any and JointsAndDrivers.any. I get 286 independent constraints with 287 unknowns and 1 unsolvable constraint. I’ve also attached the full set of files for reference.

Thanks for the help,
Megan

EnvironmentModel:
AnySeg lRing = {
Mass =2;
Jii ={0,0,0};
r0={.ParRef.lRingX,.ParRef.lRingY,.ParRef.lRingZ};
AnyRefNode lRingNode={
sRel={0.05,-.1,0.0};
};
AnyDrawSurf drw={
FileName =“handle”;
ScaleXYZ = {5.0,5.0,4.0};
RGB={1.0,1.0,1.0};
};
};
AnyFolder &lShoulderNode=Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Scapula.GHReactionCenterNodeRotated.CavityEdgeNode2

Joints and Drivers:
AnyFolder &RefEM=Main.Model.EnvironmentModel;
AnyFolder lHand = {
AnyRevoluteJoint lRingJoint = {
AnySeg &lRing = …RefEM.lRing;
AnyRefFrame &lFrame = …RefEM.lRing.lRingNode;
Axis = x;
};
AnyKinEqSimpleDriver lRingMotionX = {
AnyRevoluteJoint &lRingMotion=.lRingJoint;
DriverPos = {0.0};
DriverVel = {0.0};
Reaction.Type = {On};
};

     AnyKinLinear lHandPosLin = {
       AnySeg &lGroundNode = ..RefEM.lRing;
       AnySeg &lHandNode =   ..RefHM.Left.ShoulderArm.Seg.Glove;
     };
     AnyKinRotational lHandPosRot = {
       AnySeg &lGroundNode = ..RefEM.lRing;
       AnySeg &lHandNode =   ..RefHM.Left.ShoulderArm.Seg.Glove;
       Type=RotVector;
       AngVelOnOff = On;      
     };
     AnyReacForce lHandPosRotReaction = {
       AnyKinRotational &lHandPosRot = .lHandPosRot;
     };
     AnyKinEqSimpleDriverlRingMotionZ={

AnyKinLinear&lHandPosLin=.lHandPosLin;
DriverPos={0,0,0};
DriverVel={0,0,0};
Reaction.Type={On,On,On};
};
}; // End Left Hand and Ring Joints and Drivers
}; // Joints

 AnyFolder Drivers = {
   AnyKinEqSimpleDriver lRingDriver = {
     AnyKinLinear lShoulderRing = {
       AnyRefFrame &lShoulder = Main.Model.EnvironmentModel.lShoulderNode;
       AnyRefFrame &lRing = Main.Model.EnvironmentModel.lRing;
     };
     //MeasureOrganizer = {1};
     DriverPos = {0,0,0};
     DriverVel = 90*pi/180*{.23,-.23,0};
     Reaction.Type = {On,On,On};

(Remainder of files not included)

Hi Megan,

The problem seems to comes from the this joint:

AnyRevoluteJoint lRingJoint = {
AnySeg &lRing = …RefEM.lRing;
AnyRefFrame &lFrame = …RefEM.lRing.lRingNode;
Axis = x;
};

The two reference frame of the joint belong to the same segment lRing. This kinematic constraint cannot be solved. I think the second reference frame should be RefEM.lRingRef.lRingNode like on the right side.

Best regards, Sylvain.