Switch to unified view

a b/Application/Examples/SeatedHumanFullWithNeck/Model/JointsAndDrivers.any
1
AnyFolder Jnt={
2
  
3
  AnyFolder &RefP=..EnvironmentModel;
4
  AnyFolder &RefS=.Segments;
5
  AnyFolder &RefH = ..BodyModel;
6
  
7
  //----------------------------------------------
8
  // Joints - Pelvis - Seat
9
  //----------------------------------------------
10
  
11
  AnyFolder PelvisSeatJnt = {
12
    
13
    AnyKinLinear PelvisSeatLinMeasure = {
14
      AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
15
      SeatRef={
16
        //AnyDrawRefFrame test ={ScaleXYZ={0.4,0.4,0.4};};
17
      };
18
      AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;
19
      Ref = 0;
20
    };
21
    
22
    AnyKinRotational PelvisSeatRotMeasure = {
23
      AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
24
      AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;  
25
      Type = RotVector;
26
    };
27
    
28
    AnyKinEqSimpleDriver PelvisSeatEq = {
29
      AnyKinLinear &LinearMeasure  = .PelvisSeatLinMeasure;
30
      AnyKinRotational &RotMeasure = .PelvisSeatRotMeasure;        
31
      MeasureOrganizer = {0,2,3,4};
32
      DriverPos = {0.01,0,0,0};
33
      DriverVel = {0,0,0,0};
34
      Reaction.Type = {Off,Off,Off,Off};
35
    };          
36
    
37
    AnyKinMeasureOrg PelvisSeatMeasureOrg = {
38
      AnyKinLinear &LinearMeasure = .PelvisSeatLinMeasure;
39
      MeasureOrganizer = {0};
40
    };
41
  }; // PelvisSeatJnt
42
  
43
  //------------------------------------------------
44
  // Joint - BackRest - Thorax 
45
  //------------------------------------------------
46
  AnyFolder BackRestThoraxJnt = {
47
    
48
    AnyKinLinear BackRestThoraxLinMeasure = {
49
      AnyRefFrame &BackRestRef = ..RefP.Seg.BackRest;
50
      AnyRefFrame &ThoraxRef = ..RefH.Trunk.SegmentsThorax.ThoraxSeg.T2SupportNode;//ThoraxBackRestJntNode;
51
      Ref = 0;
52
    };
53
    
54
    AnyKinEqSimpleDriver BackRestThoraxEq = {
55
      AnyKinLinear &LinearMeasure = .BackRestThoraxLinMeasure;
56
      MeasureOrganizer = {0};
57
      DriverPos = {0.03};
58
      DriverVel = {0};
59
      Reaction.Type = {Off};
60
    };
61
  }; // BackRestThoraxJnt
62
  
63
  AnyFolder FootRestFootJnt = {
64
    
65
    AnyFolder Right = {      
66
      
67
      AnyKinLinear FootRestFootLinMeasure = {
68
        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
69
        AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
70
        Ref = 0;
71
      };
72
      
73
      AnyKinRotational FootRestFootRotMeasure = {
74
        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
75
        AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
76
        Type = RotVector;
77
      };
78
      
79
      AnyKinEqSimpleDriver FootRestFootEq = {
80
        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
81
        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
82
        MeasureOrganizer = {0,1,2,4,5};
83
        DriverPos = {0.01,0,0,0,0};
84
        DriverVel = {0,0,0,0,0};       
85
        Reaction.Type = {Off,Off,Off,Off,Off};        
86
      };  
87
      
88
      AnyKinMeasureOrg FootRestFootMeasureOrg = {
89
        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
90
        MeasureOrganizer = {0};
91
      };
92
      
93
      AnyKinEqSimpleDriver AnkleDriver ={
94
        AnyUniversalJoint &ref = ...RefH.Right.Leg.Jnt.Ankle;
95
        MeasureOrganizer={1};
96
        DriverPos={0};
97
        DriverVel={0};
98
      };
99
    }; //Right
100
    
101
    AnyFolder Left = {
102
      
103
      AnyKinLinear FootRestFootLinMeasure = {
104
        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
105
        AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
106
        Ref = 0;
107
      };
108
      
109
      AnyKinRotational FootRestFootRotMeasure = {
110
        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
111
        AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
112
        Type = RotVector;
113
      };
114
      AnyKinEqSimpleDriver FootRestFootEq = {
115
        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
116
        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
117
        MeasureOrganizer = {0,1,2,4,5};
118
        DriverPos = {0.01,0,0,0,0};
119
        DriverVel = {0,0,0,0,0};  
120
        Reaction.Type = {Off,Off,Off,Off,Off};        
121
      };       
122
      
123
      AnyKinMeasureOrg FootRestFootMeasureOrg = {
124
        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
125
        MeasureOrganizer = {0};
126
      };
127
      
128
      AnyKinEqSimpleDriver AnkleDriver ={
129
        AnyUniversalJoint &ref = ...RefH.Left.Leg.Jnt.Ankle;
130
        MeasureOrganizer={1};
131
        DriverPos={0};
132
        DriverVel={0};
133
      };
134
    }; //Left    
135
    
136
  }; // FootFootRestJnt  
137
  
138
  AnyFolder UlnaArmRestJnt = {
139
    
140
    AnyFolder Right = {
141
      AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
142
        AnyKinLinear ArmRestElbowLinMeasure = {
143
          AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeBack;
144
          AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.ol;
145
        };        
146
        MeasureOrganizer = {1};
147
        DriverPos={0};
148
        DriverVel={0};
149
        Reaction.Type={Off};
150
      };
151
            
152
      AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
153
        AnyKinLinear ArmRestWristLinMeasure = {
154
          AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeFront;
155
          AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.us;
156
        };
157
        MeasureOrganizer = {1,2};
158
        DriverPos={0,0};
159
        DriverVel={0,0};
160
        Reaction.Type={Off,Off};
161
      };      
162
    }; // Right
