Finish review + grammar
This commit is contained in:
Binary file not shown.
@@ -63,9 +63,7 @@ enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
|
||||
|
||||
|
||||
|
||||
% System identification is performed in two cases:
|
||||
% - no encoder is fixed to the strut (Figure ref:fig:test_struts_bench_leg_front)
|
||||
% - one encoder is fixed to the strut (Figure ref:fig:test_struts_bench_leg_coder)
|
||||
% System identification is performed without the encoder fixed to the strut (Figure ref:fig:test_struts_bench_leg_front) and with one encoder fixed to the strut (Figure ref:fig:test_struts_bench_leg_coder).
|
||||
|
||||
% #+name: fig:test_struts_bench_leg_with_without_enc
|
||||
% #+caption: Struts fixed to the test bench with clamped flexible joints. The coder can be fixed to the struts (\subref{fig:test_struts_bench_leg_coder}) or removed (\subref{fig:test_struts_bench_leg_front})
|
||||
@@ -89,7 +87,7 @@ enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
|
||||
% It is found that the encoder has very little effect on the transfer function from excitation voltage $u$ to the axial motion of the strut $d_a$ as measured by the interferometer (Figure ref:fig:test_struts_effect_encoder_int).
|
||||
% This means that the axial motion of the strut is unaffected by the presence of the encoder.
|
||||
% Similarly, it has very little effect on the transfer function from $u$ to the sensor stack voltage $V_s$ (Figure ref:fig:test_struts_effect_encoder_iff).
|
||||
% This means that the integral force feedback control strategy should be as effective whether the encoders are fixed to the struts.
|
||||
% This means that the integral force feedback control strategy should be as effective whether the encoders are fixed to the struts or not.
|
||||
|
||||
|
||||
%% Plot the FRF from u to da with and without the encoder
|
||||
@@ -105,7 +103,8 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_a/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-7, 1e-3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@@ -119,6 +118,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Compare the IFF plant with and without the encoders
|
||||
figure;
|
||||
@@ -132,7 +132,8 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
ylim([1e-2, 1e2]);
|
||||
|
||||
ax2 = nexttile;
|
||||
@@ -147,18 +148,18 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
% Comparison of the encoder and interferometer
|
||||
% <<ssec:test_struts_comp_enc_int>>
|
||||
|
||||
% The dynamics as measured by the encoder and by the interferometers are compared in Figure ref:fig:test_struts_comp_enc_int.
|
||||
|
||||
% The dynamics as measured by the encoder (i.e. $d_e/u$) and by the interferometers (i.e. $d_a/u$) are compared in Figure ref:fig:test_struts_comp_enc_int.
|
||||
% The dynamics from the excitation voltage $u$ to the measured displacement by the encoder $d_e$ presents a behavior that is much more complex than the dynamics to the displacement as measured by the interferometer (comparison made in Figure ref:fig:test_struts_comp_enc_int).
|
||||
% Three additional resonance frequencies can be observed at 197Hz, 290Hz and 376Hz.
|
||||
% These resonance frequencies correspond to flexible modes of the strut that were studied in Section ref:sec:test_struts_flexible_modes.
|
||||
% These resonance frequencies are matching the frequencies of the flexible modes that were studied in Section ref:sec:test_struts_flexible_modes.
|
||||
|
||||
% The good news is that these resonances are not seen on the interferometer and are therefore not impacting the axial motion of the strut (which is what is important for the hexapod positioning).
|
||||
% However, these resonances are making the use of encoder fixed to the strut difficult.
|
||||
% The good news is that these resonances are not impacting the axial motion of the strut (which is what is important for the hexapod positioning).
|
||||
% However, these resonances are making the use of encoder fixed to the strut difficult from a control perspective.
|
||||
|
||||
|
||||
figure;
|
||||
@@ -166,18 +167,19 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(enc_frf), 'DisplayName', 'Encoder');
|
||||
plot(f, abs(int_with_enc_frf), 'DisplayName', 'Interferometer');
|
||||
text(93, 4e-4, {'93Hz'}, 'VerticalAlignment','bottom','HorizontalAlignment','center')
|
||||
plot(f, abs(enc_frf), 'DisplayName', '$d_e/u$');
|
||||
plot(f, abs(int_with_enc_frf), 'DisplayName', '$d_a/u$');
|
||||
text(85, 4e-4, {'93Hz'}, 'VerticalAlignment','middle','HorizontalAlignment','right')
|
||||
text(200, 1.3e-4,{'197Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
|
||||
text(300, 4e-6, {'290Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
|
||||
text(400, 1.4e-6,{'376Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
|
||||
text(300, 4e-6, {'290Hz'},'VerticalAlignment','bottom','HorizontalAlignment','left')
|
||||
text(400, 4e-7,{'376Hz'},'VerticalAlignment','top','HorizontalAlignment','center')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
ylim([1e-8, 1e-3]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
ylim([1e-7, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@@ -191,6 +193,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
% Comparison of all the Struts
|
||||
% <<ssec:test_struts_comp_all_struts>>
|
||||
@@ -239,7 +242,7 @@ end
|
||||
|
||||
|
||||
|
||||
% Then, the dynamics of all the mounted struts (only 5 at the time of the experiment) are all measured using the same test bench.
|
||||
% Then, the dynamics of all the mounted struts (only 5 at the time of the experiment) were all measured using the same test bench.
|
||||
% The obtained dynamics from $u$ to $d_a$ are compared in Figure ref:fig:test_struts_comp_interf_plants while is dynamics from $u$ to $V_s$ are compared in Figure ref:fig:test_struts_comp_iff_plants.
|
||||
% Very good match can be observed between all the struts.
|
||||
|
||||
@@ -258,8 +261,9 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_a/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
|
||||
ylim([1e-9, 1e-3]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
ylim([1e-8, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@@ -274,6 +278,7 @@ yticks(-360:90:360); ylim([-180 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Plot the FRF from u to Vs
|
||||
figure;
|
||||
@@ -290,7 +295,8 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@@ -305,34 +311,7 @@ yticks(-360:90:360); ylim([-180 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_struts_comp_plants
|
||||
% #+caption: Comparison of the measured plants
|
||||
% #+attr_latex: :options [htbp]
|
||||
% #+begin_figure
|
||||
% #+attr_latex: :caption \subcaption{\label{fig:test_struts_comp_interf_plants}$u$ to $d_a$}
|
||||
% #+attr_latex: :options {0.49\textwidth}
|
||||
% #+begin_subfigure
|
||||
% #+attr_latex: :width \linewidth
|
||||
% [[file:figs/test_struts_comp_interf_plants.png]]
|
||||
% #+end_subfigure
|
||||
% #+attr_latex: :caption \subcaption{\label{fig:test_struts_comp_iff_plants}$u$ to $V_s$}
|
||||
% #+attr_latex: :options {0.49\textwidth}
|
||||
% #+begin_subfigure
|
||||
% #+attr_latex: :width \linewidth
|
||||
% [[file:figs/test_struts_comp_iff_plants.png]]
|
||||
% #+end_subfigure
|
||||
% #+end_figure
|
||||
|
||||
% The same comparison is made for the transfer function from $u$ to $d_e$ (encoder output) in Figure ref:fig:test_struts_comp_enc_plants.
|
||||
% This time, large dynamics differences are observed between the 5 struts.
|
||||
% Even-though the same peaks are seen for all of the struts (95Hz, 200Hz, 300Hz, 400Hz), the amplitude of the peaks are not the same.
|
||||
% Moreover, the location or even the presence of complex conjugate zeros is changing from one strut to the other.
|
||||
|
||||
% It will be further investigated why such differences are observed (see Section ref:ssec:test_struts_effect_misalignment).
|
||||
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Bode plot of the FRF from u to de
|
||||
figure;
|
||||
@@ -348,7 +327,8 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
ylim([1e-8, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
@@ -364,6 +344,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Save the estimated FRF for further analysis
|
||||
save('./mat/meas_struts_frf.mat', 'f', 'enc_frf', 'int_frf', 'iff_frf', 'strut_nums');
|
||||
|
@@ -34,6 +34,7 @@ freqs = logspace(1, log10(2000), 1000);
|
||||
% Model dynamics
|
||||
% <<ssec:test_struts_comp_model>>
|
||||
|
||||
|
||||
%% Load measured FRF for comparison
|
||||
load('meas_struts_frf.mat', 'f', 'enc_frf', 'int_frf', 'iff_frf', 'strut_nums');
|
||||
|
||||
@@ -65,13 +66,9 @@ Gs_flex.OutputName = {'Vs', 'de', 'da'};
|
||||
|
||||
|
||||
|
||||
% Two models of the APA300ML are used here for comparison:
|
||||
% - a simple two degrees of freedom model
|
||||
% - a model using a super element extracted from a finite element model
|
||||
|
||||
% Two models of the APA300ML are used here: a simple two degrees of freedom model and a model using a super element extracted from a finite element model.
|
||||
% These two models of the APA300ML were tuned to best match measured frequency response functions of the APA alone.
|
||||
% The flexible joints are here modelled with the 4DoF model (axial stiffness, two bending stiffnesses and one torsion stiffness).
|
||||
|
||||
% These two models are compared with the measured frequency responses in Figure ref:fig:test_struts_comp_frf_flexible_model.
|
||||
|
||||
% The model dynamics from DAC voltage $u$ to the axial motion of the strut $d_a$ (Figure ref:fig:test_struts_comp_frf_flexible_model_int) and from DAC voltage $u$ to the force sensor voltage $V_s$ (Figure ref:fig:test_struts_comp_frf_flexible_model_iff) are well matching the experimental identification.
|
||||
@@ -120,6 +117,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1a,ax2a],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Compare the FRF and identified dynamics from u to Vs and da
|
||||
figure;
|
||||
@@ -160,6 +158,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1a,ax2a],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Compare the FRF and identified dynamics from u to Vs and da
|
||||
figure;
|
||||
@@ -201,24 +200,24 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1a,ax2a],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
% Effect of strut misalignment
|
||||
% <<ssec:test_struts_effect_misalignment>>
|
||||
|
||||
% As was shown in Figure ref:fig:test_struts_comp_enc_plants, the identified dynamics from DAC voltage $u$ to encoder measured displacement $d_e$ are very different from one strut to the other.
|
||||
|
||||
% In this section, it is investigated whether poor alignment of the strut (flexible joints with respect to the APA) can explain such dynamics.
|
||||
% For instance, consider Figure ref:fig:test_struts_misalign_schematic where there is a misalignment in the $y$ direction between the two flexible joints (well aligned thanks to the mounting procedure in Section ref:sec:test_struts_mounting) and the APA300ML.
|
||||
% In such case, the "x-bending" mode at 200Hz (see Figure ref:fig:test_struts_meas_x_bending) can be expected to be more excited, and thus the dynamics from the actuator to the encoder should be affected at frequencies around 200Hz.
|
||||
% In such case, the "x-bending" mode at 200Hz (see Figure ref:fig:test_struts_meas_x_bending) can be expected to have more impact on the dynamics from the actuator to the encoder.
|
||||
|
||||
% #+name: fig:test_struts_misalign_schematic
|
||||
% #+caption: Mis-alignement between the joints and the APA
|
||||
% #+attr_latex: :width 0.8\linewidth
|
||||
% [[file:figs/test_struts_misalign_schematic.png]]
|
||||
|
||||
% To verify this assumption, the dynamics from output DAC voltage $u$ to the measured displacement by the encoder $d_e$ is computed using the Simscape model with flexible APA for several misalignment in the $y$ direction.
|
||||
% To verify this assumption, the dynamics from output DAC voltage $u$ to the measured displacement by the encoder $d_e$ is computed using the flexible APA Simscape model for several misalignment in the $y$ direction.
|
||||
% Obtained dynamics are shown in Figure ref:fig:test_struts_effect_misalignment_y.
|
||||
% The alignment of the APA with the flexible joints as a *huge* influence on the dynamics from actuator voltage to measured displacement by the encoder.
|
||||
% The alignment of the APA with the flexible joints as a large influence on the dynamics from actuator voltage to measured displacement by the encoder.
|
||||
% The misalignment in the $y$ direction mostly influences:
|
||||
% - the presence of the flexible mode at 200Hz (see mode shape in Figure ref:fig:test_struts_mode_shapes_1)
|
||||
% - the location of the complex conjugate zero between the first two resonances:
|
||||
@@ -227,7 +226,7 @@ xlim([10, 2e3]);
|
||||
% - the location of the high frequency complex conjugate zeros at 500Hz (secondary effect, as the axial stiffness of the joint also has large effect on the position of this zero)
|
||||
|
||||
% The same can be done for a misalignment in the $x$ direction.
|
||||
% The obtained dynamics are shown in Figure ref:fig:test_struts_effect_misalignment_x where it is shown that misalignment in the $x$ direction mostly influences the presence of the flexible mode at 300Hz (see mode shape in Figure ref:fig:test_struts_mode_shapes_2).
|
||||
% The obtained dynamics (Figure ref:fig:test_struts_effect_misalignment_x) are showing that misalignment in the $x$ direction mostly influences the presence of the flexible mode at 300Hz (see mode shape in Figure ref:fig:test_struts_mode_shapes_2).
|
||||
|
||||
% Comparing the experimental frequency response functions for all the APA in Figure ref:fig:test_struts_comp_enc_plants with the model dynamics for several $y$ misalignments in Figure ref:fig:test_struts_effect_misalignment_y indicates a clear similarity.
|
||||
% This similarity suggests that the identified differences in dynamics are caused by the misalignment.
|
||||
@@ -301,6 +300,7 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
%% Transfer function from Vs to de - effect of x-misalignment
|
||||
figure;
|
||||
@@ -336,17 +336,18 @@ yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
xticks([1e1, 1e2, 1e3]);
|
||||
|
||||
% Measured strut misalignment
|
||||
% <<ssec:test_struts_meas_misalignment>>
|
||||
|
||||
% During the first mounting of the struts presented in Section ref:sec:test_struts_mounting, the positioning pins used to position the APA with respect to the flexible joints in the $y$ directions were not used (not received at the time).
|
||||
% Therefore, large $y$ misalignments may be expected.
|
||||
% During the initial mounting of the struts as presented in Section ref:sec:test_struts_mounting, the positioning pins that are used to position the APA with respect to the flexible joints in the $y$ directions were not used (not received at the time).
|
||||
% Therefore, large $y$ misalignments is expected.
|
||||
|
||||
% In order to estimate the misalignments between the two flexible joints and the APA:
|
||||
% - the struts are fixed horizontally to the mounting bench as shown in Figure ref:fig:test_struts_mounting_step_3 but without the encoder
|
||||
% - using a length gauge[fn:2], the height difference from the flexible joints surface and the APA shell surface is measured both for the top and bottom joints and on both sides
|
||||
% - as the thickness of the flexible joint is $21\,mm$ and the thickness of the APA shell is $20\,mm$, $0.5\,mm$ of height different should be measured is the two are perfectly aligned
|
||||
% - the struts are fixed horizontally on the mounting bench as shown in Figure ref:fig:test_struts_mounting_step_3 but without the encoder
|
||||
% - using a length gauge[fn:2], the height difference from the flexible joints surface and the APA shell surface is measured both for the top and bottom joints and for both sides
|
||||
% - as the thickness of the flexible joint is $21\,mm$ and the thickness of the APA shell is $20\,mm$, $0.5\,mm$ of height different should be measured if the two are perfectly aligned
|
||||
|
||||
% Large variations in the $y$ misalignment are found from one strut to the other (results are summarized in Table ref:tab:test_struts_meas_y_misalignment).
|
||||
|
||||
@@ -390,13 +391,11 @@ dy_top = (strut_align(:,3) - strut_align(:,4))/2; % [mm]
|
||||
% | 4 | -0.01 | 0.54 |
|
||||
% | 5 | 0.15 | 0.02 |
|
||||
|
||||
% By using the measured $y$ misalignment in the Simscape model with the flexible APA model, the measured dynamics from $u$ to $d_e$ can be approached as shown in Figure ref:fig:test_struts_comp_dy_tuned_model_frf_enc.
|
||||
% Even better match in the dynamics can be obtained by fine tuning both the $x$ and $y$ misalignments (yellow curves in Figure ref:fig:test_struts_comp_dy_tuned_model_frf_enc).
|
||||
|
||||
% By using the measured $y$ misalignment in the Simscape model with the flexible APA model, the model dynamics from $u$ to $d_e$ is closer to the measured one as shown in Figure ref:fig:test_struts_comp_dy_tuned_model_frf_enc.
|
||||
% Better match in the dynamics can be obtained by fine tuning both the $x$ and $y$ misalignments (yellow curves in Figure ref:fig:test_struts_comp_dy_tuned_model_frf_enc).
|
||||
|
||||
% This confirms that the misalignment between the APA and the strut axis (determined by the two flexible joints) is critical and is inducing large variations in the dynamics from DAC voltage $u$ to encoder measured displacement $d_e$.
|
||||
% If encoders are to be used when fixed on the struts, it is therefore very important to properly align the APA and the flexible joints when mounting the struts.
|
||||
|
||||
% If encoders are fixed to the struts, it is important to precisely align the APA and the flexible joints when mounting the struts.
|
||||
|
||||
% In the next section, the struts are re-assembled with a "positioning pin" to better align the APA with the flexible joints.
|
||||
% With a better alignment, the amplitude of the spurious resonances are expected to decrease as was shown in Figure ref:fig:test_struts_effect_misalignment_y.
|
||||
@@ -504,7 +503,7 @@ xlim([10, 2e3]); ylim([1e-8, 1e-3]);
|
||||
% This should make the APA better aligned with the two flexible joints.
|
||||
|
||||
% This alignment is then estimated using a length gauge as in the previous sections.
|
||||
% Measured $y$ alignments are summarized in Table ref:tab:test_struts_meas_y_misalignment_with_pin and are found to be bellow $55\mu m$ for all the struts which is much better than better (see Table ref:tab:test_struts_meas_y_misalignment).
|
||||
% Measured $y$ alignments are summarized in Table ref:tab:test_struts_meas_y_misalignment_with_pin and are found to be bellow $55\mu m$ for all the struts which is much better than before (see Table ref:tab:test_struts_meas_y_misalignment).
|
||||
|
||||
|
||||
%% Measurement of the y misalignment between the APA and the flexible joints after strut better alignment
|
||||
@@ -548,11 +547,10 @@ dy_top = (strut_align(:,3) - strut_align(:,4))/2; % [mm]
|
||||
|
||||
% The dynamics of the re-aligned struts are then measured using the same test bench (Figure ref:fig:test_struts_bench_leg).
|
||||
% The comparison of the initial strut dynamics and the dynamics of the re-aligned struts (i.e. with the positioning pin) is made in Figure ref:fig:test_struts_comp_enc_frf_realign.
|
||||
|
||||
% Even though the struts are now much better aligned, not much improvement can be observed.
|
||||
% The dynamics of the six aligned struts are quite different from one another.
|
||||
% Also, the dynamics of the six aligned struts are quite different from one another.
|
||||
|
||||
% Having the encoders fixed to the struts may prove to be difficult to use.
|
||||
% Having the encoders fixed to the struts are making the control more challenging.
|
||||
% Therefore, the encoders may be fixed to the nano-hexapod plates instead.
|
||||
|
||||
|
||||
@@ -581,9 +579,6 @@ end
|
||||
|
||||
%% Bode plot of the FRF from u to de
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(enc_frf(:, 1)), 'color', [colors(1,:), 0.5], ...
|
||||
'DisplayName', 'Initial alignment');
|
||||
@@ -599,145 +594,7 @@ for i = 1:length(strut_align_nums)
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
ylim([1e-8, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(strut_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [colors(1,:), 0.5]);
|
||||
end
|
||||
for i = 1:length(strut_align_nums)
|
||||
plot(f, 180/pi*angle(enc_frf_aligned(:, i)), 'color', [colors(2,:), 0.5]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlabel('Frequency [Hz]'); ylabel('Amplitude $d_e/u$ [m/V]');
|
||||
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
xlim([10, 2e3]);
|
||||
|
||||
% Effect of the flexible joint
|
||||
% <<ssec:test_struts_effect_joint_stiffness>>
|
||||
|
||||
% As the struts are composed of one APA and two flexible joints, it is expected that the flexible joint characteristics will change the dynamic behavior of the struts.
|
||||
|
||||
% Using the Simscape model, the effect of the flexible joint's characteristics on the dynamics as measured on the test bench are studied.
|
||||
% The studied dynamics is between $u$ and the encoder displacement $d_e$.
|
||||
|
||||
% Let's initialize an APA which is a little bit misaligned.
|
||||
|
||||
% APA Initialization
|
||||
n_hexapod.actuator = initializeAPA('type', 'flexible', 'd_align_bot', [0.1e-3; 0.5e-3; 0], 'd_align_top', [0.1e-3; 0.5e-3; 0]);
|
||||
|
||||
%% Study the effect of the bending stiffness of the Flexible joints
|
||||
% Tested bending stiffnesses [Nm/rad]
|
||||
kRs = [3, 4, 5, 6, 7];
|
||||
|
||||
% Idenfity the transfer function from actuator to encoder for all bending stiffnesses
|
||||
Gs_kRs = {zeros(length(kRs), 1)};
|
||||
|
||||
for i = 1:length(kRs)
|
||||
n_hexapod.flex_bot = initializeBotFlexibleJoint(...
|
||||
'type', '4dof', ...
|
||||
'kRx', kRs(i), ...
|
||||
'kRy', kRs(i));
|
||||
n_hexapod.flex_top = initializeTopFlexibleJoint(...
|
||||
'type', '4dof', ...
|
||||
'kRx', kRs(i), ...
|
||||
'kRy', kRs(i));
|
||||
|
||||
G = exp(-s*1e-4)*linearize(mdl, io, 0.0, opts);
|
||||
G.InputName = {'u'};
|
||||
G.OutputName = {'Vs', 'de', 'da'};
|
||||
|
||||
Gs_kRs(i) = {G};
|
||||
end
|
||||
|
||||
%% Study the effect of the axial stiffness of the Flexible joints
|
||||
% Tested axial stiffnesses [N/m]
|
||||
kzs = [5e7 7.5e7 1e8 2.5e8];
|
||||
|
||||
% Idenfity the transfer function from actuator to encoder for all bending stiffnesses
|
||||
Gs_kzs = {zeros(length(kzs), 1)};
|
||||
|
||||
for i = 1:length(kzs)
|
||||
n_hexapod.flex_bot = initializeBotFlexibleJoint(...
|
||||
'type', '4dof', ...
|
||||
'kz', kzs(i));
|
||||
n_hexapod.flex_top = initializeTopFlexibleJoint(...
|
||||
'type', '4dof', ...
|
||||
'kz', kzs(i));
|
||||
|
||||
G = exp(-s*1e-4)*linearize(mdl, io, 0.0, opts);
|
||||
G.InputName = {'u'};
|
||||
G.OutputName = {'Vs', 'de', 'da'};
|
||||
|
||||
Gs_kzs(i) = {G};
|
||||
end
|
||||
|
||||
%% Plot the obtained transfer functions for all the bending stiffnesses
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
for i = 1:length(kRs)
|
||||
plot(freqs, abs(squeeze(freqresp(Gs_kRs{i}('de', 'u'), freqs, 'Hz'))), ...
|
||||
'DisplayName', sprintf('$k_R = %.0f$ [Nm/rad]', kRs(i)));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(kRs)
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_kRs{i}('de', 'u'), freqs, 'Hz'))));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([20, 2e3]);
|
||||
|
||||
%% Plot the obtained transfer functions for all the axial stiffnesses
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
for i = 1:length(kzs)
|
||||
plot(freqs, abs(squeeze(freqresp(Gs_kzs{i}('de', 'u'), freqs, 'Hz'))), ...
|
||||
'DisplayName', sprintf('$k_z = %.1e$ [N/m]', kzs(i)));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(kzs)
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_kzs{i}('de', 'u'), freqs, 'Hz'))));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([20, 2e3]);
|
||||
|
Reference in New Issue
Block a user