Biomech-Sim-Toolbox 1
Toolbox for movement simulation and analysis
Loading...
Searching...
No Matches
gait3d_pelvis213_multibody.h
Go to the documentation of this file.
1// gait3d_pelvis213_multibody.h
2// This file defines the data structures that are needed in Autolev multibody model
3
4#define NDOF 33 // number of kinematic degrees of freedom
5#define NFKSEG 20 // number of Opensim body segments (excluding ground)
6#define NFK 12*NFKSEG // number of forward kinematic outputs: 12 for each segment: Ox,Oy,Oz,R11,R12,R13,R21,R22,R23,R31,R32,R33
7#define NGRFSEG 4 // number of body segments that have contact points attached to them (Rcalc, Rtoes, Lcalc, Ltoes)
8#define NGRF 6*NGRFSEG // number of GRF inputs to equation of motion (3D force and moment on each segment that has contact points)
9
10// macro to declare inertial properties of a segment S
11#define INERTIAL(S) double S##_M, S##_CMx, S##_CMy, S##_CMz, S##_Ixx, S##_Iyy, S##_Izz, S##_Ixy, S##_Iyz, S##_Ixz
12
13typedef struct {
14 // Gravity and body weight
15 double gravity_x, gravity_y, gravity_z;
16 double bodyweight;
17
18 // Air drag
19 double airdrag; // drag coefficient, N/(m/s)^2
20 double wind; // wind speed, m/s (positive value is a tailwind)
21
22 // Body segment parameters
23 INERTIAL(pelvis);
24 INERTIAL(torso);
25
26 INERTIAL(Rfemur);
27 INERTIAL(Rtibia);
28 INERTIAL(Rcalcaneus);
29 INERTIAL(Rtoes);
30 INERTIAL(Rhumerus);
31 INERTIAL(Rulna);
32 INERTIAL(Rradius);
33 INERTIAL(Rhand);
34
35 INERTIAL(Lfemur);
36 INERTIAL(Ltibia);
37 INERTIAL(Lcalcaneus);
38 INERTIAL(Ltoes);
39 INERTIAL(Lhumerus);
40 INERTIAL(Lulna);
41 INERTIAL(Lradius);
42 INERTIAL(Lhand);
43
44 // Joint axis orientations (are assumed to be the same left and right, with mirroring relative to local XY plane)
45 double Rankle1, Rankle2, Rankle3;
46 double Rsubtalar1, Rsubtalar2, Rsubtalar3;
47 double Rmtp1, Rmtp3; // mtp2 is hard zero (as coded in addleg function in gait3d_pelvis213make.m)
48 double Relbow1, Relbow2, Relbow3;
49 double Rraduln1, Rraduln2, Rraduln3;
50
51 double Lankle1, Lankle2, Lankle3;
52 double Lsubtalar1, Lsubtalar2, Lsubtalar3;
53 double Lmtp1, Lmtp3; // mtp2 is hard zero (as coded in addleg function in gait3d_pelvis213make.m)
54 double Lelbow1, Lelbow2, Lelbow3;
55 double Lraduln1, Lraduln2, Lraduln3;
56
57 // Joint axis positions (parameters that were coded as hard zeros in gait3d_pelvis213make.m are not included here)
58 double back_x, back_y;
59
60 double Rhip_x, Rhip_y, Rhip_z;
61 double Rknee_x1, Rknee_x2, Rknee_x3, Rknee_x4, Rknee_x5; // polynomial coefficients for knee x as function of knee angle
62 double Rknee_y1, Rknee_y2, Rknee_y3, Rknee_y4, Rknee_y5; // polynomial coefficients for knee y as function of knee angle
63 double Rankle_y;
64 double Rsubtalar_x, Rsubtalar_y, Rsubtalar_z;
65 double Rmtp_x, Rmtp_y, Rmtp_z;
66 double Racromial_x, Racromial_y, Racromial_z;
67 double Relbow_x, Relbow_y, Relbow_z;
68 double Rraduln_x, Rraduln_y, Rraduln_z;
69 double Rwrist_x, Rwrist_y, Rwrist_z;
70
71 double Lhip_x, Lhip_y, Lhip_z;
72 double Lknee_x1, Lknee_x2, Lknee_x3, Lknee_x4, Lknee_x5; // polynomial coefficients for knee x as function of knee angle
73 double Lknee_y1, Lknee_y2, Lknee_y3, Lknee_y4, Lknee_y5; // polynomial coefficients for knee y as function of knee angle
74 double Lankle_y;
75 double Lsubtalar_x, Lsubtalar_y, Lsubtalar_z;
76 double Lmtp_x, Lmtp_y, Lmtp_z;
77 double Lacromial_x, Lacromial_y, Lacromial_z;
78 double Lelbow_x, Lelbow_y, Lelbow_z;
79 double Lraduln_x, Lraduln_y, Lraduln_z;
80 double Lwrist_x, Lwrist_y, Lwrist_z;
81
83
84// prototype for the Autolev C function for multibody dynamics
86 double q[NDOF],
87 double qd[NDOF],
88 double qdd[NDOF],
89 double G[NGRF],
90 double f[NDOF],
91 double df_dq[NDOF][NDOF],
92 double df_dqd[NDOF][NDOF],
93 double df_dqdd[NDOF][NDOF],
94 double df_dG[NDOF][NGRF],
95 double fk[NFK],
96 double dfk_dq[NFK][NDOF],
97 double fkdot[NFK],
98 double dfkdot_dq[NFK][NDOF]);
99
101 double q[NDOF],
102 double qd[NDOF],
103 double qdd[NDOF],
104 double G[NGRF],
105 double f[NDOF],
106 double fk[NFK],
107 double dfk_dq[NFK][NDOF],
108 double fkdot[NFK],
109 double dfkdot_dq[NFK][NDOF]);
110
112 double q[NDOF],
113 double qd[NDOF],
114 double qdd[NDOF],
115 double fk[NFK],
116 double dfk_dq[NFK][NDOF],
117 double fkdot[NFK],
118 double dfkdot_dq[NFK][NDOF]);
double f[4]
Definition: contact_2d_raw.c:20
double fkdot[48]
Definition: gait10dof18musc_FK_raw.c:24
double dfk_dq[48][10]
Definition: gait10dof18musc_FK_raw.c:24
double fk[48]
Definition: gait10dof18musc_FK_raw.c:24
double dfkdot_dq[48][10]
Definition: gait10dof18musc_FK_raw.c:25
double df_dqd[10][10]
Definition: gait10dof18musc_raw.c:34
double df_dG[10][6]
Definition: gait10dof18musc_raw.c:34
double df_dq[10][10]
Definition: gait10dof18musc_raw.c:34
double df_dqdd[10][10]
Definition: gait10dof18musc_raw.c:34
void gait3d_pelvis213_FK_al(param_struct *par, double q[NDOF], double qd[NDOF], double qdd[NDOF], double fk[NFK], double dfk_dq[NFK][NDOF], double fkdot[NFK], double dfkdot_dq[NFK][NDOF])
void gait3d_pelvis213_NoDer_al(param_struct *par, double q[NDOF], double qd[NDOF], double qdd[NDOF], double G[NGRF], double f[NDOF], double fk[NFK], double dfk_dq[NFK][NDOF], double fkdot[NFK], double dfkdot_dq[NFK][NDOF])
void gait3d_pelvis213_al(param_struct *par, double q[NDOF], double qd[NDOF], double qdd[NDOF], double G[NGRF], double f[NDOF], double df_dq[NDOF][NDOF], double df_dqd[NDOF][NDOF], double df_dqdd[NDOF][NDOF], double df_dG[NDOF][NGRF], double fk[NFK], double dfk_dq[NFK][NDOF], double fkdot[NFK], double dfkdot_dq[NFK][NDOF])
#define NGRF
Definition: gait3d_pelvis213_multibody.h:8
#define NFK
Definition: gait3d_pelvis213_multibody.h:6
#define NDOF
Definition: gait3d_pelvis213_multibody.h:4
Definition: gait10dof18musc_multibody.h:13
double Rraduln1
Definition: gait3d_pelvis213_multibody.h:49
double Racromial_x
Definition: gait3d_pelvis213_multibody.h:66
INERTIAL(pelvis)
INERTIAL(Lradius)
INERTIAL(torso)
INERTIAL(Rtibia)
double Rmtp_x
Definition: gait3d_pelvis213_multibody.h:65
double Relbow_x
Definition: gait3d_pelvis213_multibody.h:67
INERTIAL(Lhumerus)
INERTIAL(Ltibia)
double Relbow1
Definition: gait3d_pelvis213_multibody.h:48
INERTIAL(Rfemur)
INERTIAL(Rtoes)
INERTIAL(Lcalcaneus)
double Lmtp1
Definition: gait3d_pelvis213_multibody.h:53
double Rraduln_x
Definition: gait3d_pelvis213_multibody.h:68
double Lwrist_x
Definition: gait3d_pelvis213_multibody.h:80
double Rsubtalar1
Definition: gait3d_pelvis213_multibody.h:46
double Lraduln_x
Definition: gait3d_pelvis213_multibody.h:79
double Rwrist_x
Definition: gait3d_pelvis213_multibody.h:69
double Lraduln1
Definition: gait3d_pelvis213_multibody.h:55
double Lsubtalar1
Definition: gait3d_pelvis213_multibody.h:52
double Lankle1
Definition: gait3d_pelvis213_multibody.h:51
double Rankle1
Definition: gait3d_pelvis213_multibody.h:45
double Lacromial_x
Definition: gait3d_pelvis213_multibody.h:77
double Rmtp1
Definition: gait3d_pelvis213_multibody.h:47
INERTIAL(Rhumerus)
double Lmtp_x
Definition: gait3d_pelvis213_multibody.h:76
INERTIAL(Lulna)
double gravity_z
Definition: gait3d_pelvis213_multibody.h:15
INERTIAL(Rradius)
INERTIAL(Rulna)
double Lhip_z
Definition: gait3d_pelvis213_multibody.h:71
double Lsubtalar_x
Definition: gait3d_pelvis213_multibody.h:75
double Rhip_z
Definition: gait3d_pelvis213_multibody.h:60
double Lelbow_x
Definition: gait3d_pelvis213_multibody.h:78
double Lelbow1
Definition: gait3d_pelvis213_multibody.h:54
INERTIAL(Lfemur)
INERTIAL(Lhand)
INERTIAL(Rcalcaneus)
INERTIAL(Rhand)
double Rsubtalar_x
Definition: gait3d_pelvis213_multibody.h:64
INERTIAL(Ltoes)