diff --git a/docs/figs/2dof_apa_model.pdf b/docs/figs/2dof_apa_model.pdf new file mode 100644 index 0000000..c3bac96 Binary files /dev/null and b/docs/figs/2dof_apa_model.pdf differ diff --git a/docs/figs/2dof_apa_model.png b/docs/figs/2dof_apa_model.png new file mode 100644 index 0000000..1ed0106 Binary files /dev/null and b/docs/figs/2dof_apa_model.png differ diff --git a/docs/figs/encoder_struts.pdf b/docs/figs/encoder_struts.pdf new file mode 100644 index 0000000..68e7fe2 Binary files /dev/null and b/docs/figs/encoder_struts.pdf differ diff --git a/docs/figs/encoder_struts.png b/docs/figs/encoder_struts.png new file mode 100644 index 0000000..0745124 Binary files /dev/null and b/docs/figs/encoder_struts.png differ diff --git a/docs/figs/encoders_plates_with_apa.pdf b/docs/figs/encoders_plates_with_apa.pdf new file mode 100644 index 0000000..906664d Binary files /dev/null and b/docs/figs/encoders_plates_with_apa.pdf differ diff --git a/docs/figs/encoders_plates_with_apa.png b/docs/figs/encoders_plates_with_apa.png new file mode 100644 index 0000000..c56cac1 Binary files /dev/null and b/docs/figs/encoders_plates_with_apa.png differ diff --git a/docs/figs/flexible_joint_simscape.pdf b/docs/figs/flexible_joint_simscape.pdf new file mode 100644 index 0000000..09bb296 Binary files /dev/null and b/docs/figs/flexible_joint_simscape.pdf differ diff --git a/docs/figs/flexible_joint_simscape.png b/docs/figs/flexible_joint_simscape.png new file mode 100644 index 0000000..8a237cf Binary files /dev/null and b/docs/figs/flexible_joint_simscape.png differ diff --git a/docs/figs/nano_hexapod_simscape_encoder_plates.pdf b/docs/figs/nano_hexapod_simscape_encoder_plates.pdf new file mode 100644 index 0000000..4d7ead5 Binary files /dev/null and b/docs/figs/nano_hexapod_simscape_encoder_plates.pdf differ diff --git a/docs/figs/nano_hexapod_simscape_encoder_plates.png b/docs/figs/nano_hexapod_simscape_encoder_plates.png new file mode 100644 index 0000000..52a02c5 Binary files /dev/null and b/docs/figs/nano_hexapod_simscape_encoder_plates.png differ diff --git a/docs/figs/nano_hexapod_simscape_encoder_struts.pdf b/docs/figs/nano_hexapod_simscape_encoder_struts.pdf new file mode 100644 index 0000000..2a1654b Binary files /dev/null and b/docs/figs/nano_hexapod_simscape_encoder_struts.pdf differ diff --git a/docs/figs/nano_hexapod_simscape_encoder_struts.png b/docs/figs/nano_hexapod_simscape_encoder_struts.png new file mode 100644 index 0000000..f4f728e Binary files /dev/null and b/docs/figs/nano_hexapod_simscape_encoder_struts.png differ diff --git a/docs/figs/simscape_encoder_model.pdf b/docs/figs/simscape_encoder_model.pdf new file mode 100644 index 0000000..9c73f21 Binary files /dev/null and b/docs/figs/simscape_encoder_model.pdf differ diff --git a/docs/figs/simscape_encoder_model.png b/docs/figs/simscape_encoder_model.png new file mode 100644 index 0000000..e30d46f Binary files /dev/null and b/docs/figs/simscape_encoder_model.png differ diff --git a/docs/figs/simscape_encoder_model_disp.pdf b/docs/figs/simscape_encoder_model_disp.pdf new file mode 100644 index 0000000..549b1ab Binary files /dev/null and b/docs/figs/simscape_encoder_model_disp.pdf differ diff --git a/docs/figs/simscape_encoder_model_disp.png b/docs/figs/simscape_encoder_model_disp.png new file mode 100644 index 0000000..a921fe9 Binary files /dev/null and b/docs/figs/simscape_encoder_model_disp.png differ diff --git a/docs/figs/simscape_model_flexible_joint.pdf b/docs/figs/simscape_model_flexible_joint.pdf new file mode 100644 index 0000000..b0e5edc Binary files /dev/null and b/docs/figs/simscape_model_flexible_joint.pdf differ diff --git a/docs/figs/simscape_model_flexible_joint.png b/docs/figs/simscape_model_flexible_joint.png new file mode 100644 index 0000000..c350ea5 Binary files /dev/null and b/docs/figs/simscape_model_flexible_joint.png differ diff --git a/docs/nano_hexapod.html b/docs/nano_hexapod.html index 9bbc06c..faafbea 100644 --- a/docs/nano_hexapod.html +++ b/docs/nano_hexapod.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Nano-Hexapod @@ -41,7 +41,14 @@ -
-

