--- a +++ b/Tests/ShoulderTestModel/Main.any @@ -0,0 +1,314 @@ + +#include "../libdef.any" + + +#ifndef MOVE_PELVIS +#define MOVE_PELVIS ON +#endif + +Main = +{ + + // BodyModel configuration: + #include "BodyModelConfiguration.any" + + + // Include the Human model from AMMR + #include "<ANYBODY_PATH_BODY>\HumanModel.any" + + // Define your models posture or movement + #include "Mannequin.any" + + // Compose the model used by the study + AnyFolder Model = + { + // Center of Mass (COM) position in the ground YZ plane + // COM balance driver can be excluded with: + // #define EXCLUDE_COM_BALANCE_DRIVERS + AnyVector CenterOfMassXZ = {0,0}; + + // Positioning of the right and left feet. + // Ground-foot constraints can be excluded with: + // #define EXCLUDE_FOOT_CONSTRAINTS + Environment.GlobalRef.RightFootPrint = { + AnyVec3 HeelPosition = {-0.08, 0, 0.14}; + AnyVec3 ToeDirection = {1, 0, 0.1}; + }; + Environment.GlobalRef.LeftFootPrint = { + AnyVec3 HeelPosition = {-0.08, 0, -0.14}; + AnyVec3 ToeDirection = {1, 0, -0.1}; + }; + + // Include the body part of the Human model + AnyFolder &BodyModel = .HumanModel.BodyModel; + + // Include the default mannequin drivers + AnyFolder &DefaultMannequinDrivers = .HumanModel.DefaultMannequinDrivers; + + // Environment files are used to include objects surrounding human, + // e.g. global reference frame + #include "Environment.any" + + AnyFolder ModelEnvironmentConnection = + { + //Move Pelvis to test if this will break kin +// AnyKinEqSimpleDriver PelvisMover ={ +// AnyKinMeasure &ref=.Main.HumanModel.BodyModel.Interface.Trunk.PelvisPosX.lin; +// DriverPos ={0,0,0}; +// #if MOVE_PELVIS == ON +// DriverVel ={-10,0,0}; +// #else +// DriverVel ={0,0,0}; +// #endif +// Reaction.Type = {On,On,On}; +// }; + + AnyKinEqFourierDriver PelvisMover = { + Type = CosSin; + Freq = 1.2; + #if MOVE_PELVIS == ON + A = {{0, 1.5 },{0, 0},{0, 0 }}; + B = {{0, 0},{0, 0},{0, 1.5}}; + #else + A = {{0, 0 },{0, 0 },{0, 0 }}; + B = {{0, 0},{0, 0},{0, 0}}; + #endif + Reaction.Type={On,On,On}; + AnyKinMeasure &ref=.Main.HumanModel.BodyModel.Interface.Trunk.PelvisPosX.lin; + }; + + + + + + + + //Move Pelvis to test if this will break kin + AnyKinEqSimpleDriver PelvisMoverRot ={ + AnyKinMeasure &ref=.Main.HumanModel.BodyModel.Interface.Trunk.PelvisRotX.rot; + DriverPos ={0,0,0}; + #if MOVE_PELVIS == ON + DriverVel ={0, 3*pi, 0}; + #else + DriverVel ={0,0,0}; + #endif + Reaction.Type = {On,On,On}; + }; + + }; + }; + + AnyBodyStudy Study = + { + AnyFolder &Model = .Model; + + Gravity={0.0, -9.81, 0.0}; + nStep = 200; + tStart=0; + tEnd=4; + // Overdeterminate solver is needed while using the + // soft default mannequin drivers. + Kinematics.SolverType = KinSolDeterminate; + InitialConditions.SolverType = Kinematics.SolverType; + + //Include the next line to have a camera in the model + // Note: to generate videos FFMPEG must be available on the + // system. + //#include "Model/VideoCamera.any" + + + AnyFolder JointAndDrivers ={ + + AnyFolder Right ={ + + AnyKinEqSimpleDriver PlaneOfElevation ={ + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.PlaneOfElevation; + DriverPos ={-20*pi/180}; + DriverVel ={130*pi/180}/20; + Reaction.Type={Off}; + }; + + + AnyKinEqSimpleDriver AxialRot ={ + AnyKinMeasure &ref= Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.InternalAxialRotation; + DriverPos ={0*pi/180}; + DriverVel ={0}; + CType={Soft}; + Reaction.Type={Off}; + }; + + + + + AnyKinEqFourierDriver Elevation = + { + Type = CosSin; + Freq = 0.5; + A ={{80, 0 }}*pi/180; + B = {{0, (70)}}*pi/180; + Reaction.Type={Off}; + + + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.Elevation; + }; + + }; + + + + + + AnyFolder Left ={ + + AnyKinEqSimpleDriver PlaneOfElevation ={ + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.PlaneOfElevation; + DriverPos =Main.Study.JointAndDrivers.Right.PlaneOfElevation.DriverPos; + DriverVel =Main.Study.JointAndDrivers.Right.PlaneOfElevation.DriverVel; + Reaction.Type={Off}; + }; + + + AnyKinEqSimpleDriver AxialRot ={ + AnyKinMeasure &ref= Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.InternalAxialRotation; + DriverPos =Main.Study.JointAndDrivers.Right.AxialRot.DriverPos; + DriverVel =Main.Study.JointAndDrivers.Right.AxialRot.DriverVel; + CType={Soft}; + Reaction.Type={Off}; + + }; + + + + + AnyKinEqFourierDriver Elevation = + { + Type = CosSin; + Freq = Main.Study.JointAndDrivers.Right.Elevation.Freq; + A = Main.Study.JointAndDrivers.Right.Elevation.A; + B = Main.Study.JointAndDrivers.Right.Elevation.B; + Reaction.Type={Off}; + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.Elevation; + }; + + }; + + }; + + + +}; + + + + + AnyBodyStudy Study2 = + { + AnyFolder &Model = .Model; + + Gravity={0.0, -9.81, 0.0}; + nStep = 50; + tEnd=5; + // Overdeterminate solver is needed while using the + // soft default mannequin drivers. + Kinematics.SolverType = KinSolDeterminate; + InitialConditions.SolverType = Kinematics.SolverType; + + //Include the next line to have a camera in the model + // Note: to generate videos FFMPEG must be available on the + // system. + //#include "Model/VideoCamera.any" + + + AnyFolder JointAndDrivers ={ + AnyFolder Right ={ + + AnyKinEqFourierDriver PlaneOfElevation = { + Type = CosSin; + Freq = 0.25; + A = {{25, -80 }}*pi/180; + B = {{0, 0}}*pi/180; + Reaction.Type={Off}; + + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.PlaneOfElevation; + }; + + + AnyKinEqSimpleDriver AxialRot ={ + AnyKinMeasure &ref= Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.InternalAxialRotation; + DriverPos ={0*pi/180}; + DriverVel ={0}; + CType={Soft}; + Reaction.Type={Off}; + }; + + + + + AnyKinEqFourierDriver Elevation = + { + Type = CosSin; + Freq = .25; + A = {{80, 0 }}*pi/180; + B ={{0, (70)}}*pi/180; + Reaction.Type={Off}; + + + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Right.ThoraxHumerus.Elevation; + }; + + + + }; + + + AnyFolder Left ={ + + AnyKinEqFourierDriver PlaneOfElevation = { + Type = CosSin; + Freq = 0.25; + A ={{25, -80 }}*pi/180; + B = {{0, 0}}*pi/180; + Reaction.Type={Off}; + + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.PlaneOfElevation; + }; + + + AnyKinEqSimpleDriver AxialRot ={ + AnyKinMeasure &ref= Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.InternalAxialRotation; + DriverPos ={0*pi/180}; + DriverVel ={0}; + CType={Soft}; + Reaction.Type={Off}; + }; + + + + + AnyKinEqFourierDriver Elevation = + { + Type = CosSin; + Freq = .25; + A = {{80, 0 }}*pi/180; + B = {{0, (70)}}*pi/180; + + Reaction.Type={Off}; + + AnyKinMeasure &rtef=.Main.HumanModel.BodyModel.Interface.Left.ThoraxHumerus.Elevation; + }; + + + + }; + + }; + + + + +}; + + +}; //Main + +