Re-export everything
Deploy / deploy (push) Successful in 5s

This commit is contained in:
tdehaeze committed 2026-10-12 14:10:30 +02:00
1 parent 665774dd08
commit 432702d1a4
40 files changed
+397 -646

No files matched your search

@@ -51,7 +51,7 @@ It consists of three steps:
<a id="figure--fig:control-procedure"></a>
{{< figure src="figs/control-procedure.png" caption="<span class=\"figure-number\">Figure 1: </span>Typical Methodoly for Model Based Control" >}}
{{< figure src="figs/control-procedure.png" caption="<span class='figure-number'>Figure 1: </span>Typical Methodoly for Model Based Control" >}}
In this document, we will suppose a model of the plant is available (step 1 already performed), and we will focus on steps 2 and 3.
@@ -121,7 +121,7 @@ The notations used on [Figure 2](#figure--fig:mech-sys-1dof-inertial-contr) are
<a id="figure--fig:mech-sys-1dof-inertial-contr"></a>
{{< figure src="figs/mech_sys_1dof_inertial_contr.png" caption="<span class=\"figure-number\">Figure 2: </span>Test System consisting of a payload with a mass \\(m\\) on top of an active system with a stiffness \\(k\\), damping \\(c\\) and an actuator. A feedback controller \\(K(s)\\) is added to position / isolate the payload." >}}
{{< figure src="figs/mech_sys_1dof_inertial_contr.png" caption="<span class='figure-number'>Figure 2: </span>Test System consisting of a payload with a mass \\(m\\) on top of an active system with a stiffness \\(k\\), damping \\(c\\) and an actuator. A feedback controller \\(K(s)\\) is added to position / isolate the payload." >}}
<a id="table--tab:example-notations"></a>
<div class="table-caption">
@@ -178,7 +178,7 @@ Having obtained \\(G(s)\\) and \\(G\_d(s)\\), we can transform the system shown
<a id="figure--fig:classical-feedback-test-system"></a>
{{< figure src="figs/classical_feedback_test_system.png" caption="<span class=\"figure-number\">Figure 3: </span>Block diagram corresponding to the example system of [Figure 2](#figure--fig:mech-sys-1dof-inertial-contr)" >}}
{{< figure src="figs/classical_feedback_test_system.png" caption="<span class='figure-number'>Figure 3: </span>Block diagram corresponding to the example system of [Figure 2](#figure--fig:mech-sys-1dof-inertial-contr)" >}}
Let's define the system parameters on Matlab.
@@ -199,11 +199,11 @@ The Bode plots of \\(G(s)\\) and \\(G\_d(s)\\) are shown in Figures [Figure 4](#
<a id="figure--fig:bode-plot-example-afm"></a>
{{< figure src="figs/bode_plot_example_afm.png" caption="<span class=\"figure-number\">Figure 4: </span>Bode plot of the plant \\(G(s)\\)" >}}
{{< figure src="figs/bode_plot_example_afm.png" caption="<span class='figure-number'>Figure 4: </span>Bode plot of the plant \\(G(s)\\)" >}}
<a id="figure--fig:bode-plot-example-Gd"></a>
{{< figure src="figs/bode_plot_example_Gd.png" caption="<span class=\"figure-number\">Figure 5: </span>Magnitude of the disturbance transfer function \\(G\_d(s)\\)" >}}
{{< figure src="figs/bode_plot_example_Gd.png" caption="<span class='figure-number'>Figure 5: </span>Magnitude of the disturbance transfer function \\(G\_d(s)\\)" >}}
## Classical Open Loop Shaping {#sec:open_loop_shaping}
@@ -235,7 +235,7 @@ Its name comes from the fact that this is actually the "gain around the loop".
<a id="figure--fig:open-loop-shaping"></a>
{{< figure src="figs/open_loop_shaping.png" caption="<span class=\"figure-number\">Figure 6: </span>Classical Feedback Architecture" >}}
{{< figure src="figs/open_loop_shaping.png" caption="<span class='figure-number'>Figure 6: </span>Classical Feedback Architecture" >}}
</div>
@@ -256,7 +256,7 @@ Another interesting Loop shape called "Bode Step" is described in (<a href="#cit
<a id="figure--fig:open-loop-shaping-shape"></a>
{{< figure src="figs/open_loop_shaping_shape.png" caption="<span class=\"figure-number\">Figure 7: </span>Typical Wanted Shape for the Loop Gain \\(L(s)\\)" >}}
{{< figure src="figs/open_loop_shaping_shape.png" caption="<span class='figure-number'>Figure 7: </span>Typical Wanted Shape for the Loop Gain \\(L(s)\\)" >}}
The shaping of **closed-loop** transfer functions is obviously not as simple as they don't depend linearly on \\(K(s)\\).
But this is were the \\(\mathcal{H}\_\infty\\) Synthesis will be useful!
@@ -324,7 +324,7 @@ The bode plot of the Loop Gain is shown in [Figure 8](#figure--fig:loop-gain-man
<a id="figure--fig:loop-gain-manual-afm"></a>
{{< figure src="figs/loop_gain_manual_afm.png" caption="<span class=\"figure-number\">Figure 8: </span>Bode Plot of the obtained Loop Gain \\(L(s) = G(s) K(s)\\)" >}}
{{< figure src="figs/loop_gain_manual_afm.png" caption="<span class='figure-number'>Figure 8: </span>Bode Plot of the obtained Loop Gain \\(L(s) = G(s) K(s)\\)" >}}
### \\(\mathcal{H}\_\infty\\) Loop Shaping Synthesis {#sec:h_infinity_open_loop_shaping}
@@ -396,7 +396,7 @@ The obtained Loop Gain is shown in [Figure 9](#figure--fig:open-loop-shaping-hin
<a id="figure--fig:open-loop-shaping-hinf-L"></a>
{{< figure src="figs/open_loop_shaping_hinf_L.png" caption="<span class=\"figure-number\">Figure 9: </span>Obtained Open Loop Gain \\(L(s) = G(s) K(s)\\) and comparison with the wanted Loop gain \\(L\_w\\)" >}}
{{< figure src="figs/open_loop_shaping_hinf_L.png" caption="<span class='figure-number'>Figure 9: </span>Obtained Open Loop Gain \\(L(s) = G(s) K(s)\\) and comparison with the wanted Loop gain \\(L\_w\\)" >}}
<div class="important">
@@ -414,7 +414,7 @@ Let's briefly analyze the obtained controller which bode plot is shown in [Figur
<a id="figure--fig:open-loop-shaping-hinf-K"></a>
{{< figure src="figs/open_loop_shaping_hinf_K.png" caption="<span class=\"figure-number\">Figure 10: </span>Obtained controller \\(K\\) using the open-loop \\(\mathcal{H}\_\infty\\) shaping" >}}
{{< figure src="figs/open_loop_shaping_hinf_K.png" caption="<span class='figure-number'>Figure 10: </span>Obtained controller \\(K\\) using the open-loop \\(\mathcal{H}\_\infty\\) shaping" >}}
Let's finally compare the obtained stability margins of the \\(\mathcal{H}\_\infty\\) controller and of the manually developed controller in [Table 4](#table--tab:open-loop-shaping-compare).
@@ -477,7 +477,7 @@ We can see in [Figure 11](#figure--fig:hinfinity-norm-siso-bode) that indeed, th
<a id="figure--fig:hinfinity-norm-siso-bode"></a>
{{< figure src="figs/hinfinity_norm_siso_bode.png" caption="<span class=\"figure-number\">Figure 11: </span>Example of the \\(\mathcal{H}\_\infty\\) norm of a SISO system" >}}
{{< figure src="figs/hinfinity_norm_siso_bode.png" caption="<span class='figure-number'>Figure 11: </span>Example of the \\(\mathcal{H}\_\infty\\) norm of a SISO system" >}}
</div>
@@ -533,7 +533,7 @@ A practical example about how to derive the generalized plant for a classical co
<a id="figure--fig:general-plant"></a>
{{< figure src="figs/general_plant.png" caption="<span class=\"figure-number\">Figure 12: </span>Inputs and Outputs of the generalized Plant" >}}
{{< figure src="figs/general_plant.png" caption="<span class='figure-number'>Figure 12: </span>Inputs and Outputs of the generalized Plant" >}}
<a id="table--tab:notation-general"></a>
<div class="table-caption">
@@ -569,7 +569,7 @@ The obtained controller \\(K\\) and the generalized plant are connected as shown
<a id="figure--fig:general-control-names"></a>
{{< figure src="figs/general_control_names.png" caption="<span class=\"figure-number\">Figure 13: </span>General Control Configuration" >}}
{{< figure src="figs/general_control_names.png" caption="<span class='figure-number'>Figure 13: </span>General Control Configuration" >}}
</div>
@@ -606,7 +606,7 @@ Suppose we want to design \\(K\\) using the general \\(\mathcal{H}\_\infty\\) sy
<a id="figure--fig:classical-feedback-tracking"></a>
{{< figure src="figs/classical_feedback_tracking.png" caption="<span class=\"figure-number\">Figure 14: </span>Classical Feedback Control Architecture (Tracking)" >}}
{{< figure src="figs/classical_feedback_tracking.png" caption="<span class='figure-number'>Figure 14: </span>Classical Feedback Control Architecture (Tracking)" >}}
<details><summary>Hint</summary>
@@ -628,7 +628,7 @@ The obtained generalized plant shown in [Figure 15](#figure--fig:mixed-sensitivi
<a id="figure--fig:mixed-sensitivity-ref-tracking"></a>
{{< figure src="figs/mixed_sensitivity_ref_tracking.png" caption="<span class=\"figure-number\">Figure 15: </span>Generalized plant of the Classical Feedback Control Architecture (Tracking)" >}}
{{< figure src="figs/mixed_sensitivity_ref_tracking.png" caption="<span class='figure-number'>Figure 15: </span>Generalized plant of the Classical Feedback Control Architecture (Tracking)" >}}
Using Matlab, the generalized plant can be defined as follows:
@@ -678,7 +678,7 @@ These are summarized in [Table 6](#table--tab:spec-closed-loop-tf).
<a id="figure--fig:gang-of-four-feedback"></a>
{{< figure src="figs/gang_of_four_feedback.png" caption="<span class=\"figure-number\">Figure 16: </span>Simple Feedback Architecture with \\(r\\) the reference signal, \\(\epsilon\\) the tracking error, \\(d\\) a disturbance acting at the plant input \\(u\\), \\(y\\) is the output signal and \\(n\\) the measurement noise" >}}
{{< figure src="figs/gang_of_four_feedback.png" caption="<span class='figure-number'>Figure 16: </span>Simple Feedback Architecture with \\(r\\) the reference signal, \\(\epsilon\\) the tracking error, \\(d\\) a disturbance acting at the plant input \\(u\\), \\(y\\) is the output signal and \\(n\\) the measurement noise" >}}
<a id="table--tab:spec-closed-loop-tf"></a>
<div class="table-caption">
@@ -788,11 +788,11 @@ The comparison of the sensitivity functions shapes and their effect on the step
<a id="figure--fig:sensitivity-shape-effect"></a>
{{< figure src="figs/sensitivity_shape_effect.png" caption="<span class=\"figure-number\">Figure 17: </span>Sensitivity function magnitude \\(|S(j\omega)|\\) corresponding to the reference controller \\(K\_r(s)\\) and the three modified controllers \\(K\_i(s)\\)" >}}
{{< figure src="figs/sensitivity_shape_effect.png" caption="<span class='figure-number'>Figure 17: </span>Sensitivity function magnitude \\(|S(j\omega)|\\) corresponding to the reference controller \\(K\_r(s)\\) and the three modified controllers \\(K\_i(s)\\)" >}}
<a id="figure--fig:sensitivity-shape-effect-step"></a>
{{< figure src="figs/sensitivity_shape_effect_step.png" caption="<span class=\"figure-number\">Figure 18: </span>Step response (response from \\(r\\) to \\(y\\)) for the different controllers" >}}
{{< figure src="figs/sensitivity_shape_effect_step.png" caption="<span class='figure-number'>Figure 18: </span>Step response (response from \\(r\\) to \\(y\\)) for the different controllers" >}}
<div class="definition">
@@ -815,7 +815,7 @@ From the simple analysis above, we can draw a first estimation of the wanted sha
<a id="figure--fig:h-infinity-spec-S"></a>
{{< figure src="figs/h-infinity-spec-S.png" caption="<span class=\"figure-number\">Figure 19: </span>Typical wanted shape of the Sensitivity transfer function" >}}
{{< figure src="figs/h-infinity-spec-S.png" caption="<span class='figure-number'>Figure 19: </span>Typical wanted shape of the Sensitivity transfer function" >}}
</div>
@@ -854,7 +854,7 @@ Or does it? Let's find out.
<a id="figure--fig:phase-gain-margin-model-plant"></a>
{{< figure src="figs/phase_gain_margin_model_plant.png" caption="<span class=\"figure-number\">Figure 20: </span>Bode plot of the obtained Loop Gain \\(L(s)\\)" >}}
{{< figure src="figs/phase_gain_margin_model_plant.png" caption="<span class='figure-number'>Figure 20: </span>Bode plot of the obtained Loop Gain \\(L(s)\\)" >}}
Now let's suppose the controller is implemented in practice, and the "real" plant \\(G\_r(s)\\) as a slightly lower damping factor than the one estimated for the model:
@@ -877,7 +877,7 @@ isstable(feedback(Gr,Kt))
<a id="figure--fig:phase-gain-margin-real-plant"></a>
{{< figure src="figs/phase_gain_margin_real_plant.png" caption="<span class=\"figure-number\">Figure 21: </span>Bode plots of \\(L(s)\\) (loop gain corresponding the nominal plant) and \\(L\_r(s)\\) (loop gain corresponding to the real plant)" >}}
{{< figure src="figs/phase_gain_margin_real_plant.png" caption="<span class='figure-number'>Figure 21: </span>Bode plots of \\(L(s)\\) (loop gain corresponding the nominal plant) and \\(L\_r(s)\\) (loop gain corresponding to the real plant)" >}}
Therefore, even a small change of the plant parameter renders the system unstable even though both the gain margin and the phase margin for the nominal plant are excellent.
@@ -921,7 +921,7 @@ The gain, phase and module margins are graphically shown to have an idea of what
<a id="figure--fig:module-margin-example"></a>
{{< figure src="figs/module_margin_example.png" caption="<span class=\"figure-number\">Figure 22: </span>Nyquist plot with visual indication of the Gain margin \\(\Delta G\\), Phase margin \\(\Delta \phi\\) and Module margin \\(\Delta M\\)" >}}
{{< figure src="figs/module_margin_example.png" caption="<span class='figure-number'>Figure 22: </span>Nyquist plot with visual indication of the Gain margin \\(\Delta G\\), Phase margin \\(\Delta \phi\\) and Module margin \\(\Delta M\\)" >}}
</div>
@@ -1024,7 +1024,7 @@ Clearly this does not allow to **shape** the norm of \\(S(j\omega)\\) over all f
<a id="figure--fig:loop-shaping-S-without-W"></a>
{{< figure src="figs/loop_shaping_S_without_W.png" caption="<span class=\"figure-number\">Figure 23: </span>Generalized Plant" >}}
{{< figure src="figs/loop_shaping_S_without_W.png" caption="<span class='figure-number'>Figure 23: </span>Generalized Plant" >}}
<div class="important">
@@ -1052,7 +1052,7 @@ Therefore, the choice of the weighting function \\(W\_s(s)\\) is very important:
<a id="figure--fig:loop-shaping-S-with-W"></a>
{{< figure src="figs/loop_shaping_S_with_W.png" caption="<span class=\"figure-number\">Figure 24: </span>Weighted Generalized Plant" >}}
{{< figure src="figs/loop_shaping_S_with_W.png" caption="<span class='figure-number'>Figure 24: </span>Weighted Generalized Plant" >}}
<div class="exercice">
@@ -1136,7 +1136,7 @@ Ws = makeweight(1e2, [2*pi*10, 1], 1/2);
<a id="figure--fig:first-order-weight"></a>
{{< figure src="figs/first_order_weight.png" caption="<span class=\"figure-number\">Figure 25: </span>Obtained Magnitude of the Weighting Function" >}}
{{< figure src="figs/first_order_weight.png" caption="<span class='figure-number'>Figure 25: </span>Obtained Magnitude of the Weighting Function" >}}
</div>
@@ -1198,7 +1198,7 @@ The obtained shapes are shown in [Figure 26](#figure--fig:high-order-weight).
<a id="figure--fig:high-order-weight"></a>
{{< figure src="figs/high_order_weight.png" caption="<span class=\"figure-number\">Figure 26: </span>Higher order weights using Equation " >}}
{{< figure src="figs/high_order_weight.png" caption="<span class='figure-number'>Figure 26: </span>Higher order weights using Equation " >}}
</div>
@@ -1232,7 +1232,7 @@ Remember that the wanted upper bound of the sensitivity function is defined by t
<a id="figure--fig:h-infinity-spec-S-bis"></a>
{{< figure src="figs/h-infinity-spec-S.png" caption="<span class=\"figure-number\">Figure 27: </span>Typical wanted shape of the Sensitivity transfer function" >}}
{{< figure src="figs/h-infinity-spec-S.png" caption="<span class='figure-number'>Figure 27: </span>Typical wanted shape of the Sensitivity transfer function" >}}
</details>
@@ -1287,15 +1287,15 @@ K = hinfsyn(Pw, 1, 1, 'Display', 'on');
```
```text
Test bounds: 0.5 <= gamma <= 0.51
Test bounds: 0.5 <= gamma <= 0.51
gamma X>=0 Y>=0 rho(XY)<1 p/f
5.05e-01 0.0e+00 0.0e+00 3.000e-16 p
Limiting gains...
5.05e-01 0.0e+00 0.0e+00 3.461e-16 p
5.05e-01 -3.5e+01 # -4.9e-14 1.732e-26 f
gamma X>=0 Y>=0 rho(XY)<1 p/f
5.05e-01 0.0e+00 0.0e+00 3.000e-16 p
Limiting gains...
5.05e-01 0.0e+00 0.0e+00 3.461e-16 p
5.05e-01 -3.5e+01 # -4.9e-14 1.732e-26 f
Best performance (actual): 0.503
Best performance (actual): 0.503
```
\\(\gamma \approx 0.5\\) means that the \\(\mathcal{H}\_\infty\\) synthesis generated a controller \\(K(s)\\) that stabilizes the closed-loop system, and such that the \\(\mathcal{H}\_\infty\\) norm of the closed-loop transfer function from \\(w\\) to \\(z\\) is less than \\(\gamma\\):
@@ -1318,7 +1318,7 @@ It just means that at some frequency, one of the closed-loop transfer functions
<a id="figure--fig:results-sensitivity-hinf"></a>
{{< figure src="figs/results_sensitivity_hinf.png" caption="<span class=\"figure-number\">Figure 28: </span>Weighting function and obtained closed-loop sensitivity" >}}
{{< figure src="figs/results_sensitivity_hinf.png" caption="<span class='figure-number'>Figure 28: </span>Weighting function and obtained closed-loop sensitivity" >}}
### Shaping multiple closed-loop transfer functions - Limitations {#sec:shaping_multiple_tf}
@@ -1359,7 +1359,7 @@ Some of them are described below for reference, it is a good exercise to try to
<a id="figure--fig:general-conf-shaping-S-KS"></a>
{{< figure src="figs/general_conf_shaping_S_KS.png" caption="<span class=\"figure-number\">Figure 29: </span>Generalized Plant to shape \\(S\\) and \\(KS\\)" >}}
{{< figure src="figs/general_conf_shaping_S_KS.png" caption="<span class='figure-number'>Figure 29: </span>Generalized Plant to shape \\(S\\) and \\(KS\\)" >}}
Weighting functions:
@@ -1381,7 +1381,7 @@ Pw = blkdiag(W1, W2, 1)*P;
<a id="figure--fig:general-conf-shaping-S-T"></a>
{{< figure src="figs/general_conf_shaping_S_T.png" caption="<span class=\"figure-number\">Figure 30: </span>Generalized Plant to shape \\(S\\) and \\(T\\)" >}}
{{< figure src="figs/general_conf_shaping_S_T.png" caption="<span class='figure-number'>Figure 30: </span>Generalized Plant to shape \\(S\\) and \\(T\\)" >}}
Weighting functions:
@@ -1403,7 +1403,7 @@ Pw = blkdiag(W1, W2, 1)*P;
<a id="figure--fig:general-conf-shaping-S-GS"></a>
{{< figure src="figs/general_conf_shaping_S_GS.png" caption="<span class=\"figure-number\">Figure 31: </span>Generalized Plant to shape \\(S\\) and \\(GS\\)" >}}
{{< figure src="figs/general_conf_shaping_S_GS.png" caption="<span class='figure-number'>Figure 31: </span>Generalized Plant to shape \\(S\\) and \\(GS\\)" >}}
Weighting functions:
@@ -1425,7 +1425,7 @@ Pw = blkdiag(W1, W2, 1)*P;
<a id="figure--fig:general-conf-shaping-S-T-KS"></a>
{{< figure src="figs/general_conf_shaping_S_T_KS.png" caption="<span class=\"figure-number\">Figure 32: </span>Generalized Plant to shape \\(S\\), \\(T\\) and \\(KS\\)" >}}
{{< figure src="figs/general_conf_shaping_S_T_KS.png" caption="<span class='figure-number'>Figure 32: </span>Generalized Plant to shape \\(S\\), \\(T\\) and \\(KS\\)" >}}
Weighting functions:
@@ -1449,7 +1449,7 @@ Pw = blkdiag(W1, W2, W3, 1)*P;
<a id="figure--fig:general-conf-shaping-S-T-GS"></a>
{{< figure src="figs/general_conf_shaping_S_T_GS.png" caption="<span class=\"figure-number\">Figure 33: </span>Generalized Plant to shape \\(S\\), \\(T\\) and \\(GS\\)" >}}
{{< figure src="figs/general_conf_shaping_S_T_GS.png" caption="<span class='figure-number'>Figure 33: </span>Generalized Plant to shape \\(S\\), \\(T\\) and \\(GS\\)" >}}
Weighting functions:
@@ -1473,7 +1473,7 @@ Pw = blkdiag(W1, W2, W3, 1)*P;
<a id="figure--fig:general-conf-shaping-S-T-KS-GS"></a>
{{< figure src="figs/general_conf_shaping_S_T_KS_GS.png" caption="<span class=\"figure-number\">Figure 34: </span>Generalized Plant to shape \\(S\\), \\(T\\), \\(KS\\) and \\(GS\\)" >}}
{{< figure src="figs/general_conf_shaping_S_T_KS_GS.png" caption="<span class='figure-number'>Figure 34: </span>Generalized Plant to shape \\(S\\), \\(T\\), \\(KS\\) and \\(GS\\)" >}}
Weighting functions:
@@ -1563,7 +1563,7 @@ These regions are summarized in [Figure 35](#figure--fig:h-infinity-4-blocs-cons
<a id="figure--fig:h-infinity-4-blocs-constrains"></a>
{{< figure src="figs/h-infinity-4-blocs-constrains.png" caption="<span class=\"figure-number\">Figure 35: </span>Shaping the Gang of Four. Blue regions indicate that the transfer function can be shaped using \\(K\\). Red regions indicate this is not the case" >}}
{{< figure src="figs/h-infinity-4-blocs-constrains.png" caption="<span class='figure-number'>Figure 35: </span>Shaping the Gang of Four. Blue regions indicate that the transfer function can be shaped using \\(K\\). Red regions indicate this is not the case" >}}
<div class="warning">
@@ -1597,7 +1597,7 @@ Let's consider our usual _test system_ shown in [Figure 36](#figure--fig:ex-test
<a id="figure--fig:ex-test-system"></a>
{{< figure src="figs/ex_test_system.png" caption="<span class=\"figure-number\">Figure 36: </span>Test System consisting of a payload with a mass \\(m\\) on top of an active system with a stiffness \\(k\\), damping \\(c\\) and an actuator. A feedback controller \\(K(s)\\) is added to position / isolate the payload." >}}
{{< figure src="figs/ex_test_system.png" caption="<span class='figure-number'>Figure 36: </span>Test System consisting of a payload with a mass \\(m\\) on top of an active system with a stiffness \\(k\\), damping \\(c\\) and an actuator. A feedback controller \\(K(s)\\) is added to position / isolate the payload." >}}
<div class="important">
@@ -1631,7 +1631,7 @@ Let's first convert the system of [Figure 36](#figure--fig:ex-test-system) into
<a id="figure--fig:classical-feedback-test-system-bis"></a>
{{< figure src="figs/ex_test_system_feedback.png" caption="<span class=\"figure-number\">Figure 37: </span>Block diagram corresponding to the example system" >}}
{{< figure src="figs/ex_test_system_feedback.png" caption="<span class='figure-number'>Figure 37: </span>Block diagram corresponding to the example system" >}}
The two transfer functions present in the system are derived and defined below:
@@ -1671,13 +1671,13 @@ d(t>0.3) = 5e-6;
<a id="figure--fig:ex-inputs-signals"></a>
{{< figure src="figs/ex_inputs_signals.png" caption="<span class=\"figure-number\">Figure 38: </span>Time domain inputs signals" >}}
{{< figure src="figs/ex_inputs_signals.png" caption="<span class='figure-number'>Figure 38: </span>Time domain inputs signals" >}}
We also define the generalized plant corresponding to the system and that will be used for time domain simulations ([Figure 39](#figure--fig:ex-general-plant-sim)).
<a id="figure--fig:ex-general-plant-sim"></a>
{{< figure src="figs/ex_general_plant_sim.png" caption="<span class=\"figure-number\">Figure 39: </span>Generalized plant that will be used for simulations" >}}
{{< figure src="figs/ex_general_plant_sim.png" caption="<span class='figure-number'>Figure 39: </span>Generalized plant that will be used for simulations" >}}
The Generalized plant of [Figure 39](#figure--fig:ex-general-plant-sim) is defined on Matlab as follows:
@@ -1754,7 +1754,7 @@ P = [1 -1
<a id="figure--fig:ex-general-plant"></a>
{{< figure src="figs/ex_general_plant.png" caption="<span class=\"figure-number\">Figure 40: </span>Generalized plant chosen for the shaping of \\(S\\), \\(GS\\) \\(T\\)" >}}
{{< figure src="figs/ex_general_plant.png" caption="<span class='figure-number'>Figure 40: </span>Generalized plant chosen for the shaping of \\(S\\), \\(GS\\) \\(T\\)" >}}
However, to performed the \\(\mathcal{H}\_\infty\\) loop shaping, we have to include **weighting function** to the Generalized plant.
We obtain the **weighted generalized plant** in [Figure 41](#figure--fig:ex-general-weighted-plant), and that is computed using Matlab as follows:
@@ -1765,7 +1765,7 @@ Pw = blkdiag(W1, W2, W3, 1)*P;
<a id="figure--fig:ex-general-weighted-plant"></a>
{{< figure src="figs/ex_general_weighted_plant.png" caption="<span class=\"figure-number\">Figure 41: </span>Generalized weighted plant used for the \\(\mathcal{H}\_\infty\\) Synthesis" >}}
{{< figure src="figs/ex_general_weighted_plant.png" caption="<span class='figure-number'>Figure 41: </span>Generalized weighted plant used for the \\(\mathcal{H}\_\infty\\) Synthesis" >}}
Finlay, performing the \\(\mathcal{H}\_\infty\\) Shaping of \\(S\\), \\(GS\\) and \\(T\\) is as simple as ruining the `hinfsyn` command:
@@ -1813,19 +1813,19 @@ K1 = hinfsyn(Pw, 1, 1, 'Display', 'on');
```
```text
Test bounds: 0.5 <= gamma <= 0.51
Test bounds: 0.5 <= gamma <= 0.51
gamma X>=0 Y>=0 rho(XY)<1 p/f
5.05e-01 0.0e+00 0.0e+00 5.511e-14 p
Limiting gains...
5.05e-01 0.0e+00 0.0e+00 1.867e-14 p
gamma X>=0 Y>=0 rho(XY)<1 p/f
5.05e-01 0.0e+00 0.0e+00 5.511e-14 p
Limiting gains...
5.05e-01 0.0e+00 0.0e+00 1.867e-14 p
Best performance (actual): 0.502
Best performance (actual): 0.502
```
<a id="figure--fig:ex-results-1"></a>
{{< figure src="figs/ex_results_1.png" caption="<span class=\"figure-number\">Figure 42: </span>Obtained Shape Closed-Loop transfer functions (dashed black lines indicate inverse magnitude of the weighting functions)" >}}
{{< figure src="figs/ex_results_1.png" caption="<span class='figure-number'>Figure 42: </span>Obtained Shape Closed-Loop transfer functions (dashed black lines indicate inverse magnitude of the weighting functions)" >}}
Time domain simulation is then performed and the obtained output displacement and control inputs are shown in [Figure 43](#figure--fig:ex-time-domain-1).
@@ -1837,7 +1837,7 @@ We can see:
<a id="figure--fig:ex-time-domain-1"></a>
{{< figure src="figs/ex_time_domain_1.png" caption="<span class=\"figure-number\">Figure 43: </span>Time domain simulation results" >}}
{{< figure src="figs/ex_time_domain_1.png" caption="<span class='figure-number'>Figure 43: </span>Time domain simulation results" >}}
Remember that in order to follow ramp inputs, the sensitivity function should have a slope of +40dB/dec at low frequency ([Table 9](#table--tab:usual-shaping-gang-four)).
@@ -1857,11 +1857,11 @@ The time domain signals are shown in [Figure 45](#figure--fig:ex-time-domain-1b)
<a id="figure--fig:ex-results-1b"></a>
{{< figure src="figs/ex_results_1b.png" caption="<span class=\"figure-number\">Figure 44: </span>Obtained Shape Closed-Loop transfer functions" >}}
{{< figure src="figs/ex_results_1b.png" caption="<span class='figure-number'>Figure 44: </span>Obtained Shape Closed-Loop transfer functions" >}}
<a id="figure--fig:ex-time-domain-1b"></a>
{{< figure src="figs/ex_time_domain_1b.png" caption="<span class=\"figure-number\">Figure 45: </span>Time domain simulation results" >}}
{{< figure src="figs/ex_time_domain_1b.png" caption="<span class='figure-number'>Figure 45: </span>Time domain simulation results" >}}
### Step 2 - Shaping of \\(GS\\) {#sec:ex_shaping_GS}
@@ -1882,14 +1882,14 @@ The \\(\mathcal{H}\_\infty\\) Synthesis is performed and the obtained closed-loo
<a id="figure--fig:ex-results-2"></a>
{{< figure src="figs/ex_results_2.png" caption="<span class=\"figure-number\">Figure 46: </span>Obtained Shape Closed-Loop transfer functions" >}}
{{< figure src="figs/ex_results_2.png" caption="<span class='figure-number'>Figure 46: </span>Obtained Shape Closed-Loop transfer functions" >}}
Time domain simulation results are shown in [Figure 47](#figure--fig:ex-time-domain-2).
If is shown that indeed, the disturbance rejection performance are much better and only very small oscillation is obtained.
<a id="figure--fig:ex-time-domain-2"></a>
{{< figure src="figs/ex_time_domain_2.png" caption="<span class=\"figure-number\">Figure 47: </span>Time domain simulation results" >}}
{{< figure src="figs/ex_time_domain_2.png" caption="<span class='figure-number'>Figure 47: </span>Time domain simulation results" >}}
### Step 3 - Shaping of \\(T\\) {#sec:ex_shaping_T}
@@ -1918,7 +1918,7 @@ The obtained closed-loop transfer functions are shown in [Figure 48](#figure--fi
<a id="figure--fig:ex-results-3"></a>
{{< figure src="figs/ex_results_3.png" caption="<span class=\"figure-number\">Figure 48: </span>Obtained Shape Closed-Loop transfer functions" >}}
{{< figure src="figs/ex_results_3.png" caption="<span class='figure-number'>Figure 48: </span>Obtained Shape Closed-Loop transfer functions" >}}
The time domain simulation signals are shown in [Figure 49](#figure--fig:ex-time-domain-3).
We can indeed see a slightly less good disturbance rejection.
@@ -1927,11 +1927,11 @@ This can be seen when zooming on the output signal in [Figure 50](#figure--fig:e
<a id="figure--fig:ex-time-domain-3"></a>
{{< figure src="figs/ex_time_domain_3.png" caption="<span class=\"figure-number\">Figure 49: </span>Time domain simulation results" >}}
{{< figure src="figs/ex_time_domain_3.png" caption="<span class='figure-number'>Figure 49: </span>Time domain simulation results" >}}
<a id="figure--fig:ex-time-domaim-3-zoom"></a>
{{< figure src="figs/ex_time_domaim_3_zoom.png" caption="<span class=\"figure-number\">Figure 50: </span>Zoom on the output signal" >}}
{{< figure src="figs/ex_time_domaim_3_zoom.png" caption="<span class='figure-number'>Figure 50: </span>Zoom on the output signal" >}}
### Conclusion and Discussion {#conclusion-and-discussion}
@@ -11,9 +11,9 @@ One use of complementary filter is described below:
> The basic idea of a complementary filter involves taking two or more sensors, filtering out unreliable frequencies for each sensor, and combining the filtered outputs to get a better estimate throughout the entire bandwidth of the system.
> To achieve this, the sensors included in the filter should complement one another by performing better over specific parts of the system bandwidth.
- in section , the \\(\mathcal{H}\_\infty\\) synthesis is used for generating two complementary filters
- in section , a method using the \\(\mathcal{H}\_\infty\\) synthesis is proposed to shape three of more complementary filters
- in section , the \\(\mathcal{H}\_\infty\\) synthesis is used and compared with FIR complementary filters used for LIGO
- in section [H-Infinity synthesis of complementary filters](#sec:h_inf_synthesis_complementary_filters), the \\(\mathcal{H}\_\infty\\) synthesis is used for generating two complementary filters
- in section [Generating 3 complementary filters](#sec:three_comp_filters), a method using the \\(\mathcal{H}\_\infty\\) synthesis is proposed to shape three of more complementary filters
- in section [Try to implement complementary filters for LIGO](#sec:comp_filters_ligo), the \\(\mathcal{H}\_\infty\\) synthesis is used and compared with FIR complementary filters used for LIGO
<div class="note">
@@ -22,9 +22,7 @@ Add the Matlab code use to obtain the results presented in the paper are accessi
</div>
## H-Infinity synthesis of complementary filters {#h-infinity-synthesis-of-complementary-filters}
<span class="org-target" id="org-target--sec-h-inf-synthesis-complementary-filters"></span>
## H-Infinity synthesis of complementary filters {#sec:h_inf_synthesis_complementary_filters}
<div class="note">
@@ -38,13 +36,13 @@ The Matlab file corresponding to this section is accessible [here](https://git.t
We here synthesize two complementary filters using the \\(\mathcal{H}\_\infty\\) synthesis.
The goal is to specify upper bounds on the norms of the two complementary filters \\(H\_1(s)\\) and \\(H\_2(s)\\) while ensuring their complementary property (\\(H\_1(s) + H\_2(s) = 1\\)).
In order to do so, we use the generalized plant shown on figure [Figure 1](#figure--fig:h-infinity-robst-fusion) where \\(W\_1(s)\\) and \\(W\_2(s)\\) are weighting transfer functions that will be used to shape \\(H\_1(s)\\) and \\(H\_2(s)\\) respectively.
In order to do so, we use the generalized plant shown on [Figure 1](#figure--fig:h-infinity-robst-fusion) where \\(W\_1(s)\\) and \\(W\_2(s)\\) are weighting transfer functions that will be used to shape \\(H\_1(s)\\) and \\(H\_2(s)\\) respectively.
<a id="figure--fig:h-infinity-robst-fusion"></a>
{{< figure src="h_infinity_robust_fusion.png" caption="<span class='figure-number'>Figure 1: </span>\\(\mathcal{H}\_\infty\\) synthesis of the complementary filters" >}}
The \\(\mathcal{H}\_\infty\\) synthesis applied on this generalized plant will give a transfer function \\(H\_2\\) (figure [Figure 1](#figure--fig:h-infinity-robst-fusion)) such that the \\(\mathcal{H}\_\infty\\) norm of the transfer function from \\(w\\) to \\([z\_1,\ z\_2]\\) is less than one:
The \\(\mathcal{H}\_\infty\\) synthesis applied on this generalized plant will give a transfer function \\(H\_2\\) ([Figure 1](#figure--fig:h-infinity-robst-fusion)) such that the \\(\mathcal{H}\_\infty\\) norm of the transfer function from \\(w\\) to \\([z\_1,\ z\_2]\\) is less than one:
\\[ \left\\| \begin{array}{c} (1 - H\_2(s)) W\_1(s) \\\ H\_2(s) W\_2(s) \end{array} \right\\|\_\infty < 1 \\]
Thus, if the above condition is verified, we can define \\(H\_1(s) = 1 - H\_2(s)\\) and we have that:
@@ -78,7 +76,7 @@ The parameters permits to specify:
- the absolute gain at \\(\omega\_0\\): \\(G\_c = |W(j\omega\_0)|\\)
- the absolute slope between high and low frequency: \\(n\\)
The general shape of a weighting function generated using the formula is shown in figure [Figure 2](#figure--fig:weight-formula).
The general shape of a weighting function generated using the formula is shown in [Figure 2](#figure--fig:weight-formula).
<a id="figure--fig:weight-formula"></a>
@@ -146,7 +144,7 @@ Test bounds: 0.1000 < gamma <= 1050.0000
Gamma value achieved: 1.0036
```
We then define the high pass filter \\(H\_1 = 1 - H\_2\\). The bode plot of both \\(H\_1\\) and \\(H\_2\\) is shown on figure [Figure 4](#figure--fig:hinf-filters-results).
We then define the high pass filter \\(H\_1 = 1 - H\_2\\). The bode plot of both \\(H\_1\\) and \\(H\_2\\) is shown on [Figure 4](#figure--fig:hinf-filters-results).
```matlab
H1 = 1 - H2;
@@ -155,16 +153,14 @@ We then define the high pass filter \\(H\_1 = 1 - H\_2\\). The bode plot of both
### Obtained Complementary Filters {#obtained-complementary-filters}
The obtained complementary filters are shown on figure [Figure 4](#figure--fig:hinf-filters-results).
The obtained complementary filters are shown on [Figure 4](#figure--fig:hinf-filters-results).
<a id="figure--fig:hinf-filters-results"></a>
{{< figure src="figs/hinf_filters_results.png" caption="<span class='figure-number'>Figure 4: </span>Obtained complementary filters using \\(\mathcal{H}\_\infty\\) synthesis" >}}
## Generating 3 complementary filters {#generating-3-complementary-filters}
<span class="org-target" id="org-target--sec-three-comp-filters"></span>
## Generating 3 complementary filters {#sec:three_comp_filters}
<div class="note">
@@ -184,7 +180,7 @@ We want:
& H\_1(s) + H\_2(s) + H\_3(s) = 1
\end{align\*}
For that, we use the \\(\mathcal{H}\_\infty\\) synthesis with the architecture shown on figure [Figure 5](#figure--fig:comp-filter-three-hinf).
For that, we use the \\(\mathcal{H}\_\infty\\) synthesis with the architecture shown on [Figure 5](#figure--fig:comp-filter-three-hinf).
<a id="figure--fig:comp-filter-three-hinf"></a>
@@ -286,9 +282,7 @@ The obtained filters are:
{{< figure src="figs/three_complementary_filters_results.png" caption="<span class='figure-number'>Figure 7: </span>The three complementary filters obtained after \\(\mathcal{H}\_\infty\\) synthesis" >}}
## Try to implement complementary filters for LIGO {#try-to-implement-complementary-filters-for-ligo}
<span class="org-target" id="org-target--sec-comp-filters-ligo"></span>
## Try to implement complementary filters for LIGO {#sec:comp_filters_ligo}
<div class="note">
@@ -310,7 +304,7 @@ The specifications for the filters are:
3. Between \\(0.04\text{ Hz}\\) and \\(0.1\text{ Hz}\\), the magnitude of the transfer function should be less than 3
4. Above \\(0.1\text{ Hz}\\), the maximum of the magnitude of the complement filter should be as close to zero as possible. In our system, we would like to have the magnitude of the complementary filter to be less than \\(0.1\\). As the filters obtained in (<a href="#citeproc_bib_item_1">Hua 2005</a>) have a magnitude of \\(0.045\\), we will set that as our requirement
The specifications are translated in upper bounds of the complementary filters are shown on figure [Figure 8](#figure--fig:ligo-specifications).
The specifications are translated in upper bounds of the complementary filters are shown on [Figure 8](#figure--fig:ligo-specifications).
<a id="figure--fig:ligo-specifications"></a>
@@ -463,7 +457,7 @@ Optimal value (cvx_optval): -0.0433341
h = y(2:end);
```
Finally, we compute the filter response over the frequency vector defined and the result is shown on figure [Figure 9](#figure--fig:fir-filter-ligo) which is very close to the filters obtain in (<a href="#citeproc_bib_item_1">Hua 2005</a>).
Finally, we compute the filter response over the frequency vector defined and the result is shown on [Figure 9](#figure--fig:fir-filter-ligo) which is very close to the filters obtain in (<a href="#citeproc_bib_item_1">Hua 2005</a>).
```matlab
w = [w1 w2 w3 w4];
@@ -485,7 +479,7 @@ Here are the requirements on the filters:
- to be as close as possible to the specified upper bounds
- stable minimum phase
The bode plot of the weights is shown on figure [Figure 10](#figure--fig:ligo-weights).
The bode plot of the weights is shown on [Figure 10](#figure--fig:ligo-weights).
<a id="figure--fig:ligo-weights"></a>
@@ -494,7 +488,7 @@ The bode plot of the weights is shown on figure [Figure 10](#figure--fig:ligo-we
### H-Infinity Synthesis {#h-infinity-synthesis}
We define the generalized plant as shown on figure [Figure 1](#figure--fig:h-infinity-robst-fusion).
We define the generalized plant as shown on [Figure 1](#figure--fig:h-infinity-robst-fusion).
```matlab
P = [0 wL;
@@ -544,7 +538,7 @@ The size of the filters is shown below.
State-space model with 1 outputs, 1 inputs, and 27 states.
```
The bode plot of the obtained filters as shown on figure [Figure 11](#figure--fig:hinf-synthesis-ligo-results).
The bode plot of the obtained filters as shown on [Figure 11](#figure--fig:hinf-synthesis-ligo-results).
<a id="figure--fig:hinf-synthesis-ligo-results"></a>
@@ -553,7 +547,7 @@ The bode plot of the obtained filters as shown on figure [Figure 11](#figure--fi
### Compare FIR and H-Infinity Filters {#compare-fir-and-h-infinity-filters}
Let's now compare the FIR filters designed in (<a href="#citeproc_bib_item_1">Hua 2005</a>) and the one obtained with the \\(\mathcal{H}\_\infty\\) synthesis on figure [Figure 12](#figure--fig:comp-fir-ligo-hinf).
Let's now compare the FIR filters designed in (<a href="#citeproc_bib_item_1">Hua 2005</a>) and the one obtained with the \\(\mathcal{H}\_\infty\\) synthesis on [Figure 12](#figure--fig:comp-fir-ligo-hinf).
<a id="figure--fig:comp-fir-ligo-hinf"></a>
@@ -4,20 +4,16 @@ author = ["Dehaeze Thomas"]
draft = false
+++
<hr>
<p>This report is also available as a <a href="./index.pdf">pdf</a>.</p>
<hr>
This document gathers the Matlab code used to for the conference paper (<a href="#citeproc_bib_item_1">Dehaeze and Collette 2020</a>) and the journal paper (<a href="#citeproc_bib_item_3">Dehaeze and Collette 2021</a>).
It is structured in several sections:
- Section : presents a simple model of a rotating suspended platform that will be used throughout this study.
- Section : explains how the unconditional stability of IFF is lost due to Gyroscopic effects induced by the rotation.
- Section : suggests a simple modification of the control law such that damping can be added to the suspension modes in a robust way.
- Section : proposes to add springs in parallel with the force sensors to regain the unconditional stability of IFF.
- Section : compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior.
- Section : contains the notations used for both the Matlab code and the paper
- Section [System Description and Analysis](#sec:system_description): presents a simple model of a rotating suspended platform that will be used throughout this study.
- Section [Problem with pure Integral Force Feedback](#sec:iff_pure_int): explains how the unconditional stability of IFF is lost due to Gyroscopic effects induced by the rotation.
- Section [Integral Force Feedback with an High Pass Filter](#sec:iff_pseudo_int): suggests a simple modification of the control law such that damping can be added to the suspension modes in a robust way.
- Section [IFF with a stiffness in parallel with the force sensor](#sec:iff_parallel_stiffness): proposes to add springs in parallel with the force sensors to regain the unconditional stability of IFF.
- Section [Comparison](#sec:comparison): compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior.
- Section [Notations](#sec:notations): contains the notations used for both the Matlab code and the paper
The matlab code is accessible on [Zonodo](https://zenodo.org/record/3894343) and [Github](https://github.com/tdehaeze/dehaeze20_contr_stewa_platf) (<a href="#citeproc_bib_item_2">Dehaeze 2020</a>). It can also be download as a `.zip` file [here](https://git.tdehaeze.xyz/tdehaeze/dehaeze20_activ_dampin_rotat_platf_integ_force_feedb/archive/master.zip).
@@ -28,23 +24,21 @@ To run the Matlab code, go in the `matlab` directory and run the following Matla
Paper's sections and corresponding Matlab files
</div>
| Sections | Matlab File |
|----------|----------------------------|
| Section | `s1_system_description.m` |
| Section | `s2_iff_pure_int.m` |
| Section | `s3_iff_hpf.m` |
| Section | `s4_iff_kp.m` |
| Section | `s5_act_damp_comparison.m` |
| Sections | Matlab File |
|-----------------------------------------------------------------------------------------------|----------------------------|
| Section [System Description and Analysis](#sec:system_description) | `s1_system_description.m` |
| Section [Problem with pure Integral Force Feedback](#sec:iff_pure_int) | `s2_iff_pure_int.m` |
| Section [Integral Force Feedback with an High Pass Filter](#sec:iff_pseudo_int) | `s3_iff_hpf.m` |
| Section [IFF with a stiffness in parallel with the force sensor](#sec:iff_parallel_stiffness) | `s4_iff_kp.m` |
| Section [Comparison](#sec:comparison) | `s5_act_damp_comparison.m` |
## System Description and Analysis {#system-description-and-analysis}
<span class="org-target" id="org-target--sec-system-description"></span>
## System Description and Analysis {#sec:system_description}
### System description {#system-description}
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure [Figure 1](#figure--fig:system)).
The system consists of one 2 degree of freedom translation stage on top of a spindle ([Figure 1](#figure--fig:system)).
<a id="figure--fig:system"></a>
@@ -56,7 +50,7 @@ As the translation stage is rotating around the Z axis due to the spindle, the f
### Equations {#equations}
Based on the Figure [Figure 1](#figure--fig:system), the equations of motions are:
Based on the [Figure 1](#figure--fig:system), the equations of motions are:
<div class="important">
@@ -161,7 +155,7 @@ The same transfer function from \\([F\_u, F\_v]\\) to \\([d\_u, d\_v]\\) is writ
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
```
Both transfer functions are compared in Figure [Figure 4](#figure--fig:plant-simscape-analytical) and are found to perfectly match.
Both transfer functions are compared in [Figure 4](#figure--fig:plant-simscape-analytical) and are found to perfectly match.
<a id="figure--fig:plant-simscape-analytical"></a>
@@ -199,11 +193,9 @@ They are compared in Figures [Figure 5](#figure--fig:plant-compare-rotating-spee
{{< figure src="figs/plant_compare_rotating_speed_coupling.png" caption="<span class='figure-number'>Figure 6: </span>Comparison of the transfer functions from \\([F\_u, F\_v]\\) to \\([d\_u, d\_v]\\) for several rotating speed - Coupling Terms" >}}
## Problem with pure Integral Force Feedback {#problem-with-pure-integral-force-feedback}
## Problem with pure Integral Force Feedback {#sec:iff_pure_int}
<span class="org-target" id="org-target--sec-iff-pure-int"></span>
Force sensors are added in series with the two actuators (Figure [Figure 7](#figure--fig:system-iff)).
Force sensors are added in series with the two actuators ([Figure 7](#figure--fig:system-iff)).
Two identical controllers \\(K\_F\\) are used to feedback each of the sensed force to its associated actuator.
@@ -311,7 +303,7 @@ The same transfer function from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\\) is writ
(2*xi*s/w0 + 1)*2*W*s/(w0^2), (s^2/w0^2 - W^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))+ (2*W*s/(w0^2))^2];
```
The two are compared in Figure [Figure 8](#figure--fig:plant-iff-comp-simscape-analytical) and found to perfectly match.
The two are compared in [Figure 8](#figure--fig:plant-iff-comp-simscape-analytical) and found to perfectly match.
<a id="figure--fig:plant-iff-comp-simscape-analytical"></a>
@@ -338,7 +330,7 @@ The transfer functions from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\\) are identif
end
```
The obtained transfer functions are shown in Figure [Figure 9](#figure--fig:plant-iff-compare-rotating-speed).
The obtained transfer functions are shown in [Figure 9](#figure--fig:plant-iff-compare-rotating-speed).
<a id="figure--fig:plant-iff-compare-rotating-speed"></a>
@@ -356,7 +348,7 @@ The decentralized IFF controller consists of pure integrators:
\end{bmatrix}
\end{equation}
The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \\(g\\)) is shown in Figure [Figure 10](#figure--fig:root-locus-pure-iff).
The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \\(g\\)) is shown in [Figure 10](#figure--fig:root-locus-pure-iff).
It is shown that for non-null rotating speed, one pole is bound to the right-half plane, and thus the closed loop system is unstable.
<a id="figure--fig:root-locus-pure-iff"></a>
@@ -364,9 +356,7 @@ It is shown that for non-null rotating speed, one pole is bound to the right-hal
{{< figure src="figs/root_locus_pure_iff.png" caption="<span class='figure-number'>Figure 10: </span>Root Locus for the Decentralized Integral Force Feedback controller. Several rotating speed are shown." >}}
## Integral Force Feedback with an High Pass Filter {#integral-force-feedback-with-an-high-pass-filter}
<span class="org-target" id="org-target--sec-iff-pseudo-int"></span>
## Integral Force Feedback with an High Pass Filter {#sec:iff_pseudo_int}
### Plant Parameters {#plant-parameters}
@@ -413,7 +403,7 @@ And the following rotating speed.
(2*xi*s/w0 + 1)*2*W*s/(w0^2), (s^2/w0^2 - W^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))+ (2*W*s/(w0^2))^2];
```
The obtained Loop Gain is shown in Figure [Figure 11](#figure--fig:loop-gain-modified-iff).
The obtained Loop Gain is shown in [Figure 11](#figure--fig:loop-gain-modified-iff).
<a id="figure--fig:loop-gain-modified-iff"></a>
@@ -422,7 +412,7 @@ The obtained Loop Gain is shown in Figure [Figure 11](#figure--fig:loop-gain-mod
### Root Locus {#root-locus}
As shown in the Root Locus plot (Figure [Figure 12](#figure--fig:root-locus-modified-iff)), for some value of the gain, the system remains stable.
As shown in the Root Locus plot ([Figure 12](#figure--fig:root-locus-modified-iff)), for some value of the gain, the system remains stable.
<a id="figure--fig:root-locus-modified-iff"></a>
@@ -435,7 +425,7 @@ As shown in the Root Locus plot (Figure [Figure 12](#figure--fig:root-locus-modi
### What is the optimal \\(\omega\_i\\) and \\(g\\)? {#what-is-the-optimal-omega-i-and-g}
In order to visualize the effect of \\(\omega\_i\\) on the attainable damping, the Root Locus is displayed in Figure [Figure 14](#figure--fig:root-locus-wi-modified-iff) for the following \\(\omega\_i\\):
In order to visualize the effect of \\(\omega\_i\\) on the attainable damping, the Root Locus is displayed in [Figure 14](#figure--fig:root-locus-wi-modified-iff) for the following \\(\omega\_i\\):
```matlab
wis = [0.01, 0.1, 0.5, 1]*w0; % [rad/s]
@@ -464,10 +454,10 @@ The gain at which the system becomes unstable is
g\_\text{max} = \omega\_i \left( \frac{{\omega\_0}^2}{\Omega^2} - 1 \right) \label{eq:iff\_gmax}
\end{equation}
While it seems that small \\(\omega\_i\\) do allow more damping to be added to the system (Figure [Figure 14](#figure--fig:root-locus-wi-modified-iff)), the control gains may be limited to small values due to \ref{eq:iff\_gmax} thus reducing the attainable damping.
While it seems that small \\(\omega\_i\\) do allow more damping to be added to the system ([Figure 14](#figure--fig:root-locus-wi-modified-iff)), the control gains may be limited to small values due to \eqref{eq:iff\_gmax} thus reducing the attainable damping.
There must be an optimum for \\(\omega\_i\\).
To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \\(\omega\_i\\) (Figure [Figure 16](#figure--fig:mod-iff-damping-wi)).
To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \\(\omega\_i\\) ([Figure 16](#figure--fig:mod-iff-damping-wi)).
```matlab
wis = logspace(-2, 1, 100)*w0; % [rad/s]
@@ -492,9 +482,7 @@ To find the optimum, the gain that maximize the simultaneous damping of the mode
{{< figure src="figs/mod_iff_damping_wi.png" caption="<span class='figure-number'>Figure 16: </span>Simultaneous attainable damping of the closed loop poles as a function of \\(\omega\_i\\)" >}}
## IFF with a stiffness in parallel with the force sensor {#iff-with-a-stiffness-in-parallel-with-the-force-sensor}
<span class="org-target" id="org-target--sec-iff-parallel-stiffness"></span>
## IFF with a stiffness in parallel with the force sensor {#sec:iff_parallel_stiffness}
### Schematic {#schematic}
@@ -627,7 +615,7 @@ And the IFF plant (transfer function from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\
- with a small parallel stiffness \\(k\_p < m \Omega^2\\)
- with a large parallel stiffness \\(k\_p > m \Omega^2\\)
The results are shown in Figure [Figure 19](#figure--fig:plant-iff-kp).
The results are shown in [Figure 19](#figure--fig:plant-iff-kp).
One can see that for \\(k\_p > m \Omega^2\\), the systems shows alternating complex conjugate poles and zeros.
@@ -673,7 +661,7 @@ One can see that for \\(k\_p > m \Omega^2\\), the systems shows alternating comp
### IFF when adding a spring in parallel {#iff-when-adding-a-spring-in-parallel}
In Figure [Figure 20](#figure--fig:root-locus-iff-kp) is displayed the Root Locus in the three considered cases with
In [Figure 20](#figure--fig:root-locus-iff-kp) is displayed the Root Locus in the three considered cases with
\begin{equation}
K\_{\text{IFF}} = \frac{g}{s} \begin{bmatrix}
@@ -703,7 +691,7 @@ Thus, decentralized IFF controller with pure integrators can be used if:
However, having large values of \\(k\_p\\) may decrease the attainable damping.
To study the second point, Root Locus plots for the following values of \\(k\_p\\) are shown in Figure [Figure 22](#figure--fig:root-locus-iff-kps).
To study the second point, Root Locus plots for the following values of \\(k\_p\\) are shown in [Figure 22](#figure--fig:root-locus-iff-kps).
```matlab
kps = [2, 20, 40]*m*W^2;
@@ -747,9 +735,7 @@ It is shown that large values of \\(k\_p\\) decreases the attainable damping.
{{< figure src="figs/opt_damp_alpha.png" caption="<span class='figure-number'>Figure 23: </span>Attainable damping ratio and corresponding controller gain for different parameter \\(\alpha\\)" >}}
## Comparison {#comparison}
<span class="org-target" id="org-target--sec-comparison"></span>
## Comparison {#sec:comparison}
Two modifications to adapt the IFF control strategy to rotating platforms have been proposed.
These two methods are now compared in terms of added damping, closed-loop compliance and transmissibility.
@@ -839,9 +825,7 @@ Critical Damping corresponds to to \\(\xi = 1\\), and thus:
```
### Transmissibility And Compliance {#transmissibility-and-compliance}
<span class="org-target" id="org-target--sec-comp-transmissibilty"></span>
### Transmissibility And Compliance {#sec:comp_transmissibilty}
```matlab
open('rotating_frame.slx');
@@ -929,9 +913,7 @@ Critical Damping corresponds to to \\(\xi = 1\\), and thus:
{{< figure src="figs/comp_compliance.png" caption="<span class='figure-number'>Figure 26: </span>Comparison of the obtained Compliance" >}}
## Notations {#notations}
<span class="org-target" id="org-target--sec-notations"></span>
## Notations {#sec:notations}
| | Mathematical Notation | Matlab | Unit |
|---------------------------------------|----------------------------------|---------------|---------|
Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

@@ -4,20 +4,16 @@ author = ["Dehaeze Thomas"]
draft = false
+++
<hr>
<p>This report is also available as a <a href="./index.pdf">pdf</a>.</p>
<hr>
This document gathers the Matlab code used to for the conference paper (<a href="#citeproc_bib_item_1">Dehaeze and Collette 2020</a>) and the journal paper (<a href="#citeproc_bib_item_3">Dehaeze and Collette 2021</a>).
It is structured in several sections:
- Section : presents a simple model of a rotating suspended platform that will be used throughout this study.
- Section : explains how the unconditional stability of IFF is lost due to Gyroscopic effects induced by the rotation.
- Section : suggests a simple modification of the control law such that damping can be added to the suspension modes in a robust way.
- Section : proposes to add springs in parallel with the force sensors to regain the unconditional stability of IFF.
- Section : compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior.
- Section : contains the notations used for both the Matlab code and the paper
- Section [System Description and Analysis](#sec:system_description): presents a simple model of a rotating suspended platform that will be used throughout this study.
- Section [Problem with pure Integral Force Feedback](#sec:iff_pure_int): explains how the unconditional stability of IFF is lost due to Gyroscopic effects induced by the rotation.
- Section [Integral Force Feedback with an High Pass Filter](#sec:iff_pseudo_int): suggests a simple modification of the control law such that damping can be added to the suspension modes in a robust way.
- Section [IFF with a stiffness in parallel with the force sensor](#sec:iff_parallel_stiffness): proposes to add springs in parallel with the force sensors to regain the unconditional stability of IFF.
- Section [Comparison](#sec:comparison): compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior.
- Section [Notations](#sec:notations): contains the notations used for both the Matlab code and the paper
The matlab code is accessible on [Zonodo](https://zenodo.org/record/3894343) and [Github](https://github.com/tdehaeze/dehaeze20_contr_stewa_platf) (<a href="#citeproc_bib_item_2">Dehaeze 2020</a>). It can also be download as a `.zip` file [here](https://git.tdehaeze.xyz/tdehaeze/dehaeze21_activ_dampin_rotat_platf_using/archive/master.zip).
@@ -28,27 +24,25 @@ To run the Matlab code, go in the `matlab` directory and run the following Matla
Paper's sections and corresponding Matlab files
</div>
| Sections | Matlab File |
|----------|----------------------------|
| Section | `s1_system_description.m` |
| Section | `s2_iff_pure_int.m` |
| Section | `s3_iff_hpf.m` |
| Section | `s4_iff_kp.m` |
| Section | `s5_act_damp_comparison.m` |
| Sections | Matlab File |
|-----------------------------------------------------------------------------------------------|----------------------------|
| Section [System Description and Analysis](#sec:system_description) | `s1_system_description.m` |
| Section [Problem with pure Integral Force Feedback](#sec:iff_pure_int) | `s2_iff_pure_int.m` |
| Section [Integral Force Feedback with an High Pass Filter](#sec:iff_pseudo_int) | `s3_iff_hpf.m` |
| Section [IFF with a stiffness in parallel with the force sensor](#sec:iff_parallel_stiffness) | `s4_iff_kp.m` |
| Section [Comparison](#sec:comparison) | `s5_act_damp_comparison.m` |
## System Description and Analysis {#system-description-and-analysis}
<span class="org-target" id="org-target--sec-system-description"></span>
## System Description and Analysis {#sec:system_description}
### System description {#system-description}
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure [Figure 1](#figure--fig:system)).
The system consists of one 2 degree of freedom translation stage on top of a spindle ([Figure 1](#figure--fig:system)).
<a id="figure--fig:system"></a>
{{< figure src="figs-paper/system.png" caption="<span class='figure-number'>Figure 1: </span>Schematic of the studied system" >}}
{{< figure src="figs/fig04.png" caption="<span class='figure-number'>Figure 1: </span>Schematic of the studied system" >}}
The control inputs are the forces applied by the actuators of the translation stage (\\(F\_u\\) and \\(F\_v\\)).
As the translation stage is rotating around the Z axis due to the spindle, the forces are applied along \\(\vec{i}\_u\\) and \\(\vec{i}\_v\\).
@@ -56,7 +50,7 @@ As the translation stage is rotating around the Z axis due to the spindle, the f
### Equations {#equations}
Based on the Figure [Figure 1](#figure--fig:system), the equations of motions are:
Based on the [Figure 1](#figure--fig:system), the equations of motions are:
<div class="important">
@@ -161,7 +155,7 @@ The same transfer function from \\([F\_u, F\_v]\\) to \\([d\_u, d\_v]\\) is writ
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
```
Both transfer functions are compared in Figure [Figure 4](#figure--fig:plant-simscape-analytical) and are found to perfectly match.
Both transfer functions are compared in [Figure 4](#figure--fig:plant-simscape-analytical) and are found to perfectly match.
<a id="figure--fig:plant-simscape-analytical"></a>
@@ -199,17 +193,15 @@ They are compared in Figures [Figure 5](#figure--fig:plant-compare-rotating-spee
{{< figure src="figs/plant_compare_rotating_speed_coupling.png" caption="<span class='figure-number'>Figure 6: </span>Comparison of the transfer functions from \\([F\_u, F\_v]\\) to \\([d\_u, d\_v]\\) for several rotating speed - Coupling Terms" >}}
## Problem with pure Integral Force Feedback {#problem-with-pure-integral-force-feedback}
## Problem with pure Integral Force Feedback {#sec:iff_pure_int}
<span class="org-target" id="org-target--sec-iff-pure-int"></span>
Force sensors are added in series with the two actuators (Figure [Figure 7](#figure--fig:system-iff)).
Force sensors are added in series with the two actuators ([Figure 7](#figure--fig:system-iff)).
Two identical controllers \\(K\_F\\) are used to feedback each of the sensed force to its associated actuator.
<a id="figure--fig:system-iff"></a>
{{< figure src="figs-paper/system_iff.png" caption="<span class='figure-number'>Figure 7: </span>System with added Force Sensor in series with the actuators" >}}
{{< figure src="figs/fig01.png" caption="<span class='figure-number'>Figure 7: </span>System with added Force Sensor in series with the actuators" >}}
### Plant Parameters {#plant-parameters}
@@ -311,7 +303,7 @@ The same transfer function from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\\) is writ
(2*xi*s/w0 + 1)*2*W*s/(w0^2), (s^2/w0^2 - W^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))+ (2*W*s/(w0^2))^2];
```
The two are compared in Figure [Figure 8](#figure--fig:plant-iff-comp-simscape-analytical) and found to perfectly match.
The two are compared in [Figure 8](#figure--fig:plant-iff-comp-simscape-analytical) and found to perfectly match.
<a id="figure--fig:plant-iff-comp-simscape-analytical"></a>
@@ -338,7 +330,7 @@ The transfer functions from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\\) are identif
end
```
The obtained transfer functions are shown in Figure [Figure 9](#figure--fig:plant-iff-compare-rotating-speed).
The obtained transfer functions are shown in [Figure 9](#figure--fig:plant-iff-compare-rotating-speed).
<a id="figure--fig:plant-iff-compare-rotating-speed"></a>
@@ -356,7 +348,7 @@ The decentralized IFF controller consists of pure integrators:
\end{bmatrix}
\end{equation}
The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \\(g\\)) is shown in Figure [Figure 10](#figure--fig:root-locus-pure-iff).
The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \\(g\\)) is shown in [Figure 10](#figure--fig:root-locus-pure-iff).
It is shown that for non-null rotating speed, one pole is bound to the right-half plane, and thus the closed loop system is unstable.
<a id="figure--fig:root-locus-pure-iff"></a>
@@ -364,9 +356,7 @@ It is shown that for non-null rotating speed, one pole is bound to the right-hal
{{< figure src="figs/root_locus_pure_iff.png" caption="<span class='figure-number'>Figure 10: </span>Root Locus for the Decentralized Integral Force Feedback controller. Several rotating speed are shown." >}}
## Integral Force Feedback with an High Pass Filter {#integral-force-feedback-with-an-high-pass-filter}
<span class="org-target" id="org-target--sec-iff-pseudo-int"></span>
## Integral Force Feedback with an High Pass Filter {#sec:iff_pseudo_int}
### Plant Parameters {#plant-parameters}
@@ -413,7 +403,7 @@ And the following rotating speed.
(2*xi*s/w0 + 1)*2*W*s/(w0^2), (s^2/w0^2 - W^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))+ (2*W*s/(w0^2))^2];
```
The obtained Loop Gain is shown in Figure [Figure 11](#figure--fig:loop-gain-modified-iff).
The obtained Loop Gain is shown in [Figure 11](#figure--fig:loop-gain-modified-iff).
<a id="figure--fig:loop-gain-modified-iff"></a>
@@ -422,7 +412,7 @@ The obtained Loop Gain is shown in Figure [Figure 11](#figure--fig:loop-gain-mod
### Root Locus {#root-locus}
As shown in the Root Locus plot (Figure [Figure 12](#figure--fig:root-locus-modified-iff)), for some value of the gain, the system remains stable.
As shown in the Root Locus plot ([Figure 12](#figure--fig:root-locus-modified-iff)), for some value of the gain, the system remains stable.
<a id="figure--fig:root-locus-modified-iff"></a>
@@ -435,7 +425,7 @@ As shown in the Root Locus plot (Figure [Figure 12](#figure--fig:root-locus-modi
### What is the optimal \\(\omega\_i\\) and \\(g\\)? {#what-is-the-optimal-omega-i-and-g}
In order to visualize the effect of \\(\omega\_i\\) on the attainable damping, the Root Locus is displayed in Figure [Figure 14](#figure--fig:root-locus-wi-modified-iff) for the following \\(\omega\_i\\):
In order to visualize the effect of \\(\omega\_i\\) on the attainable damping, the Root Locus is displayed in [Figure 14](#figure--fig:root-locus-wi-modified-iff) for the following \\(\omega\_i\\):
```matlab
wis = [0.01, 0.1, 0.5, 1]*w0; % [rad/s]
@@ -464,10 +454,10 @@ The gain at which the system becomes unstable is
g\_\text{max} = \omega\_i \left( \frac{{\omega\_0}^2}{\Omega^2} - 1 \right) \label{eq:iff\_gmax}
\end{equation}
While it seems that small \\(\omega\_i\\) do allow more damping to be added to the system (Figure [Figure 14](#figure--fig:root-locus-wi-modified-iff)), the control gains may be limited to small values due to \ref{eq:iff\_gmax} thus reducing the attainable damping.
While it seems that small \\(\omega\_i\\) do allow more damping to be added to the system ([Figure 14](#figure--fig:root-locus-wi-modified-iff)), the control gains may be limited to small values due to \eqref{eq:iff\_gmax} thus reducing the attainable damping.
There must be an optimum for \\(\omega\_i\\).
To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \\(\omega\_i\\) (Figure [Figure 16](#figure--fig:mod-iff-damping-wi)).
To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \\(\omega\_i\\) ([Figure 16](#figure--fig:mod-iff-damping-wi)).
```matlab
wis = logspace(-2, 1, 100)*w0; % [rad/s]
@@ -492,9 +482,7 @@ To find the optimum, the gain that maximize the simultaneous damping of the mode
{{< figure src="figs/mod_iff_damping_wi.png" caption="<span class='figure-number'>Figure 16: </span>Simultaneous attainable damping of the closed loop poles as a function of \\(\omega\_i\\)" >}}
## IFF with a stiffness in parallel with the force sensor {#iff-with-a-stiffness-in-parallel-with-the-force-sensor}
<span class="org-target" id="org-target--sec-iff-parallel-stiffness"></span>
## IFF with a stiffness in parallel with the force sensor {#sec:iff_parallel_stiffness}
### Schematic {#schematic}
@@ -503,7 +491,7 @@ In this section additional springs in parallel with the force sensors are added
<a id="figure--fig:system-parallel-springs"></a>
{{< figure src="figs-paper/system_parallel_springs.png" caption="<span class='figure-number'>Figure 17: </span>Studied system with additional springs in parallel with the actuators and force sensors" >}}
{{< figure src="figs/fig12.png" caption="<span class='figure-number'>Figure 17: </span>Studied system with additional springs in parallel with the actuators and force sensors" >}}
In order to keep the overall stiffness \\(k = k\_a + k\_p\\) constant, a scalar parameter \\(\alpha\\) (\\(0 \le \alpha < 1\\)) is defined to describe the fraction of the total stiffness in parallel with the actuator and force sensor
@@ -627,7 +615,7 @@ And the IFF plant (transfer function from \\([F\_u, F\_v]\\) to \\([f\_u, f\_v]\
- with a small parallel stiffness \\(k\_p < m \Omega^2\\)
- with a large parallel stiffness \\(k\_p > m \Omega^2\\)
The results are shown in Figure [Figure 19](#figure--fig:plant-iff-kp).
The results are shown in [Figure 19](#figure--fig:plant-iff-kp).
One can see that for \\(k\_p > m \Omega^2\\), the systems shows alternating complex conjugate poles and zeros.
@@ -673,7 +661,7 @@ One can see that for \\(k\_p > m \Omega^2\\), the systems shows alternating comp
### IFF when adding a spring in parallel {#iff-when-adding-a-spring-in-parallel}
In Figure [Figure 20](#figure--fig:root-locus-iff-kp) is displayed the Root Locus in the three considered cases with
In [Figure 20](#figure--fig:root-locus-iff-kp) is displayed the Root Locus in the three considered cases with
\begin{equation}
K\_{\text{IFF}} = \frac{g}{s} \begin{bmatrix}
@@ -703,7 +691,7 @@ Thus, decentralized IFF controller with pure integrators can be used if:
However, having large values of \\(k\_p\\) may decrease the attainable damping.
To study the second point, Root Locus plots for the following values of \\(k\_p\\) are shown in Figure [Figure 22](#figure--fig:root-locus-iff-kps).
To study the second point, Root Locus plots for the following values of \\(k\_p\\) are shown in [Figure 22](#figure--fig:root-locus-iff-kps).
```matlab
kps = [2, 20, 40]*m*W^2;
@@ -747,9 +735,7 @@ It is shown that large values of \\(k\_p\\) decreases the attainable damping.
{{< figure src="figs/opt_damp_alpha.png" caption="<span class='figure-number'>Figure 23: </span>Attainable damping ratio and corresponding controller gain for different parameter \\(\alpha\\)" >}}
## Comparison {#comparison}
<span class="org-target" id="org-target--sec-comparison"></span>
## Comparison {#sec:comparison}
Two modifications to adapt the IFF control strategy to rotating platforms have been proposed.
These two methods are now compared in terms of added damping, closed-loop compliance and transmissibility.
@@ -839,9 +825,7 @@ Critical Damping corresponds to to \\(\xi = 1\\), and thus:
```
### Transmissibility And Compliance {#transmissibility-and-compliance}
<span class="org-target" id="org-target--sec-comp-transmissibilty"></span>
### Transmissibility And Compliance {#sec:comp_transmissibilty}
```matlab
open('rotating_frame.slx');
@@ -929,9 +913,7 @@ Critical Damping corresponds to to \\(\xi = 1\\), and thus:
{{< figure src="figs/comp_compliance.png" caption="<span class='figure-number'>Figure 26: </span>Comparison of the obtained Compliance" >}}
## Notations {#notations}
<span class="org-target" id="org-target--sec-notations"></span>
## Notations {#sec:notations}
| | Mathematical Notation | Matlab | Unit |
|---------------------------------------|----------------------------------|---------------|---------|
@@ -275,89 +275,3 @@ draft = false
```
{{< figure src="mass_spring_damper_hac_lac.png" >}}
## Mass Spring Damper Model - Bis {#mass-spring-damper-model-bis}
```latex
\begin{tikzpicture}
% ====================
% Parameters
% ====================
\def\bracs{0.05} % Brace spacing vertically
\def\brach{-12pt} % Brace shift horizontaly
% ====================
% ====================
% Ground
% ====================
\draw (-0.9, 0) -- (0.9, 0);
\draw[dashed] (0.9, 0) -- ++(0.5, 0);
\draw[->] (1.3, 0) -- ++(0, 0.4) node[right]{$w$};
% ====================
% ====================
% Granite
\begin{scope}[shift={(0, 0)}]
\draw[fill=white] (-0.9, 1.2) rectangle (0.9, 2.0) node[pos=0.5]{$\scriptstyle\text{granite}$};
\draw[spring] (-0.7, 0) -- ++(0, 1.2);
\draw[damper] ( 0, 0) -- ++(0, 1.2);
\draw[dashed] ( 0.9, 2.0) -- ++(2.0, 0) coordinate(xg);
% \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] %
% (-0.9, \bracs) -- ++(0, 2.0) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite};
\end{scope}
% ====================
% ====================
% Stages
\begin{scope}[shift={(0, 2.0)}]
\draw[fill=white] (-0.9, 1.2) rectangle (0.9, 2.0) node[pos=0.5]{$\scriptstyle\mu\text{-station}$};
\coordinate (mustation) at (0.9, 1.6);
\draw[spring] (-0.7, 0) -- ++(0, 1.2);
\draw[damper] ( 0, 0) -- ++(0, 1.2);
\draw[actuator] ( 0.7, 0) -- ++(0, 1.2) node[midway, right=0.1](ft){$f_t$};
% \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] %
% (-0.9, \bracs) -- ++(0, 2.0) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-station}$};
\end{scope}
% ====================
% ====================
% NASS
\begin{scope}[shift={(0, 4.0)}]
\draw[fill=white] (-0.9, 1.2) rectangle (0.9, 2.0) node[pos=0.5]{$\scriptstyle\nu\text{-hexapod}$};
\draw[dashed] (0.9, 2.0) -- ++(2.0, 0) coordinate(xnpos);
\draw[spring] (-0.7, 0) -- ++(0, 1.2) node[midway, left=0.1]{};
\draw[damper] ( 0, 0) -- ++(0, 1.2) node[midway, left=0.2]{};
\draw[actuator] ( 0.7, 0) -- ++(0, 1.2) coordinate[midway, right=0.1](f);
% \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] %
% (-0.9, \bracs) -- ++(0, 2.2) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexapod}$};
\end{scope}
% ====================
% ====================
% Measured Displacement
\draw[<->, dashed] ($(xg)+(-0.1, 0)$) node[above left](d){$d$} -- ($(xnpos)+(-0.1, 0)$);
% ====================
% ====================
% IFF Control
% \node[block={2em}{1.5em}, right=0.6 of fsensn] (iff) {$K_{\scriptscriptstyle IFF}$};
% \node[addb] (ctrladd) at (f-|iff) {};
\node[block={2em}{1.5em}, right=0.6 of mustation] (ctrl) {$K$};
% \draw[->] (fsensn.east) -- node[midway, above]{$\tau_m$} (iff.west);
% \draw[->] (iff.south) -- (ctrladd.north);
% \draw[->] (ctrladd.west) -- (f.east) node[above right]{$u$};
\draw[->] (d.west) -| (ctrl.south);
\draw[->] (ctrl.north) |- (f) node[above right]{$u$};
% ====================
\end{tikzpicture}
```