@@ -44,57 +44,57 @@ draw_mech := proc(sol::{list(`=`),set(`=`)}, data::{list(`=`),set(`=`)}, dof)
44
44
45
45
end proc:
46
46
# Plot position function
47
- plot_position := proc()
47
+ plot_position := proc(dd::{list(`=`),set(`=`)} )
48
48
49
49
local A,B:
50
50
51
51
52
- A := plot(subs(sol_kine, data , theta3(t) = q1_profile, theta1(t) * 180 /Pi), T = 0..3*actuation_time, color = c_set[1],
52
+ A := plot(subs(sol_kine, dd , theta3(t) = q1_profile, theta1(t) * 180 /Pi), T = 0..3*actuation_time, color = c_set[1],
53
53
title = typeset("Position of ", theta__1(t)),labels=["time [s]","Angle [�]"],size = [800, 500]):
54
54
55
- B := plot(subs(sol_kine, data , theta3(t) = q1_profile, s(t)), T = 0..3*actuation_time, color = c_set[2],
55
+ B := plot(subs(sol_kine, dd , theta3(t) = q1_profile, s(t)), T = 0..3*actuation_time, color = c_set[2],
56
56
title = typeset("Position of", s(t)),labels=[t (s),typeset([m])],size = [800, 500]):
57
57
58
58
print(plots[display](Array([A, B]))):
59
59
60
60
end proc:
61
61
# Plot velocity function
62
- plot_velocity := proc()
62
+ plot_velocity := proc(dd::{list(`=`),set(`=`)} )
63
63
64
64
local A,B:
65
65
66
- A := plot(subs(sol_kine, data , theta_base, vel_theta1), T = 0..3*actuation_time, color = c_set[1],
66
+ A := plot(subs(sol_kine, dd , theta_base, vel_theta1), T = 0..3*actuation_time, color = c_set[1],
67
67
title = typeset("Velocity of ", theta__1(t)),labels=["time [s]", "velocity [rad/s]"],size = [800, 500]):
68
68
69
- B := plot(subs(sol_kine, data , theta_base, vel_s), T = 0..3*actuation_time, color = c_set[2],
69
+ B := plot(subs(sol_kine, dd , theta_base, vel_s), T = 0..3*actuation_time, color = c_set[2],
70
70
title = typeset("Velocity of ", s(t)),labels=["time [s]", "velocity [m/s]"],size = [800, 500]):
71
71
72
72
print(plots[display](Array([A, B]))):
73
73
end proc:
74
74
# Plot acceleration function
75
- plot_acceleration := proc()
75
+ plot_acceleration := proc(dd::{list(`=`),set(`=`)} )
76
76
77
77
local A,B:
78
78
79
79
80
- A := plot(subs(sol_kine, data , theta_base, acc_theta1), T = 0..3*actuation_time, color = c_set[1],
80
+ A := plot(subs(sol_kine, dd , theta_base, acc_theta1), T = 0..3*actuation_time, color = c_set[1],
81
81
title = typeset("Acceleration of ", theta__1(t)),labels = ["time [s]", " acceleration [rad/s^2]"],size = [800, 500]):
82
82
83
- B := plot(subs(sol_kine, data , theta_base, acc_s), T = 0..3*actuation_time, color = c_set[2],
83
+ B := plot(subs(sol_kine, dd , theta_base, acc_s), T = 0..3*actuation_time, color = c_set[2],
84
84
title = typeset("Acceleration of ", s(t)),labels = ["time [s]", "acceleration [m/s^2]"],size = [800, 500]):
85
85
86
86
print(plots[display](Array([A, B]))):
87
87
88
88
end proc:
89
89
# Plot system configurations
90
- plot_system := proc()
90
+ plot_system := proc(dd::{list(`=`),set(`=`)} )
91
91
92
92
local A,B:
93
93
94
94
95
- A := draw_mech(sol_kine, data , theta3(t)=flap_closed, title = "Configuration Recursive", size = [500,500]):
95
+ A := draw_mech(sol_kine, dd , theta3(t)=flap_closed, title = "Configuration Recursive", size = [500,500]):
96
96
97
- B := draw_mech(sol_kine, data , theta3(t)=flap_open , title = "Configuration Recursive", size = [500,500]):
97
+ B := draw_mech(sol_kine, dd , theta3(t)=flap_open , title = "Configuration Recursive", size = [500,500]):
98
98
99
99
print(plots[display](Array([A, B])));
100
100
end proc:
@@ -160,9 +160,14 @@ plot_hydr := proc()
160
160
end proc:
161
161
# Dynamic optimization - NE
162
162
dynam_opt_ne := proc(aaa,bbb,ccc,ddd,eee)
163
- local param,E,G,NE,NG,r_vars0,dof0,vel_dof0,qD0,vel_qD0,ics0,sol_act_dinam,dae_ics,dae_sys,sol_dae,cost_fun,i,k:
163
+ local param,E,G,NE,NG,r_vars0,dof0,vel_dof0,qD0,vel_qD0,ics0,sol_act_dinam,dae_ics,subs_inertia, dae_sys,sol_dae,cost_fun,i,k:
164
164
165
165
param := [L1 = aaa,LP = bbb,anc = ccc,x1 = ddd,y1 = eee]:
166
+ subs_inertia := {m1 = subs(data_dae,sp=0.010,l=0.004,4510*L1*sp*l),
167
+ Iz1 = subs(data_dae,l=0.004,sp=0.010,1/12*4510*L1*sp*l*(L1^2+sp^2)),
168
+ m2 = subs(data_dae,sp=0.010,l=0.004,4510*LP*sp*l),
169
+ Iz2 = subs(data_dae,l=0.004,sp=0.010,1/12*4510*LP*sp*l*(LP^2+sp^2))
170
+ }:
166
171
167
172
#Estimate the initial conditions
168
173
dof0 := theta3(t) = flap_closed:
@@ -172,23 +177,23 @@ dynam_opt_ne := proc(aaa,bbb,ccc,ddd,eee)
172
177
ics0 := [dof0, vel_dof0, qD0, vel_qD0]:
173
178
174
179
#Estimate the actuation force
175
- sol_act_dinam := subs(forcesub,gamma(t)=q1_profile_t,sol_kine,theta3(t)=q1_profile_t,data_dae,param,sol_act):
180
+ sol_act_dinam := subs(forcesub,gamma(t)=q1_profile_t,sol_kine,theta3(t)=q1_profile_t,data_dae,subs_inertia, param,sol_act):
176
181
177
182
#Estimate the reaction forces
178
183
E, G := GenerateMatrix(subs(forcesub,gamma(t)=theta3(t),eqns), diff(q_vars,t,t) union r_vars):
179
- NE := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0, data_dae,param, E)):
180
- NG := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0, data_dae,param, G)):
184
+ NE := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0,subs_inertia, data_dae,param, E)):
185
+ NG := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0,subs_inertia, data_dae,param, G)):
181
186
LinearSolve(NE, NG):
182
- r_vars0 := [seq(r_vars[i] = %[-i],i=1..nops(r_vars))]:
187
+ r_vars0 := [seq(r_vars[- i] = %[-i],i=1..nops(r_vars))]:
183
188
184
189
#Assembling the generic DAE
185
- dae_ics := subs(t=0,data_dae,convert(convert(ics0,set) minus {diff(theta1(t),t)=0} ,D) union r_vars0 ):
186
- dae_sys := convert(subs(sol_act_dinam,forcesub,gamma(t)=q1_profile_t,data_dae, ne_eqns) union dae_ics,set):
190
+ dae_ics := subs(t=0,subs_inertia, data_dae,convert(convert(ics0,set) minus {diff(theta1(t),t)=0} ,D) union r_vars0 ):
191
+ dae_sys := convert(subs(sol_act_dinam,forcesub,gamma(t)=q1_profile_t,subs_inertia, data_dae, ne_eqns) union dae_ics,set):
187
192
sol_dae := dsolve(dae_sys,numeric,stiff=true,parameters = [L1,LP,anc,x1,y1]):
188
193
sol_dae(parameters = subs(param,[L1,LP,anc,x1,y1])):
189
194
190
195
#Cost function
191
- cost_fun :=1/W*add(subs(data_dae,param,(delta__s[k]-rhs(sol_dae(k/np*actuation_time)[10]))^2),k=1..np);
196
+ cost_fun :=1/W*add(subs(subs_inertia, data_dae,param,(delta__s[k]-rhs(sol_dae(k/np*actuation_time)[10]))^2),k=1..np);
192
197
end proc:
193
198
# Dynamic optimization - Lagrange
194
199
dynam_opt_lagr := proc(aaa,bbb,ccc,ddd,eee,fff)
@@ -218,7 +223,7 @@ dynam_opt_lagr := proc(aaa,bbb,ccc,ddd,eee,fff)
218
223
NE := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0,subs_inertia, data_dae, E)):
219
224
NG := evalf(subs(subs(forcesub,gamma(t)=theta3(t),sol_act), ics0,subs_inertia, data_dae, G)):
220
225
LinearSolve(NE, NG):
221
- l_vars0 := [seq(l_vars[i] = %[-i],i=1..nops(l_vars))]:
226
+ l_vars0 := [seq(l_vars[- i] = %[-i],i=1..nops(l_vars))]:
222
227
223
228
#Assembling the generic DAE
224
229
dae_ics := subs(t=0,subs_inertia,data_dae,convert(convert(ics0,set),D) union l_vars0 ):
0 commit comments