diff --git a/docs/dynamics-study.html b/docs/dynamics-study.html index 53873d0..84372cd 100644 --- a/docs/dynamics-study.html +++ b/docs/dynamics-study.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Stewart Platform - Dynamics Study @@ -272,13 +272,13 @@ for the JavaScript code in this tag.
  • 2. Comparison of the static transfer function and the Compliance matrix
  • @@ -288,10 +288,17 @@ for the JavaScript code in this tag.

    1 Compare external forces and forces applied by the actuators

    +

    +In this section, we wish to compare the effect of forces/torques applied by the actuators with the effect of external forces/torques on the displacement of the mobile platform. +

    +

    1.1 Comparison with fixed support

    +

    +Let’s generate a Stewart platform. +

    stewart = initializeStewartPlatform();
     stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
    @@ -307,6 +314,10 @@ stewart = initializeInertialSensor(stewart, 'type'
     
    +

    +We don’t put any flexibility below the Stewart platform such that its base is fixed to an inertial frame. +We also don’t put any payload on top of the Stewart platform. +

    ground = initializeGround('type', 'none');
     payload = initializePayload('type', 'none');
    @@ -314,7 +325,7 @@ payload = initializePayload('type', 
     
     

    -Estimation of the transfer function from \(\bm{\tau}\) to \(\mathcal{\bm{X}}\): +The transfer function from actuator forces \(\bm{\tau}\) to the relative displacement of the mobile platform \(\mathcal{\bm{X}}\) is extracted.

    %% Options for Linearized
    @@ -336,6 +347,9 @@ G.OutputName = {'Edx', 
     
    +

    +Using the Jacobian matrix, we compute the transfer function from force/torques applied by the actuators on the frame \(\{B\}\) fixed to the mobile platform: +

    Gc = minreal(G*inv(stewart.kinematics.J'));
     Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
    @@ -343,7 +357,7 @@ Gc.InputName = {'Fnx', 
     

    -Estimation of the transfer function from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\): +We also extract the transfer function from external forces \(\bm{\mathcal{F}}_{\text{ext}}\) on the frame \(\{B\}\) fixed to the mobile platform to the relative displacement \(\mathcal{\bm{X}}\) of \(\{B\}\) with respect to frame \(\{A\}\):

    %% Input/Output definition
    @@ -357,6 +371,17 @@ Gd.InputName  = {'Fex', 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
     
    + +

    +The comparison of the two transfer functions is shown in Figure 1. +

    + + +
    +

    comparison_Fext_F_fixed_base.png +

    +

    Figure 1: Comparison of the transfer functions from \(\bm{\mathcal{F}}\) to \(\mathcal{\bm{X}}\) and from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\) (png, pdf)

    +
    @@ -364,7 +389,7 @@ Gd.OutputName = {'Edx', 1.2 Comparison with a flexible support

    -We redo the identification for when the Stewart platform is on a flexible support. +We now add a flexible support under the Stewart platform.

    ground = initializeGround('type', 'flexible');
    @@ -372,17 +397,10 @@ We redo the identification for when the Stewart platform is on a flexible suppor
     

    -Estimation of the transfer function from \(\bm{\tau}\) to \(\mathcal{\bm{X}}\): +And we perform again the identification.

    -
    %% Options for Linearized
    -options = linearizeOptions;
    -options.SampleTime = 0;
    -
    -%% Name of the Simulink File
    -mdl = 'stewart_platform_model';
    -
    -%% Input/Output definition
    +
    %% Input/Output definition
     clear io; io_i = 1;
     io(io_i) = linio([mdl, '/Controller'],              1, 'openinput');  io_i = io_i + 1; % Actuator Force Inputs [N]
     io(io_i) = linio([mdl, '/Relative Motion Sensor'],  1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
    @@ -391,20 +409,11 @@ io(io_i) = linio([mdl, '/Relative Motion Sensor'
     G = linearize(mdl, io, options);
     G.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
     G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
    -
    -
    -
    -
    Gc = minreal(G*inv(stewart.kinematics.J'));
    +Gc = minreal(G*inv(stewart.kinematics.J'));
     Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
    -
    -
    -

    -Estimation of the transfer function from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\): -

    -
    -
    %% Input/Output definition
    +%% Input/Output definition
     clear io; io_i = 1;
     io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext');  io_i = io_i + 1; % External forces/torques applied on {B}
     io(io_i) = linio([mdl, '/Relative Motion Sensor'],  1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
    @@ -415,11 +424,22 @@ Gd.InputName  = {'Fex', 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
     
    + +

    +The comparison between the obtained transfer functions is shown in Figure 2. +

    + + +
    +

    comparison_Fext_F_flexible_base.png +

    +

    Figure 2: Comparison of the transfer functions from \(\bm{\mathcal{F}}\) to \(\mathcal{\bm{X}}\) and from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\) (png, pdf)

    +
    -
    -

    1.3 Conclusion

    +
    +

    1.3 Conclusion

    @@ -434,7 +454,11 @@ The transfer function from forces/torques applied by the actuators on the payloa

    2 Comparison of the static transfer function and the Compliance matrix

    +

    +In this section, we see how the Compliance matrix of the Stewart platform is linked to the static relation between \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\). +

    +

    2.1 Analysis

    @@ -456,6 +480,9 @@ stewart = initializeInertialSensor(stewart, 'type'
    +

    +No flexibility below the Stewart platform and no payload. +

    ground = initializeGround('type', 'none');
     payload = initializePayload('type', 'none');
    @@ -650,8 +677,8 @@ And now at the Compliance matrix.
     
    -
    -

    2.2 Conclusion

    +
    +

    2.2 Conclusion

    @@ -665,7 +692,7 @@ The low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathc

    Author: Dehaeze Thomas

    -

    Created: 2020-02-13 jeu. 15:19

    +

    Created: 2020-02-13 jeu. 15:36

    diff --git a/docs/figs/comparison_Fext_F_fixed_base.pdf b/docs/figs/comparison_Fext_F_fixed_base.pdf new file mode 100644 index 0000000..343391e Binary files /dev/null and b/docs/figs/comparison_Fext_F_fixed_base.pdf differ diff --git a/docs/figs/comparison_Fext_F_fixed_base.png b/docs/figs/comparison_Fext_F_fixed_base.png new file mode 100644 index 0000000..a5dac59 Binary files /dev/null and b/docs/figs/comparison_Fext_F_fixed_base.png differ diff --git a/docs/figs/comparison_Fext_F_flexible_base.pdf b/docs/figs/comparison_Fext_F_flexible_base.pdf new file mode 100644 index 0000000..037e948 Binary files /dev/null and b/docs/figs/comparison_Fext_F_flexible_base.pdf differ diff --git a/docs/figs/comparison_Fext_F_flexible_base.png b/docs/figs/comparison_Fext_F_flexible_base.png new file mode 100644 index 0000000..49b8b28 Binary files /dev/null and b/docs/figs/comparison_Fext_F_flexible_base.png differ diff --git a/matlab/stewart_platform_model.slx b/matlab/stewart_platform_model.slx index 638fa7f..660b1ce 100644 Binary files a/matlab/stewart_platform_model.slx and b/matlab/stewart_platform_model.slx differ diff --git a/org/dynamics-study.org b/org/dynamics-study.org index d5b8e90..a812dc7 100644 --- a/org/dynamics-study.org +++ b/org/dynamics-study.org @@ -40,6 +40,8 @@ * Compare external forces and forces applied by the actuators ** Introduction :ignore: +In this section, we wish to compare the effect of forces/torques applied by the actuators with the effect of external forces/torques on the displacement of the mobile platform. + ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -58,6 +60,7 @@ #+end_src ** Comparison with fixed support +Let's generate a Stewart platform. #+begin_src matlab stewart = initializeStewartPlatform(); stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); @@ -72,12 +75,14 @@ stewart = initializeInertialSensor(stewart, 'type', 'none'); #+end_src +We don't put any flexibility below the Stewart platform such that *its base is fixed to an inertial frame*. +We also don't put any payload on top of the Stewart platform. #+begin_src matlab ground = initializeGround('type', 'none'); payload = initializePayload('type', 'none'); #+end_src -Estimation of the transfer function from $\bm{\tau}$ to $\mathcal{\bm{X}}$: +The transfer function from actuator forces $\bm{\tau}$ to the relative displacement of the mobile platform $\mathcal{\bm{X}}$ is extracted. #+begin_src matlab %% Options for Linearized options = linearizeOptions; @@ -97,12 +102,13 @@ Estimation of the transfer function from $\bm{\tau}$ to $\mathcal{\bm{X}}$: G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; #+end_src +Using the Jacobian matrix, we compute the transfer function from force/torques applied by the actuators on the frame $\{B\}$ fixed to the mobile platform: #+begin_src matlab Gc = minreal(G*inv(stewart.kinematics.J')); Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; #+end_src -Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\mathcal{\bm{X}}$: +We also extract the transfer function from external forces $\bm{\mathcal{F}}_{\text{ext}}$ on the frame $\{B\}$ fixed to the mobile platform to the relative displacement $\mathcal{\bm{X}}$ of $\{B\}$ with respect to frame $\{A\}$: #+begin_src matlab %% Input/Output definition clear io; io_i = 1; @@ -115,6 +121,8 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma Gd.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; #+end_src +The comparison of the two transfer functions is shown in Figure [[fig:comparison_Fext_F_fixed_base]]. + #+begin_src matlab :exports none freqs = logspace(1, 4, 1000); @@ -126,7 +134,7 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma plot(freqs, abs(squeeze(freqresp(Gd(1,1), freqs, 'Hz'))), '--'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ax2 = subplot(2, 1, 2); hold on; @@ -137,26 +145,28 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-180, 180]); yticks([-180, -90, 0, 90, 180]); + legend({'$\mathcal{X}_{x}/\mathcal{F}_{x}$', '$\mathcal{X}_{x}/\mathcal{F}_{x,ext}$'}); linkaxes([ax1,ax2],'x'); #+end_src +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/comparison_Fext_F_fixed_base.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:comparison_Fext_F_fixed_base +#+caption: Comparison of the transfer functions from $\bm{\mathcal{F}}$ to $\mathcal{\bm{X}}$ and from $\bm{\mathcal{F}}_{\text{ext}}$ to $\mathcal{\bm{X}}$ ([[./figs/comparison_Fext_F_fixed_base.png][png]], [[./figs/comparison_Fext_F_fixed_base.pdf][pdf]]) +[[file:figs/comparison_Fext_F_fixed_base.png]] ** Comparison with a flexible support -We redo the identification for when the Stewart platform is on a flexible support. +We now add a flexible support under the Stewart platform. #+begin_src matlab ground = initializeGround('type', 'flexible'); #+end_src -Estimation of the transfer function from $\bm{\tau}$ to $\mathcal{\bm{X}}$: +And we perform again the identification. #+begin_src matlab - %% Options for Linearized - options = linearizeOptions; - options.SampleTime = 0; - - %% Name of the Simulink File - mdl = 'stewart_platform_model'; - %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] @@ -166,15 +176,10 @@ Estimation of the transfer function from $\bm{\tau}$ to $\mathcal{\bm{X}}$: G = linearize(mdl, io, options); G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; -#+end_src -#+begin_src matlab Gc = minreal(G*inv(stewart.kinematics.J')); Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; -#+end_src -Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\mathcal{\bm{X}}$: -#+begin_src matlab %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext'); io_i = io_i + 1; % External forces/torques applied on {B} @@ -186,6 +191,8 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma Gd.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; #+end_src +The comparison between the obtained transfer functions is shown in Figure [[fig:comparison_Fext_F_flexible_base]]. + #+begin_src matlab :exports none freqs = logspace(1, 4, 1000); @@ -197,7 +204,7 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma plot(freqs, abs(squeeze(freqresp(Gd(1,1), freqs, 'Hz'))), '--'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ax2 = subplot(2, 1, 2); hold on; @@ -208,10 +215,20 @@ Estimation of the transfer function from $\bm{\mathcal{F}}_{\text{ext}}$ to $\ma ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-180, 180]); yticks([-180, -90, 0, 90, 180]); + legend({'$\mathcal{X}_{x}/\mathcal{F}_{x}$', '$\mathcal{X}_{x}/\mathcal{F}_{x,ext}$'}); linkaxes([ax1,ax2],'x'); #+end_src +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/comparison_Fext_F_flexible_base.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:comparison_Fext_F_flexible_base +#+caption: Comparison of the transfer functions from $\bm{\mathcal{F}}$ to $\mathcal{\bm{X}}$ and from $\bm{\mathcal{F}}_{\text{ext}}$ to $\mathcal{\bm{X}}$ ([[./figs/comparison_Fext_F_flexible_base.png][png]], [[./figs/comparison_Fext_F_flexible_base.pdf][pdf]]) +[[file:figs/comparison_Fext_F_flexible_base.png]] + ** Conclusion #+begin_important The transfer function from forces/torques applied by the actuators on the payload $\bm{\mathcal{F}} = \bm{J}^T \bm{\tau}$ to the pose of the mobile platform $\bm{\mathcal{X}}$ is the same as the transfer function from external forces/torques to $\bm{\mathcal{X}}$ as long as the Stewart platform's base is fixed. @@ -219,6 +236,8 @@ The transfer function from forces/torques applied by the actuators on the payloa * Comparison of the static transfer function and the Compliance matrix ** Introduction :ignore: +In this section, we see how the Compliance matrix of the Stewart platform is linked to the static relation between $\mathcal{\bm{F}}$ to $\mathcal{\bm{X}}$. + ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -252,6 +271,7 @@ Initialization of the Stewart platform. stewart = initializeInertialSensor(stewart, 'type', 'none'); #+end_src +No flexibility below the Stewart platform and no payload. #+begin_src matlab ground = initializeGround('type', 'none'); payload = initializePayload('type', 'none');