Cannot fix issue: Kinematic analysis failed in time step 0 : Position analysis is not completed

Dear all,
I have a human standing wearing an exoskeleton. I'm using motion data from a c3d file to drive the human model. The exoskeleton is attached via nodes and drivers. When I run the analysis without the exoskeleton (not using mannequin drivers), everything works fine - which makes me think my initial position works fine. However, once I add the exoskeleton, I keep getting the following error message:

ERROR(OBJ.MCH.KIN3) : AnyMoCapModel.any(46) : MarkerTracking.InitialConditions : Kinematic analysis failed in time step 0 : Position analysis is not completed

I've played with switching the driver constraints from hard to soft in mutliple ways but nothing seems to work.

Looking forward to your help!

Many thanks in advance,

OS

image

my ExtraDrivers.any code:

////////////////////////////////////////////
////////////////////Exo Driver//////////////
////////////////////////////////////////////
// for the ExoLog Exoskeleton concept a connection between the Human Body and the Exo is made at the Hip
// as well as on the upper arm. Additionally, the Exo shall have contact at the upper back of the thorax.
// These connection have to be kinematically defined via AnyKinEqSimpleDriver
// It is important to note, that these connections are mainly responsible to hold in place the Exo
// during the kinematic analysis (markertracking). Hence, you should think about which DoFs shall be
// fixed and which shall be free for the different connections.

AnyKinEqSimpleDriver Pelvis2BackPlate =
{
AnyKinLinear PelvLin = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Pelvis2BackPack;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
};
AnyKinRotational PelvRot = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Pelvis2BackPack;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
Type = RotAxesAngles;
};
MeasureOrganizer = {0,1,2,3,4,5};//OG: MeasureOrganizer = {0,1,2,4,6,7}; // defines which indice (X,Y,Z,Rx,Ry,Rz) is changed below (0-5 relates to the Pelvis, 6-11 to the Thorax)
DriverVel = {0,0,0,0,0,0}; // to really fix the connection the relative velocity between these two need to be set to 0
CType = {Hard,Soft,Soft,Hard,Hard,Soft};
};

AnyKinEqSimpleDriver Thorax2BackPlate = {
AnyKinLinear ThorLin = {
  AnyRefFrame& base = Main.HumanModel.BodyModel.Trunk.SegmentsThorax.ThoraxSeg.Thorax2BackPack;
  AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.ThoraxAttach;
};
AnyKinRotational ThorRot = {
  AnyRefFrame& base = Main.HumanModel.BodyModel.Trunk.SegmentsThorax.ThoraxSeg.Thorax2BackPack;
  AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.ThoraxAttach;      
  Type = RotAxesAngles;
};

// Before the DoF of the Pelvis and the Thorax were defined together.
// This is due to the fact, that both represent the connection between the Exo and the upper body.
// You could also define two AnyKinEqSimpleDrivers, one for the Thorax and one for the Pelvis.
// Because of that, you can contribute measureOrganizer ranging from 0-11 (12 in total; 6 DoFs of the Pelvis and 6 DoFs of the Thorax)

 MeasureOrganizer = {0,1,2,3,4,5};//OG: MeasureOrganizer = {0,1,2,4,6,7}; // defines which indice (X,Y,Z,Rx,Ry,Rz) is changed below (0-5 relates to the Pelvis, 6-11 to the Thorax)
 DriverVel = {0,0,0,0,0,0}; // to really fix the connection the relative velocity between these two need to be set to 0
 CType = {Hard,Soft,Soft,Hard,Hard,Soft}; //defines how strictly the solver shall keep those connections
 // OG: CType = {Hard,Hard,Hard,Hard,Hard,Hard};

};

AnyKinEqSimpleDriver HumerusR2ArmShell =
{
AnyKinLinear Lin = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus.HumerusR2ArmShell;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___4.BracingAttach_R;
};
AnyKinRotational Rot = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus.HumerusR2ArmShell;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___4.BracingAttach_R;
Type = RotAxesAngles;
};

// MeasureOrganizer = {0,1,2,3,5};
// DriverVel = {0,0,0,0,0};
// CType = {Hard,Hard,Hard,Soft,Soft};

MeasureOrganizer = {0,1,2,3,4,5};
DriverVel = {0,0,0,0,0,0};

CType = {Hard,Hard,Hard,Soft,Soft,Soft};

};

// //jetzt definiert fuer FDK in ExoConnectionMuscles.any gem. Yashu

AnyKinEqSimpleDriver HumerusL2ArmShell =
{
AnyKinLinear Lin = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus.HumerusL2ArmShell;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___3.BracingAttach_R;
};
AnyKinRotational Rot = {
AnyRefFrame& base = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus.HumerusL2ArmShell;
AnyRefFrame& target = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___3.BracingAttach_R;
Type = RotAxesAngles;
};

// MeasureOrganizer = {0,1,2,3,5};
// DriverVel = {0,0,0,0,0};
// CType = {Hard,Hard,Hard,Soft,Soft};

// in Original verwendet:
MeasureOrganizer = {0,1,2,3,4,5};
DriverVel = {0,0,0,0,0,0};

