Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Added system for setting inverse initialial conditions from marker tracking. #989

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

// Enter and edit Lab-Specific Data in this file:
#path MOCAP_LAB_SPECIFIC_DATA "Setup/LabSpecificData.any"
#define MOCAP_MANNEQUIN_OUTPUT ON

// Include the AnyMoCap Framwork
#include "<ANYMOCAP_MODEL>"
Original file line number Diff line number Diff line change
Expand Up @@ -67,48 +67,48 @@ Main.ModelSetup.TrialSpecificData =



PelvisThoraxExtension = -10;
PelvisThoraxLateralBending = 0;
PelvisThoraxRotation = 0;
PelvisThoraxExtension = DesignVar(0);
PelvisThoraxLateralBending = DesignVar(0);
PelvisThoraxRotation = DesignVar(0);

NeckExtension = 0;
NeckLateralBending = 0;
NeckRotation = 0;
NeckExtension = DesignVar(0);
NeckLateralBending = DesignVar(0);
NeckRotation = DesignVar(0);

Right = {

HipFlexion = 20;
HipAbduction = 4;
HipExternalRotation = -19;
KneeFlexion = 8;
AnklePlantarFlexion = -10;
SubTalarEversion = 0;
HipFlexion = DesignVar(0);
HipAbduction = DesignVar(0);
HipExternalRotation = DesignVar(0);
KneeFlexion = DesignVar(0);
AnklePlantarFlexion = DesignVar(0);
SubTalarEversion = DesignVar(0);

GlenohumeralFlexion = -18;
GlenohumeralAbduction = 0;
GlenohumeralExternalRotation = 0;
ElbowFlexion = 20;
ElbowPronation = 0;
WristFlexion = 0;
WristAbduction = 0;
GlenohumeralFlexion = DesignVar(0);
GlenohumeralAbduction = DesignVar(1);
GlenohumeralExternalRotation = DesignVar(0);
ElbowFlexion = DesignVar(0);
ElbowPronation = DesignVar(0);
WristFlexion = DesignVar(0);
WristAbduction = DesignVar(0);

};
Left = {

HipFlexion = -23;
HipAbduction = 0;
HipExternalRotation = 0;
KneeFlexion = 14;
AnklePlantarFlexion = -15;
SubTalarEversion = 0;
HipFlexion = DesignVar(0);
HipAbduction = DesignVar(0);
HipExternalRotation = DesignVar(0);
KneeFlexion = DesignVar(0);
AnklePlantarFlexion = DesignVar(0);
SubTalarEversion = DesignVar(0);

GlenohumeralFlexion = 28;
GlenohumeralAbduction = 8;
GlenohumeralExternalRotation = 0;
ElbowFlexion = 24;
ElbowPronation = 0;
WristFlexion = 0;
WristAbduction = 0;
GlenohumeralFlexion = DesignVar(0);
GlenohumeralAbduction = DesignVar(1);
GlenohumeralExternalRotation = DesignVar(0);
ElbowFlexion = DesignVar(0);
ElbowPronation = DesignVar(0);
WristFlexion = DesignVar(0);
WristAbduction = DesignVar(0);

};

Expand Down
2 changes: 1 addition & 1 deletion Body/AAUHuman/Trunk/MannequinValuesFromModel.any
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
AnyVar AnyVar_PelvisThoraxLateralBending=.InterfaceFolder.PelvisThoraxLateralBending.Pos[0]*180/pi;
AnyVar AnyVar_PelvisThoraxRotation=.InterfaceFolder.PelvisThoraxRotation.Pos[0]*180/pi;

AnyVar AnyVar_NeckExtension=0;
AnyVar AnyVar_NeckExtension=-1*.InterfaceFolder.SkullThoraxFlexion.Pos[0]*180/pi;
4 changes: 4 additions & 0 deletions Tools/AnyMocap/CheckAnyMocapConfiguration.any
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
#endif
#endif

// Switch for saving the MannequinValuesFromModel structure when running marker tracking
#ifndef MOCAP_MANNEQUIN_OUTPUT
#define MOCAP_MANNEQUIN_OUTPUT OFF
#endif

