Work on SVD section

This commit is contained in:
Thomas Dehaeze 2021-02-17 15:15:52 +01:00
parent e77d747590
commit c88f4c6097
19 changed files with 1932 additions and 937 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 24 KiB

BIN
figs/plant_frame_K.pdf Normal file

Binary file not shown.

BIN
figs/plant_frame_K.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
figs/plant_frame_L.pdf Normal file

Binary file not shown.

BIN
figs/plant_frame_L.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
figs/plant_frame_M.pdf Normal file

Binary file not shown.

BIN
figs/plant_frame_M.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

2015
index.html

File diff suppressed because it is too large Load Diff

854
index.org
View File

@ -1542,73 +1542,48 @@ exportFig('figs/gravimeter_svd_high_damping.pdf', 'width', 'wide', 'height', 'no
#+RESULTS: #+RESULTS:
[[file:figs/gravimeter_svd_high_damping.png]] [[file:figs/gravimeter_svd_high_damping.png]]
* Analytical Model * Parallel Manipulator with Collocated actuator/sensor pairs
** Model <<sec:jac_decoupl>>
#+name: fig:gravimeter_model_analytical ** Introduction :ignore:
#+caption: Model of the gravimeter
[[file:figs/gravimeter_model_analytical.png]]
- collocated actuators and sensors In this section, we will see how the Jacobian matrix can be used to decouple a specific set of mechanical systems (described in Section [[sec:jac_decoupl_model]]).
** Stiffness and Mass matrices The basic decoupling architecture is shown in Figure [[fig:gravimeter_model_analytical]] where the Jacobian matrix is used to both compute the actuator forces from forces/torques that are to be applied in a specific defined frame, and to compute the displacement/rotation of the same mass from several sensors.
*Stiffness matrix*: This is rapidly explained in Section [[sec:jac_decoupl_jacobian]].
\begin{equation}
\mathcal{F}_{\{O\}} = -K_{\{O\}} \mathcal{X}_{\{O\}}
\end{equation}
with:
- $\mathcal{X}_{\{O\}}$ are displacements/rotations of the mass $x$, $y$, $R_z$ expressed in the frame $\{O\}$
- $\mathcal{F}_{\{O\}}$ are forces/torques $\mathcal{F}_x$, $\mathcal{F}_y$, $\mathcal{M}_z$ applied at the origin of $\{O\}$
*Mass matrix*: #+begin_src latex :file block_diagram_jacobian_decoupling.pdf :tangle no :exports results
\begin{equation} \begin{tikzpicture}
\mathcal{F}_{\{O\}} = M_{\{O\}} \ddot{\mathcal{X}}_{\{O\}} \node[block] (G) {$\bm{G}$};
\end{equation} \node[block, left=0.6 of G] (Jt) {$J_{\{M\}}^{-T}$};
\node[block, right=0.6 of G] (Ja) {$J_{\{M\}}^{-1}$};
% Connections and labels
\draw[<-] (Jt.west) -- ++(-1.8, 0) node[above right]{$\bm{\mathcal{F}}_{\{M\}}$};
\draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (Ja.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (Ja.east) -- ++( 1.8, 0) node[above left]{$\bm{\mathcal{X}}_{\{M\}}$};
Consider the two following frames: \begin{scope}[on background layer]
- $\{M\}$: Center of mass => diagonal mass matrix \node[fit={(Jt.south west) (Ja.north east)}, fill=black!10!white, draw, dashed, inner sep=16pt] (Gx) {};
\[ M_{\{M\}} = \begin{bmatrix}m & 0 & 0 \\ 0 & m & 0 \\ 0 & 0 & I\end{bmatrix} \] \node[below right] at (Gx.north west) {$\bm{G}_{\{M\}}$};
\[ K_{\{M\}} = \begin{bmatrix}k_1 & 0 & k_1 h_a \\ 0 & k_2 + k_3 & 0 \\ k_1 h_a & 0 & k_1 h_a + (k_2 + k_3)l_a\end{bmatrix} \] \end{scope}
- $\{K\}$: Diagonal stiffness matrix \end{tikzpicture}
\[ K_{\{K\}} = \begin{bmatrix}k_1 & 0 & 0 \\ 0 & k_2 + k_3 & 0 \\ 0 & 0 & (k_2 + k_3)l_a\end{bmatrix} \] #+end_src
- [ ] Compute the mass matrix $M_{\{K\}}$
Needs two Jacobians => complicated matrix
** Equations #+RESULTS:
[[file:figs/block_diagram_jacobian_decoupling.png]]
- [ ] Ideally write the equation from $\tau$ to $\mathcal{L}$ Depending on the chosen frame, the Stiffness matrix in that particular frame can be computed.
This is explained in Section [[sec:jac_decoupl_stiffness]].
\begin{equation} Then three decoupling in three specific frames is studied:
\mathcal{L} = \begin{bmatrix} \mathcal{L}_1 \\ \mathcal{L}_2 \\ \mathcal{L}_3 \end{bmatrix} - Section [[sec:jac_decoupl_legs]]: control in the frame of the legs
\end{equation} - Section [[sec:jac_decoupl_com]]: control in a frame whose origin is at the center of mass of the payload
- Section [[sec:jac_decoupl_cok]]: control in a frame whose origin is located at the "center of stiffness" of the system
\begin{equation} Conclusions are drawn in Section [[sec:jac_decoupl_conclusion]].
\tau = \begin{bmatrix} \tau_1 \\ \tau_2 \\ \tau_3 \end{bmatrix}
\end{equation}
** Jacobians
Usefulness of Jacobians:
- $J_{\{M\}}$ converts $\dot{\mathcal{L}}$ to $\dot{\mathcal{X}}_{\{M\}}$:
\[ \dot{\mathcal{X}}_{\{M\}} = J_{\{M\}} \dot{\mathcal{L}} \]
- $J_{\{M\}}^T$ converts $\tau$ to $\mathcal{F}_{\{M\}}$:
\[ \mathcal{F}_{\{M\}} = J_{\{M\}}^T \tau \]
- $J_{\{K\}}$ converts $\dot{\mathcal{K}}$ to $\dot{\mathcal{X}}_{\{K\}}$:
\[ \dot{\mathcal{X}}_{\{K\}} = J_{\{K\}} \dot{\mathcal{K}} \]
- $J_{\{K\}}^T$ converts $\tau$ to $\mathcal{F}_{\{K\}}$:
\[ \mathcal{F}_{\{K\}} = J_{\{K\}}^T \tau \]
Let's compute the Jacobians:
\begin{equation}
J_{\{M\}} = \begin{bmatrix} 1 & 0 & h_a \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \end{bmatrix}
\end{equation}
\begin{equation}
J_{\{K\}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \end{bmatrix}
\end{equation}
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
@ -1619,7 +1594,26 @@ J_{\{K\}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \end{bmatri
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
** Parameters ** Model
<<sec:jac_decoupl_model>>
Let's consider a parallel manipulator with several collocated actuator/sensors pairs.
System in Figure [[fig:gravimeter_model_analytical]] will serve as an example.
We will note:
- $b_i$: location of the joints on the top platform
- $\hat{s}_i$: unit vector corresponding to the struts direction
- $k_i$: stiffness of the struts
- $\tau_i$: actuator forces
- $O_M$: center of mass of the solid body
- $\mathcal{L}_i$: relative displacement of the struts
#+name: fig:gravimeter_model_analytical
#+caption: Model of the gravimeter
[[file:figs/gravimeter_model_analytical.png]]
The parameters are defined as follows:
#+begin_src matlab #+begin_src matlab
l = 1.0; % Length of the mass [m] l = 1.0; % Length of the mass [m]
h = 2*1.7; % Height of the mass [m] h = 2*1.7; % Height of the mass [m]
@ -1639,113 +1633,377 @@ k2 = 15e3; % Actuator Stiffness [N/m]
k3 = 15e3; % Actuator Stiffness [N/m] k3 = 15e3; % Actuator Stiffness [N/m]
#+end_src #+end_src
** Transfer function from $\tau$ to $\delta \mathcal{L}$ Let's express ${}^Mb_i$ and $\hat{s}_i$:
Mass, Damping and Stiffness matrices expressed in $\{M\}$: \begin{align}
#+begin_src matlab {}^Mb_1 &= [-l/2,\ -h_a] \\
Mm = [m 0 0 ; {}^Mb_2 &= [-la, \ -h/2] \\
0 m 0 ; {}^Mb_3 &= [ la, \ -h/2]
0 0 I]; \end{align}
Cm = [c1 0 c1*ha ; \begin{align}
0 c2+c3 0 ; \hat{s}_1 &= [1,\ 0] \\
c1*ha 0 c1*ha + (c2+c3)*la]; \hat{s}_2 &= [0,\ 1] \\
\hat{s}_3 &= [0,\ 1]
Km = [k1 0 k1*ha ; \end{align}
0 k2+k3 0 ;
k1*ha 0 k1*ha + (k2+k3)*la];
#+end_src
Jacobian $J_{\{M\}}$:
#+begin_src matlab
Jm = [1 0 ha ;
0 1 -la ;
0 1 la];
#+end_src
#+begin_src matlab #+begin_src matlab
Mt = inv(Jm')*Mm*inv(Jm); s1 = [1;0];
Ct = inv(Jm')*Cm*inv(Jm); s2 = [0;1];
Kt = inv(Jm')*Km*inv(Jm); s3 = [0;1];
Mb1 = [-l/2;-ha];
Mb2 = [-la; -h/2];
Mb3 = [ la; -h/2];
#+end_src #+end_src
#+begin_src matlab :exports results :results value table replace :tangle no Frame $\{K\}$ is chosen such that the stiffness matrix is diagonal (explained in Section [[sec:diagonal_stiffness_planar]]).
data2orgtable(Mt, {}, {}, ' %.1f ');
The positions ${}^Kb_i$ are then:
\begin{align}
{}^Kb_1 &= [-l/2,\ 0] \\
{}^Kb_2 &= [-la, \ -h/2+h_a] \\
{}^Kb_3 &= [ la, \ -h/2+h_a]
\end{align}
#+begin_src matlab
Kb1 = [-l/2; 0];
Kb2 = [-la; -h/2+ha];
Kb3 = [ la; -h/2+ha];
#+end_src #+end_src
#+caption: $M_t$ ** The Jacobian Matrix
<<sec:jac_decoupl_jacobian>>
Let's note:
- $\bm{\mathcal{L}}$ the vector of actuator displacement:
\begin{equation}
\bm{\mathcal{L}} = \begin{bmatrix} \mathcal{L}_1 \\ \mathcal{L}_2 \\ \mathcal{L}_3 \end{bmatrix}
\end{equation}
- $\bm{\tau}$ the vector of actuator forces:
\begin{equation}
\bm{\tau} = \begin{bmatrix} \tau_1 \\ \tau_2 \\ \tau_3 \end{bmatrix}
\end{equation}
- $\bm{\mathcal{F}}_{\{O\}}$ the vector of forces/torques applied on the payload on expressed in frame $\{O\}$:
\begin{equation}
\bm{\mathcal{F}}_{\{O\}} = \begin{bmatrix} \mathcal{F}_{\{O\},x} \\ \mathcal{F}_{\{O\},y} \\ \mathcal{M}_{\{O\},z} \end{bmatrix}
\end{equation}
- $\bm{\mathcal{X}}_{\{O\}}$ the vector of displacement of the payload with respect to frame $\{O\}$:
\begin{equation}
\bm{\mathcal{X}}_{\{O\}} = \begin{bmatrix} \mathcal{X}_{\{O\},x} \\ \mathcal{X}_{\{O\},y} \\ \mathcal{X}_{\{O\},R_z} \end{bmatrix}
\end{equation}
The Jacobian matrix can be used to:
- Convert joints velocity $\dot{\mathcal{L}}$ to payload velocity and angular velocity $\dot{\bm{\mathcal{X}}}_{\{O\}}$:
\[ \dot{\bm{\mathcal{X}}}_{\{O\}} = J_{\{O\}} \dot{\bm{\mathcal{L}}} \]
- Convert actuators forces $\bm{\tau}$ to forces/torque applied on the payload $\bm{\mathcal{F}}_{\{O\}}$:
\[ \bm{\mathcal{F}}_{\{O\}} = J_{\{O\}}^T \bm{\tau} \]
with $\{O\}$ any chosen frame.
If we consider *small* displacements, we have an approximate relation that links the displacements (instead of velocities):
\begin{equation}
\bm{\mathcal{X}}_{\{M\}} = J_{\{M\}} \bm{\mathcal{L}}
\end{equation}
The Jacobian can be computed as follows:
\begin{equation}
J_{\{O\}} = \begin{bmatrix}
{}^O\hat{s}_1^T & {}^Ob_{1,x} {}^O\hat{s}_{1,y} - {}^Ob_{1,x} {}^O\hat{s}_{1,y} \\
{}^O\hat{s}_2^T & {}^Ob_{2,x} {}^O\hat{s}_{2,y} - {}^Ob_{2,x} {}^O\hat{s}_{2,y} \\
\vdots & \vdots \\
{}^O\hat{s}_n^T & {}^Ob_{n,x} {}^O\hat{s}_{n,y} - {}^Ob_{n,x} {}^O\hat{s}_{n,y} \\
\end{bmatrix}
\end{equation}
Let's compute the Jacobian matrix in frame $\{M\}$ and $\{K\}$:
#+begin_src matlab
Jm = [s1', Mb1(1)*s1(2)-Mb1(2)*s1(1);
s2', Mb2(1)*s2(2)-Mb2(2)*s2(1);
s3', Mb3(1)*s3(2)-Mb3(2)*s3(1)];
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Jm
#+end_src
#+caption: Jacobian Matrix $J_{\{M\}}$
#+RESULTS: #+RESULTS:
| 400.0 | 340.0 | -340.0 | | 1 | 0 | 1.7 |
| 340.0 | 504.0 | -304.0 | | 0 | 1 | -0.5 |
| -340.0 | -304.0 | 504.0 | | 0 | 1 | 0.5 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(Kt, {}, {}, ' %.1f ');
#+end_src
#+caption: $K_t$
#+RESULTS:
| 15000.0 | 0.0 | 0.0 |
| 0.0 | 24412.5 | -9412.5 |
| 0.0 | -9412.5 | 24412.5 |
#+begin_src matlab #+begin_src matlab
Gt = s^2*inv(Mt*s^2 + Ct*s + Kt); Jk = [s1', Kb1(1)*s1(2)-Kb1(2)*s1(1);
% Gt = JM*s^2*inv(MM*s^2 + CM*s + KM)*JM'; s2', Kb2(1)*s2(2)-Kb2(2)*s2(1);
s3', Kb3(1)*s3(2)-Kb3(2)*s3(1)];
#+end_src #+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Jk
#+end_src
#+caption: Jacobian Matrix $J_{\{K\}}$
#+RESULTS:
| 1 | 0 | 0 |
| 0 | 1 | -0.5 |
| 0 | 1 | 0.5 |
In the frame $\{M\}$, the Jacobian is:
\begin{equation}
J_{\{M\}} = \begin{bmatrix} 1 & 0 & h_a \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \end{bmatrix}
\end{equation}
And in frame $\{K\}$, the Jacobian is:
\begin{equation}
J_{\{K\}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \end{bmatrix}
\end{equation}
** The Stiffness Matrix
<<sec:jac_decoupl_stiffness>>
For a parallel manipulator, the stiffness matrix expressed in a frame $\{O\}$ is:
\begin{equation}
K_{\{O\}} = J_{\{O\}}^T \mathcal{K} J_{\{O\}}
\end{equation}
where:
- $J_{\{O\}}$ is the Jacobian matrix expressed in frame $\{O\}$
- $\mathcal{K}$ is a diagonal matrix with the strut stiffnesses on the diagonal
\begin{equation}
\mathcal{K} = \begin{bmatrix}
k_1 & & & 0 \\
& k_2 & & \\
& & \ddots & \\
0 & & & k_n
\end{bmatrix}
\end{equation}
We have the same thing for the damping matrix.
#+begin_src matlab
Kr = diag([k1,k2,k3]);
Cr = diag([c1,c2,c3]);
#+end_src
** Equations of motion - Frame of the legs
<<sec:jac_decoupl_legs>>
Applying the second Newton's law on the system in Figure [[fig:gravimeter_model_analytical]] at its center of mass $O_M$, we obtain:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) \bm{\mathcal{X}}_{\{M\}} = \bm{\mathcal{F}}_{\{M\}}
\end{equation}
with:
- $M_{\{M\}}$ is the mass matrix expressed in $\{M\}$:
\[ M_{\{M\}} = \begin{bmatrix}m & 0 & 0 \\ 0 & m & 0 \\ 0 & 0 & I\end{bmatrix} \]
- $K_{\{M\}}$ is the stiffness matrix expressed in $\{M\}$:
\[ K_{\{M\}} = J_{\{M\}}^T \mathcal{K} J_{\{M\}} \]
- $\bm{\mathcal{X}}_{\{M\}}$ are displacements/rotations of the mass $x$, $y$, $R_z$ expressed in the frame $\{M\}$
- $\bm{\mathcal{F}}_{\{M\}}$ are forces/torques $\mathcal{F}_x$, $\mathcal{F}_y$, $\mathcal{M}_z$ applied at the origin of $\{M\}$
Let's use the Jacobian matrix to compute the equations in terms of actuator forces $\bm{\tau}$ and strut displacement $\bm{\mathcal{L}}$:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) J_{\{M\}}^{-1} \bm{\mathcal{L}} = J_{\{M\}}^T \bm{\tau}
\end{equation}
And we obtain:
\begin{equation}
\left( J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} s^2 + \mathcal{K} \right) \bm{\mathcal{L}} = \bm{\tau}
\end{equation}
The transfer function $\bm{G}(s)$ from $\bm{\tau}$ to $\bm{\mathcal{L}}$ is:
\begin{equation}
\boxed{\bm{G}(s) = {\left( J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} s^2 + \mathcal{K} \right)}^{-1}}
\end{equation}
#+begin_src latex :file gravimeter_block_decentralized.pdf :tangle no :exports results
\begin{tikzpicture}
\node[block] (G) {$\bm{G}$};
% Connections and labels
\draw[<-] (G.west) -- ++(-0.8, 0) node[above right]{$\bm{\tau}$};;
\draw[->] (G.east) -- ++( 0.8, 0) node[above left]{$\bm{\mathcal{L}}$};
\end{tikzpicture}
#+end_src
#+name: fig:gravimeter_block_decentralized
#+caption: Block diagram of the transfer function from $\bm{\tau}$ to $\bm{\mathcal{L}}$
#+RESULTS:
[[file:figs/gravimeter_block_decentralized.png]]
#+begin_src matlab
%% Mass Matrix in frame {M}
Mm = diag([m,m,I]);
#+end_src
Let's note the mass matrix in the frame of the legs:
\begin{equation}
M_{\{L\}} = J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1}
\end{equation}
#+begin_src matlab
%% Mass Matrix in the frame of the struts
Ml = inv(Jm')*Mm*inv(Jm);
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Ml
#+end_src
#+caption: $M_{\{L\}}$
#+RESULTS:
| 400 | 680 | -680 |
| 680 | 1371 | -1171 |
| -680 | -1171 | 1371 |
As we can see, the Stiffness matrix in the frame of the legs is diagonal.
This means the plant dynamics will be diagonal at low frequency.
#+begin_src matlab
Kl = diag([k1, k2, k3]);
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Kl
#+end_src
#+caption: $K_{\{L\}} = \mathcal{K}$
#+RESULTS:
| 15000 | 0 | 0 |
| 0 | 15000 | 0 |
| 0 | 0 | 15000 |
#+begin_src matlab
Cl = diag([c1, c2, c3]);
#+end_src
The transfer function $\bm{G}(s)$ from $\bm{\tau}$ to $\bm{\mathcal{L}}$ is defined below and its magnitude is shown in Figure [[fig:plant_frame_L]].
#+begin_src matlab
Gl = inv(Ml*s^2 + Cl*s + Kl);
#+end_src
We can indeed see that the system is well decoupled at low frequency.
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000); freqs = logspace(-2, 2, 1000);
figure; figure;
% Magnitude % Magnitude
hold on; hold on;
for i_in = 1:3 for i_in = 1:3
for i_out = [1:i_in-1, i_in+1:3] for i_out = [1:i_in-1, i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gt(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... plot(freqs, abs(squeeze(freqresp(Gl(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off'); 'HandleVisibility', 'off');
end end
end end
plot(freqs, abs(squeeze(freqresp(Gt(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... plot(freqs, abs(squeeze(freqresp(Gl(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_x(i,j)\ i \neq j$'); 'DisplayName', '$\mathcal{L}_i/\tau_j\ i \neq j$');
set(gca,'ColorOrderIndex',1) set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3 for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gt(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_x(%d,%d)$', i_in_out, i_in_out)); plot(freqs, abs(squeeze(freqresp(Gl(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', ['$\mathcal{L}_', int2str(i_in_out), '/\tau_', int2str(i_in_out), '$']);
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude'); xlabel('Frequency [Hz]'); ylabel('Magnitude');
legend('location', 'southeast'); legend('location', 'northeast', 'FontSize', 8);
ylim([1e-8, 1e0]); ylim([1e-8, 1e-2]);
#+end_src #+end_src
** Transfer function from $\mathcal{F}_{\{M\}}$ to $\mathcal{X}_{\{M\}}$ #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/plant_frame_L.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:plant_frame_L
#+caption: Dynamics from $\bm{\tau}$ to $\bm{\mathcal{L}}$
#+RESULTS:
[[file:figs/plant_frame_L.png]]
** Equations of motion - "Center of mass" {M}
<<sec:jac_decoupl_com>>
The equations of motion expressed in frame $\{M\}$ are:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) \bm{\mathcal{X}}_{\{M\}} = \bm{\mathcal{F}}_{\{M\}}
\end{equation}
And the plant from $\bm{F}_{\{M\}}$ to $\bm{\mathcal{X}}_{\{M\}}$ is:
\begin{equation}
\boxed{\bm{G}_{\{X\}} = {\left( M_{\{M\}} s^2 + K_{\{M\}} \right)}^{-1}}
\end{equation}
with:
- $M_{\{M\}}$ is the mass matrix expressed in $\{M\}$:
\[ M_{\{M\}} = \begin{bmatrix}m & 0 & 0 \\ 0 & m & 0 \\ 0 & 0 & I\end{bmatrix} \]
- $K_{\{M\}}$ is the stiffness matrix expressed in $\{M\}$:
\[ K_{\{M\}} = J_{\{M\}}^T \mathcal{K} J_{\{M\}} \]
#+begin_src latex :file gravimeter_block_com.pdf :tangle no :exports results
\begin{tikzpicture}
\node[block] (G) {$\bm{G}$};
\node[block, left=0.6 of G] (Jt) {$J_{\{M\}}^{-T}$};
\node[block, right=0.6 of G] (Ja) {$J_{\{M\}}^{-1}$};
% Connections and labels
\draw[<-] (Jt.west) -- ++(-1.8, 0) node[above right]{$\bm{\mathcal{F}}_{\{M\}}$};
\draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (Ja.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (Ja.east) -- ++( 1.8, 0) node[above left]{$\bm{\mathcal{X}}_{\{M\}}$};
\begin{scope}[on background layer]
\node[fit={(Jt.south west) (Ja.north east)}, fill=black!10!white, draw, dashed, inner sep=16pt] (Gx) {};
\node[below right] at (Gx.north west) {$\bm{G}_{\{M\}}$};
\end{scope}
\end{tikzpicture}
#+end_src
#+name: fig:gravimeter_block_com
#+caption: Block diagram of the transfer function from $\bm{\mathcal{F}}_{\{M\}}$ to $\bm{\mathcal{X}}_{\{M\}}$
#+RESULTS:
[[file:figs/gravimeter_block_com.png]]
#+begin_src matlab #+begin_src matlab
Gm = inv(Jm)*Gt*inv(Jm'); %% Mass Matrix in frame {M}
Mm = diag([m,m,I]);
#+end_src #+end_src
#+begin_src matlab :exports results :results value table replace :tangle no #+begin_src matlab :results value replace :exports results :tangle no
data2orgtable(Mm, {}, {}, ' %.1f '); ans = Mm
#+end_src #+end_src
#+caption: $M_{\{M\}}$ #+caption: Mass matrix expressed in $\{M\}$: $M_{\{M\}}$
#+RESULTS: #+RESULTS:
| 400.0 | 0.0 | 0.0 | | 400 | 0 | 0 |
| 0.0 | 400.0 | 0.0 | | 0 | 400 | 0 |
| 0.0 | 0.0 | 115.0 | | 0 | 0 | 115 |
#+begin_src matlab :exports results :results value table replace :tangle no #+begin_src matlab
data2orgtable(Km, {}, {}, ' %.1f '); %% Stiffness Matrix in frame {M}
Km = Jm'*Kr*Jm;
#+end_src #+end_src
#+caption: $K_{\{M\}}$ #+begin_src matlab :results value replace :exports results :tangle no
ans = Km
#+end_src
#+caption: Stiffness matrix expressed in $\{M\}$: $K_{\{M\}}$
#+RESULTS: #+RESULTS:
| 15000.0 | 0.0 | 12750.0 | | 15000 | 0 | 25500 |
| 0.0 | 30000.0 | 0.0 | | 0 | 30000 | 0 |
| 12750.0 | 0.0 | 27750.0 | | 25500 | 0 | 50850 |
#+begin_src matlab
%% Damping Matrix in frame {M}
Cm = Jm'*Cr*Jm;
#+end_src
The plant from $\bm{F}_{\{M\}}$ to $\bm{\mathcal{X}}_{\{M\}}$ is defined below and its magnitude is shown in Figure [[fig:plant_frame_M]].
#+begin_src matlab
%% Plant in frame {M}
Gm = inv(Mm*s^2 + Cm*s + Km);
#+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000); freqs = logspace(-2, 2, 1000);
figure; figure;
% Magnitude % Magnitude
@ -1757,62 +2015,112 @@ for i_in = 1:3
end end
end end
plot(freqs, abs(squeeze(freqresp(Gm(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... plot(freqs, abs(squeeze(freqresp(Gm(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_x(i,j)\ i \neq j$'); 'DisplayName', '$G_{\\\{M\\\}}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1) set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3 for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gm(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_x(%d,%d)$', i_in_out, i_in_out)); plot(freqs, abs(squeeze(freqresp(Gm(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', ['$G_{\\\{M\\\}}(', int2str(i_in_out), ',', int2str(i_in_out), ')$']);
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude'); xlabel('Frequency [Hz]'); ylabel('Magnitude');
legend('location', 'southeast'); legend('location', 'southwest', 'FontSize', 8);
ylim([1e-8, 1e0]); ylim([1e-8, 1e-2]);
#+end_src #+end_src
** Transfer function from $\mathcal{F}_{\{K\}}$ to $\mathcal{X}_{\{K\}}$ #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/plant_frame_M.pdf', 'width', 'wide', 'height', 'normal');
Jacobian:
#+begin_src matlab
Jk = [1 0 0
0 1 -la
0 1 la];
#+end_src #+end_src
Mass, Damping and Stiffness matrices expressed in $\{K\}$: #+name: fig:plant_frame_M
#+begin_src matlab #+caption: Dynamics from $\bm{\mathcal{F}}_{\{M\}}$ to $\bm{\mathcal{X}}_{\{M\}}$
Mk = Jk'*Mt*Jk;
Ck = Jk'*Ct*Jk;
Kk = Jk'*Kt*Jk;
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(Mk, {}, {}, ' %.1f ');
#+end_src
#+caption: $M_{\{K\}}$
#+RESULTS: #+RESULTS:
| 400.0 | 0.0 | -340.0 | [[file:figs/plant_frame_M.png]]
| 0.0 | 400.0 | 0.0 |
| -340.0 | 0.0 | 404.0 |
** Equations of motion - "Center of stiffness" {K}
<<sec:jac_decoupl_cok>>
#+begin_src matlab :exports results :results value table replace :tangle no Let's now express the transfer function from $\bm{\mathcal{F}}_{\{K\}}$ to $\bm{\mathcal{X}}_{\{K\}}$.
data2orgtable(Kk, {}, {}, ' %.1f '); We start from:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) J_{\{M\}}^{-1} \bm{\mathcal{L}} = J_{\{M\}}^T \bm{\tau}
\end{equation}
And we make use of the Jacobian $J_{\{K\}}$ to obtain:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) J_{\{M\}}^{-1} J_{\{K\}} \bm{\mathcal{X}}_{\{K\}} = J_{\{M\}}^T J_{\{K\}}^{-T} \bm{\mathcal{F}}_{\{K\}}
\end{equation}
And finally:
\begin{equation}
\left( J_{\{K\}}^T J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} J_{\{K\}} s^2 + J_{\{K\}}^T \mathcal{K} J_{\{K\}} \right) \bm{\mathcal{X}}_{\{K\}} = \bm{\mathcal{F}}_{\{K\}}
\end{equation}
The transfer function from $\bm{\mathcal{F}}_{\{K\}}$ to $\bm{\mathcal{X}}_{\{K\}}$ is then:
\begin{equation}
\boxed{\bm{G}_{\{K\}} = {\left( J_{\{K\}}^T J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} J_{\{K\}} s^2 + J_{\{K\}}^T \mathcal{K} J_{\{K\}} \right)}^{-1}}
\end{equation}
The frame $\{K\}$ has been chosen such that $J_{\{K\}}^T \mathcal{K} J_{\{K\}}$ is diagonal.
#+begin_src latex :file gravimeter_block_cok.pdf :tangle no :exports results
\begin{tikzpicture}
\node[block] (G) {$\bm{G}$};
\node[block, left=0.6 of G] (Jt) {$J_{\{K\}}^{-T}$};
\node[block, right=0.6 of G] (Ja) {$J_{\{K\}}^{-1}$};
% Connections and labels
\draw[<-] (Jt.west) -- ++(-1.8, 0) node[above right]{$\bm{\mathcal{F}}_{\{K\}}$};
\draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (Ja.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (Ja.east) -- ++( 1.8, 0) node[above left]{$\bm{\mathcal{X}}_{\{K\}}$};
\begin{scope}[on background layer]
\node[fit={(Jt.south west) (Ja.north east)}, fill=black!10!white, draw, dashed, inner sep=16pt] (Gx) {};
\node[below right] at (Gx.north west) {$\bm{G}_{\{K\}}$};
\end{scope}
\end{tikzpicture}
#+end_src #+end_src
#+caption: $K_{\{K\}}$ #+name: fig:gravimeter_block_cok
#+caption: Block diagram of the transfer function from $\bm{\mathcal{F}}_{\{K\}}$ to $\bm{\mathcal{X}}_{\{K\}}$
#+RESULTS: #+RESULTS:
| 15000.0 | 0.0 | 0.0 | [[file:figs/gravimeter_block_cok.png]]
| 0.0 | 30000.0 | 0.0 |
| 0.0 | 0.0 | 16912.5 |
#+begin_src matlab #+begin_src matlab
% Gk = s^2*inv(Mk*s^2 + Ck*s + Kk); Mk = Jk'*inv(Jm)'*Mm*inv(Jm)*Jk;
Gk = inv(Jk)*Gt*inv(Jk'); #+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Mk
#+end_src
#+caption: Mass matrix expressed in $\{K\}$: $M_{\{K\}}$
#+RESULTS:
| 400 | 0 | -680 |
| 0 | 400 | 0 |
| -680 | 0 | 1271 |
#+begin_src matlab
Kk = Jk'*Kr*Jk;
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Kk
#+end_src
#+caption: Stiffness matrix expressed in $\{K\}$: $K_{\{K\}}$
#+RESULTS:
| 15000 | 0 | 0 |
| 0 | 30000 | 0 |
| 0 | 0 | 7500 |
The plant from $\bm{F}_{\{K\}}$ to $\bm{\mathcal{X}}_{\{K\}}$ is defined below and its magnitude is shown in Figure [[fig:plant_frame_K]].
#+begin_src matlab
Gk = inv(Mk*s^2 + Ck*s + Kk);
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000); freqs = logspace(-2, 2, 1000);
figure; figure;
% Magnitude % Magnitude
@ -1824,80 +2132,32 @@ for i_in = 1:3
end end
end end
plot(freqs, abs(squeeze(freqresp(Gk(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... plot(freqs, abs(squeeze(freqresp(Gk(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_x(i,j)\ i \neq j$'); 'DisplayName', '$G_{\\\{K\\\}}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1) set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3 for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gk(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_x(%d,%d)$', i_in_out, i_in_out)); plot(freqs, abs(squeeze(freqresp(Gk(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', ['$G_{\\\{K\\\}}(', int2str(i_in_out), ',', int2str(i_in_out), ')$']);
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude'); xlabel('Frequency [Hz]'); ylabel('Magnitude');
legend('location', 'southeast'); legend('location', 'southwest', 'FontSize', 8);
ylim([1e-8, 1e0]); ylim([1e-8, 1e-2]);
#+end_src #+end_src
** Analytical #+begin_src matlab :tangle no :exports results :results file replace
*** Matlab Init :noexport:ignore: exportFig('figs/plant_frame_K.pdf', 'width', 'wide', 'height', 'normal');
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
*** Parameters
#+begin_src matlab
syms la ha m I c k positive
#+end_src
#+begin_src matlab
Mm = [m 0 0 ;
0 m 0 ;
0 0 I];
Cm = [c 0 c*ha ;
0 2*c 0 ;
c*ha 0 c*(ha+2*la)];
Km = [k 0 k*ha ;
0 2*k 0 ;
k*ha 0 k*(ha+2*la)];
#+end_src
#+begin_src matlab
Jm = [1 0 ha ;
0 1 -la ;
0 1 la];
#+end_src
#+begin_src matlab
Mt = inv(Jm')*Mm*inv(Jm);
Ct = inv(Jm')*Cm*inv(Jm);
Kt = inv(Jm')*Km*inv(Jm);
#+end_src
#+begin_src matlab
Jk = [1 0 0
0 1 -la
0 1 la];
#+end_src
Mass, Damping and Stiffness matrices expressed in $\{K\}$:
#+begin_src matlab
Mk = Jk'*Mt*Jk;
Ck = Jk'*Ct*Jk;
Kk = Jk'*Kt*Jk;
#+end_src
#+begin_src matlab :results replace value raw
['\begin{equation} M_{\{K\}} = ', latex(simplify(Kk)), '\end{equation}']
#+end_src #+end_src
#+name: fig:plant_frame_K
#+caption: Dynamics from $\bm{\mathcal{F}}_{\{K\}}$ to $\bm{\mathcal{X}}_{\{K\}}$
#+RESULTS: #+RESULTS:
\begin{equation} M_{\{K\}} = \left(\begin{array}{ccc} k & 0 & 0\\ 0 & 2\,k & 0\\ 0 & 0 & k\,\left(-{\mathrm{ha}}^2+\mathrm{ha}+2\,\mathrm{la}\right) \end{array}\right)\end{equation} [[file:figs/plant_frame_K.png]]
** Conclusion
<<sec:jac_decoupl_conclusion>>
* Diagonal Stiffness Matrix for a planar manipulator * Diagonal Stiffness Matrix for a planar manipulator
<<sec:diagonal_stiffness_planar>>
** Model and Assumptions ** Model and Assumptions
Consider a parallel manipulator with: Consider a parallel manipulator with:
- $b_i$: location of the joints on the top platform are called $b_i$ - $b_i$: location of the joints on the top platform are called $b_i$
@ -2261,7 +2521,7 @@ And we finally obtain:
K_{\{K\}} = \left[ \begin{array}{c|c} K_{\{K\}} = \left[ \begin{array}{c|c}
k_i \hat{s}_i \hat{s}_i^T & k_i \hat{s}_i (b_i \times \hat{s}_i)^T \cr k_i \hat{s}_i \hat{s}_i^T & k_i \hat{s}_i (b_i \times \hat{s}_i)^T \cr
\hline \hline
k_i \hat{s}_i (b_i \times \hat{s}_i)^T & k_i (b_i \times \hat{s}_i) (b_i \times \hat{s}_i)^T k_i (b_i \times \hat{s}_i) \hat{s}_i^T & k_i (b_i \times \hat{s}_i) (b_i \times \hat{s}_i)^T
\end{array} \right] \end{array} \right]
} }
\end{equation} \end{equation}
@ -2303,7 +2563,7 @@ Taking the transpose and re-arranging:
k_i ({}^Mb_i \times \hat{s}_i) \hat{s}_i^T = k_i ({}^MO_K \times \hat{s}_i) \hat{s}_i^T k_i ({}^Mb_i \times \hat{s}_i) \hat{s}_i^T = k_i ({}^MO_K \times \hat{s}_i) \hat{s}_i^T
\end{equation} \end{equation}
As the vector cross product also can be expressed as the product of a skew-symmetric matrix and a vehttps://rwth.zoom.us/j/92311133102?pwd=UTAzS21YYkUwT2pMZDBLazlGNzdvdz09tor, we obtain: As the vector cross product also can be expressed as the product of a skew-symmetric matrix and a vector, we obtain:
\begin{equation} \begin{equation}
k_i ({}^Mb_i \times \hat{s}_i) \hat{s}_i^T = {}^M\bm{O}_{K} ( k_i \hat{s}_i \hat{s}_i^T ) k_i ({}^Mb_i \times \hat{s}_i) \hat{s}_i^T = {}^M\bm{O}_{K} ( k_i \hat{s}_i \hat{s}_i^T )
\end{equation} \end{equation}
@ -2448,6 +2708,162 @@ axis equal;
#+end_src #+end_src
** TODO Example 2 - Stewart Platform ** TODO Example 2 - Stewart Platform
* Stiffness and Mass Matrices in the Leg's frame
** Equations
Equations in the $\{M\}$ frame:
\begin{equation}
\left( M_{\{M\}} s^2 + K_{\{M\}} \right) \mathcal{X}_{\{M\}} = \mathcal{F}_{\{M\}}
\end{equation}
Thank to the Jacobian, we can transform the equation of motion expressed in the $\{M\}$ frame to the frame of the legs:
\begin{equation}
J_{\{M\}}^{-T} \left( M_{\{M\}} s^2 + K_{\{M\}} \right) J_{\{M\}}^{-1} \dot{\mathcal{L}} = \tau
\end{equation}
And we have new stiffness and mass matrices:
\begin{equation}
\left( M_{\{L\}} s^2 + K_{\{L\}} \right) \dot{\mathcal{L}} = \tau
\end{equation}
with:
- The local mass matrix:
\[ M_{\{L\}} = J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} \]
- The local stiffness matrix:
\[ K_{\{L\}} = J_{\{M\}}^{-T} K_{\{M\}} J_{\{M\}}^{-1} \]
** Stiffness matrix
We have that:
\[ K_{\{M\}} = J_{\{M\}}^T \mathcal{K} J_{\{M\}} \]
Therefore, we find that $K_{\{L\}}$ is a diagonal matrix:
\begin{equation}
K_{\{L\}} = \mathcal{K} = \begin{bmatrix}
k_1 & & 0 \\
& \ddots & \\
0 & & k_n
\end{bmatrix}
\end{equation}
The dynamics from $\tau$ to $\mathcal{L}$ is therefore decoupled at low frequency.
** Mass matrix
The mass matrix in the frames of the legs is:
\[ M_{\{L\}} = J_{\{M\}}^{-T} M_{\{M\}} J_{\{M\}}^{-1} \]
with $M_{\{M\}}$ a diagonal matrix:
\begin{equation}
M_{\{M\}} = \begin{bmatrix}
m & & & & & \\
& m & & & 0 & \\
& & m & & & \\
& & & I_x & & \\
& 0 & & & I_y & \\
& & & & & I_z
\end{bmatrix}
\end{equation}
Let's suppose $M_{\{L\}} = \mathcal{M}$ diagonal and try to find what does this imply:
\[ M_{\{M\}} = J_{\{M\}}^{T} \mathcal{M} J_{\{M\}} \]
with:
\begin{equation}
\mathcal{M} = \begin{bmatrix}
m_1 & & 0 \\
& \ddots & \\
0 & & m_n
\end{bmatrix}
\end{equation}
We obtain:
\begin{equation}
\boxed{
M_{\{M\}} = \left[ \begin{array}{c|c}
m_i \hat{s}_i \hat{s}_i^T & m_i \hat{s}_i (b_i \times \hat{s}_i)^T \cr
\hline
k_i \hat{s}_i (b_i \times \hat{s}_i)^T & m_i (b_i \times \hat{s}_i) (b_i \times \hat{s}_i)^T
\end{array} \right]
}
\end{equation}
Therefore, we have the following conditions:
\begin{align}
m_i \hat{s}_i \hat{s}_i^T &= m \bm{I}_{3} \\
m_i \hat{s}_i (b_i \times \hat{s}_i)^T &= \bm{O}_{3} \\
m_i (b_i \times \hat{s}_i) (b_i \times \hat{s}_i)^T &= \text{diag}(I_x, I_y, I_z)
\end{align}
** Planar Example
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
The stiffnesses $k_i$, the joint positions ${}^Mb_i$ and joint unit vectors ${}^M\hat{s}_i$ are defined below:
#+begin_src matlab
ki = [1,1,1]; % Stiffnesses [N/m]
si = [[1;0],[0;1],[0;1]]; si = si./vecnorm(si); % Unit Vectors
bi = [[-1; 0],[-10;-1],[0;-1]]; % Joint's positions in frame {M}
#+end_src
Jacobian in frame $\{M\}$:
#+begin_src matlab
Jm = [si', (bi(1,:).*si(2,:) - bi(2,:).*si(1,:))'];
#+end_src
And the stiffness matrix in frame $\{K\}$:
#+begin_src matlab
Km = Jm'*diag(ki)*Jm;
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
ans = Km
#+end_src
#+RESULTS:
| 2 | 0 | 1 |
| 0 | 1 | -1 |
| 1 | -1 | 2 |
Mass matrix in the frame $\{M\}$:
#+begin_src matlab
m = 10; % [kg]
I = 1; % [kg.m^2]
Mm = diag([m, m, I]);
#+end_src
Now compute $K$ and $M$ in the frame of the legs:
#+begin_src matlab
ML = inv(Jm)'*Mm*inv(Jm)
KL = inv(Jm)'*Km*inv(Jm)
#+end_src
#+begin_src matlab
Gm = 1/(ML*s^2 + KL);
#+end_src
#+begin_src matlab
freqs = logspace(-2, 1, 1000);
figure;
hold on;
for i = 1:length(ki)
plot(freqs, abs(squeeze(freqresp(Gm(i,i), freqs, 'Hz'))), 'k-')
end
for i = 1:length(ki)
for j = i+1:length(ki)
plot(freqs, abs(squeeze(freqresp(Gm(i,j), freqs, 'Hz'))), 'r-')
end
end
hold off;
xlabel('Frequency [Hz]');
ylabel('Magnitude');
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
#+end_src
* Stewart Platform - Simscape Model * Stewart Platform - Simscape Model
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle stewart_platform/script.m :header-args:matlab+: :tangle stewart_platform/script.m

BIN
index.pdf

Binary file not shown.