CType = {Hard,Hard,Hard,Soft,Soft,Soft};

};
////jetzt definiert fuer FDK in ExoConnectionMuscles.any gem. Yashu

//------in OG aktiviert

AnyFolder MarkerDriverShoulderMotor = {

AnyKinDriverMarker LeftShoulder =
{
CType = {Soft,Soft,Soft}; //{Hard,Hard,Hard};
AnyRefFrame &MotorFrameLeft = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Hueftsaeule___2.SchulterKO;
AnyParamFun &Trajectory = Main.ModelSetup.C3DFileData.Points.Markers.LSHO.PosInterpol;

AnyDrawKinMeasure drw =
{
  Label = Off;
  Size = 0.01;
  Line = On;
};

};
AnyKinDriverMarker RightShoulder =
{
CType = {Soft,Soft,Soft}; //{Hard,Hard,Hard}
AnyRefFrame &MotorFrameRight = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Hueftsaeule___1.SchulterKO;
AnyParamFun &Trajectory = Main.ModelSetup.C3DFileData.Points.Markers.RSHO.PosInterpol;

AnyDrawKinMeasure drw =
{
  Label = Off;
  Size = 0.01;
  Line = On;
};

};
};

#endif
#endif

///////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////Measures/////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

///////////Exo skeleton/////////////////
//
// These kinematic measures measure translation and rotation of the Exoskeleton, in a 3-D vector.
// This 3D vector will be important for the output file, where the postion and orientation is needed for the inverse dynamic analysis

AnyFolder MeasuresExoskeleton = {
// AnyKinLinear ExoBackPackLin = {
//// These are the nodes that the measure refers to
// AnyFixedRefFrame &Ground = Main.EnvironmentModel.GlobalRef;
// AnyRefFrame &CoMTool = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
// Ref = 0;
// };
// AnyKinRotational ExoBackPackRot = {
//// These are the nodes that the measure refers to
// Type = RotAxesAngles;
// AnyFixedRefFrame &Ground = Main.EnvironmentModel.GlobalRef;
// AnyRefFrame &CoMTool = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
// };

AnyKinLinear PelvisLin = {
  AnyRefFrame &pelvis = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
  AnyRefFrame &pelvisexo = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
  Ref = 0;
};
AnyKinRotational PelvisRot = {
  AnyRefFrame &pelvis = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
  AnyRefFrame &pelvisexo = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.PelvisAttach;
  Type = RotAxesAngles;
  Axis1=x;
  Axis2=y;
  Axis3=z;
  viewKinMeasure.Visible = On;
};    

AnyKinLinear ThoraxLin = {

// These are the nodes that the measure refers to
AnyRefFrame &thorax = Main.HumanModel.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
AnyRefFrame &thoraxexo = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.ThoraxAttach;
Ref = 0;
};
AnyKinRotational ThoraxRot = {
// These are the nodes that the measure refers to
Type = RotAxesAngles;
AnyRefFrame &thorax = Main.HumanModel.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
AnyRefFrame &thoraxexo = Main.EnvironmentModel.Exoskeleton.ExoAssembly.Belt___1.ThoraxAttach;
Axis1=x;
Axis2=y;
Axis3=z;
viewKinMeasure.Visible = On;
};

//------------ Armschalenverschiebung
// Lineare Verschiebungsmessung
   AnyKinLinear ArmschaleLLin = {
     AnyRefFrame &humerus = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus.gh;
     AnyRefFrame &armshellL = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___3.BracingAttach_R;
     Ref = 0; //-1: global, 0: lokal zu ref1, 1: lokal zu ref2
   };
   
   AnyKinRotational ArmschaleLRot = {
     AnyRefFrame &humerus = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus.gh;
     AnyRefFrame &armshellL = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___3.BracingAttach_R;
     Type = RotAxesAngles; // Definiert die Art der Rotationsmessung (z.B. Euler-Winkel)
     Axis1=x;
     Axis2=y;
     Axis3=z;
     viewKinMeasure.Visible = On;
   };

// Rotationsverschiebungsmessung
   AnyKinLinear ArmschaleRLin = {
     AnyRefFrame &humerus = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus.gh;
     AnyRefFrame &armshellR = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___4.BracingAttach_R;
     Ref = 0; //OG:2; // 0: global, 1: lokal zu ref1, 2: lokal zu ref2
   };

   AnyKinRotational ArmschaleRRot = {
     AnyRefFrame &humerus = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus.gh;
     AnyRefFrame &armshellR = Main.EnvironmentModel.Exoskeleton.ExoAssembly.ArmschaleKMD___4.BracingAttach_R;
     Type = RotAxesAngles; // Definiert die Art der Rotationsmessung (z.B. Euler-Winkel)
     Axis1=x;
     Axis2=y;
     Axis3=z;
     viewKinMeasure.Visible = On;
   };       

};

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
///////////////////////////////////////////////////////////////////////////////////////

// This link to the mannequin drivers ensures they are picked up by the study.
AnyFolder& MannequinDrivers = Main.HumanModel.DefaultMannequinDrivers;
};

Hi Olivia,

Welcome to the AnyScript forum!

I can see that you have flagged this post as solved. Is that correct? Have you managed to solve your issue?

Best regards,
Dave