Update files for new definition of hexapods
This commit is contained in:
@@ -257,7 +257,7 @@ We identify the dynamics of the system using the =linearize= function.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
|
||||
|
||||
G_cart_i = G*inv(nano_hexapod.J');
|
||||
G_cart_i = G*inv(nano_hexapod.kinematics.J');
|
||||
G_cart_i.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
|
||||
G_cart(i) = {G_cart_i};
|
||||
@@ -1828,7 +1828,7 @@ We identify the dynamics for the following sample mass.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
|
||||
|
||||
G_cart = G*inv(nano_hexapod.J');
|
||||
G_cart = G*inv(nano_hexapod.kinematics.J');
|
||||
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
|
||||
G_cart_iff(i) = {G_cart};
|
||||
@@ -2308,7 +2308,7 @@ We identify the dynamics for the following sample mass.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
|
||||
|
||||
G_cart = G*inv(nano_hexapod.J');
|
||||
G_cart = G*inv(nano_hexapod.kinematics.J');
|
||||
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
|
||||
G_cart_dvf(i) = {G_cart};
|
||||
@@ -2783,7 +2783,7 @@ We identify the dynamics for the following sample mass.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
|
||||
|
||||
G_cart = G*inv(nano_hexapod.J');
|
||||
G_cart = G*inv(nano_hexapod.kinematics.J');
|
||||
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
|
||||
G_cart_ine(i) = {G_cart};
|
||||
|
@@ -375,7 +375,7 @@ The minus sine is put here because there is already a minus sign included due to
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
#+end_src
|
||||
|
||||
@@ -495,7 +495,7 @@ The controller consists of:
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kx = inv(nano_hexapod.J')*Kx;
|
||||
Kx = inv(nano_hexapod.kinematics.J')*Kx;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
|
@@ -106,11 +106,11 @@ Identification of the Primary plant without virtual add of mass
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
G_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
G_l(i) = {Gl};
|
||||
end
|
||||
@@ -231,11 +231,11 @@ exportFig('figs/virtual_mass_loop_gain_L.pdf', 'width', 'full', 'height', 'full'
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
GmL_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
GmL_l(i) = {Gl};
|
||||
end
|
||||
@@ -379,7 +379,7 @@ Let's look at the transfer function from $\bm{\mathcal{F}}$ to $d\bm{\mathcal{X}
|
||||
|
||||
GmX = {zeros(length(Ms), 1)};
|
||||
for i = 1:length(Ms)
|
||||
GmX(i) = {inv(nano_hexapod.J) * Gm{i} * inv(nano_hexapod.J')};
|
||||
GmX(i) = {inv(nano_hexapod.kinematics.J) * Gm{i} * inv(nano_hexapod.kinematics.J')};
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@@ -539,7 +539,7 @@ exportFig('figs/virtual_mass_loop_gain_X.pdf', 'width', 'full', 'height', 'full'
|
||||
[[file:figs/virtual_mass_loop_gain_X.png]]
|
||||
|
||||
#+begin_src matlab
|
||||
Kdvf = inv(nano_hexapod.J')*KmX*inv(nano_hexapod.J);
|
||||
Kdvf = inv(nano_hexapod.kinematics.J')*KmX*inv(nano_hexapod.kinematics.J);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@@ -572,11 +572,11 @@ exportFig('figs/virtual_mass_loop_gain_X.pdf', 'width', 'full', 'height', 'full'
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
GmX_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
GmX_l(i) = {Gl};
|
||||
end
|
||||
|
@@ -439,10 +439,10 @@ A minus sign is added because the minus sign is already included in the plant id
|
||||
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gpx = Gp*inv(nano_hexapod.J');
|
||||
Gpx = Gp*inv(nano_hexapod.kinematics.J');
|
||||
Gpx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gpl = nano_hexapod.J*Gp;
|
||||
Gpl = nano_hexapod.kinematics.J*Gp;
|
||||
Gpl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
@@ -647,7 +647,7 @@ A minus sign is added because the minus sign is already included in the plant id
|
||||
|
||||
And now we include the Jacobian inside the controller.
|
||||
#+begin_src matlab
|
||||
Kp = inv(nano_hexapod.J')*Kp;
|
||||
Kp = inv(nano_hexapod.kinematics.J')*Kp;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :tangle no
|
||||
@@ -686,11 +686,11 @@ And we simulate the system.
|
||||
#+begin_src matlab :exports none
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
|
||||
F_pz = [nano_hexapod.J'*cascade_hac_lac.u.Data']';
|
||||
F_vc = [nano_hexapod.J'*cascade_hac_lac_lorentz.u.Data']';
|
||||
F_pz = [nano_hexapod.kinematics.J'*cascade_hac_lac.u.Data']';
|
||||
F_vc = [nano_hexapod.kinematics.J'*cascade_hac_lac_lorentz.u.Data']';
|
||||
|
||||
% F_pz = [-nano_hexapod.J'*cascade_hac_lac.yn.Fnlm.Data']';
|
||||
% F_vc = [-nano_hexapod.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']';
|
||||
% F_pz = [-nano_hexapod.kinematics.J'*cascade_hac_lac.yn.Fnlm.Data']';
|
||||
% F_vc = [-nano_hexapod.kinematics.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']';
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@@ -1384,10 +1384,10 @@ A minus sign is added to cancel the minus sign already included in the identifie
|
||||
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gpx_m = Gp_m*inv(nano_hexapod.J');
|
||||
Gpx_m = Gp_m*inv(nano_hexapod.kinematics.J');
|
||||
Gpx_m.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gpl_m = nano_hexapod.J*Gp_m;
|
||||
Gpl_m = nano_hexapod.kinematics.J*Gp_m;
|
||||
Gpl_m.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
@@ -1490,7 +1490,7 @@ We load the primary controller that was design when the payload has a mass of 1K
|
||||
We load the HAC controller design when the payload has a mass of 1Kg.
|
||||
#+begin_src matlab
|
||||
load('mat/hac_lac_cascade_vc_controllers.mat', 'Kp')
|
||||
Kp_x = nano_hexapod.J'*Kp;
|
||||
Kp_x = nano_hexapod.kinematics.J'*Kp;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@@ -1670,10 +1670,10 @@ And we simulate the system.
|
||||
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gx = G*inv(nano_hexapod.J');
|
||||
Gx = G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
@@ -2010,7 +2010,7 @@ We can do that in two different ways:
|
||||
The obtained plant is shown in Figure
|
||||
|
||||
#+begin_src matlab
|
||||
Gx = G*inv(nano_hexapod.J');
|
||||
Gx = G*inv(nano_hexapod.kinematics.J');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@@ -2076,7 +2076,7 @@ The obtained plant is shown in Figure
|
||||
|
||||
*** Plant in the Leg's space
|
||||
#+begin_src matlab
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@@ -2287,10 +2287,10 @@ The obtained plant is shown in Figure
|
||||
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gx = G*inv(nano_hexapod.J');
|
||||
Gx = G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
|
@@ -119,7 +119,7 @@
|
||||
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
|
||||
case { 'rotating', 'rotating-not-filtered' }
|
||||
fprintf(' - Rotating\n');
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/Rz_period);
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
|
||||
end
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
fprintf('- rigid\n');
|
||||
elseif nano_hexapod.type == 2;
|
||||
fprintf('- flexible\n');
|
||||
fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.Ki(1));
|
||||
fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.actuators.K(1));
|
||||
end
|
||||
|
||||
fprintf('\n');
|
||||
|
@@ -76,7 +76,7 @@ Let's first consider a rigid reference mirror and we identify the dynamics of th
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
#+end_src
|
||||
|
||||
@@ -94,7 +94,7 @@ And we re identify the plant dynamics.
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
Gxb = -G*inv(nano_hexapod.J');
|
||||
Gxb = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gxb.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
#+end_src
|
||||
|
||||
|
@@ -275,11 +275,11 @@ The obtained dynamics is shown in Figure [[fig:opt_stiff_primary_plant_damped_L]
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
G_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
G_l(i) = {Gl};
|
||||
end
|
||||
@@ -305,11 +305,11 @@ The obtained dynamics is shown in Figure [[fig:opt_stiff_primary_plant_damped_L]
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.J');
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Gm_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
Gm_l(i) = {Gl};
|
||||
end
|
||||
@@ -834,12 +834,12 @@ exportFig('figs/opt_stiff_primary_loop_gain_L.pdf', 'width', 'full', 'height', '
|
||||
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
|
||||
#+begin_src matlab
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
K = Kl*nano_hexapod.J*diag([1, 1, 1, 1, 1, 0]);
|
||||
K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
for i = 1:length(Ms)
|
||||
isstable(feedback(nano_hexapod.J\Gm_l{i}*K, eye(6), -1))
|
||||
isstable(feedback(nano_hexapod.kinematics.J\Gm_l{i}*K, eye(6), -1))
|
||||
end
|
||||
#+end_src
|
||||
|
||||
|
@@ -1283,16 +1283,20 @@ The =mirror= structure is saved.
|
||||
args.k (1,1) double {mustBeNumeric} = -1
|
||||
args.c (1,1) double {mustBeNumeric} = -1
|
||||
% initializeJointDynamics
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical'
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'spherical_3dof'})} = 'spherical'
|
||||
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
|
||||
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
|
||||
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
|
||||
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
|
||||
args.Kz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
|
||||
args.Cz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
|
||||
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
|
||||
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
|
||||
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
|
||||
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
|
||||
args.Kz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
|
||||
args.Cz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
|
||||
% initializeCylindricalPlatforms
|
||||
args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||
args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||
@@ -1353,10 +1357,14 @@ The =mirror= structure is saved.
|
||||
'Cf_M' , args.Cf_M, ...
|
||||
'Kt_M' , args.Kt_M, ...
|
||||
'Ct_M' , args.Ct_M, ...
|
||||
'Kz_M' , args.Kz_M, ...
|
||||
'Cz_M' , args.Cz_M, ...
|
||||
'Kf_F' , args.Kf_F, ...
|
||||
'Cf_F' , args.Cf_F, ...
|
||||
'Kt_F' , args.Kt_F, ...
|
||||
'Ct_F' , args.Ct_F);
|
||||
'Ct_F' , args.Ct_F, ...
|
||||
'Kz_F' , args.Kz_F, ...
|
||||
'Cz_F' , args.Cz_F);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
|
@@ -970,10 +970,14 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
% - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad]
|
||||
% - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)]
|
||||
% - Ct_M [6x1] - Torsion (Rz) Damping of each top joint [(N.m)/(rad/s)]
|
||||
% - Kz_M [6x1] - Translation (Tz) Stiffness for each top joints [N/m]
|
||||
% - Cz_M [6x1] - Translation (Tz) Damping of each top joint [N/m]
|
||||
% - Kf_F [6x1] - Bending (Rx, Ry) Stiffness for each bottom joints [(N.m)/rad]
|
||||
% - Kt_F [6x1] - Torsion (Rz) Stiffness for each bottom joints [(N.m)/rad]
|
||||
% - Cf_F [6x1] - Bending (Rx, Ry) Damping of each bottom joint [(N.m)/(rad/s)]
|
||||
% - Cf_F [6x1] - Torsion (Rz) Damping of each bottom joint [(N.m)/(rad/s)]
|
||||
% - Kz_F [6x1] - Translation (Tz) Stiffness for each bottom joints [N/m]
|
||||
% - Cz_F [6x1] - Translation (Tz) Damping of each bottom joint [N/m]
|
||||
%
|
||||
% Outputs:
|
||||
% - stewart - updated Stewart structure with the added fields:
|
||||
@@ -994,16 +998,20 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
#+begin_src matlab
|
||||
arguments
|
||||
stewart
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical'
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'spherical_3dof'})} = 'spherical'
|
||||
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
|
||||
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
|
||||
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
|
||||
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
|
||||
args.Kz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
|
||||
args.Cz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
|
||||
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
|
||||
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
|
||||
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
|
||||
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
|
||||
args.Kz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
|
||||
args.Cz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@@ -1021,6 +1029,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
stewart.joints_F.type = 3;
|
||||
case 'spherical_p'
|
||||
stewart.joints_F.type = 4;
|
||||
case 'universal_3dof'
|
||||
stewart.joints_F.type = 5;
|
||||
end
|
||||
|
||||
switch args.type_M
|
||||
@@ -1032,6 +1042,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
stewart.joints_M.type = 3;
|
||||
case 'spherical_p'
|
||||
stewart.joints_M.type = 4;
|
||||
case 'spherical_3dof'
|
||||
stewart.joints_M.type = 6;
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@@ -1043,22 +1055,22 @@ Translation Stiffness
|
||||
#+begin_src matlab
|
||||
stewart.joints_M.Kx = zeros(6,1);
|
||||
stewart.joints_M.Ky = zeros(6,1);
|
||||
stewart.joints_M.Kz = zeros(6,1);
|
||||
stewart.joints_M.Kz = args.Kz_M;
|
||||
|
||||
stewart.joints_F.Kx = zeros(6,1);
|
||||
stewart.joints_F.Ky = zeros(6,1);
|
||||
stewart.joints_F.Kz = zeros(6,1);
|
||||
stewart.joints_F.Kz = args.Kz_F;
|
||||
#+end_src
|
||||
|
||||
Translation Damping
|
||||
#+begin_src matlab
|
||||
stewart.joints_M.Cx = zeros(6,1);
|
||||
stewart.joints_M.Cy = zeros(6,1);
|
||||
stewart.joints_M.Cz = zeros(6,1);
|
||||
stewart.joints_M.Cz = args.Cz_M;
|
||||
|
||||
stewart.joints_F.Cx = zeros(6,1);
|
||||
stewart.joints_F.Cy = zeros(6,1);
|
||||
stewart.joints_F.Cz = zeros(6,1);
|
||||
stewart.joints_F.Cz = args.Cz_F;
|
||||
#+end_src
|
||||
|
||||
** Add Stiffness and Damping in Rotation of each strut
|
||||
|
@@ -78,7 +78,7 @@ We identify the dynamics for the following sample masses, both with a soft and s
|
||||
Gm_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gm_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gm_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -107,7 +107,7 @@ We identify the dynamics for the following sample masses, both with a soft and s
|
||||
Gm_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gm_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -461,7 +461,7 @@ We identify the dynamics for the following sample resonance frequency.
|
||||
Gmf_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gmf_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gmf_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -489,7 +489,7 @@ We identify the dynamics for the following sample resonance frequency.
|
||||
Gmf_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gmf_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -764,7 +764,7 @@ We identify the dynamics for the following Tilt stage angles.
|
||||
Grz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Grz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Grz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -792,7 +792,7 @@ We identify the dynamics for the following Tilt stage angles.
|
||||
Grz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Grz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1031,7 +1031,7 @@ We identify the dynamics for the following Spindle rotation periods.
|
||||
Gwz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gwz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gwz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1065,7 +1065,7 @@ We identify the dynamics for the following Spindle rotation periods.
|
||||
Gwz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gwz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1392,7 +1392,7 @@ We identify the dynamics for the following Tilt stage angles.
|
||||
Gry_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gry_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gry_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1420,7 +1420,7 @@ We identify the dynamics for the following Tilt stage angles.
|
||||
Gry_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gry_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1622,7 +1622,7 @@ We identify the dynamics for the following translations of the micro-hexapod in
|
||||
Gtx_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gtx_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gtx_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1651,7 +1651,7 @@ We identify the dynamics for the following translations of the micro-hexapod in
|
||||
Gtx_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gtx_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
|
@@ -115,7 +115,7 @@ And for the following nano-hexapod actuator stiffness =Ks=:
|
||||
Gk_wz_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gk_wz_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gk_wz_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -639,7 +639,7 @@ As before, we identify the dynamics for the following actuator stiffnesses:
|
||||
Gmr_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gmr_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gmr_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -680,7 +680,7 @@ And we identify the dynamics of the nano-hexapod.
|
||||
Gmf_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gmf_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gmf_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -993,7 +993,7 @@ We identify the dynamics for the following payload masses =Ms= and nano-hexapod
|
||||
Gm_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gm_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gm_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
@@ -1027,7 +1027,7 @@ We then identify the dynamics for the following payload resonance frequencies =F
|
||||
Gf_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
Gf_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
Gf_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
|
||||
|
Reference in New Issue
Block a user