-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathElaboratore.m
180 lines (146 loc) · 7.85 KB
/
Elaboratore.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
classdef Elaboratore < handle
%ELABORATORE si occupa di calcolare gli errori di postura
% i parametri su cui vengono calcolati gli errori sono gli angoli
% delle ossa dello scheletro e le posizioni dei Joint dello
% scheletro. Queste informazioni vengono confrontate con gli
% attributi di un oggetto ParametriUtente. Attualmente la
% BalanceBoard non è prevista nell'elaborazione degli errori
properties
%asse delle spalle, un oggetto Bone(jointA, jointB, name) calcolato tra i Joint Shoulder_Left e
%Shoulder_Right
shoulder_axis=Bone();
%% misure sull'oggetto skeleton
% mappa delle misure sullo scheletro rilevato
% KeySet: nome misura
% ValueSet: [|misura|, X1, Y1, X2, Y2]
keySet={'angle_backbone_shoulders','angle_backbone','angle_hipbone_backbone','hip_right_left','knee_right_left'};
valueSet={[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]};
misure;
%% scostamenti calcolati tra i parametri utente e le misure rilevate
% mappa degli errori calcolati
% KeySet: nome errore
% ValueSet: [|errore|, X1, Y1, X2, Y2]
ErrKeySet={'err_angle_backbone_shoulders','err_angle_backbone','err_angle_hipbone_backbone','err_hip_right_left','err_knee_right_left'};
ErrValueSet={[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]};
errori;
end
methods
%costruttore, attualmente vengono elaborati solo i dati
%dell'oggetto skeleton, verrà poi aggiunta la misura della
%balanceboard
% Input: oggetto Skeleton
% Funzioni: vengono utilizzate le funzioni GET di Skeleton.m,
% Bone.m e Joint.m
function elab = Elaboratore(skel)
elab.misure=containers.Map(elab.keySet,elab.valueSet,'UniformValues',false);
elab.errori=containers.Map(elab.ErrKeySet,elab.ErrValueSet,'UniformValues',false);
if(nargin>0)
%assegnazione shoulder_axis, i numeri nei parametri sono
%riferiti alla numerazione assegnata dalla kinect,
%esplicitata nella classe Skeleton
spallaDestra=skel.getJointMap(9);
spallaSinistra=skel.getJointMap(5);
elab.shoulder_axis=Bone(spallaSinistra,spallaDestra,'Shoulder_Axis');
%assegnazione angle_backbone_shoulders
misura=abs(elab.shoulder_axis.GetAngleBone()-skel.getBone('BackBone').GetAngleBone());
x1=spallaDestra.GetX();
y1=spallaDestra.GetY();
x2=spallaSinistra.GetX();
y2=spallaSinistra.GetY();
elab.misure('angle_backbone_shoulders')=[misura, x1, y1, x2, y2];
%assegnazione angle_backbone
misura=skel.getBone('BackBone').GetAngleBone();
x1=((abs(skel.getJointMap(2).GetX()-skel.getJointMap(3).GetX()))/2)+min(skel.getJointMap(2).GetX(),skel.getJointMap(3).GetX());
y1=((abs(skel.getJointMap(2).GetY()-skel.getJointMap(3).GetY()))/2)+min(skel.getJointMap(3).GetY(),skel.getJointMap(2).GetY());
elab.misure('angle_backbone')=[misura, x1, y1, x1, y1];
%assegnazione angle_hipbone_backbone
misura=abs(skel.getBone('HipBone').GetAngleBone())+abs(skel.getBone('BackBone').GetAngleBone());
x1=skel.getJointMap(1).GetX();
y1=skel.getJointMap(1).GetY();
elab.misure('angle_hipbone_backbone')=[misura, x1, y1, x1, y1];
%assegnazione hip_right_left, i numeri nei parametri sono
%riferiti alla numerazione assegnata dalla kinect,
%esplicitata nella classe Skeleton
x1=skel.getJointMap(13).GetX();
y1=skel.getJointMap(13).GetY();
x2=skel.getJointMap(17).GetX();
y2=skel.getJointMap(17).GetY();
misura=abs(y1-y2);
elab.misure('hip_right_left')=[misura, x1, y1, x2, y2];
%assegnazione knee_right_left, i numeri nei parametri sono
%riferiti alla numerazione assegnata dalla kinect,
%esplicitata nella classe Skeleton
x1=skel.getJointMap(14).GetX();
y1=skel.getJointMap(14).GetY();
x2=skel.getJointMap(18).GetX();
y2=skel.getJointMap(18).GetY();
misura=abs(y1-y2);
elab.misure('knee_right_left')=[misura, x1, y1, x2, y2];
end
end
%% funzioni di elaborazione
% CalcoloErrori, è effettivamente un SET dei valori della mappa "errori"
% funziona per side effect.
% Output: void
function errori=CalcoloErrori(elab, paramUtenti) %?? a che serve restituire la variabile 'errori' ? // a niente
% angle_backbone_shoulders;
% angle_backbone;
% angle_hipbone_backbone;
% hip_right_left;
% knee_right_left;
value=elab.misure('angle_backbone_shoulders');
value(1)=paramUtenti.Get_angle_backbone_shoulders()-elab.Get_angle_backbone_shoulders();
elab.errori('err_angle_backbone_shoulders')=value;
value=elab.misure('angle_backbone');
value(1)=paramUtenti.Get_angle_backbone()-elab.Get_angle_backbone();
elab.errori('err_angle_backbone')=value;
value=elab.misure('angle_hipbone_backbone');
value(1)=paramUtenti.Get_angle_hipbone_backbone()-elab.Get_angle_hipbone_backbone();
elab.errori('err_angle_hipbone_backbone')=value;
value=elab.misure('hip_right_left');
value(1)=paramUtenti.Get_hip_right_left()-elab.Get_hip_right_left();
elab.errori('err_hip_right_left')=value;
value=elab.misure('knee_right_left');
value(1)=paramUtenti.Get_knee_right_left()-elab.Get_knee_right_left();
elab.errori('err_knee_right_left')=value;
return;
end
% funzione di export della mappa errori, effettivamente come una GET
% Output: la mappa degli errori
function export=Export(elab)
export=elab.errori;
return;
end
%% funzioni GET per attributi
% funzione Get per angle_backbone_shoulders
function angle= Get_angle_backbone_shoulders(elab)
angle=elab.misure('angle_backbone_shoulders');
angle=angle(1);
return;
end
% funzione Get per angle_backbone
function angle = Get_angle_backbone(elab)
angle=elab.misure('angle_backbone');
angle=angle(1);
return;
end
% funzione Get per angle_hipbone_backbone
function angle = Get_angle_hipbone_backbone(elab)
angle=elab.misure('angle_hipbone_backbone');
angle=angle(1);
return;
end
% funzione Get per hip_right_left
function angle = Get_hip_right_left(elab)
angle=elab.misure('hip_right_left');
angle=angle(1);
return;
end
% funzione Get per knee_right_left
function angle = Get_knee_right_left(elab)
angle=elab.misure('knee_right_left');
angle=angle(1);
return;
end
end
end