diff --git a/figs/ustation_frf_compliance_Rxyz_model.pdf b/figs/ustation_frf_compliance_Rxyz_model.pdf index 61e4fc2..89ca6a5 100644 Binary files a/figs/ustation_frf_compliance_Rxyz_model.pdf and b/figs/ustation_frf_compliance_Rxyz_model.pdf differ diff --git a/figs/ustation_frf_compliance_Rxyz_model.png b/figs/ustation_frf_compliance_Rxyz_model.png index 5db9e4a..d2a8322 100644 Binary files a/figs/ustation_frf_compliance_Rxyz_model.png and b/figs/ustation_frf_compliance_Rxyz_model.png differ diff --git a/figs/ustation_frf_compliance_xyz_model.pdf b/figs/ustation_frf_compliance_xyz_model.pdf index 7f73a2f..27348f4 100644 Binary files a/figs/ustation_frf_compliance_xyz_model.pdf and b/figs/ustation_frf_compliance_xyz_model.pdf differ diff --git a/figs/ustation_frf_compliance_xyz_model.png b/figs/ustation_frf_compliance_xyz_model.png index 546e85a..b9fcb58 100644 Binary files a/figs/ustation_frf_compliance_xyz_model.png and b/figs/ustation_frf_compliance_xyz_model.png differ diff --git a/matlab/ustation_1_kinematics.m b/matlab/ustation_1_kinematics.m index 1323d2f..5e0ef55 100644 --- a/matlab/ustation_1_kinematics.m +++ b/matlab/ustation_1_kinematics.m @@ -42,50 +42,50 @@ freqs = logspace(log10(10), log10(2e3), 1000); % As any motion stage induces parasitic motion in all 6 DoF, the transformation matrix representing its induced motion can be written as in eqref:eq:ustation_translation_stage_errors. % \begin{equation}\label{eq:ustation_translation_stage_errors} -% {}^A\mathbf{T}_B(D_x, D_y, D_z, \theta_x, \theta_y, \theta_z) = +% {}^A\bm{T}_B(D_x, D_y, D_z, \theta_x, \theta_y, \theta_z) = % \left[ \begin{array}{ccc|c} % & & & D_x \\ -% & \mathbf{R}_x(\theta_x) \mathbf{R}_y(\theta_y) \mathbf{R}_z(\theta_z) & & D_y \\ +% & \bm{R}_x(\theta_x) \bm{R}_y(\theta_y) \bm{R}_z(\theta_z) & & D_y \\ % & & & D_z \cr % \hline % 0 & 0 & 0 & 1 % \end{array} \right] % \end{equation} -% The homogeneous transformation matrix corresponding to the micro-station $\mathbf{T}_{\mu\text{-station}}$ is simply equal to the matrix multiplication of the homogeneous transformation matrices of the individual stages as shown in Equation eqref:eq:ustation_transformation_station. +% The homogeneous transformation matrix corresponding to the micro-station $\bm{T}_{\mu\text{-station}}$ is simply equal to the matrix multiplication of the homogeneous transformation matrices of the individual stages as shown in Equation eqref:eq:ustation_transformation_station. % \begin{equation}\label{eq:ustation_transformation_station} -% \mathbf{T}_{\mu\text{-station}} = \mathbf{T}_{D_y} \cdot \mathbf{T}_{R_y} \cdot \mathbf{T}_{R_z} \cdot \mathbf{T}_{\mu\text{-hexapod}} +% \bm{T}_{\mu\text{-station}} = \bm{T}_{D_y} \cdot \bm{T}_{R_y} \cdot \bm{T}_{R_z} \cdot \bm{T}_{\mu\text{-hexapod}} % \end{equation} -% $\mathbf{T}_{\mu\text{-station}}$ represents the pose of the sample (supposed to be rigidly fixed on top of the positioning-hexapod) with respect to the granite. +% $\bm{T}_{\mu\text{-station}}$ represents the pose of the sample (supposed to be rigidly fixed on top of the positioning-hexapod) with respect to the granite. -% If the transformation matrices of the individual stages are each representing a perfect motion (i.e. the stages are supposed to have no parasitic motion), $\mathbf{T}_{\mu\text{-station}}$ then represent the pose setpoint of the sample with respect to the granite. +% If the transformation matrices of the individual stages are each representing a perfect motion (i.e. the stages are supposed to have no parasitic motion), $\bm{T}_{\mu\text{-station}}$ then represent the pose setpoint of the sample with respect to the granite. % The transformation matrices for the translation stage, tilt stage, spindle, and positioning hexapod can be written as shown in Equation eqref:eq:ustation_transformation_matrices_stages. % \begin{equation}\label{eq:ustation_transformation_matrices_stages} % \begin{align} -% \mathbf{T}_{D_y} &= \begin{bmatrix} +% \bm{T}_{D_y} &= \begin{bmatrix} % 1 & 0 & 0 & 0 \\ % 0 & 1 & 0 & D_y \\ % 0 & 0 & 1 & 0 \\ % 0 & 0 & 0 & 1 % \end{bmatrix} \quad -% \mathbf{T}_{\mu\text{-hexapod}} = +% \bm{T}_{\mu\text{-hexapod}} = % \left[ \begin{array}{ccc|c} % & & & D_{\mu x} \\ -% & \mathbf{R}_x(\theta_{\mu x}) \mathbf{R}_y(\theta_{\mu y}) \mathbf{R}_{z}(\theta_{\mu z}) & & D_{\mu y} \\ +% & \bm{R}_x(\theta_{\mu x}) \bm{R}_y(\theta_{\mu y}) \bm{R}_{z}(\theta_{\mu z}) & & D_{\mu y} \\ % & & & D_{\mu z} \cr % \hline % 0 & 0 & 0 & 1 % \end{array} \right] \\ -% \mathbf{T}_{R_z} &= \begin{bmatrix} +% \bm{T}_{R_z} &= \begin{bmatrix} % \cos(\theta_z) & -\sin(\theta_z) & 0 & 0 \\ % \sin(\theta_z) & \cos(\theta_z) & 0 & 0 \\ % 0 & 0 & 1 & 0 \\ % 0 & 0 & 0 & 1 % \end{bmatrix} \quad -% \mathbf{T}_{R_y} = \begin{bmatrix} +% \bm{T}_{R_y} = \begin{bmatrix} % \cos(\theta_y) & 0 & \sin(\theta_y) & 0 \\ % 0 & 1 & 0 & 0 \\ % -\sin(\theta_y) & 0 & \cos(\theta_y) & 0 \\ diff --git a/matlab/ustation_2_modeling.m b/matlab/ustation_2_modeling.m index ed59fcc..782ad15 100644 --- a/matlab/ustation_2_modeling.m +++ b/matlab/ustation_2_modeling.m @@ -31,9 +31,9 @@ freqs = logspace(log10(10), log10(2e3), 1000); % The dynamics of the micro-station was measured by placing accelerometers on each stage and by impacting the translation stage with an instrumented hammer in three directions. % The obtained FRFs were then projected at the CoM of each stage. -% To gain a first insight into the accuracy of the obtained model, the FRFs from the hammer impacts to the acceleration of each stage were extracted from the Simscape model and compared with the measurements in Figure ref:fig:ustation_comp_com_response. +% To gain a first insight into the accuracy of the obtained model, the FRFs from the hammer impacts to the acceleration of each stage were extracted from the multi-body model and compared with the measurements in Figure ref:fig:ustation_comp_com_response. -% Even though there is some similarity between the model and the measurements (similar overall shapes and amplitudes), it is clear that the Simscape model does not accurately represent the complex micro-station dynamics. +% Even though there is some similarity between the model and the measurements (similar overall shapes and amplitudes), it is clear that the multi-body model does not accurately represent the complex micro-station dynamics. % Tuning the numerous model parameters to better match the measurements is a highly non-linear optimization problem that is difficult to solve in practice. @@ -151,10 +151,10 @@ ylim([1e-6, 1e-1]) % #+caption: Schematic of the measurement setup used to estimate the compliance of the micro-station. The top platform of the positioning hexapod is shown with four 3-axis accelerometers (shown in red) are on top. 10 hammer impacts are performed at different locations (shown in blue). % [[file:figs/ustation_compliance_meas.png]] -% To convert the 12 acceleration signals $a_{\mathcal{L}} = [a_{1x}\ a_{1y}\ a_{1z}\ a_{2x}\ \dots\ a_{4z}]$ to the acceleration expressed in the frame $\{\mathcal{X}\}$ $a_{\mathcal{X}} = [a_{dx}\ a_{dy}\ a_{dz}\ a_{rx}\ a_{ry}\ a_{rz}]$, a Jacobian matrix $\mathbf{J}_a$ is written based on the positions and orientations of the accelerometers eqref:eq:ustation_compliance_acc_jacobian. +% To convert the 12 acceleration signals $a_{\mathcal{L}} = [a_{1x}\ a_{1y}\ a_{1z}\ a_{2x}\ \dots\ a_{4z}]$ to the acceleration expressed in the frame $\{\mathcal{X}\}$ $a_{\mathcal{X}} = [a_{dx}\ a_{dy}\ a_{dz}\ a_{rx}\ a_{ry}\ a_{rz}]$, a Jacobian matrix $\bm{J}_a$ is written based on the positions and orientations of the accelerometers eqref:eq:ustation_compliance_acc_jacobian. % \begin{equation}\label{eq:ustation_compliance_acc_jacobian} -% \mathbf{J}_a = \begin{bmatrix} +% \bm{J}_a = \begin{bmatrix} % 1 & 0 & 0 & 0 & 0 &-d \\ % 0 & 1 & 0 & 0 & 0 & 0 \\ % 0 & 0 & 1 & d & 0 & 0 \\ @@ -173,13 +173,13 @@ ylim([1e-6, 1e-1]) % Then, the acceleration in the cartesian frame can be computed using eqref:eq:ustation_compute_cart_acc. % \begin{equation}\label{eq:ustation_compute_cart_acc} -% a_{\mathcal{X}} = \mathbf{J}_a^\dagger \cdot a_{\mathcal{L}} +% a_{\mathcal{X}} = \bm{J}_a^\dagger \cdot a_{\mathcal{L}} % \end{equation} -% Similar to what is done for the accelerometers, a Jacobian matrix $\mathbf{J}_F$ is computed eqref:eq:ustation_compliance_force_jacobian and used to convert the individual hammer forces $F_{\mathcal{L}}$ to force and torques $F_{\mathcal{X}}$ applied at the center of the micro-hexapod top plate (defined by frame $\{\mathcal{X}\}$ in Figure ref:fig:ustation_compliance_meas). +% Similar to what is done for the accelerometers, a Jacobian matrix $\bm{J}_F$ is computed eqref:eq:ustation_compliance_force_jacobian and used to convert the individual hammer forces $F_{\mathcal{L}}$ to force and torques $F_{\mathcal{X}}$ applied at the center of the micro-hexapod top plate (defined by frame $\{\mathcal{X}\}$ in Figure ref:fig:ustation_compliance_meas). % \begin{equation}\label{eq:ustation_compliance_force_jacobian} -% \mathbf{J}_F = \begin{bmatrix} +% \bm{J}_F = \begin{bmatrix} % 0 & -1 & 0 & 0 & 0 & 0\\ % 0 & 0 & -1 & -d & 0 & 0\\ % 1 & 0 & 0 & 0 & 0 & 0\\ @@ -196,11 +196,11 @@ ylim([1e-6, 1e-1]) % The equivalent forces and torques applied at center of $\{\mathcal{X}\}$ are then computed using eqref:eq:ustation_compute_cart_force. % \begin{equation}\label{eq:ustation_compute_cart_force} -% F_{\mathcal{X}} = \mathbf{J}_F^t \cdot F_{\mathcal{L}} +% F_{\mathcal{X}} = \bm{J}_F^t \cdot F_{\mathcal{L}} % \end{equation} % Using the two Jacobian matrices, the FRF from the 10 hammer impacts to the 12 accelerometer outputs can be converted to the FRF from 6 forces/torques applied at the origin of frame $\{\mathcal{X}\}$ to the 6 linear/angular accelerations of the top platform expressed with respect to $\{\mathcal{X}\}$. -% These FRFs were then used for comparison with the Simscape model. +% These FRFs were then used for comparison with the multi-body model. % Positions and orientation of accelerometers @@ -379,12 +379,12 @@ Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'}; %% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model figure; hold on; -plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '-', 'color', [colors(1,:), 0.5], 'DisplayName', '$D_x/F_x$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '-', 'color', [colors(2,:), 0.5], 'DisplayName', '$D_y/F_y$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '-', 'color', [colors(3,:), 0.5], 'DisplayName', '$D_z/F_z$ - Measured') -plot(f, abs(squeeze(freqresp(Gm(1,1), f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Model') -plot(f, abs(squeeze(freqresp(Gm(2,2), f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Model') -plot(f, abs(squeeze(freqresp(Gm(3,3), f, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Model') +plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_x/F_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_y/F_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '-', 'color', [colors(3,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_z/F_z$ - Measured') +plot(f, abs(squeeze(freqresp(Gm(1,1), f, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Model') +plot(f, abs(squeeze(freqresp(Gm(2,2), f, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Model') +plot(f, abs(squeeze(freqresp(Gm(3,3), f, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Model') hold off; leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); leg.ItemTokenSize(1) = 15; @@ -396,12 +396,12 @@ xticks([20, 50, 100, 200, 500]) %% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model figure; hold on; -plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '-', 'color', [colors(1,:), 0.5], 'DisplayName', '$R_x/M_x$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '-', 'color', [colors(2,:), 0.5], 'DisplayName', '$R_y/M_y$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '-', 'color', [colors(3,:), 0.5], 'DisplayName', '$R_z/M_z$ - Measured') -plot(f, abs(squeeze(freqresp(Gm(4,4), f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Model') -plot(f, abs(squeeze(freqresp(Gm(5,5), f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Model') -plot(f, abs(squeeze(freqresp(Gm(6,6), f, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Model') +plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_x/M_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_y/M_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '-', 'color', [colors(3,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_z/M_z$ - Measured') +plot(f, abs(squeeze(freqresp(Gm(4,4), f, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Model') +plot(f, abs(squeeze(freqresp(Gm(5,5), f, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Model') +plot(f, abs(squeeze(freqresp(Gm(6,6), f, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Model') hold off; leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); leg.ItemTokenSize(1) = 15; diff --git a/matlab/ustation_3_disturbances.m b/matlab/ustation_3_disturbances.m index d5a5eb4..72997be 100644 --- a/matlab/ustation_3_disturbances.m +++ b/matlab/ustation_3_disturbances.m @@ -27,7 +27,7 @@ freqs = logspace(log10(10), log10(2e3), 1000); % Ground Motion -% The ground motion was measured by using a sensitive 3-axis geophone[fn:11] placed on the ground. +% The ground motion was measured by using a sensitive 3-axis geophone[fn:ustation_11] placed on the ground. % The generated voltages were recorded with a high resolution DAC, and converted to displacement using the Geophone sensitivity transfer function. % The obtained ground motion displacement is shown in Figure ref:fig:ustation_ground_disturbance. @@ -72,7 +72,7 @@ leg.ItemTokenSize(1) = 15; % Ty Stage % To measure the positioning errors of the translation stage, the setup shown in Figure ref:fig:ustation_errors_ty_setup is used. -% A special optical element (called a "straightness interferometer"[fn:9]) is fixed on top of the micro-station, while a laser source[fn:10] and a straightness reflector are fixed on the ground. +% A special optical element (called a "straightness interferometer"[fn:ustation_9]) is fixed on top of the micro-station, while a laser source[fn:ustation_10] and a straightness reflector are fixed on the ground. % A similar setup was used to measure the horizontal deviation (i.e. in the $x$ direction), as well as the pitch and yaw errors of the translation stage. % #+name: fig:ustation_errors_ty_setup @@ -156,9 +156,9 @@ pxx_dy_dx = pxx_dy_dz; % Spindle -% To measure the positioning errors induced by the Spindle, a "Spindle error analyzer"[fn:7] is used as shown in Figure ref:fig:ustation_rz_meas_lion_setup. +% To measure the positioning errors induced by the Spindle, a "Spindle error analyzer"[fn:ustation_7] is used as shown in Figure ref:fig:ustation_rz_meas_lion_setup. % A specific target is fixed on top of the micro-station, which consists of two sphere with 1 inch diameter precisely aligned with the spindle rotation axis. -% Five capacitive sensors[fn:8] are pointing at the two spheres, as shown in Figure ref:fig:ustation_rz_meas_lion_zoom. +% Five capacitive sensors[fn:ustation_8] are pointing at the two spheres, as shown in Figure ref:fig:ustation_rz_meas_lion_zoom. % From the 5 measured displacements $[d_1,\,d_2,\,d_3,\,d_4,\,d_5]$, the translations and rotations $[D_x,\,D_y,\,D_z,\,R_x,\,R_y]$ of the target can be estimated. % #+name: fig:ustation_rz_meas_lion_setup @@ -364,7 +364,7 @@ leg.ItemTokenSize(1) = 15; % Obtained disturbance sources % <> -% From the measured effect of disturbances in Section ref:ssec:ustation_disturbances_meas and the sensitivity to disturbances extracted from the Simscape model in Section ref:ssec:ustation_disturbances_sensitivity, the power spectral density of the disturbance sources (i.e. forces applied in the stage's joint) can be estimated. +% From the measured effect of disturbances in Section ref:ssec:ustation_disturbances_meas and the sensitivity to disturbances extracted from the multi-body model in Section ref:ssec:ustation_disturbances_sensitivity, the power spectral density of the disturbance sources (i.e. forces applied in the stage's joint) can be estimated. % The obtained power spectral density of the disturbances are shown in Figure ref:fig:ustation_dist_sources. @@ -497,5 +497,5 @@ plot(Dw.t, 1e6*Dw.y, 'DisplayName', '$D_{yf}$'); plot(Dw.t, 1e6*Dw.z, 'DisplayName', '$D_{zf}$'); xlabel('Time [s]'); ylabel('Amplitude [$\mu$m]') xlim([0, 1]); ylim([-0.6, 0.6]) -leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1); +leg = legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 1); leg.ItemTokenSize(1) = 15; diff --git a/simscape-micro-station.org b/simscape-micro-station.org index c1d9dc5..af5a00a 100644 --- a/simscape-micro-station.org +++ b/simscape-micro-station.org @@ -1279,12 +1279,12 @@ Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'}; %% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model figure; hold on; -plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '-', 'color', [colors(1,:), 0.5], 'DisplayName', '$D_x/F_x$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '-', 'color', [colors(2,:), 0.5], 'DisplayName', '$D_y/F_y$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '-', 'color', [colors(3,:), 0.5], 'DisplayName', '$D_z/F_z$ - Measured') -plot(f, abs(squeeze(freqresp(Gm(1,1), f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Model') -plot(f, abs(squeeze(freqresp(Gm(2,2), f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Model') -plot(f, abs(squeeze(freqresp(Gm(3,3), f, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Model') +plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_x/F_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_y/F_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '-', 'color', [colors(3,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$D_z/F_z$ - Measured') +plot(f, abs(squeeze(freqresp(Gm(1,1), f, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Model') +plot(f, abs(squeeze(freqresp(Gm(2,2), f, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Model') +plot(f, abs(squeeze(freqresp(Gm(3,3), f, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Model') hold off; leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); leg.ItemTokenSize(1) = 15; @@ -1302,12 +1302,12 @@ exportFig('figs/ustation_frf_compliance_xyz_model.pdf', 'width', 'half', 'height %% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model figure; hold on; -plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '-', 'color', [colors(1,:), 0.5], 'DisplayName', '$R_x/M_x$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '-', 'color', [colors(2,:), 0.5], 'DisplayName', '$R_y/M_y$ - Measured') -plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '-', 'color', [colors(3,:), 0.5], 'DisplayName', '$R_z/M_z$ - Measured') -plot(f, abs(squeeze(freqresp(Gm(4,4), f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Model') -plot(f, abs(squeeze(freqresp(Gm(5,5), f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Model') -plot(f, abs(squeeze(freqresp(Gm(6,6), f, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Model') +plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_x/M_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_y/M_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '-', 'color', [colors(3,:), 0.5], 'linewidth', 2.5, 'DisplayName', '$R_z/M_z$ - Measured') +plot(f, abs(squeeze(freqresp(Gm(4,4), f, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Model') +plot(f, abs(squeeze(freqresp(Gm(5,5), f, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Model') +plot(f, abs(squeeze(freqresp(Gm(6,6), f, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Model') hold off; leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); leg.ItemTokenSize(1) = 15; @@ -1322,7 +1322,7 @@ exportFig('figs/ustation_frf_compliance_Rxyz_model.pdf', 'width', 'half', 'heigh #+end_src #+name: fig:ustation_frf_compliance_model -#+caption: Compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. The measured FRFs are display by solid lines, while the FRFs extracted from the multi-body models are shown by dashed lines. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed. +#+caption: Compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. The measured FRFs are display by translucent lines, while the FRFs extracted from the multi-body models are shown by opaque lines. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed. #+attr_latex: :options [htbp] #+begin_figure #+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz_model}Compliance in translation} @@ -3599,12 +3599,6 @@ end :header-args:matlab+: :comments none :mkdirp yes :eval no :END: -**** Documentation - -#+name: fig:stewart-frames-position -#+caption: Definition of the position of the frames -[[file:figs/stewart-frames-position.png]] - **** Function description #+begin_src matlab function [stewart] = initializeStewartPlatform() @@ -3709,51 +3703,6 @@ end :header-args:matlab+: :comments none :mkdirp yes :eval no :END: -**** Documentation - -#+begin_src latex :file stewart_bottom_plate.pdf :tangle no - \begin{tikzpicture} - % Internal and external limit - \draw[fill=white!80!black] (0, 0) circle [radius=3]; - % Circle where the joints are located - \draw[dashed] (0, 0) circle [radius=2.5]; - - % Bullets for the positions of the joints - \node[] (J1) at ( 80:2.5){$\bullet$}; - \node[] (J2) at (100:2.5){$\bullet$}; - \node[] (J3) at (200:2.5){$\bullet$}; - \node[] (J4) at (220:2.5){$\bullet$}; - \node[] (J5) at (320:2.5){$\bullet$}; - \node[] (J6) at (340:2.5){$\bullet$}; - - % Name of the points - \node[above right] at (J1) {$a_{1}$}; - \node[above left] at (J2) {$a_{2}$}; - \node[above left] at (J3) {$a_{3}$}; - \node[right ] at (J4) {$a_{4}$}; - \node[left ] at (J5) {$a_{5}$}; - \node[above right] at (J6) {$a_{6}$}; - - % First 2 angles - \draw[dashed, ->] (0:1) arc [start angle=0, end angle=80, radius=1] node[below right]{$\theta_{1}$}; - \draw[dashed, ->] (0:1.5) arc [start angle=0, end angle=100, radius=1.5] node[left ]{$\theta_{2}$}; - - % Division of 360 degrees by 3 - \draw[dashed] (0, 0) -- ( 80:3.2); - \draw[dashed] (0, 0) -- (100:3.2); - \draw[dashed] (0, 0) -- (200:3.2); - \draw[dashed] (0, 0) -- (220:3.2); - \draw[dashed] (0, 0) -- (320:3.2); - \draw[dashed] (0, 0) -- (340:3.2); - - % Radius for the position of the joints - \draw[<->] (0, 0) --node[near end, above]{$R$} (180:2.5); - - \draw[->] (0, 0) -- ++(3.4, 0) node[above]{$x$}; - \draw[->] (0, 0) -- ++(0, 3.4) node[left]{$y$}; - \end{tikzpicture} -#+end_src - **** Function description #+begin_src matlab function [stewart] = generateGeneralConfiguration(stewart, args) diff --git a/simscape-micro-station.pdf b/simscape-micro-station.pdf index 7ab38c0..097e8c5 100644 Binary files a/simscape-micro-station.pdf and b/simscape-micro-station.pdf differ diff --git a/simscape-micro-station.tex b/simscape-micro-station.tex index 3d55098..db18cd4 100644 --- a/simscape-micro-station.tex +++ b/simscape-micro-station.tex @@ -1,4 +1,4 @@ -% Created 2024-11-18 Mon 13:10 +% Created 2025-03-25 Tue 22:22 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -422,6 +422,7 @@ The springs and dampers values were first estimated from the joint/stage specifi The spring values are summarized in Table \ref{tab:ustation_6dof_stiffness_values}. \begin{table}[htbp] +\caption{\label{tab:ustation_6dof_stiffness_values}Summary of the stage stiffnesses. The contrained degrees-of-freedom are indicated by ``-''. The frames in which the 6-DoF joints are defined are indicated in figures found in Section \ref{ssec:ustation_stages}} \centering \begin{tabularx}{\linewidth}{Xcccccc} \toprule @@ -434,8 +435,6 @@ Spindle & \(700\,N/\mu m\) & \(700\,N/\mu m\) & \(2\,kN/\mu m\) & \(10\,Nm/\mu\t Hexapod & \(10\,N/\mu m\) & \(10\,N/\mu m\) & \(100\,N/\mu m\) & \(1.5\,Nm/rad\) & \(1.5\,Nm/rad\) & \(0.27\,Nm/rad\)\\ \bottomrule \end{tabularx} -\caption{\label{tab:ustation_6dof_stiffness_values}Summary of the stage stiffnesses. The contrained degrees-of-freedom are indicated by ``-''. The frames in which the 6-DoF joints are defined are indicated in figures found in Section \ref{ssec:ustation_stages}} - \end{table} \section{Comparison with the measured dynamics} @@ -558,7 +557,7 @@ Considering the complexity of the micro-station compliance dynamics, the model c \end{center} \subcaption{\label{fig:ustation_frf_compliance_Rxyz_model}Compliance in rotation} \end{subfigure} -\caption{\label{fig:ustation_frf_compliance_model}Compliance of the micro-station expressed in frame \(\{\mathcal{X}\}\). The measured FRFs are display by solid lines, while the FRFs extracted from the multi-body models are shown by dashed lines. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed.} +\caption{\label{fig:ustation_frf_compliance_model}Compliance of the micro-station expressed in frame \(\{\mathcal{X}\}\). The measured FRFs are display by translucent lines, while the FRFs extracted from the multi-body models are shown by opaque lines. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed.} \end{figure} \chapter{Estimation of Disturbances} @@ -821,7 +820,7 @@ A similar error amplitude was observed, thus indicating that the multi-body mode \end{figure} \chapter*{Conclusion} -\label{sec:uniaxial_conclusion} +\label{sec:ustation_conclusion} In this study, a multi-body model of the micro-station was developed. It was difficult to match the measured dynamics obtained from the modal analysis of the micro-station.