582 lines (515 with data), 21.0 kB
AnyFolder Jnt={
AnyFolder &RefP=..EnvironmentModel;
AnyFolder &RefS=.Segments;
AnyFolder &RefH = ..BodyModel;
//----------------------------------------------
// Joints - Pelvis - Seat
//----------------------------------------------
AnyFolder PelvisSeatJnt = {
AnyKinLinear PelvisSeatLinMeasure = {
AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
SeatRef={
//AnyDrawRefFrame test ={ScaleXYZ={0.4,0.4,0.4};};
};
AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;
Ref = 0;
};
AnyKinRotational PelvisSeatRotMeasure = {
AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;
Type = RotVector;
};
AnyKinEqSimpleDriver PelvisSeatEq = {
AnyKinLinear &LinearMeasure = .PelvisSeatLinMeasure;
AnyKinRotational &RotMeasure = .PelvisSeatRotMeasure;
MeasureOrganizer = {0,2,3,4};
//DriverPos = {0.01,0,0,0};
DriverPos = {-0.04,0,0,0};
DriverVel = {0,0,0,0};
Reaction.Type = {Off,Off,Off,Off};
};
AnyKinMeasureOrg PelvisSeatMeasureOrg = {
AnyKinLinear &LinearMeasure = .PelvisSeatLinMeasure;
MeasureOrganizer = {0};
};
}; // PelvisSeatJnt
//------------------------------------------------
// Joint - BackRest - Thorax
//------------------------------------------------
AnyFolder BackRestThoraxJnt = {
AnyKinLinear BackRestThoraxLinMeasure = {
AnyRefFrame &BackRestRef = ..RefP.Seg.BackRest;
AnyRefFrame &ThoraxRef = ..RefH.Trunk.SegmentsThorax.ThoraxSeg.T2SupportNode;//ThoraxBackRestJntNode;
Ref = 0;
};
AnyKinEqSimpleDriver BackRestThoraxEq = {
AnyKinLinear &LinearMeasure = .BackRestThoraxLinMeasure;
MeasureOrganizer = {0};
DriverPos = {0.03};
DriverVel = {0};
Reaction.Type = {Off};
};
}; // BackRestThoraxJnt
// this is default in Body now!
// AnyReacForce T10={
// AnyJoint &ref= Main.Model.BodyModel.Trunk.JointsLumbar.T12L1Jnt;
// };
//
AnyFolder FootRestFootJnt = {
AnyFolder Right = {
AnyKinLinear FootRestFootLinMeasure = {
AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestRotNodeRight;//FootRestFootJntNodeRight;
AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.AnatomicalFrame.FootFootRestJntNode;
Ref = 0;
};
AnyKinRotational FootRestFootRotMeasure = {
AnyRefFrame &FootRestRef = .FootRestFootLinMeasure.FootRestRef;
AnyRefFrame &FootRef = .FootRestFootLinMeasure.FootRef;
Type = RotVector;
};
AnyKinEqSimpleDriver FootRestFootEq = {
AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
MeasureOrganizer = {0,1,2,4,5};
DriverPos = {0.01,0,0,0,0};
DriverVel = {0,0,0,0,0};
Reaction.Type = {Off,Off,Off,Off,Off};
};
AnyKinMeasureOrg FootRestFootMeasureOrg = {
AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
MeasureOrganizer = {0};
};
AnyKinEqSimpleDriver AnkleDriver ={
#if BM_LEG_MODEL == _LEG_MODEL_LEG_
AnyJoint &ref = ...RefH.Right.Leg.Jnt.Ankle;
MeasureOrganizer={1};
#else
AnyJoint &ref = ...RefH.Right.Leg.Jnt.SubTalar;
#endif
DriverPos={0};
DriverVel={0};
};
}; //Right
AnyFolder Left = {
AnyKinLinear FootRestFootLinMeasure = {
AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestRotNodeLeft;
AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.AnatomicalFrame.FootFootRestJntNode;
Ref = 0;
};
AnyKinRotational FootRestFootRotMeasure = {
AnyRefFrame &FootRestRef = .FootRestFootLinMeasure.FootRestRef;
AnyRefFrame &FootRef = .FootRestFootLinMeasure.FootRef;
Type = RotVector;
};
AnyKinEqSimpleDriver FootRestFootEq = {
AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
MeasureOrganizer = {0,1,2,4,5};
DriverPos = {0.01,0,0,0,0};
DriverVel = {0,0,0,0,0};
Reaction.Type = {Off,Off,Off,Off,Off};
};
AnyKinMeasureOrg FootRestFootMeasureOrg = {
AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
MeasureOrganizer = {0};
};
AnyKinEqSimpleDriver AnkleDriver ={
#if BM_LEG_MODEL == _LEG_MODEL_LEG_
AnyJoint &ref = ...RefH.Left.Leg.Jnt.Ankle;
MeasureOrganizer={1};
#else
AnyJoint &ref = ...RefH.Left.Leg.Jnt.SubTalar;
#endif
DriverPos={0};
DriverVel={0};
};
}; //Left
// AnyFolder Right = {
//
// AnyKinLinear FootRestFootLinMeasure = {
// AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
// AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
// Ref = 0;
// };
//
// AnyKinRotational FootRestFootRotMeasure = {
// AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
// AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
// Type = RotVector;
// };
//
// AnyKinEqSimpleDriver FootRestFootEq = {
// AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
// AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
// MeasureOrganizer = {0,1,2,4,5};
// DriverPos = {0.01,0,0,0,0};
// DriverVel = {0,0,0,0,0};
// Reaction.Type = {Off,Off,Off,Off,Off};
// };
//
// AnyKinMeasureOrg FootRestFootMeasureOrg = {
// AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
// MeasureOrganizer = {0};
// };
//
//// AnyKinEqSimpleDriver AnkleDriver ={
//// #if BM_LEG_MODEL == _LEG_MODEL_LEG_
//// AnyKinMeasure& ref =...RefH.Interface.Right.AnkleEversion;
//// #else
//// AnyKinMeasure& ref =...RefH.Interface.Right.SubTalarEversion;
////#endif
////
//// DriverPos={0};
//// DriverVel={0};
//// };
//AnyKinEqSimpleDriver AnkleDriver ={
// #if BM_LEG_MODEL == _LEG_MODEL_LEG_
// AnyJoint &ref = ...RefH.Right.Leg.Jnt.Ankle;
// MeasureOrganizer={1};
// #else
// AnyJoint &ref = ...RefH.Right.Leg.Jnt.SubTalar;
// #endif
// DriverPos={0};
// DriverVel={0};
// };
//
//
// }; //Right
//
// AnyFolder Left = {
//
// AnyKinLinear FootRestFootLinMeasure = {
// AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
// AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
// Ref = 0;
// };
//
// AnyKinRotational FootRestFootRotMeasure = {
// AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
// AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
// Type = RotVector;
// };
// AnyKinEqSimpleDriver FootRestFootEq = {
// AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
// AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
// MeasureOrganizer = {0,1,2,4,5};
// DriverPos = {0.01,0,0,0,0};
// DriverVel = {0,0,0,0,0};
// Reaction.Type = {Off,Off,Off,Off,Off};
// };
//
// AnyKinMeasureOrg FootRestFootMeasureOrg = {
// AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
// MeasureOrganizer = {0};
// };
//
// AnyKinEqSimpleDriver AnkleDriver ={
// #if BM_LEG_MODEL == _LEG_MODEL_LEG_
// AnyJoint &ref = ...RefH.Left.Leg.Jnt.Ankle;
// MeasureOrganizer={1};
// #else
// AnyJoint &ref = ...RefH.Left.Leg.Jnt.SubTalar;
// #endif
// DriverPos={0};
// DriverVel={0};
// };
//
//
//// AnyKinEqSimpleDriver AnkleDriver ={
////
//// #if BM_LEG_MODEL == _LEG_MODEL_LEG_
//// AnyKinMeasure& ref =...RefH.Interface.Left.AnkleEversion;
//// #else
//// AnyKinMeasure& ref =...RefH.Interface.Left.SubTalarEversion;
////#endif
////
//// DriverPos={0};
//// DriverVel={0};
//// };
// }; //Left
}; // FootFootRestJnt
// AnyFolder UlnaArmRestJnt = {
//
// AnyFolder Right = {
// AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
// AnyKinLinear ArmRestElbowLinMeasure = {
// AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeBack;
// AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.ol;
// };
// MeasureOrganizer = {1};
// DriverPos={0};
// DriverVel={0};
// Reaction.Type={Off};
// };
//
// AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
// AnyKinLinear ArmRestWristLinMeasure = {
// AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeFront;
// AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.us;
// };
// MeasureOrganizer = {1,2};
// DriverPos={0,0};
// DriverVel={0,0};
// Reaction.Type={Off,Off};
// };
// }; // Right
//
// AnyFolder Left = {
// AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
// AnyKinLinear ArmRestElbowLinMeasure = {
// AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeBack;
// AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.ol;
// };
// MeasureOrganizer = {1};
// DriverPos={0};
// DriverVel={0};
// Reaction.Type={Off};
// };
//
// AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
// AnyKinLinear ArmRestWristLinMeasure = {
// AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeFront;
// AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.us;
// };
// MeasureOrganizer = {1,2};
// DriverPos={0,0};
// DriverVel={0,0};
// Reaction.Type={Off,Off};
// };
// }; // Left
// }; // UlnaArmRestJnt
}; //Jnt
//--------------------------------------------------
// Drivers
//--------------------------------------------------
AnyFolder Drivers = {
AnyFolder &RefHM = Main.Model.BodyModel;
AnyFolder &RefPM = Main.Model.EnvironmentModel;
AnyFolder &DrvPos = Main.DrvPos;
AnyFolder &DrvVel = Main.DrvVel;
AnyFolder &JntPos=..Mannequin.Posture;
AnyFolder &JntVel=..Mannequin.PostureVel;
//-------------------------------------------------------
// Drivers - spine
//-------------------------------------------------------
AnyKinEqSimpleDriver PelvisSeatDrv = {
AnyKinMeasure& LinMeasure = ..Jnt.PelvisSeatJnt.PelvisSeatLinMeasure;
MeasureOrganizer = {1};
DriverPos = {-.DrvPos.PelvisSeatLinXPos};
DriverVel = {-.DrvVel.PelvisSeatLinXVel};
Reaction.Type = {Off};
};
//-------------------------------------------------------
// Drivers - spine
//-------------------------------------------------------
//Thorax pelvis rotation driver
AnyKinEqSimpleDriver PostureDriver ={
AnyKinMeasure& Ref2 = ...BodyModel.Interface.Trunk.PelvisThoraxLateralBending;
AnyKinMeasure& Ref3 = ...BodyModel.Interface.Trunk.PelvisThoraxRotation;
//AnyKinMeasure& Ref1 = ...BodyModel.Interface.Trunk.PelvisThoraxExtension;
DriverPos = pi/180*{
.JntPos.PelvisThoraxLateralBending,
.JntPos.PelvisThoraxRotation
// .JntPos.PelvisThoraxExtension
};
DriverVel = pi/180*{
.JntVel.PelvisThoraxLateralBending,
.JntVel.PelvisThoraxRotation
// .JntVel.PelvisThoraxExtension
};
Reaction.Type = {Off,Off};
};
//Neck driver
AnyKinEqSimpleDriver NeckJntDriver = {
AnyKinMeasure& lb = ...BodyModel.Interface.Trunk.SkullThoraxLateralBending;
AnyKinMeasure& ar = ...BodyModel.Interface.Trunk.SkullThoraxRotation;
AnyKinMeasure& fe = ...BodyModel.Interface.Trunk.SkullThoraxFlexion;
DriverPos = pi/180*{.JntPos.NeckLateralBending, .JntPos.NeckRotation, -1*.JntPos.NeckExtension};
DriverVel = pi/180*{.JntVel.NeckLateralBending, .JntVel.NeckRotation, -1*.JntVel.NeckExtension};
Reaction.Type = {Off, Off, Off};
};
//This was not previously... but is easier to use with the detailed spine
AnyKinRotational PelvisGlobalRotMeasure = {
AnyRefFrame &PelvisRef = .RefHM.Trunk.SegmentsLumbar.PelvisSeg;
AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
Type = RotVector;
};
AnyKinMeasureOrg PelvisGlobalRotZMeasure = {
AnyKinMeasure& RotMeasure = .PelvisGlobalRotMeasure;
MeasureOrganizer = {2};
};
AnyKinRotational ThoraxGlobalRotMeasure = {
AnyRefFrame &ThoraxRef = .RefHM.Trunk.SegmentsThorax.ThoraxSeg;
AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
Type = RotVector;
};
AnyKinMeasureOrg ThoraxGlobalRotZMeasure = {
AnyKinMeasure& RotMeasure = .ThoraxGlobalRotMeasure;
MeasureOrganizer = {2};
};
// AnyKinEqSimpleDriver PelvisSeatRhythmDrv = {
// AnyKinMeasureLinComb Measure = {
// AnyKinMeasure& u1 = ..PelvisGlobalRotZMeasure;
// AnyKinMeasure& u2 = ..ThoraxGlobalRotZMeasure;
// Coef = {{1/(0.0533), -1/(0.0533)}};
// Const = {-(0.6665/(-0.1433))};
// }; // Measure
// DriverPos = {180*pi/180+Main.DrvPos.GlobalBackRestRotZPos};
// DriverVel = {Main.DrvVel.GlobalBackRestRotZVel};
// Reaction.Type = {Off};
// }; // SeatBackRestDrv
//AnyKinEqSimpleDriver tmp = {
// AnyKinRotational PelvisThorax = {
// AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
// AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
// Type = RotAxesAngles;
// };
// MeasureOrganizer = {0};
// DriverPos = {30*pi/180};
// DriverVel = {-15*pi/180};
//};
// Rhythm between the hip angles and the lumbar spine angle. Based on Tully et al,
// Spine 27, E432-E440, the relationship between these angles is set to 3:1,
// where we define the hip angle as the average of the two hip angles.
AnyKinEq ThoraxThighRhythm = {
AnyKinMeasureLinComb ThoraxThighRhythmComb = {
AnyKinMeasureOrg Org = {
AnySphericalJoint &rhip1 = Main.Model.BodyModel.Right.Leg.Jnt.Hip;
AnySphericalJoint &lhip2 = Main.Model.BodyModel.Left.Leg.Jnt.Hip;
AnyKinRotational PelvisThorax = {
AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Type = RotAxesAngles;
};
MeasureOrganizer = {2, 5, 6};
};
OutDim = 1;
Coef = {{0.5, 0.5, 3.0}};
Const = {0};
};
};
AnyFolder Right = {
// ************************************
// Drivers for the right arm
// ************************************
//Sterno clavicular joint driver
AnyKinEqSimpleDriver SCDriverRight ={
AnyKinMeasure& ref1 =....BodyModel.Interface.Right.SternoClavicularProtraction;
AnyKinMeasure& ref2 =....BodyModel.Interface.Right.SternoClavicularElevation;
DriverPos = pi/180*{
..JntPos.Right.SternoClavicularProtraction,
..JntPos.Right.SternoClavicularElevation
};
DriverVel = {
..JntVel.Right.SternoClavicularProtraction,
..JntVel.Right.SternoClavicularElevation
};
Reaction.Type={Off,Off};
};
//Glenohumeral joint
AnyKinEqSimpleDriver GHDriverRight={
AnyKinMeasure& ref1 =....BodyModel.Interface.Right.GlenohumeralAbduction;
AnyKinMeasure& ref2 =....BodyModel.Interface.Right.GlenohumeralFlexion;
AnyKinMeasure& ref3 =....BodyModel.Interface.Right.GlenohumeralExternalRotation;
DriverPos=pi/180*{
..JntPos.Right.GlenohumeralAbduction, //GH joint
..JntPos.Right.GlenohumeralFlexion, //GH joint
..JntPos.Right.GlenohumeralExternalRotation //GH joint
};
DriverVel = pi/180*{
..JntVel.Right.GlenohumeralAbduction, //GH joint
..JntVel.Right.GlenohumeralFlexion, //GH joint
..JntVel.Right.GlenohumeralExternalRotation //GH joint
};
Reaction.Type={Off,Off,Off};
};
//Elbow flexion driver
AnyKinEqSimpleDriver ElbowFlexionDriverRight={
AnyKinMeasureOrg &Elbow =....BodyModel.Interface.Right.ElbowFlexion;
DriverPos=pi/180*{..JntPos.Right.ElbowFlexion};
DriverVel = pi/180*{..JntVel.Right.ElbowFlexion};
Reaction.Type={Off};
};
//Elbow pronation driver
AnyKinEqSimpleDriver ElbowPronationDriverRight={
AnyKinMeasure& Elbow =....BodyModel.Interface.Right.ElbowPronation;
DriverPos = pi/180*{..JntPos.Right.ElbowPronation };
DriverVel=pi/180*{..JntVel.Right.ElbowPronation };
Reaction.Type={Off};
};
//Wrist driver
AnyKinEqSimpleDriver WristDriverRight ={
AnyKinMeasure& ref1 =....BodyModel.Interface.Right.WristFlexion;
AnyKinMeasure& ref2 =....BodyModel.Interface.Right.WristAbduction;
DriverPos = pi/180*{
..JntPos.Right.WristFlexion,
..JntPos.Right.WristAbduction
};
DriverVel = pi/180*{
..JntVel.Right.WristFlexion,
..JntVel.Right.WristAbduction};
Reaction.Type={Off,Off};
};
}; //End Right
AnyFolder Left = {
// ************************************
// Drivers for the left arm
// ************************************
//Sterno clavicular joint driver
AnyKinEqSimpleDriver SCDriverLeft ={
AnyKinMeasure& ref1 =....BodyModel.Interface.Left.SternoClavicularProtraction;
AnyKinMeasure& ref2 =....BodyModel.Interface.Left.SternoClavicularElevation;
DriverPos = pi/180*{
..JntPos.Left.SternoClavicularProtraction,
..JntPos.Left.SternoClavicularElevation
};
DriverVel = pi/180*{
..JntVel.Left.SternoClavicularProtraction,
..JntVel.Left.SternoClavicularElevation
};
Reaction.Type={Off,Off};
};
AnyKinEqSimpleDriver GHDriverLeft={
AnyKinMeasure& ref1 =....BodyModel.Interface.Left.GlenohumeralAbduction;
AnyKinMeasure& ref2 =....BodyModel.Interface.Left.GlenohumeralFlexion;
AnyKinMeasure& ref3 =....BodyModel.Interface.Left.GlenohumeralExternalRotation;
DriverPos=pi/180*{
..JntPos.Left.GlenohumeralAbduction, //GH joint
..JntPos.Left.GlenohumeralFlexion, //GH joint
..JntPos.Left.GlenohumeralExternalRotation //GH joint
};
DriverVel = pi/180*{
..JntVel.Left.GlenohumeralAbduction, //GH joint
..JntVel.Left.GlenohumeralFlexion, //GH joint
..JntVel.Left.GlenohumeralExternalRotation //GH joint
};
Reaction.Type={Off,Off,Off};
};
//Elbow flexion driver
AnyKinEqSimpleDriver ElbowFEDriverLeft={
AnyKinMeasureOrg &Elbow =....BodyModel.Interface.Left.ElbowFlexion;
DriverPos=pi/180*{..JntPos.Left.ElbowFlexion};
DriverVel = pi/180*{..JntVel.Left.ElbowFlexion};
Reaction.Type={Off};
};
//Elbow pronation driver
AnyKinEqSimpleDriver ElbowPSDriverLeft={
AnyKinMeasure& Elbow =....BodyModel.Interface.Left.ElbowPronation;
DriverPos= pi/180*{..JntPos.Left.ElbowPronation };
DriverVel = pi/180*{..JntVel.Left.ElbowPronation };
Reaction.Type={Off};
};
//Wrist driver
AnyKinEqSimpleDriver WristDriverLeft ={
AnyKinMeasure& ref1 =....BodyModel.Interface.Left.WristFlexion;
AnyKinMeasure& ref2 =....BodyModel.Interface.Left.WristAbduction;
DriverPos = pi/180*{
..JntPos.Left.WristFlexion,
..JntPos.Left.WristAbduction};
DriverVel = pi/180*{
..JntVel.Left.WristFlexion,
..JntVel.Left.WristAbduction};
Reaction.Type={Off,Off};
};
}; //End Left
}; // Drivers