// Prefix which can be used by the application to distinques trials
#ifndef MOCAP_OUTPUT_FILENAME_PREFIX
Expand Down
110 changes: 109 additions & 1 deletion Tools/AnyMocap/JointAngleOutputs.any
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,115 @@ AnyFolder JointAngleOutputs = {
#endif

#endif



#if MOCAP_MANNEQUIN_OUTPUT == ON

AnyOutputFile OutputFile_MannequinValuesFromModel_Trunk ={
SepSign = ",";
SepSpaceAutoOnOff = Off;
Header.TitleSectionOnOff = Off;
Header.ConstSectionOnOff = Off;
Header.ConstSectionSaveOptionsOnOff = Off;
Header.VarSectionOnOff = Off;
FileName = TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Trunk.txt";
Values = {
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisPosX,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisPosY,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisPosZ,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisRotX,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisRotY,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisRotZ,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisThoraxExtension,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisThoraxLateralBending,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_PelvisThoraxRotation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyVar_NeckExtension,
};
};

#if BM_LEG_RIGHT & BM_LEG_MODEL_IS_TLEM
AnyOutputFile OutputFile_MannequinValuesFromModel_Right_Leg ={
SepSign = ",";
SepSpaceAutoOnOff = Off;
Header.TitleSectionOnOff = Off;
Header.ConstSectionOnOff = Off;
Header.ConstSectionSaveOptionsOnOff = Off;
Header.VarSectionOnOff = Off;
FileName = TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Right-Leg.txt";
Values = {
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_HipFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_HipAbduction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_HipExternalRotation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_KneeFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_KneeFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_KneeFlexion,
};
};
#endif

#if BM_LEG_LEFT & BM_LEG_MODEL_IS_TLEM
AnyOutputFile OutputFile_MannequinValuesFromModel_Left_Leg ={
SepSign = ",";
SepSpaceAutoOnOff = Off;
Header.TitleSectionOnOff = Off;
Header.ConstSectionOnOff = Off;
Header.ConstSectionSaveOptionsOnOff = Off;
Header.VarSectionOnOff = Off;
FileName = TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Left-Leg.txt";
Values = {
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_HipFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_HipAbduction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_HipExternalRotation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_KneeFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_KneeFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_KneeFlexion,
};
};
#endif

#if BM_ARM_RIGHT == ON
AnyOutputFile OutputFile_MannequinValuesFromModel_Right_Arm ={
SepSign = ",";
SepSpaceAutoOnOff = Off;
Header.TitleSectionOnOff = Off;
Header.ConstSectionOnOff = Off;
Header.ConstSectionSaveOptionsOnOff = Off;
Header.VarSectionOnOff = Off;
FileName = TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Right-Arm.txt";
Values = {
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_SternoClavicularProtraction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_SternoClavicularElevation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_GlenohumeralFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_GlenohumeralAbduction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_GlenohumeralExternalRotation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_ElbowFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Right.AnyVar_ElbowPronation,
};
};
#endif

#if BM_ARM_LEFT == ON
AnyOutputFile OutputFile_MannequinValuesFromModel_Left_Arm ={
SepSign = ",";
SepSpaceAutoOnOff = Off;
Header.TitleSectionOnOff = Off;
Header.ConstSectionOnOff = Off;
Header.ConstSectionSaveOptionsOnOff = Off;
Header.VarSectionOnOff = Off;
FileName = TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Left-Arm.txt";
Values = {
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_SternoClavicularProtraction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_SternoClavicularElevation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_GlenohumeralFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_GlenohumeralAbduction,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_GlenohumeralExternalRotation,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_ElbowFlexion,
&..BodyModel.MannequinValuesFromModel.AnyFolder_Posture.AnyFolder_Left.AnyVar_ElbowPronation,
};
};
#endif

#endif

}; //JointAngleOutputs