163
    
164
    AnyFolder Left = {
165
      AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
166
        AnyKinLinear ArmRestElbowLinMeasure = {
167
          AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeBack;
168
          AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.ol;
169
        };        
170
        MeasureOrganizer = {1};
171
        DriverPos={0};
172
        DriverVel={0};
173
        Reaction.Type={Off};
174
      };
175
            
176
      AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
177
        AnyKinLinear ArmRestWristLinMeasure = {
178
          AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeFront;
179
          AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.us;
180
        };
181
        MeasureOrganizer = {1,2};
182
        DriverPos={0,0};
183
        DriverVel={0,0};
184
        Reaction.Type={Off,Off};
185
      };      
186
    }; // Left    
187
  }; // UlnaArmRestJnt
188
}; //Jnt
189
190
//--------------------------------------------------
191
// Drivers
192
//--------------------------------------------------
193
194
AnyFolder Drivers = {
195
  
196
  AnyFolder &RefHM = Main.Model.BodyModel;
197
  AnyFolder &RefPM = Main.Model.EnvironmentModel;
198
  AnyFolder &DrvPos = Main.DrvPos;
199
  AnyFolder &DrvVel = Main.DrvVel;
200
  AnyFolder &JntPos=..Mannequin.Posture;
201
  AnyFolder &JntVel=..Mannequin.PostureVel;
202
  
203
  //-------------------------------------------------------
204
  //  Drivers - spine
205
  //-------------------------------------------------------
206
  
207
  AnyKinEqSimpleDriver PelvisSeatDrv = {
208
    AnyKinMeasure& LinMeasure = ..Jnt.PelvisSeatJnt.PelvisSeatLinMeasure;
209
    MeasureOrganizer = {1};    
210
    DriverPos = {.DrvPos.PelvisSeatLinXPos};
211
    DriverVel = {.DrvVel.PelvisSeatLinXVel};
212
    Reaction.Type = {Off}; 
213
  };    
214
  
215
  //-------------------------------------------------------
216
  //  Drivers - spine
217
  //-------------------------------------------------------
218
  
219
  //Thorax pelvis rotation driver
220
  AnyKinEqSimpleDriver PostureDriver ={
221
    AnyKinMeasure& Ref2 = ...BodyModel.Interface.Trunk.PelvisThoraxLateralBending;        
222
    AnyKinMeasure& Ref3 = ...BodyModel.Interface.Trunk.PelvisThoraxRotation;   
223
    //AnyKinMeasure& Ref1 = ...BodyModel.Interface.Trunk.PelvisThoraxExtension;
224
    
225
    DriverPos = pi/180*{
226
      .JntPos.PelvisThoraxLateralBending,
227
      .JntPos.PelvisThoraxRotation
228
      // .JntPos.PelvisThoraxExtension
229
    };
230
    DriverVel = pi/180*{
231
      .JntVel.PelvisThoraxLateralBending,
232
      .JntVel.PelvisThoraxRotation
233
      //  .JntVel.PelvisThoraxExtension
234
    };
235
    Reaction.Type = {Off,Off};  
236
  };  
237
  
238
  //Neck driver 
239
  
240
  AnyKinEqSimpleDriver CervicalDriver ={
241
    AnyKinMeasure& Ref1 = .RefHM.Interface.Trunk.SkullThoraxFlexion;  
242
    AnyKinMeasure& Ref2 = .RefHM.Interface.Trunk.SkullThoraxLateralBending;
243
    AnyKinMeasure& Ref3 = .RefHM.Interface.Trunk.SkullThoraxRotation;
244
    DriverPos = pi/180*{0, 0, 0};
245
    DriverVel = pi/180*{0, 0, 0};
246
    Reaction.Type = {Off, Off, Off};  
247
  };
248
  
249
  
250
  
251
  
252
  //This was not previously... but is easier to use with the detailed spine
253
  AnyKinRotational PelvisGlobalRotMeasure = {
254
    AnyRefFrame &PelvisRef = .RefHM.Trunk.SegmentsLumbar.PelvisSeg;  
255
    AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
256
    Type = RotVector;
257
  };
258
  
259
  AnyKinMeasureOrg PelvisGlobalRotZMeasure = {
260
    AnyKinMeasure& RotMeasure = .PelvisGlobalRotMeasure;
261
    MeasureOrganizer = {2};
262
  };
263
  
264
  AnyKinRotational ThoraxGlobalRotMeasure = {
265
    AnyRefFrame &ThoraxRef = .RefHM.Trunk.SegmentsThorax.ThoraxSeg;  
266
    AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
267
    Type = RotVector;
268
  }; 
269
  
270
  AnyKinMeasureOrg ThoraxGlobalRotZMeasure = {
271
    AnyKinMeasure& RotMeasure = .ThoraxGlobalRotMeasure;
272
    MeasureOrganizer = {2};
273
  }; 
274
  
275
  
276
//  AnyKinEqSimpleDriver PelvisSeatRhythmDrv = {
277
//    AnyKinMeasureLinComb Measure = {
278
//      AnyKinMeasure& u1 = ..PelvisGlobalRotZMeasure;
279
//      AnyKinMeasure& u2 = ..ThoraxGlobalRotZMeasure;
280
//      Coef = {{1/(0.0533), -1/(0.0533)}};
281
//      Const = {-(0.6665/(-0.1433))};
282
//    }; // Measure
283
//    DriverPos = {180*pi/180+Main.DrvPos.GlobalBackRestRotZPos};
284
//    DriverVel = {Main.DrvVel.GlobalBackRestRotZVel};
285
//    Reaction.Type = {Off};
286
//  }; // SeatBackRestDrv
287
288
//AnyKinEqSimpleDriver tmp = {
289
//  AnyKinRotational PelvisThorax = {
290
//    AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
291
//    AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
292
//    Type = RotAxesAngles;
293
//  };
294
//  MeasureOrganizer = {0};
295
//  DriverPos = {30*pi/180};
296
//  DriverVel = {-15*pi/180};
297
//};
298
299
300
  AnyKinEq ThoraxThighRhythm = {
301
    AnyKinMeasureLinComb ThoraxThighRhythmComb = {
302
      AnyKinMeasureOrg Org = {
303
        AnySphericalJoint &rhip1 = Main.Model.BodyModel.Right.Leg.Jnt.Hip;
304
        AnySphericalJoint &lhip2 = Main.Model.BodyModel.Left.Leg.Jnt.Hip;
305
        AnyKinRotational PelvisThorax = {
306
          AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
307
          AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
308
          Type = RotAxesAngles;
309
        };
310
        MeasureOrganizer = {2, 5, 6};
311
      };
312
      OutDim = 1;
313
      Coef = {{0.5, 0.5, 3.0}};
314
      Const = {0};
315
    };
316
    Reaction.Type={Off}; 
317
  };
318
  
319
  AnyFolder Right = {
320
    
321
    // ************************************
322
    // Drivers for the right arm
323
    // ************************************
324
    
325
    //Sterno clavicular joint driver
326
    AnyKinEqSimpleDriver SCDriverRight ={
327
      AnyKinMeasure& ref1 =....BodyModel.Interface.Right.SternoClavicularProtraction;
328
      AnyKinMeasure& ref2 =....BodyModel.Interface.Right.SternoClavicularElevation;
329
      DriverPos = pi/180*{
330
        ..JntPos.Right.SternoClavicularProtraction,
331
        ..JntPos.Right.SternoClavicularElevation
332
      };
333
      DriverVel = {
334
        ..JntVel.Right.SternoClavicularProtraction,
335
        ..JntVel.Right.SternoClavicularElevation
336
      };
337
      Reaction.Type={Off,Off};
338
    };
339
    
340
    //Glenohumeral joint 
341
    AnyKinEqSimpleDriver GHDriverRight={
342
      AnyKinMeasure& ref1 = ....BodyModel.Interface.Right.GlenohumeralAbduction;
343
//      AnyKinMeasure& ref3 = ....BodyModel.Interface.Right.GlenohumeralExternalRotation;
344
      
345
      DriverPos=pi/180*{
346
        ..JntPos.Right.GlenohumeralAbduction  //GH joint
347
//        ..JntPos.Right.GlenohumeralExternalRotation  //GH joint
348
      };
349
      DriverVel = pi/180*{
350
        ..JntVel.Right.GlenohumeralAbduction  //GH joint
351
//        ..JntVel.Right.GlenohumeralExternalRotation  //GH joint
352
      };
353
      Reaction.Type={Off};
354
    };
355
    
356
    //Elbow pronation driver
357
    AnyKinEqSimpleDriver ElbowPronationDriverRight={
358
      AnyKinMeasure& Elbow =....BodyModel.Interface.Right.ElbowPronation;
359
      DriverPos = pi/180*{..JntPos.Right.ElbowPronation };  
360
      
361
      DriverVel=pi/180*{..JntVel.Right.ElbowPronation };  
362
      Reaction.Type={Off};
363
    };
364
    
365
    //Wrist driver 
366
    AnyKinEqSimpleDriver WristDriverRight ={
367
      AnyKinMeasure& ref1 =....BodyModel.Interface.Right.WristFlexion;
368
      AnyKinMeasure& ref2 =....BodyModel.Interface.Right.WristAbduction;
369
      DriverPos = pi/180*{
370
        ..JntPos.Right.WristFlexion,
371
        ..JntPos.Right.WristAbduction
372
      };
373
      
374
      DriverVel = pi/180*{
375
        ..JntVel.Right.WristFlexion,
376
        ..JntVel.Right.WristAbduction};
377
      Reaction.Type={Off,Off};
378
    };
379
    
380
  }; //End Right
381
  
382
  AnyFolder Left = {
383
    
384
    // ************************************
385
    // Drivers for the left arm
386
    // ************************************
387
    
388
    //Sterno clavicular joint driver
389
    AnyKinEqSimpleDriver SCDriverLeft ={
390
      AnyKinMeasure& ref1 =....BodyModel.Interface.Left.SternoClavicularProtraction;
391
      AnyKinMeasure& ref2 =....BodyModel.Interface.Left.SternoClavicularElevation;
392
      
393
      DriverPos = pi/180*{
394
        ..JntPos.Left.SternoClavicularProtraction,
395
        ..JntPos.Left.SternoClavicularElevation
396
      };
397
      
398
      DriverVel = pi/180*{
399
        ..JntVel.Left.SternoClavicularProtraction,
400
        ..JntVel.Left.SternoClavicularElevation
401
      };
402
      
403
      Reaction.Type={Off,Off};
404
    };
405
    
406
    //Glenohumeral joint 
407
    AnyKinEqSimpleDriver GHDriverLeft={
408
      AnyKinMeasure& ref1 = ....BodyModel.Interface.Left.GlenohumeralAbduction;
409
//      AnyKinMeasure& ref3 = ....BodyModel.Interface.Left.GlenohumeralExternalRotation;
410
      
411
      DriverPos=pi/180*{
412
        ..JntPos.Left.GlenohumeralAbduction  //GH joint
413
//        ..JntPos.Left.GlenohumeralExternalRotation  //GH joint
414
      };
415
      DriverVel = pi/180*{
416
//        ..JntVel.Left.GlenohumeralAbduction  //GH joint
417
        ..JntVel.Left.GlenohumeralExternalRotation  //GH joint
418
      };
419
      Reaction.Type={Off};
420
    };
421
    
422
    //Elbow pronation driver 
423
    AnyKinEqSimpleDriver ElbowPSDriverLeft={
424
      AnyKinMeasure& Elbow =....BodyModel.Interface.Left.ElbowPronation;
425
      DriverPos= pi/180*{..JntPos.Left.ElbowPronation };  
426
      DriverVel = pi/180*{..JntVel.Left.ElbowPronation };  
427
      Reaction.Type={Off};
428
    };
429
    //Wrist driver
430
    AnyKinEqSimpleDriver WristDriverLeft ={
431
      AnyKinMeasure& ref1 =....BodyModel.Interface.Left.WristFlexion;
432
      AnyKinMeasure& ref2 =....BodyModel.Interface.Left.WristAbduction;
433
      DriverPos = pi/180*{
434
        ..JntPos.Left.WristFlexion,
435
        ..JntPos.Left.WristAbduction};
436
      
437
      DriverVel = pi/180*{
438
        ..JntVel.Left.WristFlexion,
439
        ..JntVel.Left.WristAbduction};
440
      Reaction.Type={Off,Off};
441
    };
442
  }; //End Left    
443
}; // Drivers