306 lines (238 with data), 14.3 kB
AnyFolder Joints = {
};
AnyFolder Drivers = {
#if LoadInRightHand == 1
//defines spherical joint between the object and the right hand
AnySphericalJoint HandControlRight ={
AnyRefNode &ref1=Main.Model.Environment.HandSeg.RightHandle;
AnySeg &ref2=Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Glove;
};
//Add reaction to spherical joint
AnyReacForce HandControlRightMoment ={
AnySphericalJoint &ref=.HandControlRight;
};
#endif
#if LoadInLeftHand==1
//defines spherical joint between the object and the left hand
AnySphericalJoint HandControlLeft ={
AnyRefNode &ref1=Main.Model.Environment.HandSeg.LeftHandle;
AnySeg &ref2=Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Glove;
};
//Add reaction to spherical joint
AnyReacForce HandControlLeftMoment ={
AnySphericalJoint &ref=.HandControlLeft;
};
#endif
AnyKinMeasureOrg RightFootToPlateMeasures =
{
AnyKinLinear TranslationHeel = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.RightFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.HeelContactNode;
};
AnyKinMeasureOrg HeelHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationHeel;
};
AnyKinLinear TranslationMedialFront = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.RightFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.ToeMedialContactNode;
};
AnyKinMeasureOrg TranslationMedialFrontHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationMedialFront;
};
AnyKinLinear TranslationLateralFront = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.RightFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.ToeLateralContactNode;
};
AnyKinMeasureOrg TranslationLateralFrontHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationLateralFront;
};
AnyKinRotational Rotation = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.RightFootPoint.RotNode;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.ConditionalContact_Nodes.Node0;
Type = RotAxesAngles;
};
};
AnyKinEq ConstrainRightFoot = {
AnyKinLinear &ref1= .RightFootToPlateMeasures.TranslationMedialFront ;
AnyKinLinear &ref2= .RightFootToPlateMeasures.TranslationLateralFront ;
AnyKinRotational &ref3= .RightFootToPlateMeasures.Rotation ;
CType = {Hard,Hard,Hard,Soft,Soft};
Reaction.Type = {Off,Off,Off,Off,Off}; // Switch off reactions, predicted GRF enforces constraints
MeasureOrganizer={0,1,2,5,7};
};
//Conditional constraint on heel height means heel can lift off
KinLimitsDriver DriverRight(
KinMeasure= .RightFootToPlateMeasures.HeelHeight
) = { LowerLimit =0;HighLimit = 0.1; MeasureConversion=1;ErrorAtHardLimit= 2*0.05;};
AnyKinMeasureOrg LeftFootToPlateMeasures =
{
AnyKinLinear TranslationHeel = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.LeftFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.HeelContactNode;
};
AnyKinMeasureOrg HeelHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationHeel;
};
AnyKinLinear TranslationMedialFront = {
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.LeftFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.ToeMedialContactNode;
};
AnyKinMeasureOrg TranslationMedialFrontHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationMedialFront;
};
AnyKinLinear TranslationLateralFront =
{
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.LeftFootPoint;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.ToeLateralContactNode;
};
AnyKinMeasureOrg TranslationLateralFrontHeight ={
MeasureOrganizer={2};
AnyKinLinear &ref=.TranslationLateralFront;
};
AnyKinRotational Rotation =
{
AnyRefFrame &ref1 = Main.Model.Environment.GlobalRef.LeftFootPoint.RotNode;
AnyRefFrame &ref2 = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.ConditionalContact_Nodes.Node0;
Type = RotAxesAngles;
};
};
AnyKinEq ConstrainLeftFoot = {
AnyKinLinear &ref1= .LeftFootToPlateMeasures.TranslationMedialFront ;
AnyKinLinear &ref2= .LeftFootToPlateMeasures.TranslationLateralFront ;
AnyKinRotational &ref3= .LeftFootToPlateMeasures.Rotation;
CType = {Hard,Hard,Hard,Soft,Soft};
Reaction.Type = {Off,Off,Off,Off,Off}; // Switch off reactions, predicted GRF enforces constraints
MeasureOrganizer={0,1,2,5,7};
};
KinLimitsDriver DriverLeft(
KinMeasure= .LeftFootToPlateMeasures.HeelHeight
) = { LowerLimit =0;HighLimit = 0.1; MeasureConversion=1;ErrorAtHardLimit= 2*0.05;};
RangeOfMotionLimits JointLimits(
ARM_RIGHT = BM_ARM_RIGHT,
ARM_LEFT = BM_ARM_LEFT,
LEG_RIGHT = BM_LEG_RIGHT,
LEG_LEFT = BM_LEG_LEFT,
PELVIS_THORAX_EXTENSION = "Off",
PELVIS_THORAX_LATERAL_BENDING = "Off",
PELVIS_THORAX_ROTATION = "Off",
SKULL_THORAX_FLEXION = "Off",
SKULL_THORAX_LATERALBENDING = "Off",
SKULL_THORAX_ROTATION = "Off",
STERNO_CLAVICULAR_PROTRACTION = "On",
STERNO_CLAVICULAR_ELEVATION = "On",
STERNO_CLAVICULAR_AXIALROTATION = "Off",
GLENOHUMERAL_FLEXION = "On",
GLENOHUMERAL_EXTERNAL_ROTATION = "On",
GLENOHUMERAL_ABDUCTION = "On",
ELBOW_FLEXION = "On",
ELBOW_PRONATION = "Off",
WRIST_FLEXION = "Off",
WRIST_ABDUCTION = "Off",
HIP_ABDUCTION = "Off",
HIP_FLEXION = "On",
HIP_EXTERNAL_ROTATION = "Off",
KNEE_FLEXION = "On",
ANKLE_PLANTAR_FLEXION = "Off",
SUBTALAR_EVERSION = "Off",
SKULL_THORAX_FLEXION = "Off",
SKULL_THORAX_LATERALBENDING = "Off",
SKULL_THORAX_ROTATION = "Off"
)={
Main.Model.ModelEnvironmentConnection.Drivers.JointLimits.Limits.Right.SternoClavicularElevation={0,20};
Main.Model.ModelEnvironmentConnection.Drivers.JointLimits.Limits.Left.SternoClavicularElevation={0,20};
};
//Here the Zero Moment Point (ZMP) is constrained to be within the foot stance area
// A segment PointWithZeroMoment (red sphere) has been created by the balance driver and here the motion of it is constrained
CreateCoMLimitDriversFootStanceArea CoMLimits(CoM=Main.Model.OverallWeightBalanceControl.PointWithZeroMoment)={};
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotX.DriverPos={0};
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotY.DriverPos={0};
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotZ.DriverPos={0};
Main.HumanModel.DefaultMannequinDrivers.SkullThoraxFlexionDriver.DriverPos={0};
//Main.HumanModel.DefaultMannequinDrivers.SkullThoraxLateralBendingDriver.DriverPos={0};
//Main.HumanModel.DefaultMannequinDrivers.SkullThoraxRotationDriver.DriverPos={0};
Main.HumanModel.DefaultMannequinDrivers.PostureDriverBending.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.PostureDriverRotation.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.PostureDriverExtension.DriverPos ={-5*pi/180};
Main.HumanModel.DefaultMannequinDrivers.SCProtractionDriverRight.DriverPos = {-0.4014257};
Main.HumanModel.DefaultMannequinDrivers.SCElevationDriverRight.DriverPos = {0.2007129};
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightAbduction.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightFlexion.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightExternalRotation.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.ElbowFlexionDriverRight.DriverPos ={30*pi/180};
Main.HumanModel.DefaultMannequinDrivers.ElbowPronationDriverRight.DriverPos ={0*pi/180};
Main.HumanModel.DefaultMannequinDrivers.WristDriverRightFlexion.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.WristDriverRightAbduction.DriverPos ={0};
Main.HumanModel.DefaultMannequinDrivers.SCProtractionDriverLeft.DriverPos = {-0.4014257};
Main.HumanModel.DefaultMannequinDrivers.SCElevationDriverLeft.DriverPos = { 0.2007129};
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftAbduction.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftExternalRotation.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.ElbowFlexionDriverLeft.DriverPos= {30*pi/180};
Main.HumanModel.DefaultMannequinDrivers.ElbowPronationDriverLeft.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.WristDriverLeftFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.WristDriverLeftAbduction.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverRightFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverRightExternalRotation.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverRightAbduction.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.KneeDriverRight.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverRightFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverRightEversion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftExternalRotation.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftAbduction.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.KneeDriverLeft.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverLeftFlexion.DriverPos= {0};
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverLeftEversion.DriverPos= {0};
//weights
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverPosX.WeakDriverWeight=0.0000; //zero weight on pelvis pos
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverPosY.WeakDriverWeight=0.0000;
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverPosZ.WeakDriverWeight=0.0000;
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotZ.WeakDriverWeight=0.0000;
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotY.WeakDriverWeight=0.0000;
Main.HumanModel.DefaultMannequinDrivers.PelvisGroundDriverRotX.WeakDriverWeight=0.0000;
// Main.HumanModel.DefaultMannequinDrivers.NeckJntDriver.WeakDriverWeight=0.00001;
// Main.HumanModel.DefaultMannequinDrivers.PostureDriverBending.WeakDriverWeight=0.00001;
// Main.HumanModel.DefaultMannequinDrivers.PostureDriverRotation.WeakDriverWeight=0.00001;
// Main.HumanModel.DefaultMannequinDrivers.PostureDriverExtension.WeakDriverWeight=0.00001;
// Main.HumanModel.DefaultMannequinDrivers.SCProtractionDriverRight.WeakDriverWeight =0.002;
// Main.HumanModel.DefaultMannequinDrivers.SCProtractionDriverRight.WeakDriverWeight = 0.0001;
// Main.HumanModel.DefaultMannequinDrivers.SCElevationDriverRight.WeakDriverWeight = 0.0001;
// Main.HumanModel.DefaultMannequinDrivers.SCAxialRotationDriverRight.WeakDriverWeight = 0.0001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightAbduction.WeakDriverWeight =0.0001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightFlexion.WeakDriverWeight =0.00001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverRightExternalRotation.WeakDriverWeight =0.0001;
Main.HumanModel.DefaultMannequinDrivers.ElbowFlexionDriverRight.WeakDriverWeight =0.0001;
// Main.HumanModel.DefaultMannequinDrivers.ElbowPronationDriverRight.WeakDriverWeight =0.00001;
// Main.HumanModel.DefaultMannequinDrivers.WristDriverRightFlexion.WeakDriverWeight =0.00001;
// Main.HumanModel.DefaultMannequinDrivers.WristDriverRightAbduction.WeakDriverWeight =0.00001;
//
// Main.HumanModel.DefaultMannequinDrivers.SCProtractionDriverLeft.WeakDriverWeight = 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.SCElevationDriverLeft.WeakDriverWeight = 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.SCAxialRotationDriverLeft.WeakDriverWeight =0.00001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftAbduction.WeakDriverWeight= 0.0001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftFlexion.WeakDriverWeight= 0.0001;
Main.HumanModel.DefaultMannequinDrivers.GHDriverLeftExternalRotation.WeakDriverWeight= 0.0001;
Main.HumanModel.DefaultMannequinDrivers.ElbowFlexionDriverLeft.WeakDriverWeight= 0.0001;
// Main.HumanModel.DefaultMannequinDrivers.ElbowPronationDriverLeft.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.WristDriverLeftFlexion.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.WristDriverLeftAbduction.WeakDriverWeight= 0.00001;
Main.HumanModel.DefaultMannequinDrivers.HipDriverRightFlexion.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.HipDriverRightExternalRotation.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.HipDriverRightAbduction.WeakDriverWeight= 0.00001;;
Main.HumanModel.DefaultMannequinDrivers.KneeDriverRight.WeakDriverWeight= 0.00001;
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverRightFlexion.WeakDriverWeight=100* 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.AnkleDriverRightEversion.WeakDriverWeight= 0.00001;
//
Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftFlexion.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftExternalRotation.WeakDriverWeight= 0.00001;
// Main.HumanModel.DefaultMannequinDrivers.HipDriverLeftAbduction.WeakDriverWeight= 0.00001;
Main.HumanModel.DefaultMannequinDrivers.KneeDriverLeft.WeakDriverWeight= 0.00001;
Main.HumanModel.DefaultMannequinDrivers.AnkleDriverLeftFlexion.WeakDriverWeight= 100*0.00001;
// Main.HumanModel.DefaultMannequinDrivers.AnkleDriverLeftEversion.WeakDriverWeight= 0.00001;
//
};