Expand Down
133 changes: 133 additions & 0 deletions Tools/AnyMocap/LoadMannquinValuesForInitialConditions.any
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
AnyFolder SetMannequinValues = {

#define _ANYMOCAP_JOINT_ANGLE_WARNING_MSG_

AnyFolder Trunk = {
#include "InterpolateJointAngleData.any"
FileReader.FileName ??= TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Trunk.txt";
FileReader.Data0 = zeros(NumElemOf(Main.Studies.MarkerTracking.JointAngleOutputs.OutputFile_MannequinValuesFromModel_Trunk.Values), FileReader.Length0 );
};
AnyFolder RightLeg = {
#include "InterpolateJointAngleData.any"
FileReader.FileName ??= TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Right-Leg.txt";
FileReader.Data0 = zeros(NumElemOf(Main.Studies.MarkerTracking.JointAngleOutputs.OutputFile_MannequinValuesFromModel_Right_Leg.Values), FileReader.Length0 );
};
AnyFolder LeftLeg = {
#include "InterpolateJointAngleData.any"
FileReader.FileName ??= TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Left-Leg.txt";
FileReader.Data0 = zeros(NumElemOf(Main.Studies.MarkerTracking.JointAngleOutputs.OutputFile_MannequinValuesFromModel_Left_Leg.Values), FileReader.Length0 );
};
AnyFolder RightArm = {
#include "InterpolateJointAngleData.any"
FileReader.FileName ??= TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Right-Arm.txt";
FileReader.Data0 = zeros(NumElemOf(Main.Studies.MarkerTracking.JointAngleOutputs.OutputFile_MannequinValuesFromModel_Right_Arm.Values), FileReader.Length0 );
};
AnyFolder LeftArm = {
#include "InterpolateJointAngleData.any"
FileReader.FileName ??= TEMP_PATH+"/"+ MOCAP_TEST_FILENAME_PREFIX + MOCAP_OUTPUT_FILENAME_PREFIX + Main.ModelSetup.TrialSpecificData.TrialFileName + "-MannequinValuesFromModel-Left-Arm.txt";
FileReader.Data0 = zeros(NumElemOf(Main.Studies.MarkerTracking.JointAngleOutputs.OutputFile_MannequinValuesFromModel_Left_Arm.Values), FileReader.Length0 );
};


#undef _ANYMOCAP_JOINT_ANGLE_WARNING_MSG_

AnyVar time ??= DesignVar(Trunk.InterpolatedData.T[0]);

AnyFolder LoadedMannequinValues = {
//This controls the position of the pelvi wrt. to the global reference frame
AnyVar PelvisPosX = .Trunk.InterpolatedData(.time)[0];
AnyVar PelvisPosY = .Trunk.InterpolatedData(.time)[1];
AnyVar PelvisPosZ = .Trunk.InterpolatedData(.time)[2];

//This controls the rotation of the pelvis wrt. to the global reference frame
AnyVar PelvisRotX = .Trunk.InterpolatedData(.time)[3];
AnyVar PelvisRotY = .Trunk.InterpolatedData(.time)[4];
AnyVar PelvisRotZ = .Trunk.InterpolatedData(.time)[5];

// These variables control the rotation of the thorax wrt the
// pelvis
AnyVar PelvisThoraxExtension = .Trunk.InterpolatedData(.time)[6];
AnyVar PelvisThoraxLateralBending = .Trunk.InterpolatedData(.time)[7];
AnyVar PelvisThoraxRotation = .Trunk.InterpolatedData(.time)[8];

AnyVar PelvisT12Extension = .Trunk.InterpolatedData(.time)[9];

AnyFolder Right = {
AnyVar SternoClavicularProtraction = ..RightArm.InterpolatedData(..time)[0];
AnyVar SternoClavicularElevation = ..RightArm.InterpolatedData(..time)[1];
AnyVar GlenohumeralFlexion = ..RightArm.InterpolatedData(..time)[2];
AnyVar GlenohumeralAbduction = ..RightArm.InterpolatedData(..time)[3];
AnyVar GlenohumeralExternalRotation = ..RightArm.InterpolatedData(..time)[4];
AnyVar ElbowFlexion = ..RightArm.InterpolatedData(..time)[5];
AnyVar ElbowPronation = ..RightArm.InterpolatedData(..time)[6];
AnyVar HipFlexion = ..RightLeg.InterpolatedData(..time)[0];
AnyVar HipAbduction = ..RightLeg.InterpolatedData(..time)[1];
AnyVar HipExternalRotation = ..RightLeg.InterpolatedData(..time)[2];
AnyVar KneeFlexion = ..RightLeg.InterpolatedData(..time)[3];
AnyVar AnklePlantarFlexion = ..RightLeg.InterpolatedData(..time)[4];
AnyVar SubTalarEversion = ..RightLeg.InterpolatedData(..time)[5];
};
AnyFolder Left = {
AnyVar SternoClavicularProtraction = ..LeftArm.InterpolatedData(..time)[0];
AnyVar SternoClavicularElevation = ..LeftArm.InterpolatedData(..time)[1];
AnyVar GlenohumeralFlexion = ..LeftArm.InterpolatedData(..time)[2];
AnyVar GlenohumeralAbduction = ..LeftArm.InterpolatedData(..time)[3];
AnyVar GlenohumeralExternalRotation = ..LeftArm.InterpolatedData(..time)[4];
AnyVar ElbowFlexion = ..LeftArm.InterpolatedData(..time)[5];
AnyVar ElbowPronation = ..LeftArm.InterpolatedData(..time)[6];
AnyVar HipFlexion = ..LeftLeg.InterpolatedData(..time)[0];
AnyVar HipAbduction = ..LeftLeg.InterpolatedData(..time)[1];
AnyVar HipExternalRotation = ..LeftLeg.InterpolatedData(..time)[2];
AnyVar KneeFlexion = ..LeftLeg.InterpolatedData(..time)[3];
AnyVar AnklePlantarFlexion = ..LeftLeg.InterpolatedData(..time)[4];
AnyVar SubTalarEversion = ..LeftLeg.InterpolatedData(..time)[5];
};
};
AnyOperationSetValue SetInitialPositions = {
#define _LOAD_MANNEQUIN_VALUES(PREFIX) \
&.PREFIX.PelvisPosX, \
&.PREFIX.PelvisPosY, \
&.PREFIX.PelvisPosZ, \
&.PREFIX.PelvisRotX, \
&.PREFIX.PelvisRotY, \
&.PREFIX.PelvisRotZ, \
&.PREFIX.PelvisThoraxExtension, \
&.PREFIX.PelvisThoraxLateralBending, \
&.PREFIX.PelvisThoraxRotation, \
&.PREFIX.PelvisT12Extension, \
&.PREFIX.Right.SternoClavicularProtraction, \
&.PREFIX.Right.SternoClavicularElevation, \
&.PREFIX.Right.GlenohumeralFlexion, \
&.PREFIX.Right.GlenohumeralAbduction, \
&.PREFIX.Right.GlenohumeralExternalRotation, \
&.PREFIX.Right.ElbowFlexion, \
&.PREFIX.Right.ElbowPronation, \
&.PREFIX.Right.HipFlexion, \
&.PREFIX.Right.HipAbduction, \
&.PREFIX.Right.HipExternalRotation, \
&.PREFIX.Right.KneeFlexion, \
&.PREFIX.Right.AnklePlantarFlexion, \
&.PREFIX.Right.SubTalarEversion, \
&.PREFIX.Left.SternoClavicularProtraction, \
&.PREFIX.Left.SternoClavicularElevation, \
&.PREFIX.Left.GlenohumeralFlexion, \
&.PREFIX.Left.GlenohumeralAbduction, \
&.PREFIX.Left.GlenohumeralExternalRotation, \
&.PREFIX.Left.ElbowFlexion, \
&.PREFIX.Left.ElbowPronation, \
&.PREFIX.Left.HipFlexion, \
&.PREFIX.Left.HipAbduction, \
&.PREFIX.Left.HipExternalRotation, \
&.PREFIX.Left.KneeFlexion, \
&.PREFIX.Left.AnklePlantarFlexion, \
&.PREFIX.Left.SubTalarEversion

Source = {_LOAD_MANNEQUIN_VALUES(LoadedMannequinValues) };
Target = {_LOAD_MANNEQUIN_VALUES(...HumanModel.Mannequin.Posture)};
};

#undef _LOAD_MANNEQUIN_VALUES


};

7 changes: 7 additions & 0 deletions Tools/AnyMocap/ModelSetup.any
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ ModelSetup = {
//(dynamic or standing refereces)
#include "SaveLoadParameters.any"


#include "ModelViews.any"


Expand Down Expand Up @@ -124,6 +125,12 @@ ModelSetup = {
+ Main.ModelSetup.TrialSpecificData.TrialFileName + "_InverseDynamicStudy.anydata.h5")
};
};

#if MOCAP_MANNEQUIN_OUTPUT == ON
// Operations to set the mannequin values from a file
#include "LoadMannquinValuesForInitialConditions.any"
#endif

}; // Macros


Expand Down