1+ // Demo example for general muscles.
2+
3+ Main = {
4+
5+ // The actual body model goes in this folder
6+ AnyFolder ArmModel = {
7+
8+ // Global Reference Frame
9+ AnyFixedRefFrame GlobalRef = {
10+
11+ AnyRefNode Shoulder = {
12+ sRel = {0,0,0};
13+ };
14+ }; // Global reference frame
15+
16+ // Segments
17+ AnyFolder Segs = {
18+
19+ AnySeg UpperArm = {
20+ r0 = {0,-0.15,0};
21+ Axes0 = {{0,1,0},{-1,0,0},{0,0,1}};
22+ Mass = 2.0;
23+ Jii = {0.002,0.005,0.005};
24+ AnyDrawSeg DrwSeg = {};
25+ AnyRefNode ShoulderNode = {
26+ sRel = {-0.2,0,0};
27+ };
28+ AnyRefNode ElbowNode = {
29+ sRel = {0.2,0,0};
30+ };
31+ }; // UpperArm
32+
33+ AnySeg LowerArm = {
34+ r0 = {0.25,-0.3,0};
35+ Mass = 2.0;
36+ Jii = {0.002,0.005,0.005};
37+ AnyRefNode ElbowNode = {
38+ sRel = {-0.2,0,0};
39+ };
40+ AnyRefNode HandNode = {
41+ sRel = {0.2,0,0};
42+ };
43+ AnyRefNode PalmNode = {
44+ sRel = {0.27,0,0};
45+ ARel = {{0,0,1},{0,1,0},{-1,0,0}};
46+ };
47+ AnyDrawSeg DrwSeg = {};
48+ }; // LowerArm
49+
50+ }; // Segs folder
51+
52+ AnyFolder Jnts = {
53+
54+ //---------------------------------
55+ AnyRevoluteJoint Shoulder = {
56+ Axis = z;
57+ AnyRefNode &GroundNode = ..GlobalRef.Shoulder;
58+ AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode;
59+ }; // Shoulder joint
60+
61+ AnyRevoluteJoint Elbow = {
62+ Axis = z;
63+ AnyRefNode &UpperArmNode = ..Segs.UpperArm.ElbowNode;
64+ AnyRefNode &LowerArmNode = ..Segs.LowerArm.ElbowNode;
65+ }; // Elbow joint
66+
67+ }; // Jnts folder
68+
69+
70+ AnyKinLinear HandPos = {
71+ AnyRefFrame &ref1 = .GlobalRef.Shoulder;
72+ AnyRefFrame &ref2 = .Segs.LowerArm.PalmNode;
73+ };
74+
75+ AnyFolder Drivers = {
76+ AnyKinEqSimpleDriver HandDriver = {
77+ AnyKinLinear &Measure = ..HandPos;
78+ MeasureOrganizer = {0,1};
79+ DriverPos = {0.45, -0.6};
80+ DriverVel = {0, 0.5};
81+ Reaction.Type = {Off, Off};
82+ };
83+ /*
84+ //---------------------------------
85+ AnyKinEqSimpleDriver ShoulderMotion = {
86+ AnyRevoluteJoint &Jnt = ..Jnts.Shoulder;
87+ DriverPos = {-1.7};
88+ DriverVel = {0.4};
89+ Reaction.Type = {0};
90+ }; // Shoulder driver
91+
92+ //---------------------------------
93+ AnyKinEqSimpleDriver ElbowMotion = {
94+ AnyRevoluteJoint &Jnt = ..Jnts.Elbow;
95+ DriverPos = {1.5};
96+ DriverVel = {0.7};
97+ Reaction.Type = {0};
98+ }; // Elbow driver
99+
100+ */
101+
102+ }; // Driver folder
103+
104+
105+ AnyRecruitedActuator WallReaction = {
106+ Type = NonNegative;
107+ Volume = 1e-6; // Ignore this value. Only used in special volume weighted recruitement
108+ Strength = 10000;
109+ AnyKinMeasureOrg Org = {
110+ AnyKinMeasure &wall = ..HandPos;
111+ MeasureOrganizer = {0};
112+ };
113+ };
114+
115+ AnyMuscleModel MusModel = {
116+ F0 = 100.0;
117+ };
118+
119+ AnyMuscleGeneric ShoulderTorque =
120+ {
121+ //viewForce.Visible = Off;
122+ Type = NonNegative;
123+ AnyMuscleModel &Model = .MusModel;
124+ AnyKinMeasure &Angle = .Jnts.Shoulder;
125+ };
126+
127+ AnyMuscleGeneric ElbowTorque =
128+ {
129+ //viewForce.Visible = Off;
130+ Type = NonNegative;
131+ AnyMuscleModel &Model = .MusModel;
132+ AnyKinMeasure &Angle = .Jnts.Elbow;
133+ };
134+ AnyFolder Loads = {
135+
136+ //---------------------------------
137+ AnyForce3D Dumbbell = {
138+ AnyRefNode &PalmNode = ..Segs.LowerArm.PalmNode;
139+ F = {0,-100,0}; // Force in Newton
140+ };
141+ }; // Loads folder
142+
143+ // Todo. Add the model elements such as
144+ // segments, joints, and muscles here.
145+
146+ }; // ArmModel
147+
148+ // The study: Operations to be performed on the model
149+ AnyBodyStudy ArmStudy = {
150+ AnyFolder &Model = .ArmModel;
151+ // InverseDynamics.Criterion.Type = MR_MinMaxStrict;
152+ InverseDynamics.Criterion.Type = MR_Quadratic;
153+ Gravity = {0.0, -9.81, 0.0};
154+ };
155+
156+ }; // Main
0 commit comments