3.1 Plant Identification

+
+

3.1 Plant Identification

@@ -1650,19 +1889,19 @@ Gdvf.OutputName = {'D1', 15. +Its bode plot is shown in Figure 24.

nano_hexapod_dvf_plant_bode_plot_struts.png

-

Figure 15: Direct Velocity Feedback plant

+

Figure 24: Direct Velocity Feedback plant

-
-

3.2 Root Locus

+
+

3.2 Root Locus

@@ -1685,14 +1924,14 @@ The value of \(\omega_d\) sets the frequency above high the derivative action is

-The obtained Root Locus is shown in Figure 16. +The obtained Root Locus is shown in Figure 25. The control gain chosen for future plots is shown by the red crosses.

nano_hexapod_dvf_root_locus_struts.png

-

Figure 16: Root locus for the decentralized DVF control strategy

+

Figure 25: Root locus for the decentralized DVF control strategy

@@ -1705,20 +1944,20 @@ The obtained controller is then:

-The corresponding loop gain of the diagonal terms are shown in Figure 17. +The corresponding loop gain of the diagonal terms are shown in Figure 26. It is shown that the loop gain is quite large around resonances (which allows to add lots of damping) and less than one at low frequency thanks to the large value of \(\omega_c\).

nano_hexapod_dvf_loop_gain_struts.png

-

Figure 17: Loop gain of the diagonal terms \(G(i,i) \cdot K_{\text{DVF}}(i,i)\)

+

Figure 26: Loop gain of the diagonal terms \(G(i,i) \cdot K_{\text{DVF}}(i,i)\)

-
-

3.3 Effect of DVF on the plant

+
+

3.3 Effect of DVF on the plant

@@ -1758,16 +1997,16 @@ Gdvf.OutputName = {'D1', 18. +The obtained plants are compared in Figure 27.

nano_hexapod_effect_dvf_plant_struts.png

-

Figure 18: Bode plots of the transfer functions from actuator forces \(\tau_i\) to relative motion sensors \(\mathcal{L}_i\) with and without the DVF controller.

+

Figure 27: Bode plots of the transfer functions from actuator forces \(\tau_i\) to relative motion sensors \(\mathcal{L}_i\) with and without the DVF controller.

-
+

The Direct Velocity Feedback Strategy is very effective to damp the 6 suspension modes of the nano-hexapod.

@@ -1776,8 +2015,8 @@ The Direct Velocity Feedback Strategy is very effective to damp the 6 suspension
-
-

3.4 Effect of DVF on the compliance

+
+

3.4 Effect of DVF on the compliance

@@ -1786,13 +2025,13 @@ The Direct Velocity Feedback Strategy is very effective to damp the 6 suspension

The DVF strategy has the well known drawback of degrading the compliance (transfer function from external forces/torques applied to the top platform to the motion of the top platform), especially at low frequency where the control gain is large. Let’s quantify that for the nano-hexapod. -The obtained compliances are compared in Figure 19. +The obtained compliances are compared in Figure 28.

nano_hexapod_dvf_compare_compliance_struts.png

-

Figure 19: Comparison of the compliances in Open Loop and with Direct Velocity Feedback controller

+

Figure 28: Comparison of the compliances in Open Loop and with Direct Velocity Feedback controller

@@ -1818,8 +2057,8 @@ It is structured as follows:
  • Section 4.4: the DVF is applied, and the effect on the compliance is identified
  • -
    -

    4.1 Plant Identification

    +
    +

    4.1 Plant Identification

    @@ -1859,19 +2098,19 @@ Gdvf.OutputName = {'D1', 20. +Its bode plot is shown in Figure 29.

    nano_hexapod_dvf_plant_bode_plot_plates.png

    -

    Figure 20: Direct Velocity Feedback plant

    +

    Figure 29: Direct Velocity Feedback plant

    -
    -

    4.2 Root Locus

    +
    +

    4.2 Root Locus

    @@ -1894,14 +2133,14 @@ The value of \(\omega_d\) sets the frequency above high the derivative action is

    -The obtained Root Locus is shown in Figure 21. +The obtained Root Locus is shown in Figure 30. The control gain chosen for future plots is shown by the red crosses.

    nano_hexapod_dvf_root_locus_plates.png

    -

    Figure 21: Root locus for the decentralized DVF control strategy

    +

    Figure 30: Root locus for the decentralized DVF control strategy

    @@ -1914,20 +2153,20 @@ The obtained controller is then:

    -The corresponding loop gain of the diagonal terms are shown in Figure 22. +The corresponding loop gain of the diagonal terms are shown in Figure 31. It is shown that the loop gain is quite large around resonances (which allows to add lots of damping).

    nano_hexapod_dvf_loop_gain_plates.png

    -

    Figure 22: Loop gain of the diagonal terms \(G(i,i) \cdot K_{\text{DVF}}(i,i)\)

    +

    Figure 31: Loop gain of the diagonal terms \(G(i,i) \cdot K_{\text{DVF}}(i,i)\)

    -
    -

    4.3 Effect of DVF on the plant

    +
    +

    4.3 Effect of DVF on the plant

    @@ -1967,16 +2206,16 @@ Gdvf.OutputName = {'D1', 23. +The obtained plants are compared in Figure 32.

    nano_hexapod_effect_dvf_plant_plates.png

    -

    Figure 23: Bode plots of the transfer functions from actuator forces \(\tau_i\) to relative motion sensors \(\mathcal{L}_i\) with and without the DVF controller.

    +

    Figure 32: Bode plots of the transfer functions from actuator forces \(\tau_i\) to relative motion sensors \(\mathcal{L}_i\) with and without the DVF controller.

    -
    +

    The Direct Velocity Feedback Strategy is very effective in damping the 6 suspension modes of the nano-hexapod.

    @@ -1985,8 +2224,8 @@ The Direct Velocity Feedback Strategy is very effective in damping the 6 suspens
    -
    -

    4.4 Effect of DVF on the compliance

    +
    +

    4.4 Effect of DVF on the compliance

    @@ -1995,13 +2234,13 @@ The Direct Velocity Feedback Strategy is very effective in damping the 6 suspens

    The DVF strategy has the well known drawback of degrading the compliance (transfer function from external forces/torques applied to the top platform to the motion of the top platform), especially at low frequency where the control gain is large. Let’s quantify that for the nano-hexapod. -The obtained compliances are compared in Figure 24. +The obtained compliances are compared in Figure 33.

    nano_hexapod_dvf_compare_compliance_plates.png

    -

    Figure 24: Comparison of the compliances in Open Loop and with Direct Velocity Feedback controller

    +

    Figure 33: Comparison of the compliances in Open Loop and with Direct Velocity Feedback controller

    @@ -2069,7 +2308,7 @@ The obtained compliances are compared in Figure 24. % For Flexible Frame args.actuator_ks (6,1) double {mustBeNumeric} = ones(6,1)*235e6 % Stiffness of one stack [N/m] args.actuator_cs (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % Stiffness of one stack [N/m] - % For Flexible + args.actuator_xi (1,1) double {mustBeNumeric} = 0.01 % Damping Ratio %% Controller args.controller_type char {mustBeMember(args.controller_type,{'none', 'iff', 'dvf'})} = 'none' @@ -2369,7 +2608,7 @@ nano_hexapod.geometry.J = [nano_hexapod.geometry.si'

    Author: Dehaeze Thomas

    -

    Created: 2021-04-23 ven. 13:22

    +

    Created: 2021-04-23 ven. 15:30

    diff --git a/org/nano_hexapod.org b/org/nano_hexapod.org index 447a518..7b0026d 100644 --- a/org/nano_hexapod.org +++ b/org/nano_hexapod.org @@ -3,12 +3,18 @@ * Introduction :ignore: -In this document, a Simscape model of the nano-hexapod is developed. +In this document, a Simscape model of the nano-hexapod is developed and studied (shown in Figure [[fig:nano_hexapod_simscape]]). -- Section [[sec:nano_hexapod]]: -- Section [[sec:integral_force_feedback]]: -- Section [[sec:direct_velocity_feedback_struts]]: -- Section [[sec:direct_velocity_feedback_plates]]: +It is structured as follows: +- Section [[sec:nano_hexapod]]: the simscape model of the nano-hexapod is presented. Few of its elements can be configured as wanted. The effect of the configuration on the obtained dynamics is studied. +- Section [[sec:integral_force_feedback]]: Direct Velocity Feedback is applied and the obtained damping is derived. +- Section [[sec:direct_velocity_feedback_struts]]: the encoders are fixed to the struts, and Integral Force Feedback is applied. The obtained damping is computed. +- Section [[sec:direct_velocity_feedback_plates]]: the same is done when the encoders are fixed on the plates + +#+name: fig:nano_hexapod_simscape +#+caption: 3D view of the Sismcape model for the Nano-Hexapod +#+attr_latex: :width \linewidth +[[file:figs/nano_hexapod_simscape_encoder_struts.png]] * Nano-Hexapod <> @@ -39,9 +45,10 @@ open('matlab/nano_hexapod/nano_hexapod.slx') ** Nano Hexapod - Configuration <> - +*** Introduction :ignore: The nano-hexapod can be initialized and configured using the =initializeNanoHexapodFinal= function ([[sec:initializeNanoHexapodFinal][link]]). +The following code would produce the model shown in Figure [[fig:nano_hexapod_simscape_encoder_struts]]. #+begin_src matlab n_hexapod = initializeNanoHexapodFinal('flex_bot_type', '4dof', ... 'flex_top_type', '3dof', ... @@ -50,6 +57,115 @@ n_hexapod = initializeNanoHexapodFinal('flex_bot_type', '4dof', ... 'MO_B', 150e-3); #+end_src +#+name: fig:nano_hexapod_simscape_encoder_struts +#+caption: 3D view of the Sismcape model for the Nano-Hexapod +#+attr_latex: :width \linewidth +[[file:figs/nano_hexapod_simscape_encoder_struts.png]] + +Several elements on the nano-hexapod can be configured: +- The flexible joints (Section [[sec:conf_flexible_joint]]) +- The amplified piezoelectric actuators (Section [[sec:conf_apa]]) +- The encoders (Section [[sec:conf_encoders]]) +- The Jacobian matrices (Section [[sec:conf_jacobian]]) + +*** Flexible Joints +<> + +The model of the flexible joint is composed of 3 solid bodies as shown in Figure [[fig:simscape_model_flexible_joint]] which are connected by joints representing the flexibility of the joint. + +We can represent: +- the bending flexibility $k_{R_x}$, $k_{R_y}$ +- the torsional flexibility $k_{R_z}$ +- the axial flexibility $k_z$ + +The configurations and the represented flexibilities are summarized in Table [[tab:flex_type_conf]]. + +#+name: tab:flex_type_conf +#+caption: Flexible joint's configuration and associated represented flexibility +#+attr_latex: :environment tabularx :width 0.6\linewidth :align lXXX +#+attr_latex: :center t :booktabs t :float t +| =flex_type= | Bending | Torsional | Axial | +|-------------+---------+-----------+-------| +| =2dof= | x | | | +| =3dof= | x | x | | +| =4dof= | x | x | x | + +Of course, adding more DoF for the flexible joint will induce an addition of many states for the nano-hexapod simscape model. + +#+name: fig:simscape_model_flexible_joint +#+caption: 3D view of the Sismcape model for the Flexible joint (4DoF configuration) +#+attr_latex: :width 0.8\linewidth +[[file:figs/simscape_model_flexible_joint.png]] + +*** Amplified Piezoelectric Actuators +<> + +The nano-hexapod's struts are containing one amplified piezoelectric actuator (APA300ML from Cedrat Technologies). + +The APA can be modeled in different ways which can be configured with the =actuator_type= argument. + +The simplest model is a 2-DoF system shown in Figure [[fig:2dof_apa_model]]. + +#+name: fig:2dof_apa_model +#+caption: Schematic of the 2DoF model for the Amplified Piezoelectric Actuator +[[file:figs/2dof_apa_model.png]] + +Then, a more complex model based on a Finite Element Model can be used. + +*** Encoders +<> + +The encoders can be either fixed directly on the struts (Figure [[fig:encoder_struts]]) or on the two plates (Figure [[fig:encoders_plates_with_apa]]). + +This can be configured with the =motion_sensor_type= parameters which can be equal to ='struts'= or ='plates'=. + +#+name: fig:encoder_struts +#+caption: 3D view of the Encoders fixed on the struts +#+attr_latex: :width 0.8\linewidth +[[file:figs/encoder_struts.png]] + +#+name: fig:encoders_plates_with_apa +#+caption: 3D view of the Encoders fixed on the plates +#+attr_latex: :width 0.6\linewidth +[[file:figs/encoders_plates_with_apa.png]] + +A complete view of the nano-hexapod with encoders fixed to the struts is shown in Figure [[fig:nano_hexapod_simscape_encoder_struts]] while it is shown in Figure [[fig:nano_hexapod_simscape_encoder_plates]] when the encoders are fixed to the plates. + +#+name: fig:nano_hexapod_simscape_encoder_plates +#+caption: Nano-Hexapod with encoders fixed to the plates +#+attr_latex: :width \linewidth +[[file:figs/nano_hexapod_simscape_encoder_plates.png]] + +The encoder model is schematically represented in Figure [[fig:simscape_encoder_model]]: +- a frame {B}, fixed to the ruler is positioned on its top surface +- a frame {F}, rigidly fixed to the encoder is initially positioned such that its origin is aligned with the x axis of frame {B} + +The output measurement is then the x displacement of the origin of the frame {F} expressed in frame {B}. + +#+name: fig:simscape_encoder_model +#+caption: Schematic of the encoder model +[[file:figs/simscape_encoder_model.png]] + +If the encoder is experiencing some tilt, it is then "converted" into a measured displacement as shown in Figure [[fig:simscape_encoder_model_disp]]. + +#+name: fig:simscape_encoder_model_disp +#+caption: Schematic of the encoder model +[[file:figs/simscape_encoder_model_disp.png]] + +*** Jacobians +<> + +While the Jacobian configuration will not change the physical system, it is still quite an important part of the model. + +This configuration consists on defining the location of the frame {B} in which the Jacobian will be computed. +This Jacobian is then used to transform the actuator forces to forces/torques applied on the payload and expressed in frame {B}. +Same thing can be done for the measured encoder displacements. + +** Effect of encoders on the decentralized plant +<> + +We here wish to compare the plant from actuators to the encoders when the encoders are either fixed on the struts or on the plates. + We initialize the identification parameters. #+begin_src matlab %% Options for Linearized @@ -65,11 +181,6 @@ io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inp io(io_i) = linio([mdl, '/D'], 1, 'openoutput'); io_i = io_i + 1; % Relative Motion Outputs #+end_src -** Effect of encoders on the decentralized plant -<> - -We here wish to compare the plant from actuators to the encoders when the encoders are either fixed on the struts or on the plates. - Identify the plant when the encoders are on the struts: #+begin_src matlab n_hexapod = initializeNanoHexapodFinal('flex_bot_type', '4dof', ... @@ -3183,7 +3294,7 @@ arguments % For Flexible Frame args.actuator_ks (6,1) double {mustBeNumeric} = ones(6,1)*235e6 % Stiffness of one stack [N/m] args.actuator_cs (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % Stiffness of one stack [N/m] - % For Flexible + args.actuator_xi (1,1) double {mustBeNumeric} = 0.01 % Damping Ratio %% Controller args.controller_type char {mustBeMember(args.controller_type,{'none', 'iff', 'dvf'})} = 'none'