--- a +++ b/Tools/AnyMocap/DefaultJointLimits.any @@ -0,0 +1,89 @@ +#ifndef MOCAP_EXCLUDE_DEFAULT_JOINT_LIMITS + +ModelSetup.MocapExtraDrivers = { + + /// This section adds kinematic joint limits for unrealistic joint angles. + /// E.g. prevent the elbow from bending backwards etc. + /// This makes the Kinematic solver more robust by restricting marker tracking + /// solutions from non-physiologically positures + AnyFolder DefaultJointLimits = + { + #if BM_ARM_RIGHT + KinLimitsDriver LimitElbowPronationRight( + KinMeasure = ....HumanModel.BodyModel.Interface.Right.ElbowPronation + ) = { + AnyFloat ROM ??= {-100, 100}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver LimitElbowFlexionRight( + KinMeasure= ....HumanModel.BodyModel.Interface.Right.ElbowFlexion + ) = { + AnyFloat ROM ??= {-10, 180}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver WristAbductionRight( + KinMeasure= ....HumanModel.BodyModel.Interface.Right.WristAbduction + ) = { + AnyFloat ROM ??= {-90, 90}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver WristFlexionRight( + KinMeasure= ....HumanModel.BodyModel.Interface.Right.WristFlexion + ) = { + AnyFloat ROM ??= {-120, 120}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + #endif + + #if BM_ARM_LEFT + KinLimitsDriver LimitElbowPronationLeft( + KinMeasure= ....HumanModel.BodyModel.Interface.Left.ElbowPronation + ) = { + AnyFloat ROM ??= {-100, 100}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver LimitElbowFlexionLeft( + KinMeasure= ....HumanModel.BodyModel.Interface.Left.ElbowFlexion + ) = { + AnyFloat ROM ??= {-10, 180}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver WristAbductionLeft( + KinMeasure= ....HumanModel.BodyModel.Interface.Left.WristAbduction + ) = { + AnyFloat ROM ??= {-90, 90}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + + KinLimitsDriver WristFlexionLeft( + KinMeasure= ....HumanModel.BodyModel.Interface.Left.WristFlexion + ) = { + AnyFloat ROM ??= {-120, 120}; + LowerLimit = ROM[0]; + HighLimit = ROM[1]; + MeasureConversion=180/pi; + }; + #endif + }; +}; + +#endif