Christophe's review

This commit is contained in:
2025-03-25 21:58:31 +01:00
parent 3285e50315
commit 92526d8889
8 changed files with 1334 additions and 1151 deletions

View File

@@ -21,47 +21,46 @@ colors = colororder;
% As all key stages of the micro-station are expected to behave as solid bodies, only 6 acrshort:dof can be considered for each solid body.
% However, it was chosen to use four 3-axis accelerometers (i.e. 12 measured acrshort:dof) for each considered solid body to have some redundancy and to be able to verify the solid body assumption (see Section ref:ssec:modal_solid_body_assumption).
% #+attr_latex: :options [t]{0.60\linewidth}
% #+attr_latex: :options [b]{0.63\linewidth}
% #+begin_minipage
% #+name: fig:modal_location_accelerometers
% #+caption: Position of the accelerometers
% #+attr_latex: :width 0.99\linewidth :float nil
% #+attr_latex: :width 0.95\linewidth :float nil
% [[file:figs/modal_location_accelerometers.png]]
% #+end_minipage
% \hfill
% #+attr_latex: :options [b]{0.38\linewidth}
% #+attr_latex: :options [b]{0.36\linewidth}
% #+begin_minipage
% #+begin_scriptsize
% #+name: tab:modal_position_accelerometers
% #+caption: Positions in mm
% #+latex: \centering
% #+attr_latex: :environment tabularx :width \linewidth :placement [b] :align Xccc
% #+attr_latex: :booktabs t :float nil :center nil
% #+RESULTS:
% | | $x$ | $y$ | $z$ |
% |--------------+------+------+------|
% | Low. Granite | -730 | -526 | -951 |
% | Low. Granite | -735 | 814 | -951 |
% | Low. Granite | 875 | 799 | -951 |
% | Low. Granite | 865 | -506 | -951 |
% | Up. Granite | -320 | -446 | -786 |
% | Up. Granite | -480 | 534 | -786 |
% | Up. Granite | 450 | 534 | -786 |
% | Up. Granite | 295 | -481 | -786 |
% | Translation | -475 | -414 | -427 |
% | Translation | -465 | 407 | -427 |
% | Translation | 475 | 424 | -427 |
% | Translation | 475 | -419 | -427 |
% | Tilt | -385 | -300 | -417 |
% | Tilt | -420 | 280 | -417 |
% | Tilt | 420 | 280 | -417 |
% | Tilt | 380 | -300 | -417 |
% | Spindle | -155 | -90 | -594 |
% | Spindle | 0 | 180 | -594 |
% | Spindle | 155 | -90 | -594 |
% | Hexapod | -64 | -64 | -270 |
% | Hexapod | -64 | 64 | -270 |
% | Hexapod | 64 | 64 | -270 |
% | Hexapod | 64 | -64 | -270 |
% | | $x$ | $y$ | $z$ |
% |-------------------+------+------+------|
% | (17) Low. Granite | -730 | -526 | -951 |
% | (18) Low. Granite | -735 | 814 | -951 |
% | (19) Low. Granite | 875 | 799 | -951 |
% | (20) Low. Granite | 865 | -506 | -951 |
% | (13) Up. Granite | -320 | -446 | -786 |
% | (14) Up. Granite | -480 | 534 | -786 |
% | (15) Up. Granite | 450 | 534 | -786 |
% | (16) Up. Granite | 295 | -481 | -786 |
% | (9) Translation | -475 | -414 | -427 |
% | (10) Translation | -465 | 407 | -427 |
% | (11) Translation | 475 | 424 | -427 |
% | (12) Translation | 475 | -419 | -427 |
% | (5) Tilt | -385 | -300 | -417 |
% | (6) Tilt | -420 | 280 | -417 |
% | (7) Tilt | 420 | 280 | -417 |
% | (8) Tilt | 380 | -300 | -417 |
% | (21) Spindle | -155 | -90 | -594 |
% | (22) Spindle | 0 | 180 | -594 |
% | (23) Spindle | 155 | -90 | -594 |
% | (1) Hexapod | -64 | -64 | -270 |
% | (2) Hexapod | -64 | 64 | -270 |
% | (3) Hexapod | 64 | 64 | -270 |
% | (4) Hexapod | 64 | -64 | -270 |
% #+latex: \captionof{table}{\label{tab:modal_position_accelerometers}Positions in mm}
% #+end_scriptsize
% #+end_minipage
@@ -99,6 +98,7 @@ acc_pos = acc_pos(i, 2:4);
% The "normalized" acrfull:asd of the two signals were computed and shown in Figure ref:fig:modal_asd_acc_force.
% Conclusions based on the time domain signals can be clearly observed in the frequency domain (wide frequency content for the force signal and complex dynamics for the accelerometer).
% These data are corresponding to a hammer impact in the vertical direction and to the measured acceleration in the $x$ direction by accelerometer $1$ (fixed to the micro-hexapod).
% Similar results were obtained for all measured frequency response functions.
@@ -117,12 +117,12 @@ time = linspace(0, meas1_raw.Track1_X_Resolution*length(meas1_raw.Track1), lengt
%% Raw measurement of the Accelerometer
figure;
hold on;
plot(time-22.2, meas1_raw.Track2, 'DisplayName', '$X_{j}$ [$m/s^2$]');
plot(time-22.2, 1e-3*meas1_raw.Track1, 'DisplayName', '$F_{k}$ [kN]');
plot(time-22.2, meas1_raw.Track2, 'DisplayName', '$X_{1,x}$ [$m/s^2$]');
plot(time-22.2, 1e-3*meas1_raw.Track1, 'DisplayName', '$F_{z}$ [kN]');
hold off;
xlabel('Time [s]');
ylabel('Amplitude');
xlim([0, 0.2]);
xlim([0, 0.2])
ylim([-2, 2]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
@@ -138,8 +138,8 @@ Noverlap = floor(Nfft/2); % Overlap for frequency analysis
%% Normalized Amplitude Spectral Density of the measured force and acceleration
figure;
hold on;
plot(f, sqrt(pxx_acc./max(pxx_acc(f<200))), 'DisplayName', '$X_{j}$');
plot(f, sqrt(pxx_force./max(pxx_force(f<200))), 'DisplayName', '$F_{k}$');
plot(f, sqrt(pxx_acc./max(pxx_acc(f<200))), 'DisplayName', '$\Gamma_{X_{1,x}}$');
plot(f, sqrt(pxx_force./max(pxx_force(f<200))), 'DisplayName', '$\Gamma_{F_{z}}$');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Normalized Spectral Density');
@@ -151,7 +151,7 @@ legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
% #+name: fig:modal_raw_meas_asd
% #+caption: Raw measurement of the accelerometer (blue) and of the force sensor at the Hammer tip (red) (\subref{fig:modal_raw_meas}). Computed Amplitude Spectral Densities of the two signals (normalized) (\subref{fig:modal_asd_acc_force})
% #+caption: Raw measurement of the accelerometer 1 in the $x$ direction (blue) and of the force sensor at the Hammer tip (red) for an impact in the $z$ direction (\subref{fig:modal_raw_meas}). Computed Amplitude Spectral Densities of the two signals (normalized) (\subref{fig:modal_asd_acc_force})
% #+attr_latex: :options [htbp]
% #+begin_figure
% #+attr_latex: :caption \subcaption{\label{fig:modal_raw_meas}Time domain signals}
@@ -168,7 +168,7 @@ legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
% #+end_subfigure
% #+end_figure
% The frequency response function $H_{jk}$ from the applied force $F_{k}$ to the measured acceleration $X_j$ is then computed and shown Figure ref:fig:modal_frf_acc_force.
% The frequency response function from the applied force to the measured acceleration is then computed and shown Figure ref:fig:modal_frf_acc_force.
% The quality of the obtained data can be estimated using the /coherence/ function (Figure ref:fig:modal_coh_acc_force).
% Good coherence is obtained from $20\,\text{Hz}$ to $200\,\text{Hz}$ which corresponds to the frequency range of interest.

View File

@@ -19,7 +19,7 @@ colors = colororder;
% The motion of the rigid body of figure ref:fig:modal_local_to_global_coordinates can be described by its displacement $\vec{\delta}p = [\delta p_x,\ \delta p_y,\ \delta p_z]$ and (small) rotations $[\delta \Omega_x,\ \delta \Omega_y,\ \delta \Omega_z]$ with respect to the reference frame $\{O\}$.
% The motion $\vec{\delta} p_{i}$ of a point $p_i$ can be computed from $\vec{\delta} p$ and $\bm{\delta \Omega}$ using equation eqref:eq:modal_compute_point_response, with $\bm{\delta\Omega}$ defined in equation eqref:eq:modal_rotation_matrix.
% The motion $\vec{\delta} p_{i}$ of a point $p_i$ can be computed from $\vec{\delta} p$ and $\bm{\delta \Omega}$ using equation eqref:eq:modal_compute_point_response, with $\bm{\delta\Omega}$ defined in equation eqref:eq:modal_rotation_matrix [[cite:&ewins00_modal chapt. 4.3.2]].
% \begin{equation}\label{eq:modal_compute_point_response}
% \vec{\delta} p_{i} &= \vec{\delta} p + \bm{\delta \Omega} \cdot \vec{p}_{i} \\
@@ -52,30 +52,12 @@ colors = colororder;
% \end{array}\right]
% \end{equation}
% Provided that the four sensors are properly located, the system of equation eqref:eq:modal_cart_to_acc can be solved by matrix inversion[fn:5].
% The motion of the solid body expressed in a chosen frame $\{O\}$ can be determined using equation eqref:eq:modal_determine_global_disp.
% Provided that the four sensors are properly located, the system of equation eqref:eq:modal_cart_to_acc can be solved by matrix inversion[fn:modal_5].
% The motion of the solid body expressed in a chosen frame $\{O\}$ can be determined by inverting equation eqref:eq:modal_cart_to_acc.
% Note that this matrix inversion is equivalent to resolving a mean square problem.
% Therefore, having more accelerometers permits better approximation of the motion of a solid body.
% \begin{equation}
% \left[\begin{array}{c}
% \delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
% \end{array}\right] =
% \left[\begin{array}{ccc|ccc}
% 1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
% 0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
% 0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
% & \vdots & & & \vdots & \\ \hline
% 1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
% 0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
% 0 & 0 & 1 & p_{4y} & -p_{4x} & 0
% \end{array}\right]^{-1} \left[\begin{array}{c}
% \delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
% \end{array}\right] \label{eq:modal_determine_global_disp}
% \end{equation}
% From the CAD model, the position of the center of mass of each considered solid body is computed (see Table ref:tab:modal_com_solid_bodies).
% From the CAD model, the position of the center of mass of each solid body is computed (see Table ref:tab:modal_com_solid_bodies).
% The position of each accelerometer with respect to the center of mass of the corresponding solid body can easily be determined.
@@ -110,19 +92,19 @@ model_com = reshape(table2array(readtable('mat/model_solidworks_com.txt', 'ReadV
% #+name: tab:modal_com_solid_bodies
% #+caption: Center of mass of considered solid bodies with respect to the "point of interest"
% #+attr_latex: :environment tabularx :width 0.6\linewidth :align lXXX
% #+attr_latex: :environment tabularx :width 0.55\linewidth :align Xccc
% #+attr_latex: :center t :booktabs t
% #+RESULTS:
% | | $X$ [mm] | $Y$ [mm] | $Z$ [mm] |
% |-------------------+----------+----------+----------|
% | Bottom Granite | 45 | 144 | -1251 |
% | Top granite | 52 | 258 | -778 |
% | Translation stage | 0 | 14 | -600 |
% | Tilt Stage | 0 | -5 | -628 |
% | Spindle | 0 | 0 | -580 |
% | Hexapod | -4 | 6 | -319 |
% | | $X$ | $Y$ | $Z$ |
% |-------------------+-----------------+------------------+--------------------|
% | Bottom Granite | $45\,\text{mm}$ | $144\,\text{mm}$ | $-1251\,\text{mm}$ |
% | Top granite | $52\,\text{mm}$ | $258\,\text{mm}$ | $-778\,\text{mm}$ |
% | Translation stage | $0$ | $14\,\text{mm}$ | $-600\,\text{mm}$ |
% | Tilt Stage | $0$ | $-5\,\text{mm}$ | $-628\,\text{mm}$ |
% | Spindle | $0$ | $0$ | $-580\,\text{mm}$ |
% | Hexapod | $-4\,\text{mm}$ | $6\,\text{mm}$ | $-319\,\text{mm}$ |
% Using eqref:eq:modal_determine_global_disp, the frequency response matrix $\mathbf{H}_\text{CoM}$ eqref:eq:modal_frf_matrix_com expressing the response at the center of mass of each solid body $D_i$ ($i$ from $1$ to $6$ for the $6$ considered solid bodies) can be computed from the initial acrshort:frf matrix $\mathbf{H}$.
% Using eqref:eq:modal_cart_to_acc, the frequency response matrix $\mathbf{H}_\text{CoM}$ eqref:eq:modal_frf_matrix_com expressing the response at the center of mass of each solid body $D_i$ ($i$ from $1$ to $6$ for the $6$ considered solid bodies) can be computed from the initial acrshort:frf matrix $\mathbf{H}$.
% \begin{equation}\label{eq:modal_frf_matrix_com}
% \mathbf{H}_\text{CoM}(\omega_i) = \begin{bmatrix}
@@ -205,7 +187,7 @@ end
% This also validates the reduction in the number of degrees of freedom from 69 (23 accelerometers with each 3 acrshort:dof) to 36 (6 solid bodies with 6 acrshort:dof).
%% Comparaison of the original accelerometer response and reconstructed response from the solid body response
%% Comparison of the original accelerometer response and reconstructed response from the solid body response
exc_names = {'$F_x$', '$F_y$', '$F_z$'};
DOFs = {'x', 'y', 'z', '\theta_x', '\theta_y', '\theta_z'};
@@ -223,11 +205,10 @@ for i = 1:length(accs_i)
hold on;
for dir_i = 1:3
plot(freqs, abs(squeeze(frf(3*(acc_i-1)+dir_i, exc_dir, :))), '-', 'DisplayName', sprintf('$a_{%i,%s}$', acc_i, DOFs{dir_i}));
plot(freqs, abs(squeeze(frf(3*(acc_i-1)+dir_i, exc_dir, :))), '-', 'color', [colors(dir_i,:), 0.5], 'linewidth', 2.5, 'DisplayName', sprintf('$a_{%i,%s}$ - meas', acc_i, DOFs{dir_i}));
end
set(gca,'ColorOrderIndex',1)
for dir_i = 1:3
plot(freqs, abs(squeeze(frfs_A(3*(acc_i-1)+dir_i, exc_dir, :))), '--', 'HandleVisibility', 'off');
plot(freqs, abs(squeeze(frfs_A(3*(acc_i-1)+dir_i, exc_dir, :))), '-', 'color', colors(dir_i, :), 'DisplayName', sprintf('$a_{%i,%s}$ - solid body', acc_i, DOFs{dir_i}));
end
hold off;
@@ -246,5 +227,6 @@ for i = 1:length(accs_i)
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'log');
xlim([0, 200]); ylim([1e-6, 3e-2]);
xticks([0:20:200]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
leg.ItemTokenSize(1) = 15;
end

View File

@@ -12,7 +12,7 @@ colors = colororder;
% Number of modes determination
% <<ssec:modal_number_of_modes>>
% The acrshort:mif is here applied to the $n\times p$ acrshort:frf matrix where $n$ is a relatively large number of measurement DOFs (here $n=69$) and $p$ is the number of excitation DOFs (here $p=3$).
% The acrshort:mif is applied to the $n\times p$ acrshort:frf matrix where $n$ is a relatively large number of measurement DOFs (here $n=69$) and $p$ is the number of excitation DOFs (here $p=3$).
% The complex modal indication function is defined in equation eqref:eq:modal_cmif where the diagonal matrix $\Sigma$ is obtained from a acrlong:svd of the acrshort:frf matrix as shown in equation eqref:eq:modal_svd.
% \begin{equation} \label{eq:modal_cmif}
@@ -46,7 +46,7 @@ end
figure;
hold on;
for i = 1:size(MIF, 1)
plot(freqs, squeeze(MIF(i, i, :)));
plot(freqs, squeeze(MIF(i, i, :)), 'DisplayName', sprintf('MIF${}_%i$', i));
end
hold off;
set(gca, 'Xscale', 'lin'); set(gca, 'Yscale', 'log');
@@ -54,6 +54,7 @@ xlabel('Frequency [Hz]'); ylabel('CMIF Amplitude');
xticks([0:20:200]);
xlim([0, 200]);
ylim([1e-6, 2e-2]);
ldg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
% Verification of the modal model validity
% <<ssec:modal_model_validity>>
@@ -70,7 +71,7 @@ ylim([1e-6, 2e-2]);
% \end{bmatrix}_{n \times 2m}
% \end{equation}
% The full acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ can be synthesize using eqref:eq:modal_synthesized_frf.
% The full acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ can be obtained using eqref:eq:modal_synthesized_frf.
% \begin{equation}\label{eq:modal_synthesized_frf}
% [\mathbf{H}_{\text{syn}}(\omega)]_{n\times n} = [\Phi]_{n\times2m} [\mathbf{H}_{\text{mod}}(\omega)]_{2m\times2m} [\Phi]_{2m\times n}^T
@@ -138,14 +139,14 @@ for i = 1:length(freqs)
Hsyn(:, :, i) = eigen_vec_ext_M*diag(1./(diag(modal_a_ext_M).*(j*2*pi*freqs(i) - diag(eigen_val_ext_M))))*eigen_vec_ext_M.';
end
%% Derivate two times to to have the acceleration response
%% Derivate two times to have the acceleration response
for i = 1:size(Hsyn, 1)
Hsyn(i, :, :) = squeeze(Hsyn(i, :, :)).*(j*2*pi*freqs).^2;
end
% The comparison between the original measured frequency response functions and those synthesized ones from the modal model is presented in Figure ref:fig:modal_comp_acc_frf_modal.
% A comparison between original measured frequency response functions and synthesized ones from the modal model is presented in Figure ref:fig:modal_comp_acc_frf_modal.
% Whether the obtained match is good or bad is quite arbitrary.
% However, the modal model seems to be able to represent the coupling between different nodes and different directions, which is quite important from a control perspective.
% This can be seen in Figure ref:fig:modal_comp_acc_frf_modal_3 that shows the frequency response function from the force applied on node 11 (i.e. on the translation stage) in the $y$ direction to the measured acceleration at node $2$ (i.e. at the top of the micro-hexapod) in the $x$ direction.