Describe simscape model of nano-hexapod elements

This commit is contained in:
2021-04-23 15:31:00 +02:00
parent ba0a42be95
commit 5789df621b
20 changed files with 484 additions and 134 deletions

View File

@@ -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
<<sec:nano_hexapod>>
@@ -39,9 +45,10 @@ open('matlab/nano_hexapod/nano_hexapod.slx')
** Nano Hexapod - Configuration
<<sec:nano_hexapod_conf>>
*** 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
<<sec:conf_flexible_joint>>
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
<<sec:conf_apa>>
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
<<sec:conf_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
<<sec:conf_jacobian>>
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
<<sec:effect_encoder_location>>
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
<<sec:effect_encoder_location>>
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'