diff --git a/figs/detail_control_coupled_plant_bode.pdf b/figs/detail_control_coupled_plant_bode.pdf index c1c54fe..36448b5 100644 --- a/figs/detail_control_coupled_plant_bode.pdf +++ b/figs/detail_control_coupled_plant_bode.pdf @@ -3,7 +3,7 @@ 1 0 obj << /Producer (Apache FOP Version 2.4.0-SNAPSHOT: PDFDocumentGraphics2D) -/CreationDate (D:20250405104040+02'00') +/CreationDate (D:20250405145927+02'00') >> endobj 2 0 obj @@ -5518,7 +5518,7 @@ trailer << /Root 638 0 R /Info 1 0 R - /ID [ ] + /ID [<2D7A8CB2740C2EB4858ED371B800BF81> <2D7A8CB2740C2EB4858ED371B800BF81>] /Size 639 >> startxref diff --git a/figs/detail_control_decoupling_control_jacobian.pdf b/figs/detail_control_decoupling_control_jacobian.pdf index 8736e95..667c485 100644 Binary files a/figs/detail_control_decoupling_control_jacobian.pdf and b/figs/detail_control_decoupling_control_jacobian.pdf differ diff --git a/figs/detail_control_decoupling_control_jacobian.png b/figs/detail_control_decoupling_control_jacobian.png index 9136d1c..1db7640 100644 Binary files a/figs/detail_control_decoupling_control_jacobian.png and b/figs/detail_control_decoupling_control_jacobian.png differ diff --git a/figs/detail_control_decoupling_control_jacobian.svg b/figs/detail_control_decoupling_control_jacobian.svg index 4d68174..b455d99 100644 --- a/figs/detail_control_decoupling_control_jacobian.svg +++ b/figs/detail_control_decoupling_control_jacobian.svg @@ -6,6 +6,9 @@ + + + @@ -27,18 +30,15 @@ - - - - + - + - + @@ -79,48 +79,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -134,12 +134,12 @@ - + - + @@ -147,7 +147,7 @@ - + diff --git a/figs/detail_control_decoupling_modal.pdf b/figs/detail_control_decoupling_modal.pdf index c6e7ac4..752f26c 100644 Binary files a/figs/detail_control_decoupling_modal.pdf and b/figs/detail_control_decoupling_modal.pdf differ diff --git a/figs/detail_control_decoupling_modal.png b/figs/detail_control_decoupling_modal.png index 4cdf800..4ee737c 100644 Binary files a/figs/detail_control_decoupling_modal.png and b/figs/detail_control_decoupling_modal.png differ diff --git a/figs/detail_control_decoupling_modal.svg b/figs/detail_control_decoupling_modal.svg index a891633..c88df93 100644 --- a/figs/detail_control_decoupling_modal.svg +++ b/figs/detail_control_decoupling_modal.svg @@ -1,114 +1,192 @@ - + - + - - - - + + + + + + + - + - + + + + + + + - + + + + + + + + + + - + - - - - + - + - + - + - + - + - - - - - + - + + + + + + + - + - - - - - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + - - - - - - - - - - - - - - - - + - - - - + diff --git a/figs/detail_control_decoupling_svd.pdf b/figs/detail_control_decoupling_svd.pdf new file mode 100644 index 0000000..2f68520 Binary files /dev/null and b/figs/detail_control_decoupling_svd.pdf differ diff --git a/figs/detail_control_decoupling_svd.png b/figs/detail_control_decoupling_svd.png index edf0270..ab3be13 100644 Binary files a/figs/detail_control_decoupling_svd.png and b/figs/detail_control_decoupling_svd.png differ diff --git a/figs/detail_control_decoupling_svd.svg b/figs/detail_control_decoupling_svd.svg index eecfdb5..83c9f1a 100644 --- a/figs/detail_control_decoupling_svd.svg +++ b/figs/detail_control_decoupling_svd.svg @@ -5,42 +5,51 @@ + + + + + + + + + + + + + + + - + - + - - - - + - + - + - + - - - - - - - + - + + + + @@ -57,57 +66,58 @@ - + - - - - - - - + + + - + + + + + + - + - + - + - + - + - + - + - + - + @@ -115,6 +125,6 @@ - + diff --git a/figs/detail_control_jacobian_plant_CoK.pdf b/figs/detail_control_jacobian_plant_CoK.pdf index 23ae96d..c7de1bc 100644 Binary files a/figs/detail_control_jacobian_plant_CoK.pdf and b/figs/detail_control_jacobian_plant_CoK.pdf differ diff --git a/figs/detail_control_jacobian_plant_CoM.pdf b/figs/detail_control_jacobian_plant_CoM.pdf index 2eab1a6..eda0751 100644 --- a/figs/detail_control_jacobian_plant_CoM.pdf +++ b/figs/detail_control_jacobian_plant_CoM.pdf @@ -3,7 +3,7 @@ 1 0 obj << /Producer (Apache FOP Version 2.4.0-SNAPSHOT: PDFDocumentGraphics2D) -/CreationDate (D:20250405113120+02'00') +/CreationDate (D:20250405145932+02'00') >> endobj 2 0 obj @@ -1293,7 +1293,7 @@ trailer << /Root 141 0 R /Info 1 0 R - /ID [<3C649F7AB780C0FB015D2FD74A06C8A5> <3C649F7AB780C0FB015D2FD74A06C8A5>] + /ID [<067AA37DE86FBEE24A057C343F93B2CD> <067AA37DE86FBEE24A057C343F93B2CD>] /Size 142 >> startxref diff --git a/figs/detail_control_modal_plant.pdf b/figs/detail_control_modal_plant.pdf index 0f74578..8f9e667 100644 Binary files a/figs/detail_control_modal_plant.pdf and b/figs/detail_control_modal_plant.pdf differ diff --git a/figs/detail_control_modal_plant.png b/figs/detail_control_modal_plant.png index 7b2e467..f1fe645 100644 Binary files a/figs/detail_control_modal_plant.png and b/figs/detail_control_modal_plant.png differ diff --git a/figs/detail_control_model_test_CoK.svg b/figs/detail_control_model_test_CoK.svg index 74f396d..5fb5926 100644 --- a/figs/detail_control_model_test_CoK.svg +++ b/figs/detail_control_model_test_CoK.svg @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="5.6568542" - inkscape:cx="65.142212" - inkscape:cy="69.473241" + inkscape:zoom="4" + inkscape:cx="71.125" + inkscape:cy="98.75" inkscape:document-units="mm" inkscape:current-layer="layer1" inkscape:document-rotation="0" @@ -43,6 +43,25 @@ inkscape:deskcolor="#d1d1d1" /> + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/detail_control_model_test_decoupling_alt.pdf b/figs/detail_control_model_test_decoupling_alt.pdf new file mode 100644 index 0000000..b1b9e40 Binary files /dev/null and b/figs/detail_control_model_test_decoupling_alt.pdf differ diff --git a/figs/detail_control_model_test_decoupling_alt.png b/figs/detail_control_model_test_decoupling_alt.png new file mode 100644 index 0000000..de49f7f Binary files /dev/null and b/figs/detail_control_model_test_decoupling_alt.png differ diff --git a/figs/detail_control_model_test_decoupling_alt.svg b/figs/detail_control_model_test_decoupling_alt.svg new file mode 100644 index 0000000..c4852b7 --- /dev/null +++ b/figs/detail_control_model_test_decoupling_alt.svg @@ -0,0 +1,2559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/detail_control_model_test_modal.pdf b/figs/detail_control_model_test_modal.pdf new file mode 100644 index 0000000..0faf14d Binary files /dev/null and b/figs/detail_control_model_test_modal.pdf differ diff --git a/figs/detail_control_model_test_modal.png b/figs/detail_control_model_test_modal.png new file mode 100644 index 0000000..c6a20b5 Binary files /dev/null and b/figs/detail_control_model_test_modal.png differ diff --git a/figs/detail_control_model_test_modal.svg b/figs/detail_control_model_test_modal.svg new file mode 100644 index 0000000..52b18b7 --- /dev/null +++ b/figs/detail_control_model_test_modal.svg @@ -0,0 +1,2586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/detail_control_svd_plant.pdf b/figs/detail_control_svd_plant.pdf index 1567356..abb9c40 100644 Binary files a/figs/detail_control_svd_plant.pdf and b/figs/detail_control_svd_plant.pdf differ diff --git a/figs/detail_control_svd_plant.png b/figs/detail_control_svd_plant.png index d0b5df5..3f3975a 100644 Binary files a/figs/detail_control_svd_plant.png and b/figs/detail_control_svd_plant.png differ diff --git a/matlab/detail_control_decoupling_test_model.slx b/matlab/detail_control_decoupling_test_model.slx new file mode 100644 index 0000000..0a9e8cd Binary files /dev/null and b/matlab/detail_control_decoupling_test_model.slx differ diff --git a/nass-control.org b/nass-control.org index 7396d57..bb51a59 100644 --- a/nass-control.org +++ b/nass-control.org @@ -408,10 +408,11 @@ disp('Symbolic Jacobian Matrix (J_CoK):'); disp(J_CoK); #+end_src +*** Analytical formulas for modal decoupling + #+begin_src matlab %% Analytical Formula for the Modal Decoupling syms l h la ha m I k c s real -syms omega1 omega2 omega3 real % Natural frequencies % Unit vectors of the actuators s1 = [1; 0]; % Actuator 1 direction (horizontal) @@ -419,9 +420,9 @@ s2 = [0; 1]; % Actuator 2 direction (vertical) s3 = [0; 1]; % Actuator 3 direction (vertical) % Location of the joints with respect to the center of mass (symbolic) -Mb1 = [-l/2; -ha]; % Joint 1 position vector -Mb2 = [-la; -h/2]; % Joint 2 position vector -Mb3 = [la; -h/2]; % Joint 3 position vector +Mb1 = [-l/2; -ha]; % Joint 1 position vector +Mb2 = [-la; -h/2]; % Joint 2 position vector +Mb3 = [ la; -h/2]; % Joint 3 position vector % Calculate the Jacobian matrix (Center of Mass) symbolically J_CoM = [s1', Mb1(1)*s1(2) - Mb1(2)*s1(1); @@ -434,11 +435,9 @@ disp(J_CoM); % Define system matrices M = diag([m, m, I]); K_struts = diag([k, k, k]); -C_struts = diag([c, c, c]); % Transform stiffness and damping to Cartesian space K = J_CoM' * K_struts * J_CoM; -C = J_CoM' * C_struts * J_CoM; disp('Mass Matrix (M):'); disp(M); @@ -446,68 +445,21 @@ disp(M); disp('Stiffness Matrix (K):'); disp(K); -disp('Damping Matrix (C):'); -disp(C); - -% Define the plant in the frame of the struts -% G_L = J_CoM * inv(M*s^2 + C*s + K) * J_CoM' -D_cart = M*s^2 + C*s + K; % Denominator in Cartesian space -disp('Dynamic Matrix in Cartesian Space (M*s^2 + C*s + K):'); -disp(D_cart); - -% Modal Decomposition -% Calculate the eigenvalues and eigenvectors of M\K -% For a symbolic approach, we'll use the general form of eigenvectors -% [V,D] = eig(M\K) - -% Instead of direct symbolic eigendecomposition (which is complex), -% we'll use known properties of modal analysis for analytical expressions - -% First, calculate M\K (inverse mass matrix times stiffness matrix) MK = simplify(M\K); disp('M\K Matrix:'); disp(MK); -% For a mechanical system with 3 DOF, we expect 3 eigenmodes -% Let's define symbolic eigenvectors in a general form -% According to vibration theory, the eigenvectors should be orthogonal with respect to M +[V, ~] = eig(MK); +disp(simplify(V)); +disp('1st eigen vector:'); +disp(simplify(V(:,1))); +disp('2nd eigen vector:'); +disp(simplify(V(:,2))); +disp('3rd eigen vector:'); +disp(simplify(V(:,3))); -% Define symbolic eigenvectors -V = sym('v', [3, 3]); - -% Define the symbolic eigenvalues (squared natural frequencies) -D = diag([omega1^2, omega2^2, omega3^2]); - -% The eigenvectors should satisfy the equation (M\K)*V = V*D -% This is equivalent to K*V = M*V*D -% We can derive this symbolically, but it's complex for 3D systems - -% For an analytical approach, we can use physics to guide us -% For this system, we expect modes corresponding to: -% 1. Horizontal translation -% 2. Vertical translation -% 3. Rotation - -% Calculate modal mass matrix (mu = V'*M*V) -mu = simplify(V' * M * V); -disp('Modal Mass Matrix (mu):'); -disp(mu); - -% Modal output matrix -Cm = simplify(J_CoM * V); -disp('Modal Output Matrix (Cm):'); -disp(Cm); - -% Modal input matrix -Bm = simplify(inv(mu) * V' * J_CoM'); -disp('Modal Input Matrix (Bm):'); -disp(Bm); - -% Plant in the modal space -% For a fully decoupled system, Gm should be diagonal -Gm = simplify(inv(Cm) * J_CoM * inv(D_cart) * J_CoM' * inv(Bm')); -disp('Plant in Modal Space (Gm):'); -disp(Gm); +Vinv = inv(V); +disp(simplify(Vinv)); #+end_src ** DONE [#A] Fix the outline @@ -571,8 +523,19 @@ Especially [[file:~/Cloud/research/matlab/decoupling-strategies/svd-control.org: - [X] equations - [X] tables -** TODO [#A] Verify why SVD decomposition on the proposed example gives such good performance +** TODO [#A] Try to apply SVD on the experimental ID31 plant +** DONE [#A] Verify why SVD decomposition on the proposed example gives such good performance +CLOSED: [2025-04-05 Sat 17:43] + +Could be due to symmetry in the system. + ** TODO [#B] Rename figures/sections/equations to have more clear separation between the three sections + +Prefixes: +- =detail_control_sensor_fusion= +- =detail_control_decoupling= +- =detail_control_??= + ** TODO [#B] Review of control for Stewart platforms? [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Control][Control]] @@ -2038,7 +2001,8 @@ freqs = logspace(0, 3, 1000); - Instead of comparing the decoupling strategies using the Stewart platform, a similar yet much simpler parallel manipulator is used instead - to render the analysis simpler, the system of Figure ref:fig:detail_control_model_test_decoupling_detail is used -- It has 3DoF, and has 3 parallels struts whose model is shown in Figure ref:fig:detail_control_strut_model +- Fully parallel manipulator: it has 3DoF, and has 3 parallels struts whose model is shown in Figure ref:fig:detail_control_strut_model + As many DoF as actuators and sensors - It is quite similar to the Stewart platform (parallel architecture, as many struts as DoF) Two frames are defined: @@ -2067,7 +2031,7 @@ First, the equation of motion are derived. Expressing the second law of Newton on the suspended mass, expressed at its center of mass gives \begin{equation} - M_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t) + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t) \end{equation} with $\bm{\mathcal{X}}_{\{M\}}$ the two translation and one rotation expressed with respect to the center of mass and $\bm{\mathcal{F}}_{\{M\}}$ forces and torque applied at the center of mass. @@ -2097,7 +2061,7 @@ In order to map the spring, damping and actuator forces to XY forces and Z torqu Then, the equation of motion linking the actuator forces $\tau$ to the motion of the mass $\bm{\mathcal{X}}_{\{M\}}$ is obtained. \begin{equation}\label{eq:detail_control_decoupling_plant_cartesian} - M_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) \end{equation} Matrices representing the payload inertia as well as the actuator stiffness and damping are shown in @@ -2156,7 +2120,7 @@ The transfer function from $\bm{\mathcal{\tau}}$ to $\bm{\mathcal{L}}$ is shown [[file:figs/detail_control_decoupling_control_struts.png]] \begin{equation}\label{eq:detail_control_decoupling_plant_decentralized} - \frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-t} M_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1} + \frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-t} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1} \end{equation} At low frequency the plant converges to a diagonal constant matrix whose diagonal elements are linked to the actuator stiffnesses eqref:eq:detail_control_decoupling_plant_decentralized_low_freq. @@ -2176,15 +2140,8 @@ ha = 0.2; % Vertical of actuators [m] m = 40; % Payload mass [kg] I = 5; % Payload rotational inertia [kg m^2] -% Actuator Damping [N/(m/s)] -c1 = 2e2; -c2 = 2e2; -c3 = 2e2; - -% Actuator Stiffness [N/m] -k1 = 1e6; -k2 = 1e6; -k3 = 1e6; +c = 2e2; % Actuator Damping [N/(m/s)] +k = 1e6; % Actuator Stiffness [N/m] % Unit vectors of the actuators s1 = [1;0]; @@ -2192,8 +2149,8 @@ s2 = [0;1]; s3 = [0;1]; % Stiffnesss and Damping matrices of the struts -Kr = diag([k1,k2,k3]); -Cr = diag([c1,c2,c3]); +Kr = diag([k,k,k]); +Cr = diag([c,c,c]); % Location of the joints with respect to the center of mass Mb1 = [-l/2;-ha]; @@ -2269,8 +2226,8 @@ As already explained, the Jacobian matrix can be used to both convert strut velo \begin{subequations}\label{eq:detail_control_decoupling_jacobian} \begin{align} - \dot{\bm{\mathcal{X}}}_{\{O\}} &= J_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = J_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\ - \bm{\mathcal{F}}_{\{O\}} &= J_{\{O\}}^t \bm{\tau}, \quad \bm{\tau} = J_{\{O\}}^{-t} \bm{\mathcal{F}}_{\{O\}} + \dot{\bm{\mathcal{X}}}_{\{O\}} &= \bm{J}_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = \bm{J}_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\ + \bm{\mathcal{F}}_{\{O\}} &= \bm{J}_{\{O\}}^t \bm{\tau}, \quad \bm{\tau} = \bm{J}_{\{O\}}^{-t} \bm{\mathcal{F}}_{\{O\}} \end{align} \end{subequations} @@ -2281,8 +2238,8 @@ The obtained plan (Figure ref:fig:detail_control_jacobian_decoupling_arch) has i #+begin_src latex :file detail_control_decoupling_control_jacobian.pdf \begin{tikzpicture} \node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$}; - \node[block, left=0.6 of G] (Jt) {$J_{\{O\}}^{-T}$}; - \node[block, right=0.6 of G] (Ja) {$J_{\{O\}}^{-1}$}; + \node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{O\}}^{-T}$}; + \node[block, right=0.6 of G] (Ja) {$\bm{J}_{\{O\}}^{-1}$}; % Connections and labels \draw[<-] (Jt.west) -- ++(-1.4, 0) node[above right]{$\bm{\mathcal{F}}_{\{O\}}$}; @@ -2316,11 +2273,11 @@ If the center of mass is chosen as the decoupling frame. The Jacobian matrix and its inverse are expressed in eqref:eq:detail_control_decoupling_jacobian_CoM_inverse. \begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM_inverse} - J_{\{M\}} = \begin{bmatrix} + \bm{J}_{\{M\}} = \begin{bmatrix} 1 & 0 & h_a \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \\ - \end{bmatrix}, \quad J_{\{M\}}^{-1} = \begin{bmatrix} + \end{bmatrix}, \quad \bm{J}_{\{M\}}^{-1} = \begin{bmatrix} 1 & \frac{h_a}{2 l_a} & \frac{-h_a}{2 l_a} \\ 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} \\ @@ -2330,8 +2287,8 @@ The Jacobian matrix and its inverse are expressed in eqref:eq:detail_control_dec #+begin_src latex :file detail_control_decoupling_control_jacobian_CoM.pdf \begin{tikzpicture} \node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$}; - \node[block, left=0.6 of G] (Jt) {$J_{\{M\}}^{-T}$}; - \node[block, right=0.6 of G] (Ja) {$J_{\{M\}}^{-1}$}; + \node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{M\}}^{-T}$}; + \node[block, right=0.6 of G] (Ja) {$\bm{J}_{\{M\}}^{-1}$}; % Connections and labels \draw[<-] (Jt.west) -- ++(-1.4, 0) node[above right]{$\bm{\mathcal{F}}_{\{M\}}$}; @@ -2426,8 +2383,8 @@ exportFig('figs/detail_control_jacobian_plant_CoM.pdf', 'width', 'half', 'height #+begin_src latex :file detail_control_decoupling_control_jacobian_CoK.pdf \begin{tikzpicture} \node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$}; - \node[block, left=0.6 of G] (Jt) {$J_{\{K\}}^{-T}$}; - \node[block, right=0.6 of G] (Ja) {$J_{\{K\}}^{-1}$}; + \node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{K\}}^{-T}$}; + \node[block, right=0.6 of G] (Ja) {$\bm{J}_{\{K\}}^{-1}$}; % Connections and labels \draw[<-] (Jt.west) -- ++(-1.4, 0) node[above right]{$\bm{\mathcal{F}}_{\{K\}}$}; @@ -2446,11 +2403,11 @@ exportFig('figs/detail_control_jacobian_plant_CoM.pdf', 'width', 'half', 'height # [[file:figs/detail_control_decoupling_control_jacobian_CoK.png]] \begin{equation} - J_{\{K\}} = \begin{bmatrix} + \bm{J}_{\{K\}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -l_a \\ 0 & 1 & l_a - \end{bmatrix}, \quad J_{\{K\}}^{-1} = \begin{bmatrix} + \end{bmatrix}, \quad \bm{J}_{\{K\}}^{-1} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} @@ -2544,91 +2501,53 @@ The physical interpretation of the above two equations is that any motion of the #+end_quote - Mode superposition [[cite:&preumont94_random_vibrat_spect_analy;&preumont18_vibrat_contr_activ_struc_fourt_edition, chapt. 2]] - The idea is to control the system in the "modal space" + [[cite:&heertjes05_activ_vibrat_isolat_metrol_frames]] + IFF in modal space [[cite:&holterman05_activ_dampin_based_decoup_colloc_contr]] very interesting paper + [[cite:&pu11_six_degree_of_freed_activ]] - - -Let's consider a system with the following equations of motion: -\begin{equation} -M \bm{\ddot{x}} + C \bm{\dot{x}} + K \bm{x} = J^T \bm{\tau} +\begin{equation}\label{eq:detail_control_equation_motion_CoM} + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{C}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{K}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) \end{equation} -And the measurement output is a combination of the motion variable $\bm{x}$: -\begin{equation} -\bm{y} = C_{ox} \bm{x} + C_{ov} \dot{\bm{x}} -\end{equation} - -Let's make a *change of variables*: -\begin{equation} -\boxed{\bm{x} = \Phi \bm{x}_m} +Let's make a change of variables: +\begin{equation}\label{eq:detail_control_modal_coordinates} + \bm{\mathcal{X}}_{\{M\}} = \bm{\Phi} \bm{\mathcal{X}}_{m} \end{equation} with: -- $\bm{x}_m$ the modal amplitudes -- $\Phi$ a matrix whose columns are the modes shapes of the system +- $\bm{\mathcal{X}}_{m}$ the modal amplitudes +- $\bm{\Phi}$ a matrix whose columns are the modes shapes of the system which can be computed from $\bm{M}_{\{M\}}$ and $\bm{K}_{\{M\}}$. -The equations of motion become: -\begin{equation} -M \Phi \bm{\ddot{x}}_m + C \Phi \bm{\dot{x}}_m + K \Phi \bm{x}_m = J^T \bm{\tau} -\end{equation} -And the measured output is: -\begin{equation} -\bm{y} = C_{ox} \Phi \bm{x}_m + C_{ov} \Phi \dot{\bm{x}}_m +By pre-multiplying the equation of motion eqref:eq:detail_control_equation_motion_CoM by $\bm{\Phi}^t$ and using the change of variable eqref:eq:detail_control_modal_coordinates, a new set of equation of motion are obtained + +\begin{equation}\label{eq:detail_control_equation_modal_coordinates} + \underbrace{\bm{\Phi}^t \bm{M} \bm{\Phi}}_{\bm{M}_m} \bm{\ddot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^t \bm{C} \bm{\Phi}}_{\bm{C}_m} \bm{\dot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^t \bm{K} \bm{\Phi}}_{\bm{K}_m} \bm{\mathcal{X}}_m(t) = \underbrace{\bm{\Phi}^t \bm{J}^t \bm{\tau}(t)}_{\bm{\tau}_m(t)} \end{equation} -By pre-multiplying the EoM by $\Phi^T$: -\begin{equation} -\Phi^T M \Phi \bm{\ddot{x}}_m + \Phi^T C \Phi \bm{\dot{x}}_m + \Phi^T K \Phi \bm{x}_m = \Phi^T J^T \bm{\tau} -\end{equation} +- $\bm{\tau}_m$ is the modal input +- $\bm{M}_m$, $\bm{C}_m$ and $\bm{K}_m$ are the modal mass, damping and stiffness matrices -And we note: -- $M_m = \Phi^T M \Phi = \text{diag}(\mu_i)$ the modal mass matrix -- $C_m = \Phi^T C \Phi = \text{diag}(2 \xi_i \mu_i \omega_i)$ (classical damping) -- $K_m = \Phi^T K \Phi = \text{diag}(\mu_i \omega_i^2)$ the modal stiffness matrix +Orthogonality of normal modes gives that the "the modal +vectors uncouple the equations of motion making each dynamic equation independent of all the others" [[cite:&lang17_under]]. +The modal matrices are diagonal. -And we have: -\begin{equation} - \ddot{\bm{x}}_m + 2 \Xi \Omega \dot{\bm{x}}_m + \Omega^2 \bm{x}_m = \mu^{-1} \Phi^T J^T \bm{\tau} -\end{equation} -with: -- $\mu = \text{diag}(\mu_i)$ -- $\Omega = \text{diag}(\omega_i)$ -- $\Xi = \text{diag}(\xi_i)$ - -And we call the *modal input matrix*: -\begin{equation} - \boxed{B_m = \mu^{-1} \Phi^T J^T} -\end{equation} -And the *modal output matrices*: -\begin{equation} - \boxed{C_m = C_{ox} \Phi + C_{ov} \Phi s} -\end{equation} - - -Let's note the "modal input": -\begin{equation} -\bm{\tau}_m = B_m \bm{\tau} -\end{equation} - -The transfer function from $\bm{\tau}_m$ to $\bm{x}_m$ is: -\begin{equation}\label{eq:detail_control_decoupling_plant_modal} - \boxed{\frac{\bm{x}_m}{\bm{\tau}_m} = \left( I_n s^2 + 2 \Xi \Omega s + \Omega^2 \right)^{-1}} -\end{equation} -which is a *diagonal* transfer function matrix. -We therefore have decoupling of the dynamics from $\bm{\tau}_m$ to $\bm{x}_m$. - - -By inverting $B_m$ and $C_m$ and using them as shown in Figure ref:fig:modal_decoupling_architecture, we can see that we control the system in the "modal space" in which it is decoupled. +In order to implement such modal decoupling from the decentralized plant, architecture shown in Figure ref:fig:detail_control_decoupling_modal can be used. +The dynamics from modal inputs $\bm{\tau}_m$ to modal amplitudes $\bm{\mathcal{X}}_m$ is fully decoupled. #+begin_src latex :file detail_control_decoupling_modal.pdf \begin{tikzpicture} - \node[block] (G) {$\bm{G}$}; - \node[block, left=0.6 of G] (Bm) {$B_m^{-1}$}; - \node[block, right=0.6 of G] (Cm) {$C_m^{-1}$}; + \node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$}; + \node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{M\}}^{-t}$}; + \node[block, left=1.2 of Jt] (Bm) {$\bm{\Phi}^{-t}$}; + \node[block, right=0.6 of G] (J) {$\bm{J}_{\{M\}}^{-1}$}; + \node[block, right=1.2 of J] (Cm) {$\bm{\Phi}^{-1}$}; % Connections and labels \draw[<-] (Bm.west) -- ++(-1.0, 0) node[above right]{$\bm{\tau}_m$}; - \draw[->] (Bm.east) -- (G.west) node[above left]{$\bm{\tau}$}; - \draw[->] (G.east) -- (Cm.west) node[above left]{$\bm{y}$}; - \draw[->] (Cm.east) -- ++( 1.0, 0) node[above left]{$\bm{x}_m$}; + \draw[->] (Bm.east) -- (Jt.west) node[above left]{$\bm{\mathcal{F}}_{\{M\}}$}; + \draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$}; + \draw[->] (G.east) -- (J.west) node[above left]{$\bm{\mathcal{L}}$}; + \draw[->] (J.east) -- (Cm.west) node[above left]{$\bm{\mathcal{X}}_{\{M\}}$}; + \draw[->] (Cm.east) -- ++( 1.0, 0) node[above left]{$\bm{\mathcal{X}}_m$}; \begin{scope}[on background layer] \node[fit={(Bm.south west) (Cm.north east)}, fill=black!10!white, draw, dashed, inner sep=4pt] (Gm) {}; @@ -2637,13 +2556,11 @@ By inverting $B_m$ and $C_m$ and using them as shown in Figure ref:fig:modal_dec \end{tikzpicture} #+end_src -#+name: fig:modal_decoupling_architecture +#+name: fig:detail_control_decoupling_modal #+caption: Modal Decoupling Architecture #+RESULTS: [[file:figs/detail_control_decoupling_modal.png]] -The system $\bm{G}_m(s)$ shown in Figure ref:fig:modal_decoupling_architecture is diagonal eqref:eq:modal_eq. - Modal decoupling requires to have the equations of motion of the system. From the equations of motion (and more precisely the mass and stiffness matrices), the mode shapes $\Phi$ are computed. @@ -2652,165 +2569,180 @@ The obtained system on the diagonal are second order resonant systems which can Using this decoupling strategy, it is possible to control each mode individually. +- [ ] Do we need to measure all the states? + I think so +- [ ] Say that the eigen vectors are unitary + Are they orthogonal? +- [ ] Say that the obtained plant are second order systems + **** Example -For the system in Figure ref:fig:detail_control_model_test_decoupling, we have: -\begin{align} -\bm{x} &= \begin{bmatrix} x \\ y \\ R_z \end{bmatrix} \\ -\bm{y} &= \mathcal{L} = J \bm{x}; \quad C_{ox} = J; \quad C_{ov} = 0 \\ -M &= \begin{bmatrix} -m & 0 & 0 \\ -0 & m & 0 \\ -0 & 0 & I -\end{bmatrix}; \quad K = J' \begin{bmatrix} -k & 0 & 0 \\ -0 & k & 0 \\ -0 & 0 & k -\end{bmatrix} J; \quad C = J' \begin{bmatrix} -c & 0 & 0 \\ -0 & c & 0 \\ -0 & 0 & c -\end{bmatrix} J -\end{align} +From the mass matrix $\bm{M}_{\{M\}}$ and stiffness matrix $\bm{K}_{\{M\}}$ expressed at the center of mass, the eigenvectors of $\bm{M}_{\{M\}}^{-1}\bm{K}_{\{M\}}$ are computed. -In order to apply the architecture shown in Figure ref:fig:modal_decoupling_architecture, we need to compute $C_{ox}$, $C_{ov}$, $\Phi$, $\mu$ and $J$. +\begin{equation} + \bm{M}_{\{M\}} = \begin{bmatrix} + m & 0 & 0 \\ + 0 & m & 0 \\ + 0 & 0 & I + \end{bmatrix}, \quad + \bm{K}_{\{M\}} = \begin{bmatrix} + k & 0 & 0 \\ + 0 & k & 0 \\ + 0 & 0 & k + \end{bmatrix} +\end{equation} -- [ ] Is it possible to obtained the analytical formulas for decoupling matrices? +Obtained + +\begin{equation} +\bm{\Phi} = \begin{bmatrix} +\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & 0 & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} \\ +0 & 1 & 0 \\ +1 & 0 & 1 +\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2} +\end{equation} + +It may be very difficult to obtain eigenvectors analytically, so typically these can be computed numerically. + +For the present test system, obtained eigen vectors are + +Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies). + +\begin{equation}\label{eq:} + \bm{\phi} = \begin{bmatrix} + -0.905 & 0 & -0.058 \\ + 0 & 1 & 0 \\ + 0.424 & 0 & -0.998 + \end{bmatrix}, \quad + \bm{\phi}^{-1} = \begin{bmatrix} + -1.075 & 0 & 0.063 \\ + 0 & 1 & 0 \\ + -0.457 & 0 & -0.975 + \end{bmatrix} +\end{equation} #+begin_src matlab -%% Modal Decoupling -% Modal Decomposition -[V,D] = eig(M\K); - -% Modal Mass Matrix -mu = V'*M*V; - -% Modal output matrix -Cm = J_CoM*V; - -% Modal input matrix -Bm = inv(mu)*V'*J_CoM'; +%% Modal decoupling +% Compute the eigen vectors +[phi, wi] = eig(M\K); +% Sort the eigen vectors by increasing associated frequency +[~, i] = sort(diag(wi)); +phi = phi(:, i); % Plant in the modal space -Gm = inv(Cm)*G_L*inv(Bm); +Gm = inv(phi)*inv(J_CoM)*G_L*inv(J_CoM')*inv(phi'); #+end_src -#+begin_src matlab :exports results :results value table replace :tangle no -data2orgtable(Bm, {}, {}, ' %.4f '); -#+end_src - -#+name: tab:modal_decoupling_Bm -#+caption: $B_m$ matrix -#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc -#+attr_latex: :center t :booktabs t :float t -#+RESULTS: - -#+begin_src matlab :exports results :results value table replace :tangle no -data2orgtable(Cm, {}, {}, ' %.1f '); -#+end_src - -#+name: tab:modal_decoupling_Cm -#+caption: $C_m$ matrix -#+attr_latex: :environment tabularx :width 0.2\linewidth :align ccc -#+attr_latex: :center t :booktabs t :float t -#+RESULTS: - #+begin_src matlab :exports none +%% Modal decoupled plant figure; hold on; -for i_in = 1:3 - for i_out = [i_in+1:3] - plot(freqs, abs(squeeze(freqresp(Gm(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... - 'HandleVisibility', 'off'); - end -end -plot(freqs, abs(squeeze(freqresp(Gm(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... - 'DisplayName', '$G_m(i,j)\ i \neq j$'); -set(gca,'ColorOrderIndex',1) -for i_in_out = 1:3 - plot(freqs, abs(squeeze(freqresp(Gm(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_m(%d,%d)$', i_in_out, i_in_out)); -end +plot(freqs, abs(squeeze(freqresp(Gm(1,1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$\mathcal{X}_{m,1}/\tau_{m,1}$'); +plot(freqs, abs(squeeze(freqresp(Gm(2,2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$\mathcal{X}_{m,2}/\tau_{m,2}$'); +plot(freqs, abs(squeeze(freqresp(Gm(3,3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$\mathcal{X}_{m,3}/\tau_{m,3}$'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); xlabel('Frequency [Hz]'); ylabel('Magnitude'); -ylim([1e-7, 1e0]); +ylim([1e-8, 1e-4]); leg = legend('location', 'northeast', 'FontSize', 8); leg.ItemTokenSize(1) = 18; #+end_src #+begin_src matlab :tangle no :exports results :results file replace -exportFig('figs/detail_control_modal_plant.pdf', 'width', 'wide', 'height', 'normal'); +exportFig('figs/detail_control_modal_plant.pdf', 'width', 'half', 'height', 'normal'); #+end_src -#+name: fig:detail_control_modal_plant -#+caption: Modal plant $G_m(s)$ -#+RESULTS: +#+name: fig:detail_control_modal_plant_decoupling +#+caption: Caption with reference to sub figure (\subref{fig:fig_label_a}) +#+attr_latex: :options [htbp] +#+begin_figure +#+attr_latex: :caption \subcaption{\label{fig:detail_control_modal_plant}sub caption a} +#+attr_latex: :options {0.48\textwidth} +#+begin_subfigure +#+attr_latex: :width 0.95\linewidth +[[file:figs/detail_control_modal_plant.png]] +#+end_subfigure +#+attr_latex: :caption \subcaption{\label{fig:detail_control_model_test_modal}sub caption b} +#+attr_latex: :options {0.48\textwidth} +#+begin_subfigure +#+attr_latex: :width 0.95\linewidth +[[file:figs/detail_control_model_test_modal.png]] +#+end_subfigure +#+end_figure + ** SVD Decoupling <> **** Singular Value Decomposition -- Introduction to SVD [[cite:&brunton22_data]] -- Applied to parallel manipulator? +Singular Value Decomposition (SVD) +- Introduction to SVD [[cite:&brunton22_data, chapt. 1]] +- Singular value is used a lot for multivariable control [[cite:&skogestad07_multiv_feedb_contr]]. + Used to study directions in multivariable systems. +- [ ] Applied to parallel manipulator? +- [ ] Should I consider only real matrices? -Singular value is used a lot for multivariable control [[cite:&skogestad07_multiv_feedb_contr]]. -Used to study directions in multivariable systems +The SVD is a unique matrix decomposition that exists for every complex matrix $\bm{X} \in \mathbb{C}^{n \times m}$. -**** Control Architecture +\begin{equation}\label{eq:detail_control_svd} + \bm{X} = \bm{U} \bm{\Sigma} \bm{V}^H +\end{equation} + +where $\bm{U} \in \mathbb{C}^{n \times n}$ and $\bm{V} \in \mathbb{C}^{m \times m}$ are unitary matrices with orthonormal columns, and $\bm{\Sigma} \in \mathbb{R}^{n \times n}$ is a diagonal matrix with real, non-negative entries on the diagonal. + +If the matrix $\bm{X}$ is a real matrix, the obtained $\bm{U}$ and $\bm{V}$ matrices are real and can be used for decoupling purposes. + +The idea to use Singular Value Decomposition as a way to decouple a plant is not new +- [ ] Quick review of SVD controllers + [[cite:&skogestad07_multiv_feedb_contr, chapt. 3.5.4]] + +**** Decoupling using the SVD -- [ ] SVD controllers described in [[cite:&skogestad07_multiv_feedb_contr, chapt. 3.5.4]] - [ ] *Check if inverse U and V should be used or just U and V matrices*, Use correct notations. - [ ] Have notation for the measured FRF and for the real approximation +*Procedure*: +Identify the dynamics of the system from inputs to outputs (can be obtained experimentally) +Frequency Response Function, which is a complex matrix obtained for several frequency points $\bm{G}(\omega_i)$. + + +Choose a frequency where we want to decouple the system (usually, the crossover frequency $\omega_c$ is a good choice) + +As /real/ V and U matrices need to be obtained, a real approximation of the complex measured response needs to be computed. +Compute a real approximation of the system's response at that frequency. +[[cite:&kouvaritakis79_theor_pract_charac_locus_desig_method]]: real matrix that preserves the most orthogonality in directions with the input complex matrix + +Then, a real matrix $\tilde{\bm{G}}(\omega_c)$ is obtained, and the SVD is performed on this real matrix. +Unitary $\bm{U}$ and $\bm{V}$ matrices are then obtained such that $\bm{V}^{-t} \tilde{\bm{G}}(\omega_c) \bm{U}^{-1}$ is diagonal. + +Use the singular input and output matrices to decouple the system as shown in Figure ref:fig:detail_control_decoupling_svd + \begin{equation} -\bm{G}(j\omega) = \begin{bmatrix} -0 & 0 & 0 \\ -0 & 0 & 0 \\ -0 & 0 & 0 \\ -\end{bmatrix} \xrightarrow[approximation]{real} \begin{bmatrix} -0 & 0 & 0 \\ -0 & 0 & 0 \\ -0 & 0 & 0 \\ -\end{bmatrix} \xrightarrow[SVD]{} U = , \ V = + G_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-T} \end{equation} -Procedure: -- Identify the dynamics of the system from inputs to outputs (can be obtained experimentally) - Frequency Response Function, which is a complex matrix obtained for several frequency points. -- Choose a frequency where we want to decouple the system (usually, the crossover frequency is a good choice) -- Compute a real approximation of the system's response at that frequency - As /real/ V and U matrices need to be obtained, a real approximation of the complex measured response needs to be computed. - [[cite:&kouvaritakis79_theor_pract_charac_locus_desig_method]]: real matrix that preserves the most orthogonality in directions with the input complex matrix -- Perform a Singular Value Decomposition of the real approximation. - Unitary U and V matrices are then obtained such that: - V-t Greal U-1 is a diagonal matrix - -- Use the singular input and output matrices to decouple the system as shown in Figure ref:fig:detail_control_decoupling_svd - \[ G_{svd}(s) = U^{-1} G(s) V^{-T} \] - #+begin_src latex :file detail_control_decoupling_svd.pdf \begin{tikzpicture} - \node[block] (G) {$\bm{G}$}; - - \node[block, left=0.6 of G.west] (V) {$V^{-T}$}; - \node[block, right=0.6 of G.east] (U) {$U^{-1}$}; + \node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$}; + \node[block, left=0.6 of G.west] (V) {$\bm{V}^{-t}$}; + \node[block, right=0.6 of G.east] (U) {$\bm{U}^{-1}$}; % Connections and labels - \draw[<-] (V.west) -- ++(-0.8, 0) node[above right]{$u$}; - \draw[->] (V.east) -- (G.west) node[above left]{$\tau$}; - \draw[->] (G.east) -- (U.west) node[above left]{$a$}; - \draw[->] (U.east) -- ++( 0.8, 0) node[above left]{$y$}; + \draw[<-] (V.west) -- ++(-0.8, 0) node[above right]{$\bm{u}$}; + \draw[->] (V.east) -- (G.west) node[above left]{$\bm{\tau}$}; + \draw[->] (G.east) -- (U.west) node[above left]{$\bm{\mathcal{L}}$}; + \draw[->] (U.east) -- ++( 0.8, 0) node[above left]{$\bm{y}$}; \begin{scope}[on background layer] \node[fit={(V.south west) (G.north-|U.east)}, fill=black!10!white, draw, dashed, inner sep=4pt] (Gsvd) {}; - \node[above] at (Gsvd.north) {$\bm{G}_{SVD}$}; + \node[above] at (Gsvd.north) {$\bm{G}_{\text{SVD}}$}; \end{scope} \end{tikzpicture} #+end_src #+name: fig:detail_control_decoupling_svd -#+caption: Decoupled plant $\bm{G}_{SVD}$ using the Singular Value Decomposition +#+caption: Decoupled plant $\bm{G}_{\text{SVD}}$ using the Singular Value Decomposition #+RESULTS: [[file:figs/detail_control_decoupling_svd.png]] @@ -2829,22 +2761,42 @@ The inputs and outputs are ordered from higher gain to lower gain at the chosen **** Example -- [ ] Analytical formulas in this case? -- [ ] Maybe show the complex and real response matrices. -- [ ] At least, show the obtained matrices -- [ ] Do we have something special when applying SVD to a collocated MIMO system? -- *Verify why such a good decoupling is obtained!* -# - When applying SVD on a non-collocated MIMO system, we obtained a decoupled plant looking like the one in Figure ref:fig:detail_control_gravimeter_svd_plant -\begin{equation}\label{eq:detail_control_decoupling_plant_svd} -\bm{G}_{SVD}(s) = +\begin{equation} +\begin{align} + & \bm{G}_{\{\mathcal{L}\}}(\omega_c) = 10^{-9} \begin{bmatrix} + -99 - j 2.6 & 74 + j 4.2 & -74 - j 4.2 \\ + 74 + j 4.2 & -247 - j 9.7 & 102 + j 7.0 \\ + -74 - j 4.2 & 102 + j 7.0 & -247 - j 9.7 + \end{bmatrix} \\ + & \xrightarrow[\text{approximation}]{\text{real}} \tilde{\bm{G}}_{\{\mathcal{L}\}(\omega_c)} = 10^{-9} \begin{bmatrix} + -99 & 74 & -74 \\ + 74 & -247 & 102 \\ + -74 & 102 & -247 + \end{bmatrix} \\ + & \xrightarrow[\text{SVD}]{\phantom{\text{approximation}}} \bm{U} = \begin{bmatrix} + 0.34 & 0 & 0.94 \\ + -0.66 & 0.71 & 0.24 \\ + 0.66 & 0.71 & -0.24 + \end{bmatrix}, \ \bm{V} = \begin{bmatrix} + -0.34 & 0 & -0.94 \\ + 0.66 & -0.71 & -0.24 \\ + -0.66 & -0.71 & 0.24 + \end{bmatrix} +\end{align} \end{equation} +Once the $\bm{U}$ and $\bm{V}$ matrices are obtained, the decoupled plant can be computed using eqref:eq:detail_control_decoupling_plant_svd. + +\begin{equation}\label{eq:detail_control_decoupling_plant_svd} + \bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-t} +\end{equation} + +The obtained plant shown in Figure ref:fig:detail_control_svd_plant is very well decoupled. and not only around $\omega_c$. #+begin_src matlab %% SVD Decoupling - -wc = 2*pi*200; % Decoupling frequency [rad/s] +wc = 2*pi*100; % Decoupling frequency [rad/s] % System's response at the decoupling frequency H1 = evalfr(G_L, j*wc); @@ -2867,10 +2819,10 @@ for i_in = 1:3 end end plot(freqs, abs(squeeze(freqresp(Gsvd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... - 'DisplayName', '$G_{svd}(i,j)\ i \neq j$'); + 'DisplayName', '$G_{SVD}(i,j)\ i \neq j$'); set(gca,'ColorOrderIndex',1) for i_in_out = 1:3 - plot(freqs, abs(squeeze(freqresp(Gsvd(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{svd}(%d,%d)$', i_in_out, i_in_out)); + plot(freqs, abs(squeeze(freqresp(Gsvd(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out)); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -2889,17 +2841,99 @@ exportFig('figs/detail_control_svd_plant.pdf', 'width', 'wide', 'height', 'norma #+RESULTS: [[file:figs/detail_control_svd_plant.png]] -#+begin_src matlab :exports results :results value table replace :tangle no -data2orgtable(H1, {}, {}, ' %.2g '); +- [ ] Do we have something special when applying SVD to a collocated MIMO system? + Paper by Skogestad mention that. +# - When applying SVD on a non-collocated MIMO system, we obtained a decoupled plant looking like the one in Figure ref:fig:detail_control_gravimeter_svd_plant + + +A second system, identical to the first in terms of dynamics. +Just the sensor are changed. +Instead of having relative motion sensors in the frame of the struts, three relative motion sensors are used as shown in Figure ref:fig:detail_control_model_test_decoupling_alt. +Using Jacobian matrices, it is possible to compute the relative motion of each struts. +So theoretically, it should be possible to control both systems the same way. + +#+name: fig:detail_control_model_test_decoupling_alt +#+caption: Same test system but with different relative motion sensors. +[[file:figs/detail_control_model_test_decoupling_alt.png]] + +#+begin_src matlab +%% Simscape model with the accerometers +mdl = 'detail_control_decoupling_test_model'; +open(mdl) + +deq = 0.2; % Length of the actuators [m] +g = 0; % Gravity [m/s2] #+end_src -#+caption: Real approximate of $G$ at the decoupling frequency $\omega_c$ -#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc -#+attr_latex: :center t :booktabs t :float t -#+RESULTS: -| -8e-06 | 2.1e-06 | -2.1e-06 | -| 2.1e-06 | -1.3e-06 | -2.5e-08 | -| -2.1e-06 | -2.5e-08 | -1.3e-06 | +#+begin_src matlab +%% Collocated plant +clear io; io_i = 1; +io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Actuator_1'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Actuator_2'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Actuator_3'], 1, 'openoutput'); io_i = io_i + 1; + +G_L_sim = linearize(mdl, io); +G_L_sim.InputName = {'F1', 'F2', 'F3'}; +G_L_sim.OutputName = {'L1', 'L2', 'L3'}; +#+end_src + +#+begin_src matlab +%% Accelerometer outputs +% Input/Output definition +clear io; io_i = 1; +io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Acc_side'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Acc_side'], 2, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Acc_top'], 1, 'openoutput'); io_i = io_i + 1; +% io(io_i) = linio([mdl, '/Acc_top'], 2, 'openoutput'); io_i = io_i + 1; + +G_acc = linearize(mdl, io); +G_acc.InputName = {'F1', 'F2', 'F3'}; +G_acc.OutputName = {'Ax1', 'Ay1', 'Ax2'}; +#+end_src + +#+begin_src matlab +%% SVD Decoupling +wc = 2*pi*100; % Decoupling frequency [rad/s] +% System's response at the decoupling frequency +H1 = evalfr(G_acc, j*wc); + +% Real approximation of G(j.wc) +D = pinv(real(H1'*H1)); +H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2)))); + +[U,S,V] = svd(H1); + +Gsvd_acc = inv(U)*G_acc*inv(V'); +#+end_src + +#+begin_src matlab :exports none +figure; +hold on; +for i_in = 1:3 + for i_out = [i_in+1:3] + plot(freqs, abs(squeeze(freqresp(Gsvd_acc(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'HandleVisibility', 'off'); + end +end +plot(freqs, abs(squeeze(freqresp(Gsvd_acc(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ... + 'DisplayName', '$G_{SVD}(i,j)\ i \neq j$'); +set(gca,'ColorOrderIndex',1) +for i_in_out = 1:3 + plot(freqs, abs(squeeze(freqresp(Gsvd_acc(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out)); +end +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Magnitude'); +ylim([1e-10, 2e-4]); +leg = legend('location', 'northeast', 'FontSize', 8); +leg.ItemTokenSize(1) = 18; +#+end_src ** Comparison <> diff --git a/nass-control.pdf b/nass-control.pdf index 3d9c20d..0f00816 100644 Binary files a/nass-control.pdf and b/nass-control.pdf differ diff --git a/nass-control.tex b/nass-control.tex index c7e57d3..f502eca 100644 --- a/nass-control.tex +++ b/nass-control.tex @@ -1,4 +1,4 @@ -% Created 2025-04-05 Sat 11:47 +% Created 2025-04-05 Sat 15:49 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -671,7 +671,8 @@ It is structured as follow: \begin{itemize} \item Instead of comparing the decoupling strategies using the Stewart platform, a similar yet much simpler parallel manipulator is used instead \item to render the analysis simpler, the system of Figure \ref{fig:detail_control_model_test_decoupling_detail} is used -\item It has 3DoF, and has 3 parallels struts whose model is shown in Figure \ref{fig:detail_control_strut_model} +\item Fully parallel manipulator: it has 3DoF, and has 3 parallels struts whose model is shown in Figure \ref{fig:detail_control_strut_model} +As many DoF as actuators and sensors \item It is quite similar to the Stewart platform (parallel architecture, as many struts as DoF) \end{itemize} @@ -701,7 +702,7 @@ First, the equation of motion are derived. Expressing the second law of Newton on the suspended mass, expressed at its center of mass gives \begin{equation} - M_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t) + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t) \end{equation} with \(\bm{\mathcal{X}}_{\{M\}}\) the two translation and one rotation expressed with respect to the center of mass and \(\bm{\mathcal{F}}_{\{M\}}\) forces and torque applied at the center of mass. @@ -731,7 +732,7 @@ In order to map the spring, damping and actuator forces to XY forces and Z torqu Then, the equation of motion linking the actuator forces \(\tau\) to the motion of the mass \(\bm{\mathcal{X}}_{\{M\}}\) is obtained. \begin{equation}\label{eq:detail_control_decoupling_plant_cartesian} - M_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^t \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) \end{equation} Matrices representing the payload inertia as well as the actuator stiffness and damping are shown in @@ -786,7 +787,7 @@ The transfer function from \(\bm{\mathcal{\tau}}\) to \(\bm{\mathcal{L}}\) is sh \end{center} \begin{equation}\label{eq:detail_control_decoupling_plant_decentralized} - \frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-t} M_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1} + \frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-t} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1} \end{equation} At low frequency the plant converges to a diagonal constant matrix whose diagonal elements are linked to the actuator stiffnesses \eqref{eq:detail_control_decoupling_plant_decentralized_low_freq}. @@ -814,8 +815,8 @@ As already explained, the Jacobian matrix can be used to both convert strut velo \begin{subequations}\label{eq:detail_control_decoupling_jacobian} \begin{align} - \dot{\bm{\mathcal{X}}}_{\{O\}} &= J_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = J_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\ - \bm{\mathcal{F}}_{\{O\}} &= J_{\{O\}}^t \bm{\tau}, \quad \bm{\tau} = J_{\{O\}}^{-t} \bm{\mathcal{F}}_{\{O\}} + \dot{\bm{\mathcal{X}}}_{\{O\}} &= \bm{J}_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = \bm{J}_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\ + \bm{\mathcal{F}}_{\{O\}} &= \bm{J}_{\{O\}}^t \bm{\tau}, \quad \bm{\tau} = \bm{J}_{\{O\}}^{-t} \bm{\mathcal{F}}_{\{O\}} \end{align} \end{subequations} @@ -844,22 +845,17 @@ If the center of mass is chosen as the decoupling frame. The Jacobian matrix and its inverse are expressed in \eqref{eq:detail_control_decoupling_jacobian_CoM_inverse}. \begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM_inverse} - J_{\{M\}} = \begin{bmatrix} + \bm{J}_{\{M\}} = \begin{bmatrix} 1 & 0 & h_a \\ 0 & 1 & -l_a \\ 0 & 1 & l_a \\ - \end{bmatrix}, \quad J_{\{M\}}^{-1} = \begin{bmatrix} + \end{bmatrix}, \quad \bm{J}_{\{M\}}^{-1} = \begin{bmatrix} 1 & \frac{h_a}{2 l_a} & \frac{-h_a}{2 l_a} \\ 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} \\ \end{bmatrix} \end{equation} -\begin{center} -\includegraphics[scale=1]{figs/detail_control_decoupling_control_jacobian_CoM.png} -\label{} -\end{center} - Analytical formula of the plant is \eqref{eq:detail_control_decoupling_plant_CoM}. \begin{equation}\label{eq:detail_control_decoupling_plant_CoM} @@ -904,17 +900,12 @@ this is illustrated in Figure \ref{fig:detail_control_model_test_CoM}. \end{figure} \paragraph{Center Of Stiffness} -\begin{center} -\includegraphics[scale=1]{figs/detail_control_decoupling_control_jacobian_CoK.png} -\label{} -\end{center} - \begin{equation} - J_{\{K\}} = \begin{bmatrix} + \bm{J}_{\{K\}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -l_a \\ 0 & 1 & l_a - \end{bmatrix}, \quad J_{\{K\}}^{-1} = \begin{bmatrix} + \end{bmatrix}, \quad \bm{J}_{\{K\}}^{-1} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} @@ -935,9 +926,10 @@ This is usually suited for systems which high stiffness. \bm{G}_{\{K\}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{J}_{\{K\}}^{-1} \bm{\mathcal{K}}^{-1} \bm{J}_{\{K\}}^{-t} \end{equation} -\begin{itemize} -\item[{$\square$}] Make a schematic where the thing is deformed at high frequency rotating about the center of mass -\end{itemize} + +The physical reason for high frequency coupling is schematically shown in Figure \ref{fig:detail_control_model_test_CoK}. +At high frequency, a force applied on a point which is not aligned with the center of mass. +Therefore, it will induce some rotation around the center of mass. \begin{figure}[htbp] \begin{subfigure}{0.48\textwidth} @@ -952,105 +944,65 @@ This is usually suited for systems which high stiffness. \end{center} \subcaption{\label{fig:detail_control_model_test_CoK}High frequency force applied at the CoK} \end{subfigure} -\caption{\label{fig:detail_control_jacobian_plant_CoK_results}Plant decoupled using the Jacobian matrix expresssed at the center of stiffness (\subref{fig:detail_control_jacobian_plant_CoK}). The physical reason for low frequency coupling is illustrated in (\subref{fig:detail_control_model_test_CoK}).} +\caption{\label{fig:detail_control_jacobian_plant_CoK_results}Plant decoupled using the Jacobian matrix expresssed at the center of stiffness (\subref{fig:detail_control_jacobian_plant_CoK}). The physical reason for high frequency coupling is illustrated in (\subref{fig:detail_control_model_test_CoK}).} \end{figure} \section{Modal Decoupling} \label{ssec:detail_control_comp_modal} -Let's consider a system with the following equations of motion: -\begin{equation} -M \bm{\ddot{x}} + C \bm{\dot{x}} + K \bm{x} = \bm{\mathcal{F}} +\begin{itemize} +\item A mechanical system consists of several modes: +\begin{itemize} +\item Modal decomposition \cite{rankers98_machin} +\end{itemize} +\begin{quote} +The physical interpretation of the above two equations is that any motion of the system can be regarded as a combination of the contribution of the various modes. +\end{quote} +\begin{itemize} +\item Mode superposition \cite[, chapt. 2]{preumont94_random_vibrat_spect_analy,preumont18_vibrat_contr_activ_struc_fourt_edition} +\end{itemize} +\item The idea is to control the system in the ``modal space'' +\cite{heertjes05_activ_vibrat_isolat_metrol_frames} +IFF in modal space \cite{holterman05_activ_dampin_based_decoup_colloc_contr} very interesting paper +\cite{pu11_six_degree_of_freed_activ} +\end{itemize} + +\begin{equation}\label{eq:detail_control_equation_motion_CoM} + \bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{C}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{K}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^t \bm{\tau}(t) \end{equation} -And the measurement output is a combination of the motion variable \(\bm{x}\): -\begin{equation} -\bm{y} = C_{ox} \bm{x} + C_{ov} \dot{\bm{x}} -\end{equation} - -Let's make a \textbf{change of variables}: -\begin{equation} -\boxed{\bm{x} = \Phi \bm{x}_m} +Let's make a change of variables: +\begin{equation}\label{eq:detail_control_modal_coordinates} + \bm{\mathcal{X}}_{\{M\}} = \bm{\Phi} \bm{\mathcal{X}}_{m} \end{equation} with: \begin{itemize} -\item \(\bm{x}_m\) the modal amplitudes -\item \(\Phi\) a matrix whose columns are the modes shapes of the system +\item \(\bm{\mathcal{X}}_{m}\) the modal amplitudes +\item \(\bm{\Phi}\) a matrix whose columns are the modes shapes of the system which can be computed from \(\bm{M}_{\{M\}}\) and \(\bm{K}_{\{M\}}\). \end{itemize} -And we map the actuator forces: -\begin{equation} -\bm{\mathcal{F}} = J^T \bm{\tau} +By pre-multiplying the equation of motion \eqref{eq:detail_control_equation_motion_CoM} by \(\bm{\Phi}^t\) and using the change of variable \eqref{eq:detail_control_modal_coordinates}, a new set of equation of motion are obtained + +\begin{equation}\label{eq:detail_control_equation_modal_coordinates} + \underbrace{\bm{\Phi}^t \bm{M} \bm{\Phi}}_{\bm{M}_m} \bm{\ddot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^t \bm{C} \bm{\Phi}}_{\bm{C}_m} \bm{\dot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^t \bm{K} \bm{\Phi}}_{\bm{K}_m} \bm{\mathcal{X}}_m(t) = \underbrace{\bm{\Phi}^t \bm{J}^t \bm{\tau}(t)}_{\bm{\tau}_m(t)} \end{equation} -The equations of motion become: -\begin{equation} -M \Phi \bm{\ddot{x}}_m + C \Phi \bm{\dot{x}}_m + K \Phi \bm{x}_m = J^T \bm{\tau} -\end{equation} -And the measured output is: -\begin{equation} -\bm{y} = C_{ox} \Phi \bm{x}_m + C_{ov} \Phi \dot{\bm{x}}_m -\end{equation} - -By pre-multiplying the EoM by \(\Phi^T\): -\begin{equation} -\Phi^T M \Phi \bm{\ddot{x}}_m + \Phi^T C \Phi \bm{\dot{x}}_m + \Phi^T K \Phi \bm{x}_m = \Phi^T J^T \bm{\tau} -\end{equation} - -And we note: \begin{itemize} -\item \(M_m = \Phi^T M \Phi = \text{diag}(\mu_i)\) the modal mass matrix -\item \(C_m = \Phi^T C \Phi = \text{diag}(2 \xi_i \mu_i \omega_i)\) (classical damping) -\item \(K_m = \Phi^T K \Phi = \text{diag}(\mu_i \omega_i^2)\) the modal stiffness matrix +\item \(\bm{\tau}_m\) is the modal input +\item \(\bm{M}_m\), \(\bm{C}_m\) and \(\bm{K}_m\) are the modal mass, damping and stiffness matrices \end{itemize} -And we have: -\begin{equation} - \ddot{\bm{x}}_m + 2 \Xi \Omega \dot{\bm{x}}_m + \Omega^2 \bm{x}_m = \mu^{-1} \Phi^T J^T \bm{\tau} -\end{equation} -with: -\begin{itemize} -\item \(\mu = \text{diag}(\mu_i)\) -\item \(\Omega = \text{diag}(\omega_i)\) -\item \(\Xi = \text{diag}(\xi_i)\) -\end{itemize} +Orthogonality of normal modes gives that the ``the modal +vectors uncouple the equations of motion making each dynamic equation independent of all the others'' \cite{lang17_under}. +The modal matrices are diagonal. -And we call the \textbf{modal input matrix}: -\begin{equation} - \boxed{B_m = \mu^{-1} \Phi^T J^T} -\end{equation} -And the \textbf{modal output matrices}: -\begin{equation} - \boxed{C_m = C_{ox} \Phi + C_{ov} \Phi s} -\end{equation} - - -Let's note the ``modal input'': -\begin{equation} -\bm{\tau}_m = B_m \bm{\tau} -\end{equation} - -The transfer function from \(\bm{\tau}_m\) to \(\bm{x}_m\) is: -\begin{equation}\label{eq:detail_control_decoupling_plant_modal} - \boxed{\frac{\bm{x}_m}{\bm{\tau}_m} = \left( I_n s^2 + 2 \Xi \Omega s + \Omega^2 \right)^{-1}} -\end{equation} -which is a \textbf{diagonal} transfer function matrix. -We therefore have decoupling of the dynamics from \(\bm{\tau}_m\) to \(\bm{x}_m\). - - -We now expressed the transfer function from input \(\bm{\tau}\) to output \(\bm{y}\) as a function of the ``modal variables'': -\begin{equation} - \boxed{\frac{\bm{y}}{\bm{\tau}} = \underbrace{\left( C_{ox} + s C_{ov} \right) \Phi}_{C_m} \underbrace{\left( I_n s^2 + 2 \Xi \Omega s + \Omega^2 \right)^{-1}}_{\text{diagonal}} \underbrace{\left( \mu^{-1} \Phi^T J^T \right)}_{B_m}} -\end{equation} - -By inverting \(B_m\) and \(C_m\) and using them as shown in Figure \ref{fig:modal_decoupling_architecture}, we can see that we control the system in the ``modal space'' in which it is decoupled. +In order to implement such modal decoupling from the decentralized plant, architecture shown in Figure \ref{fig:detail_control_decoupling_modal} can be used. +The dynamics from modal inputs \(\bm{\tau}_m\) to modal amplitudes \(\bm{\mathcal{X}}_m\) is fully decoupled. \begin{figure}[htbp] \centering \includegraphics[scale=1]{figs/detail_control_decoupling_modal.png} -\caption{\label{fig:modal_decoupling_architecture}Modal Decoupling Architecture} +\caption{\label{fig:detail_control_decoupling_modal}Modal Decoupling Architecture} \end{figure} -The system \(\bm{G}_m(s)\) shown in Figure \ref{fig:modal_decoupling_architecture} is diagonal \eqref{eq:modal_eq}. - Modal decoupling requires to have the equations of motion of the system. From the equations of motion (and more precisely the mass and stiffness matrices), the mode shapes \(\Phi\) are computed. @@ -1058,32 +1010,80 @@ Then, the system can be decoupled in the modal space. The obtained system on the diagonal are second order resonant systems which can be easily controlled. Using this decoupling strategy, it is possible to control each mode individually. -\paragraph{Example} - -For the system in Figure \ref{fig:detail_control_model_test_decoupling}, we have: -\begin{align} -\bm{x} &= \begin{bmatrix} x \\ y \\ R_z \end{bmatrix} \\ -\bm{y} &= \mathcal{L} = J \bm{x}; \quad C_{ox} = J; \quad C_{ov} = 0 \\ -M &= \begin{bmatrix} -m & 0 & 0 \\ -0 & m & 0 \\ -0 & 0 & I -\end{bmatrix}; \quad K = J' \begin{bmatrix} -k & 0 & 0 \\ -0 & k & 0 \\ -0 & 0 & k -\end{bmatrix} J; \quad C = J' \begin{bmatrix} -c & 0 & 0 \\ -0 & c & 0 \\ -0 & 0 & c -\end{bmatrix} J -\end{align} - -In order to apply the architecture shown in Figure \ref{fig:modal_decoupling_architecture}, we need to compute \(C_{ox}\), \(C_{ov}\), \(\Phi\), \(\mu\) and \(J\). \begin{itemize} -\item[{$\square$}] Is it possible to obtained the analytical formulas for decoupling matrices? +\item[{$\square$}] Do we need to measure all the states? +I think so +\item[{$\square$}] Say that the eigen vectors are unitary +Are they orthogonal? +\item[{$\square$}] Say that the obtained plant are second order systems \end{itemize} +\paragraph{Example} + +From the mass matrix \(\bm{M}_{\{M\}}\) and stiffness matrix \(\bm{K}_{\{M\}}\) expressed at the center of mass, the eigenvectors of \(\bm{M}_{\{M\}}^{-1}\bm{K}_{\{M\}}\) are computed. + +\begin{equation} + \bm{M}_{\{M\}} = \begin{bmatrix} + m & 0 & 0 \\ + 0 & m & 0 \\ + 0 & 0 & I + \end{bmatrix}, \quad + \bm{K}_{\{M\}} = \begin{bmatrix} + k & 0 & 0 \\ + 0 & k & 0 \\ + 0 & 0 & k + \end{bmatrix} +\end{equation} + +Obtained + +\begin{equation} +\bm{\Phi} = \begin{bmatrix} +\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} & 0 \\ +0 & 0 & 1 \\ +1 & 1 & 0 +\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2} +\end{equation} + +It may be very difficult to obtain eigenvectors analytically, so typically these can be computed numerically. + +For the present test system, obtained eigen vectors are + +Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies). + +\begin{equation}\label{eq:} + \bm{\phi} = \begin{bmatrix} + -0.905 & -0.058 & 0 \\ + 0 & 0 & 1 \\ + 0.424 & -0.998 & 0 + \end{bmatrix}, \quad + \bm{\phi}^{-1} = \begin{bmatrix} + -1.075 & 0 & 0.063 \\ + -0.457 & 0 & -0.975 \\ + 0 & 1 & 0 + \end{bmatrix} +\end{equation} + +\begin{itemize} +\item[{$\square$}] Make a schematic with the three modes +Maybe with each force displayed with different amplitudes +\end{itemize} + +\begin{figure}[htbp] +\begin{subfigure}{0.48\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_modal_plant.png} +\end{center} +\subcaption{\label{fig:detail_control_modal_plant}sub caption a} +\end{subfigure} +\begin{subfigure}{0.48\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_model_test_modal.png} +\end{center} +\subcaption{\label{fig:detail_control_model_test_modal}sub caption b} +\end{subfigure} +\caption{\label{fig:detail_control_modal_plant_decoupling}Caption with reference to sub figure (\subref{fig:fig_label_a})} +\end{figure} \section{SVD Decoupling} \label{ssec:detail_control_comp_svd} \paragraph{Singular Value Decomposition} @@ -1238,6 +1238,11 @@ Conclusion about NASS: \item Prefer to use Jacobian decoupling as we get more physical interpretation \item Also, it is possible to take into account different specifications in the different DoF \end{itemize} + +When possible, having a design providing the same CoK and CoM is good. +Often, it is not possible and we have to deal with that with control. +Idea about using CoK at low frequency and CoM at high frequency ? +Maybe with complementary filters? \chapter{Closed-Loop Shaping using Complementary Filters} \label{sec:detail_control_optimization}