Tangle scripts
This commit is contained in:
121
index.org
121
index.org
@@ -695,10 +695,15 @@ This Matlab function is accessible [[file:gravimeter/pzmap_testCL.m][here]].
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no
|
||||
addpath('stewart_platform');
|
||||
addpath('stewart_platform/STEP');
|
||||
#+end_src
|
||||
|
||||
** Jacobian
|
||||
First, the position of the "joints" (points of force application) are estimated and the Jacobian computed.
|
||||
#+begin_src matlab
|
||||
open('stewart_platform/drone_platform_jacobian.slx');
|
||||
open('drone_platform_jacobian.slx');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@@ -731,14 +736,14 @@ First, the position of the "joints" (points of force application) are estimated
|
||||
|
||||
** Simscape Model
|
||||
#+begin_src matlab
|
||||
open('stewart_platform/drone_platform.slx');
|
||||
open('drone_platform.slx');
|
||||
#+end_src
|
||||
|
||||
Definition of spring parameters
|
||||
#+begin_src matlab
|
||||
kx = 50; % [N/m]
|
||||
ky = 50;
|
||||
kz = 50;
|
||||
kx = 0.5*1e3/3; % [N/m]
|
||||
ky = 0.5*1e3/3;
|
||||
kz = 1e3/3;
|
||||
|
||||
cx = 0.025; % [Nm/rad]
|
||||
cy = 0.025;
|
||||
@@ -876,14 +881,14 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for ch_i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz'))));
|
||||
end
|
||||
for out_i = 1:5
|
||||
for in_i = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', out_i), sprintf('F%i', in_i)), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
|
||||
end
|
||||
end
|
||||
for ch_i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz'))));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
@@ -918,9 +923,13 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_y/D_{w,y}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Dwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_z/D_{w,z}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_x/D_{w,x}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_y/D_{w,y}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Dwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_z/D_{w,z}$');
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(TR(1,1), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(2,2), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(3,3), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Transmissibility - Translations'); xlabel('Frequency [Hz]');
|
||||
@@ -928,9 +937,13 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Rwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_x/R_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'Rwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_y/R_{w,y}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Rwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_z/R_{w,z}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Rwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_x/R_{w,x}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'Rwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_y/R_{w,y}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Rwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_z/R_{w,z}$');
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(TR(4,4), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(5,5), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(6,6), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Transmissibility - Rotations'); xlabel('Frequency [Hz]');
|
||||
@@ -1124,7 +1137,7 @@ The control diagram for the centralized control is shown below.
|
||||
The controller $K_c$ is "working" in an cartesian frame.
|
||||
The Jacobian is used to convert forces in the cartesian frame to forces applied by the actuators.
|
||||
|
||||
#+begin_src latex :file centralized_control.pdf
|
||||
#+begin_src latex :file centralized_control.pdf :tangle no
|
||||
\begin{tikzpicture}
|
||||
\node[block={2cm}{1.5cm}] (G) {$G$};
|
||||
\node[block, below right=0.6 and -0.5 of G] (K) {$K_c$};
|
||||
@@ -1154,7 +1167,7 @@ The Jacobian is used to convert forces in the cartesian frame to forces applied
|
||||
The SVD control architecture is shown below.
|
||||
The matrices $U$ and $V$ are used to decoupled the plant $G$.
|
||||
|
||||
#+begin_src latex :file svd_control.pdf
|
||||
#+begin_src latex :file svd_control.pdf :tangle no
|
||||
\begin{tikzpicture}
|
||||
\node[block={2cm}{1.5cm}] (G) {$G$};
|
||||
\node[block, below right=0.6 and 0 of G] (U) {$U^{-1}$};
|
||||
@@ -1201,7 +1214,7 @@ Let's first verify the stability of the closed-loop systems:
|
||||
#+RESULTS:
|
||||
: ans =
|
||||
: logical
|
||||
: 1
|
||||
: 0
|
||||
|
||||
The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure [[fig:stewart_platform_simscape_cl_transmissibility]].
|
||||
|
||||
@@ -1278,7 +1291,7 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+RESULTS:
|
||||
[[file:figs/stewart_platform_simscape_cl_transmissibility.png]]
|
||||
|
||||
* Stewart Platform - Analytical Model :noexport:
|
||||
* Stewart Platform - Analytical Model
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
@@ -1300,55 +1313,57 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
|
||||
** Characteristics
|
||||
#+begin_src matlab
|
||||
L = 0.055;
|
||||
Zc = 0;
|
||||
m = 0.2;
|
||||
k = 1e3;
|
||||
c = 2*0.1*sqrt(k*m);
|
||||
L = 0.055; % Leg length [m]
|
||||
Zc = 0; % ?
|
||||
m = 0.2; % Top platform mass [m]
|
||||
k = 1e3; % Total vertical stiffness [N/m]
|
||||
c = 2*0.1*sqrt(k*m); % Damping ? [N/(m/s)]
|
||||
|
||||
Rx = 0.04;
|
||||
Rz = 0.04;
|
||||
Ix = m*Rx^2;
|
||||
Iy = m*Rx^2;
|
||||
Iz = m*Rz^2;
|
||||
Rx = 0.04; % ?
|
||||
Rz = 0.04; % ?
|
||||
Ix = m*Rx^2; % ?
|
||||
Iy = m*Rx^2; % ?
|
||||
Iz = m*Rz^2; % ?
|
||||
#+end_src
|
||||
|
||||
** Mass Matrix
|
||||
#+begin_src matlab
|
||||
M = m*[1 0 0 0 Zc 0;
|
||||
0 1 0 -Zc 0 0;
|
||||
0 0 1 0 0 0;
|
||||
0 -Zc 0 Rx^2+Zc^2 0 0;
|
||||
Zc 0 0 0 Rx^2+Zc^2 0;
|
||||
0 0 0 0 0 Rz^2];
|
||||
M = m*[1 0 0 0 Zc 0;
|
||||
0 1 0 -Zc 0 0;
|
||||
0 0 1 0 0 0;
|
||||
0 -Zc 0 Rx^2+Zc^2 0 0;
|
||||
Zc 0 0 0 Rx^2+Zc^2 0;
|
||||
0 0 0 0 0 Rz^2];
|
||||
#+end_src
|
||||
|
||||
** Jacobian Matrix
|
||||
#+begin_src matlab
|
||||
Bj=1/sqrt(6)*[ 1 1 -2 1 1 -2;
|
||||
sqrt(3) -sqrt(3) 0 sqrt(3) -sqrt(3) 0;
|
||||
sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2);
|
||||
0 0 L L -L -L;
|
||||
-L*2/sqrt(3) -L*2/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3);
|
||||
L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2)];
|
||||
Bj=1/sqrt(6)*[ 1 1 -2 1 1 -2;
|
||||
sqrt(3) -sqrt(3) 0 sqrt(3) -sqrt(3) 0;
|
||||
sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2);
|
||||
0 0 L L -L -L;
|
||||
-L*2/sqrt(3) -L*2/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3);
|
||||
L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2)];
|
||||
#+end_src
|
||||
|
||||
** Stifnness matrix and Damping matrix
|
||||
** Stifnness and Damping matrices
|
||||
#+begin_src matlab
|
||||
kv = k/3; % [N/m]
|
||||
kh = 0.5*k/3; % [N/m]
|
||||
|
||||
K = diag([3*kh,3*kh,3*kv,3*kv*Rx^2/2,3*kv*Rx^2/2,3*kh*Rx^2]); % Stiffness Matrix
|
||||
kv = k/3; % Vertical Stiffness of the springs [N/m]
|
||||
kh = 0.5*k/3; % Horizontal Stiffness of the springs [N/m]
|
||||
|
||||
K = diag([3*kh, 3*kh, 3*kv, 3*kv*Rx^2/2, 3*kv*Rx^2/2, 3*kh*Rx^2]); % Stiffness Matrix
|
||||
C = c*K/100000; % Damping Matrix
|
||||
#+end_src
|
||||
|
||||
** State Space System
|
||||
#+begin_src matlab
|
||||
A = [zeros(6) eye(6); -M\K -M\C];
|
||||
A = [ zeros(6) eye(6); ...
|
||||
-M\K -M\C];
|
||||
Bw = [zeros(6); -eye(6)];
|
||||
Bu = [zeros(6); M\Bj];
|
||||
|
||||
Co = [-M\K -M\C];
|
||||
|
||||
D = [zeros(6) M\Bj];
|
||||
|
||||
ST = ss(A,[Bw Bu],Co,D);
|
||||
@@ -1360,8 +1375,10 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+begin_src matlab
|
||||
ST.StateName = {'x';'y';'z';'theta_x';'theta_y';'theta_z';...
|
||||
'dx';'dy';'dz';'dtheta_x';'dtheta_y';'dtheta_z'};
|
||||
|
||||
ST.InputName = {'w1';'w2';'w3';'w4';'w5';'w6';...
|
||||
'u1';'u2';'u3';'u4';'u5';'u6'};
|
||||
|
||||
ST.OutputName = {'ax';'ay';'az';'atheta_x';'atheta_y';'atheta_z'};
|
||||
#+end_src
|
||||
|
||||
@@ -1373,17 +1390,17 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+begin_src matlab
|
||||
figure
|
||||
subplot(231)
|
||||
bodemag(TR(1,1),opts);
|
||||
bodemag(TR(1,1));
|
||||
subplot(232)
|
||||
bodemag(TR(2,2),opts);
|
||||
bodemag(TR(2,2));
|
||||
subplot(233)
|
||||
bodemag(TR(3,3),opts);
|
||||
bodemag(TR(3,3));
|
||||
subplot(234)
|
||||
bodemag(TR(4,4),opts);
|
||||
bodemag(TR(4,4));
|
||||
subplot(235)
|
||||
bodemag(TR(5,5),opts);
|
||||
bodemag(TR(5,5));
|
||||
subplot(236)
|
||||
bodemag(TR(6,6),opts);
|
||||
bodemag(TR(6,6));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
|
Reference in New Issue
Block a user