diff --git a/figs/inkscape/ustation_ry_stage.svg b/figs/inkscape/ustation_ry_stage.svg index 598ad02..29b22e9 100644 Binary files a/figs/inkscape/ustation_ry_stage.svg and b/figs/inkscape/ustation_ry_stage.svg differ diff --git a/figs/inkscape/ustation_rz_stage.svg b/figs/inkscape/ustation_rz_stage.svg index 85c6309..f32086f 100644 Binary files a/figs/inkscape/ustation_rz_stage.svg and b/figs/inkscape/ustation_rz_stage.svg differ diff --git a/figs/inkscape/ustation_ty_stage.svg b/figs/inkscape/ustation_ty_stage.svg index e22ee01..a7622d5 100644 Binary files a/figs/inkscape/ustation_ty_stage.svg and b/figs/inkscape/ustation_ty_stage.svg differ diff --git a/figs/ustation_errors_model_dy_vertical.pdf b/figs/ustation_errors_model_dy_vertical.pdf index dbd349a..28d5bfc 100644 Binary files a/figs/ustation_errors_model_dy_vertical.pdf and b/figs/ustation_errors_model_dy_vertical.pdf differ diff --git a/figs/ustation_errors_model_dy_vertical.png b/figs/ustation_errors_model_dy_vertical.png index 8e9275d..ea7567f 100644 Binary files a/figs/ustation_errors_model_dy_vertical.png and b/figs/ustation_errors_model_dy_vertical.png differ diff --git a/figs/ustation_errors_model_spindle_axial.pdf b/figs/ustation_errors_model_spindle_axial.pdf index f1a23f3..bbb385f 100644 Binary files a/figs/ustation_errors_model_spindle_axial.pdf and b/figs/ustation_errors_model_spindle_axial.pdf differ diff --git a/figs/ustation_errors_model_spindle_axial.png b/figs/ustation_errors_model_spindle_axial.png index c8bf813..8606937 100644 Binary files a/figs/ustation_errors_model_spindle_axial.png and b/figs/ustation_errors_model_spindle_axial.png differ diff --git a/figs/ustation_errors_model_spindle_radial.pdf b/figs/ustation_errors_model_spindle_radial.pdf index 2d7bef2..932cede 100644 Binary files a/figs/ustation_errors_model_spindle_radial.pdf and b/figs/ustation_errors_model_spindle_radial.pdf differ diff --git a/figs/ustation_ry_stage.pdf b/figs/ustation_ry_stage.pdf index 7dd89af..ddecf1b 100644 Binary files a/figs/ustation_ry_stage.pdf and b/figs/ustation_ry_stage.pdf differ diff --git a/figs/ustation_ry_stage.png b/figs/ustation_ry_stage.png index 703ff73..508050c 100644 Binary files a/figs/ustation_ry_stage.png and b/figs/ustation_ry_stage.png differ diff --git a/figs/ustation_rz_stage.pdf b/figs/ustation_rz_stage.pdf index b3dc6f4..1cb18ba 100644 Binary files a/figs/ustation_rz_stage.pdf and b/figs/ustation_rz_stage.pdf differ diff --git a/figs/ustation_rz_stage.png b/figs/ustation_rz_stage.png index b44eeb2..32fe1b9 100644 Binary files a/figs/ustation_rz_stage.png and b/figs/ustation_rz_stage.png differ diff --git a/figs/ustation_ty_stage.pdf b/figs/ustation_ty_stage.pdf index 5d880a7..743774b 100644 Binary files a/figs/ustation_ty_stage.pdf and b/figs/ustation_ty_stage.pdf differ diff --git a/figs/ustation_ty_stage.png b/figs/ustation_ty_stage.png index 5aad655..d13bc4a 100644 Binary files a/figs/ustation_ty_stage.png and b/figs/ustation_ty_stage.png differ diff --git a/matlab/mat/conf_log.mat b/matlab/mat/conf_log.mat new file mode 100644 index 0000000..57ede8a Binary files /dev/null and b/matlab/mat/conf_log.mat differ diff --git a/matlab/mat/conf_simscape.mat b/matlab/mat/conf_simscape.mat new file mode 100644 index 0000000..fcae701 Binary files /dev/null and b/matlab/mat/conf_simscape.mat differ diff --git a/matlab/mat/nass_disturbances.mat b/matlab/mat/nass_disturbances.mat new file mode 100644 index 0000000..2b2a6dc Binary files /dev/null and b/matlab/mat/nass_disturbances.mat differ diff --git a/matlab/mat/nass_model_disturbances.mat b/matlab/mat/nass_model_disturbances.mat index a109888..0e38ecf 100644 Binary files a/matlab/mat/nass_model_disturbances.mat and b/matlab/mat/nass_model_disturbances.mat differ diff --git a/matlab/mat/nass_model_references.mat b/matlab/mat/nass_model_references.mat index d14e973..6141f17 100644 Binary files a/matlab/mat/nass_model_references.mat and b/matlab/mat/nass_model_references.mat differ diff --git a/matlab/mat/nass_model_stages.mat b/matlab/mat/nass_model_stages.mat index da939ba..8a562e7 100644 Binary files a/matlab/mat/nass_model_stages.mat and b/matlab/mat/nass_model_stages.mat differ diff --git a/matlab/mat/nass_references.mat b/matlab/mat/nass_references.mat new file mode 100644 index 0000000..a7f8e72 Binary files /dev/null and b/matlab/mat/nass_references.mat differ diff --git a/matlab/mat/nass_stages.mat b/matlab/mat/nass_stages.mat new file mode 100644 index 0000000..dae3030 Binary files /dev/null and b/matlab/mat/nass_stages.mat differ diff --git a/matlab/src/describeMicroStationSetup.m b/matlab/src/describeMicroStationSetup.m index 7b8446d..02fbf7e 100644 --- a/matlab/src/describeMicroStationSetup.m +++ b/matlab/src/describeMicroStationSetup.m @@ -9,7 +9,7 @@ % Outputs: % - - - load('./mat/conf_simscape.mat', 'conf_simscape'); + load('./mat/nass_model_conf_simscape.mat', 'conf_simscape'); fprintf('Simscape Configuration:\n'); @@ -21,7 +21,7 @@ fprintf('\n'); - load('./mat/nass_disturbances.mat', 'args'); + load('./mat/nass_model_disturbances.mat', 'args'); fprintf('Disturbances:\n'); if ~args.enable @@ -30,7 +30,7 @@ if args.Dwx && args.Dwy && args.Dwz fprintf('- Ground motion\n'); end - if args.Fty_x && args.Fty_z + if args.Fdy_x && args.Fdy_z fprintf('- Vibrations of the Translation Stage\n'); end if args.Frz_z @@ -39,7 +39,7 @@ end fprintf('\n'); - load('./mat/nass_references.mat', 'args'); + load('./mat/nass_model_references.mat', 'args'); fprintf('Reference Tracking:\n'); fprintf('- Translation Stage:\n'); @@ -93,13 +93,7 @@ fprintf('\n'); - load('./mat/controller.mat', 'controller'); - - fprintf('Controller:\n'); - fprintf('- %s\n', controller.name); - fprintf('\n'); - - load('./mat/stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc'); + load('./mat/nass_model_stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc'); fprintf('Micro Station:\n'); diff --git a/matlab/src/initializeDisturbances.m b/matlab/src/initializeDisturbances.m index a50b141..d809348 100644 --- a/matlab/src/initializeDisturbances.m +++ b/matlab/src/initializeDisturbances.m @@ -205,7 +205,7 @@ Rz.y = Rz.y - Rz.y(1); Rz.z = Rz.z - Rz.z(1); if exist('./mat', 'dir') - save('mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); + save('mat/nass_model_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); elseif exist('./matlab', 'dir') - save('matlab/mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); + save('matlab/mat/nass_model_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); end diff --git a/matlab/src/initializeGranite.m b/matlab/src/initializeGranite.m index e26711c..35b79d3 100644 --- a/matlab/src/initializeGranite.m +++ b/matlab/src/initializeGranite.m @@ -31,15 +31,15 @@ granite.C = args.C; % [N/(m/s)] if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'granite', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'granite', '-append'); else - save('mat/nass_stages.mat', 'granite'); + save('mat/nass_model_stages.mat', 'granite'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'granite', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'granite', '-append'); else - save('matlab/mat/nass_stages.mat', 'granite'); + save('matlab/mat/nass_model_stages.mat', 'granite'); end end diff --git a/matlab/src/initializeGround.m b/matlab/src/initializeGround.m index fe841c5..9b16197 100644 --- a/matlab/src/initializeGround.m +++ b/matlab/src/initializeGround.m @@ -20,15 +20,15 @@ ground.rot_point = args.rot_point; if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'ground', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'ground', '-append'); else - save('mat/nass_stages.mat', 'ground'); + save('mat/nass_model_stages.mat', 'ground'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'ground', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'ground', '-append'); else - save('matlab/mat/nass_stages.mat', 'ground'); + save('matlab/mat/nass_model_stages.mat', 'ground'); end end diff --git a/matlab/src/initializeLoggingConfiguration.m b/matlab/src/initializeLoggingConfiguration.m index de6c893..610d238 100644 --- a/matlab/src/initializeLoggingConfiguration.m +++ b/matlab/src/initializeLoggingConfiguration.m @@ -19,15 +19,15 @@ conf_log.Ts = args.Ts; if exist('./mat', 'dir') - if exist('./mat/conf_log.mat', 'file') - save('mat/conf_log.mat', 'conf_log', '-append'); + if exist('./mat/nass_model_conf_log.mat', 'file') + save('mat/nass_model_conf_log.mat', 'conf_log', '-append'); else - save('mat/conf_log.mat', 'conf_log'); + save('mat/nass_model_conf_log.mat', 'conf_log'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/conf_log.mat', 'file') - save('matlab/mat/conf_log.mat', 'conf_log', '-append'); + if exist('./matlab/mat/nass_model_conf_log.mat', 'file') + save('matlab/mat/nass_model_conf_log.mat', 'conf_log', '-append'); else - save('matlab/mat/conf_log.mat', 'conf_log'); + save('matlab/mat/nass_model_conf_log.mat', 'conf_log'); end end diff --git a/matlab/src/initializeMicroHexapod.m b/matlab/src/initializeMicroHexapod.m index 22c65ac..5a9bc90 100644 --- a/matlab/src/initializeMicroHexapod.m +++ b/matlab/src/initializeMicroHexapod.m @@ -93,15 +93,15 @@ micro_hexapod = stewart; if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'micro_hexapod', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'micro_hexapod', '-append'); else - save('mat/nass_stages.mat', 'micro_hexapod'); + save('mat/nass_model_stages.mat', 'micro_hexapod'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'micro_hexapod', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'micro_hexapod', '-append'); else - save('matlab/mat/nass_stages.mat', 'micro_hexapod'); + save('matlab/mat/nass_model_stages.mat', 'micro_hexapod'); end end diff --git a/matlab/src/initializeReferences.m b/matlab/src/initializeReferences.m index df9f3ef..677a882 100644 --- a/matlab/src/initializeReferences.m +++ b/matlab/src/initializeReferences.m @@ -157,7 +157,7 @@ case 'constant' Dh = [args.Dh_pos, args.Dh_pos]; - load('nass_stages.mat', 'micro_hexapod'); + load('nass_model_stages.mat', 'micro_hexapod'); AP = [args.Dh_pos(1) ; args.Dh_pos(2) ; args.Dh_pos(3)]; @@ -185,15 +185,15 @@ Dhl = struct('time', t, 'signals', struct('values', Dhl)); if exist('./mat', 'dir') - if exist('./mat/nass_references.mat', 'file') - save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); + if exist('./mat/nass_model_references.mat', 'file') + save('mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); else - save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); + save('mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_references.mat', 'file') - save('matlab/mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); + if exist('./matlab/mat/nass_model_references.mat', 'file') + save('matlab/mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); else - save('matlab/mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); + save('matlab/mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); end end diff --git a/matlab/src/initializeRy.m b/matlab/src/initializeRy.m index 27b9265..ec1510b 100644 --- a/matlab/src/initializeRy.m +++ b/matlab/src/initializeRy.m @@ -40,15 +40,15 @@ ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4]; if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'ry', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'ry', '-append'); else - save('mat/nass_stages.mat', 'ry'); + save('mat/nass_model_stages.mat', 'ry'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'ry', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'ry', '-append'); else - save('matlab/mat/nass_stages.mat', 'ry'); + save('matlab/mat/nass_model_stages.mat', 'ry'); end end diff --git a/matlab/src/initializeRz.m b/matlab/src/initializeRz.m index b5df3da..98d863b 100644 --- a/matlab/src/initializeRz.m +++ b/matlab/src/initializeRz.m @@ -31,15 +31,15 @@ rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4]; if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'rz', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'rz', '-append'); else - save('mat/nass_stages.mat', 'rz'); + save('mat/nass_model_stages.mat', 'rz'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'rz', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'rz', '-append'); else - save('matlab/mat/nass_stages.mat', 'rz'); + save('matlab/mat/nass_model_stages.mat', 'rz'); end end diff --git a/matlab/src/initializeSimscapeConfiguration.m b/matlab/src/initializeSimscapeConfiguration.m index e9fd9ff..91ad7c3 100644 --- a/matlab/src/initializeSimscapeConfiguration.m +++ b/matlab/src/initializeSimscapeConfiguration.m @@ -13,15 +13,15 @@ end if exist('./mat', 'dir') - if exist('./mat/conf_simscape.mat', 'file') - save('mat/conf_simscape.mat', 'conf_simscape', '-append'); + if exist('./mat/nass_model_conf_simscape.mat', 'file') + save('mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append'); else - save('mat/conf_simscape.mat', 'conf_simscape'); + save('mat/nass_model_conf_simscape.mat', 'conf_simscape'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/conf_simscape.mat', 'file') - save('matlab/mat/conf_simscape.mat', 'conf_simscape', '-append'); + if exist('./matlab/mat/nass_model_conf_simscape.mat', 'file') + save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append'); else - save('matlab/mat/conf_simscape.mat', 'conf_simscape'); + save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape'); end end diff --git a/matlab/src/initializeTy.m b/matlab/src/initializeTy.m index 5f511a8..6730f9b 100644 --- a/matlab/src/initializeTy.m +++ b/matlab/src/initializeTy.m @@ -55,15 +55,15 @@ ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)] if exist('./mat', 'dir') - if exist('./mat/nass_stages.mat', 'file') - save('mat/nass_stages.mat', 'ty', '-append'); + if exist('./mat/nass_model_stages.mat', 'file') + save('mat/nass_model_stages.mat', 'ty', '-append'); else - save('mat/nass_stages.mat', 'ty'); + save('mat/nass_model_stages.mat', 'ty'); end elseif exist('./matlab', 'dir') - if exist('./matlab/mat/nass_stages.mat', 'file') - save('matlab/mat/nass_stages.mat', 'ty', '-append'); + if exist('./matlab/mat/nass_model_stages.mat', 'file') + save('matlab/mat/nass_model_stages.mat', 'ty', '-append'); else - save('matlab/mat/nass_stages.mat', 'ty'); + save('matlab/mat/nass_model_stages.mat', 'ty'); end end diff --git a/matlab/ustation_simscape.slx b/matlab/ustation_simscape.slx index d78c9b7..d04a8d1 100644 Binary files a/matlab/ustation_simscape.slx and b/matlab/ustation_simscape.slx differ diff --git a/simscape-micro-station.org b/simscape-micro-station.org index bf27765..c784ece 100644 --- a/simscape-micro-station.org +++ b/simscape-micro-station.org @@ -43,9 +43,9 @@ #+PROPERTY: header-args:latex+ :mkdirp yes #+PROPERTY: header-args:latex+ :output-dir figs #+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") +:END: #+latex: \clearpage -:END: * Build :noexport: #+NAME: startblock @@ -314,6 +314,46 @@ Be able to pass custom =.mat= files (one mat file per disturbance)? - Wait for Marc reply ** Backup - Kinematics +*** Micro-Station DoF table + +#+name: tab:ustation_dof_summary +#+caption: Summary of the micro-station degrees-of-freedom +#+attr_latex: :environment tabularx :width \linewidth :align lX +#+attr_latex: :center t :booktabs t +| *Stage* | *Degrees of Freedom* | +|-------------------+-------------------------------------------------------| +| Translation stage | $D_y = \pm 10\,mm$ | +| Tilt stage | $R_y = \pm 3\,\text{deg}$ | +| Spindle | $R_z = 360\,\text{deg}$ | +| Micro Hexapod | $D_{xyz} = \pm 10\,mm$, $R_{xyz} = \pm 3\,\text{deg}$ | + +*** Stage specifications + +Translation Stage +| Axial Motion ($y$) | Radial Motion ($y-z$) | Rotation motion ($\theta-z$) | +|--------------------+-----------------------+------------------------------| +| $40nm$ repeat | $20nm$ | $< 1.7 \mu rad$ | + +Tilt stage +| Axial Error ($y$) | Radial Error ($z$) | Tilt error ($R_y$) | +|-------------------+--------------------+--------------------| +| $0.5\mu m$ | $10nm$ | $5 \mu rad$ repeat | + +Spindle +| Radial Error ($x$-$y$) | Vertical Error ($z$) | Rz | +|------------------------+----------------------+----------------------------| +| $0.33\mu m$ | $0.07\mu m$ | $5\,\mu \text{rad}$ repeat | + +Micro Hexapod +| Motion | Stroke | Repetability | MIM | Stiffness | +|------------------+--------------+----------------+--------------+---------------| +| $T_{\mu_x}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ | +| $T_{\mu_y}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ | +| $T_{\mu_z}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>135N/\mu m$ | +| $\theta_{\mu_x}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | +| $\theta_{\mu_y}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | +| $\theta_{\mu_z}$ | $\pm0.5 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | + *** Frames Let's define the following frames: - $\{W\}$ the frame that is *fixed to the granite* and its origin at the theoretical meeting point between the X-ray and the spindle axis. @@ -833,17 +873,18 @@ xlim([2, 500]); * Introduction :ignore: +Introduction... -#+name: tab:ustation_section_matlab_code -#+caption: Report sections and corresponding Matlab files -#+attr_latex: :environment tabularx :width 0.6\linewidth :align lX -#+attr_latex: :center t :booktabs t -| *Sections* | *Matlab File* | -|---------------------------------------+-----------------------------| -| Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= | -| Section ref:sec:ustation_modeling | =ustation_2_modeling.m= | -| Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= | -| Section ref:sec:ustation_experiments | =ustation_4_experiments.m= | +# #+name: tab:ustation_section_matlab_code +# #+caption: Report sections and corresponding Matlab files +# #+attr_latex: :environment tabularx :width 0.6\linewidth :align lX +# #+attr_latex: :center t :booktabs t +# | *Sections* | *Matlab File* | +# |---------------------------------------+-----------------------------| +# | Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= | +# | Section ref:sec:ustation_modeling | =ustation_2_modeling.m= | +# | Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= | +# | Section ref:sec:ustation_experiments | =ustation_4_experiments.m= | * Micro-Station Kinematics :PROPERTIES: @@ -854,26 +895,13 @@ xlim([2, 500]); The micro-station consists of 4 stacked positioning stages (Figure ref:fig:ustation_cad_view). From bottom to top, the stacked stages are the translation stage $D_y$, the tilt stage $R_y$, the rotation stage (Spindle) $R_z$ and the positioning hexapod. - Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics. -The micro-station degrees-of-freedom are summarized in Table ref:tab:ustation_dof_summary. #+name: fig:ustation_cad_view #+caption: CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage. #+attr_latex: :width \linewidth [[file:figs/ustation_cad_view.png]] -#+name: tab:ustation_dof_summary -#+caption: Summary of the micro-station degrees-of-freedom -#+attr_latex: :environment tabularx :width \linewidth :align lX -#+attr_latex: :center t :booktabs t -| *Stage* | *Degrees of Freedom* | -|-------------------+-------------------------------------------------------| -| Translation stage | $D_y = \pm 10\,mm$ | -| Tilt stage | $R_y = \pm 3\,\text{deg}$ | -| Spindle | $R_z = 360\,\text{deg}$ | -| Micro Hexapod | $D_{xyz} = \pm 10\,mm$, $R_{xyz} = \pm 3\,\text{deg}$ | - There are different ways of modelling the stage dynamics in a multi-body model. The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint. The stiffness and damping properties of the joint can be tuned separately for each DoF. @@ -922,14 +950,6 @@ An optical linear encoder is used to measure the stage motion and for PID contro Four cylindrical bearings[fn:4] are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness. -#+name: fig:ustation_ty_stage -#+caption: Translation Stage -[[file:figs/ustation_ty_stage.png]] - -# | Axial Motion ($y$) | Radial Motion ($y-z$) | Rotation motion ($\theta-z$) | -# |--------------------+-----------------------+------------------------------| -# | $40nm$ repeat | $20nm$ | $< 1.7 \mu rad$ | - **** Tilt Stage The tilt stage is guided by four linear motion guides[fn:1] which are placed such that the center of rotation coincide with the X-ray beam. @@ -940,13 +960,21 @@ This stage can also be used to tilt the rotation axis of the Spindle. To precisely control the $R_y$ angle, a stepper motor as well as two optical encoders are used in a PID feedback loop. +#+attr_latex: :options [b]{0.48\linewidth} +#+begin_minipage +#+name: fig:ustation_ty_stage +#+caption: Translation Stage +#+attr_latex: :scale 1 :float nil +[[file:figs/ustation_ty_stage.png]] +#+end_minipage +\hfill +#+attr_latex: :options [b]{0.48\linewidth} +#+begin_minipage #+name: fig:ustation_ry_stage #+caption: Tilt Stage +#+attr_latex: :scale 1 :float nil [[file:figs/ustation_ry_stage.png]] - -# | Axial Error ($y$) | Radial Error ($z$) | Tilt error ($R_y$) | -# |-------------------+--------------------+--------------------| -# | $0.5\mu m$ | $10nm$ | $5 \mu rad$ repeat | +#+end_minipage **** Spindle @@ -955,14 +983,6 @@ It is composed of an air bearing spindle[fn:2], whose angular position is contro Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes. -#+name: fig:ustation_rz_stage -#+caption: Rotation Stage (Spindle) -[[file:figs/ustation_rz_stage.png]] - -# | Radial Error ($x$-$y$) | Vertical Error ($z$) | Rz | -# |------------------------+----------------------+----------------------------| -# | $0.33\mu m$ | $0.07\mu m$ | $5\,\mu \text{rad}$ repeat | - **** Micro-Hexapod Finally, a Stewart platform[fn:3] is used to position the sample. @@ -971,18 +991,21 @@ It includes a DC motor and an optical linear encoders in each of the six strut. It is used to position the point of interest of the sample with respect to the spindle rotation axis. It can also be used to precisely position the PoI vertically with respect to the x-ray. +#+attr_latex: :options [t]{0.49\linewidth} +#+begin_minipage +#+name: fig:ustation_rz_stage +#+caption: Rotation Stage (Spindle) +#+attr_latex: :scale 1 :float nil +[[file:figs/ustation_rz_stage.png]] +#+end_minipage +\hfill +#+attr_latex: :options [t]{0.49\linewidth} +#+begin_minipage #+name: fig:ustation_hexapod_stage #+caption: Micro Hexapod +#+attr_latex: :scale 1 :float nil [[file:figs/ustation_hexapod_stage.png]] - -# | Motion | Stroke | Repetability | MIM | Stiffness | -# |------------------+--------------+----------------+--------------+---------------| -# | $T_{\mu_x}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ | -# | $T_{\mu_y}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ | -# | $T_{\mu_z}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>135N/\mu m$ | -# | $\theta_{\mu_x}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | -# | $\theta_{\mu_y}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | -# | $\theta_{\mu_z}$ | $\pm0.5 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | | +#+end_minipage ** Mathematical description of a rigid body motion <> @@ -1789,13 +1812,13 @@ exportFig('figs/ustation_frf_compliance_Rxyz.pdf', 'width', 'half', 'height', 'n #+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. Both translation terms (\subref{fig:ustation_frf_compliance_xyz}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz}) are displayed. #+attr_latex: :options [htbp] #+begin_figure -#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz}sub caption a} +#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz}Compliance in translation} #+attr_latex: :options {0.49\textwidth} #+begin_subfigure #+attr_latex: :width 0.95\linewidth [[file:figs/ustation_frf_compliance_xyz.png]] #+end_subfigure -#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz}sub caption b} +#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz}Compliance in rotation} #+attr_latex: :options {0.49\textwidth} #+begin_subfigure #+attr_latex: :width 0.95\linewidth @@ -1886,13 +1909,13 @@ exportFig('figs/ustation_frf_compliance_Rxyz_model.pdf', 'width', 'half', 'heigh #+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. 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}sub caption a} +#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz_model}Compliance in translation} #+attr_latex: :options {0.49\textwidth} #+begin_subfigure #+attr_latex: :width 0.95\linewidth [[file:figs/ustation_frf_compliance_xyz_model.png]] #+end_subfigure -#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz_model}sub caption b} +#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz_model}Compliance in rotation} #+attr_latex: :options {0.49\textwidth} #+begin_subfigure #+attr_latex: :width 0.95\linewidth @@ -2606,6 +2629,10 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third', ** Introduction :ignore: +In order to fully validate the micro-station multi-body model, two time domain simulations corresponding to typical use cases are performed. + +First, a tomography experiment (i.e. a constant Spindle rotation) is performed and compared with experimental measurements (Section ref:sec:ustation_experiments_tomography). +Second, a constant velocity scans with the translation stage is performed and also compared with experimental data (Section ref:sec:ustation_experiments_ty_scans). ** Matlab Init :noexport:ignore: #+begin_src matlab @@ -2628,16 +2655,23 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third', <> #+end_src +#+begin_src matlab :noweb yes +<> +#+end_src + #+begin_src matlab :noweb yes <> #+end_src ** Tomography Experiment -60rpm -ground motion + spindle vibrations -Measurement of the PoI position with respect to the granite +<> + +To simulate a tomography experiment, the setpoint of the Spindle is configured to perform a constant rotation with a rotational velocity of 60rpm. +Both ground motion and spindle vibration disturbances are simulation based on what was computed in Section ref:sec:ustation_disturbances. +A radial offset of $\approx 1\,\mu m$ between the "point-of-interest" and the spindle's rotation axis is introduced to represent what is experimentally observed. +During the 10 second simulation (i.e. 10 spindle turns), the position of the "point-of-interest" with respect to the granite is recorded. Results are shown in Figure ref:fig:ustation_errors_model_spindle. -Great match with measurements of Figure ref:fig:ustation_errors_spindle. +A good correlation with the measurements are observed both for radial errors (Figure ref:fig:ustation_errors_model_spindle_radial) and axial errors (Figure ref:fig:ustation_errors_model_spindle_axial). #+begin_src matlab %% Tomography experiment @@ -2705,8 +2739,8 @@ exportFig('figs/ustation_errors_model_spindle_radial.pdf', 'width', 'half', 'hei %% Measured axial errors of the Spindle figure; hold on; -plot(spindle_errors.deg(1:100:end)/360, 1e9*spindle_errors.Dz(1:100:end), 'DisplayName', 'Measurements') -plot(exp_tomography.y.z.Time, 1e9*exp_tomography.y.z.Data, 'DisplayName', 'Simulation') +plot(spindle_errors.deg(1:100:end)/360, detrend(1e9*spindle_errors.Dz(1:100:end), 0), 'DisplayName', 'Measurements') +plot(exp_tomography.y.z.Time, detrend(1e9*exp_tomography.y.z.Data, 0), 'DisplayName', 'Simulation') hold off; xlabel('Rotation [turn]'); ylabel('Z displacement [nm]'); axis square @@ -2720,7 +2754,7 @@ exportFig('figs/ustation_errors_model_spindle_axial.pdf', 'width', 'half', 'heig #+end_src #+name: fig:ustation_errors_model_spindle -#+caption: Measurement of strut flexible modes +#+caption: Simulation results for a tomography experiment with a constant velocity of 60rpm. The comparison is made with measurements both for radial (\subref{fig:ustation_errors_model_spindle_radial}) and axial errors (\subref{fig:ustation_errors_model_spindle_axial}). #+attr_latex: :options [htbp] #+begin_figure #+attr_latex: :caption \subcaption{\label{fig:ustation_errors_model_spindle_radial}Radial error} @@ -2738,17 +2772,17 @@ exportFig('figs/ustation_errors_model_spindle_axial.pdf', 'width', 'half', 'heig #+end_figure ** Raster Scans with the translation stage +<> - -+/-5mm constant velocity scans. -ground motion + translation stage vibrations -Measurement of the PoI position with respect to the granite -Results are shown in Figure ref:fig:ustation_errors_model_spindle. -Great match with measurements of Figure ref:fig:ustation_errors_spindle. +A second experiment is performed in which the translation stage is scanned with a constant velocity. +The translation stage setpoint is configured to have a "triangular" shape with stroke of $\pm 4.5\, mm$. +Both ground motion and translation stage vibrations are included in the simulation. +Similar to what was performed for the tomography simulation, the PoI position with respect to the granite is recorded and compared with experimental measurements in Figure ref:fig:ustation_errors_model_dy_vertical. +Similar error amplitude can be observed, thus indicating that the multi-body model with included disturbances is accurately representing the micro-station behavior for typical scientific experiments. #+begin_src matlab %% Translation stage latteral scans -set_param(conf_simulink, 'StopTime', '4'); +set_param(conf_simulink, 'StopTime', '2'); initializeGround(); initializeGranite(); @@ -2772,27 +2806,32 @@ initializeDisturbances(... initializeReferences(... 'Dy_type', 'triangular', ... - 'Dy_amplitude', 5e-3, ... - 'Dy_period', 4); + 'Dy_amplitude', 4.5e-3, ... + 'Dy_period', 2); sim(mdl); exp_latteral_scans = simout; #+end_src #+begin_src matlab -%% Load the experimentally measured errors +% Load the experimentally measured errors ty_errors = load('ustation_errors_ty.mat'); % Compute best straight line to remove it from data average_error = mean(ty_errors.ty_z')'; straight_line = average_error - detrend(average_error, 1); + +% Only plot data for the scan from -4.5mm to 4.5mm +dy_setpoint = 1e3*exp_latteral_scans.y.y.Data(exp_latteral_scans.y.y.time > 0.5 & exp_latteral_scans.y.y.time < 1.5); +dz_error = detrend(1e6*exp_latteral_scans.y.z.Data(exp_latteral_scans.y.y.time > 0.5 & exp_latteral_scans.y.y.time < 1.5), 0); #+end_src #+begin_src matlab :exports none :results none figure; hold on; -plot(ty_errors.setpoint, ty_errors.ty_z(:,1) - straight_line, 'DisplayName', 'Measurement') -plot(1e3*exp_latteral_scans.y.y.Data, 1e6*exp_latteral_scans.y.z.Data, 'DisplayName', 'Simulation') +plot(ty_errors.setpoint, detrend(ty_errors.ty_z(:,1) - straight_line, 0), 'color', colors(1,:), 'DisplayName', 'Measurement') +% plot(ty_errors.setpoint, detrend(ty_errors.ty_z(:,[4,6]) - straight_line, 0), 'color', colors(1,:), 'HandleVisibility', 'off') +plot(dy_setpoint, dz_error, 'color', colors(2,:), 'DisplayName', 'Simulation') hold off; xlabel('$D_y$ position [mm]'); ylabel('Vertical error [$\mu$m]'); xlim([-5, 5]); ylim([-0.4, 0.4]); @@ -2800,13 +2839,14 @@ leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1); leg.ItemTokenSize(1) = 15; #+end_src -#+begin_src matlab :tangle no :exports results :results file none +#+begin_src matlab :tangle no :exports results :results file replace xticks([-5:1:5]); yticks([-0.4:0.1:0.4]); exportFig('figs/ustation_errors_model_dy_vertical.pdf', 'width', 'half', 'height', 'normal'); #+end_src #+name: fig:ustation_errors_model_dy_vertical -#+caption: Figure caption +#+caption: Vertical errors during a constant velocity scan of the translation stage. Comparison of the measurements and simulated errors. +#+RESULTS: [[file:figs/ustation_errors_model_dy_vertical.png]] * Conclusion diff --git a/simscape-micro-station.pdf b/simscape-micro-station.pdf index faf6902..02b5bbd 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 81a7507..c58828d 100644 --- a/simscape-micro-station.tex +++ b/simscape-micro-station.tex @@ -1,4 +1,4 @@ -% Created 2024-11-06 Wed 12:01 +% Created 2024-11-06 Wed 15:14 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -22,30 +22,16 @@ \maketitle \tableofcontents +\clearpage -\begin{table}[htbp] -\centering -\begin{tabularx}{0.6\linewidth}{lX} -\toprule -\textbf{Sections} & \textbf{Matlab File}\\ -\midrule -Section \ref{sec:ustation_kinematics} & \texttt{ustation\_1\_kinematics.m}\\ -Section \ref{sec:ustation_modeling} & \texttt{ustation\_2\_modeling.m}\\ -Section \ref{sec:ustation_disturbances} & \texttt{ustation\_3\_disturbances.m}\\ -Section \ref{sec:ustation_experiments} & \texttt{ustation\_4\_experiments.m}\\ -\bottomrule -\end{tabularx} -\caption{\label{tab:ustation_section_matlab_code}Report sections and corresponding Matlab files} +Introduction\ldots{} -\end{table} \chapter{Micro-Station Kinematics} \label{sec:ustation_kinematics} The micro-station consists of 4 stacked positioning stages (Figure \ref{fig:ustation_cad_view}). From bottom to top, the stacked stages are the translation stage \(D_y\), the tilt stage \(R_y\), the rotation stage (Spindle) \(R_z\) and the positioning hexapod. - Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics. -The micro-station degrees-of-freedom are summarized in Table \ref{tab:ustation_dof_summary}. \begin{figure}[htbp] \centering @@ -53,22 +39,6 @@ The micro-station degrees-of-freedom are summarized in Table \ref{tab:ustation_d \caption{\label{fig:ustation_cad_view}CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage.} \end{figure} -\begin{table}[htbp] -\centering -\begin{tabularx}{\linewidth}{lX} -\toprule -\textbf{Stage} & \textbf{Degrees of Freedom}\\ -\midrule -Translation stage & \(D_y = \pm 10\,mm\)\\ -Tilt stage & \(R_y = \pm 3\,\text{deg}\)\\ -Spindle & \(R_z = 360\,\text{deg}\)\\ -Micro Hexapod & \(D_{xyz} = \pm 10\,mm\), \(R_{xyz} = \pm 3\,\text{deg}\)\\ -\bottomrule -\end{tabularx} -\caption{\label{tab:ustation_dof_summary}Summary of the micro-station degrees-of-freedom} - -\end{table} - There are different ways of modelling the stage dynamics in a multi-body model. The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint. The stiffness and damping properties of the joint can be tuned separately for each DoF. @@ -87,13 +57,6 @@ An optical linear encoder is used to measure the stage motion and for PID contro Four cylindrical bearings\footnote{Ball cage (N501) and guide bush (N550) from Mahr are used} are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness. -\begin{figure}[htbp] -\centering -\includegraphics[scale=1]{figs/ustation_ty_stage.png} -\caption{\label{fig:ustation_ty_stage}Translation Stage} -\end{figure} - - \paragraph{Tilt Stage} The tilt stage is guided by four linear motion guides\footnote{HCR 35 A C1, from THK} which are placed such that the center of rotation coincide with the X-ray beam. @@ -104,12 +67,19 @@ This stage can also be used to tilt the rotation axis of the Spindle. To precisely control the \(R_y\) angle, a stepper motor as well as two optical encoders are used in a PID feedback loop. -\begin{figure}[htbp] -\centering -\includegraphics[scale=1]{figs/ustation_ry_stage.png} -\caption{\label{fig:ustation_ry_stage}Tilt Stage} -\end{figure} - +\begin{minipage}[b]{0.48\linewidth} +\begin{center} +\includegraphics[scale=1,scale=1]{figs/ustation_ty_stage.png} +\captionof{figure}{\label{fig:ustation_ty_stage}Translation Stage} +\end{center} +\end{minipage} +\hfill +\begin{minipage}[b]{0.48\linewidth} +\begin{center} +\includegraphics[scale=1,scale=1]{figs/ustation_ry_stage.png} +\captionof{figure}{\label{fig:ustation_ry_stage}Tilt Stage} +\end{center} +\end{minipage} \paragraph{Spindle} @@ -118,13 +88,6 @@ It is composed of an air bearing spindle\footnote{Made by LAB Motion Systems}, w Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes. -\begin{figure}[htbp] -\centering -\includegraphics[scale=1]{figs/ustation_rz_stage.png} -\caption{\label{fig:ustation_rz_stage}Rotation Stage (Spindle)} -\end{figure} - - \paragraph{Micro-Hexapod} Finally, a Stewart platform\footnote{Modified Zonda Hexapod by Symetrie} is used to position the sample. @@ -133,12 +96,19 @@ It includes a DC motor and an optical linear encoders in each of the six strut. It is used to position the point of interest of the sample with respect to the spindle rotation axis. It can also be used to precisely position the PoI vertically with respect to the x-ray. -\begin{figure}[htbp] -\centering -\includegraphics[scale=1]{figs/ustation_hexapod_stage.png} -\caption{\label{fig:ustation_hexapod_stage}Micro Hexapod} -\end{figure} - +\begin{minipage}[t]{0.49\linewidth} +\begin{center} +\includegraphics[scale=1,scale=1]{figs/ustation_rz_stage.png} +\captionof{figure}{\label{fig:ustation_rz_stage}Rotation Stage (Spindle)} +\end{center} +\end{minipage} +\hfill +\begin{minipage}[t]{0.49\linewidth} +\begin{center} +\includegraphics[scale=1,scale=1]{figs/ustation_hexapod_stage.png} +\captionof{figure}{\label{fig:ustation_hexapod_stage}Micro Hexapod} +\end{center} +\end{minipage} \section{Mathematical description of a rigid body motion} \label{ssec:ustation_motion_description} @@ -788,13 +758,21 @@ Examples of obtained time domain disturbance signals are shown in Figure \ref{fi \chapter{Simulation of Scientific Experiments} \label{sec:ustation_experiments} -\begin{itemize} -\item[{$\square$}] Perfect tomography => no error -\item[{$\square$}] Add vibrations and some off-center => results, compare with measurements -\item[{$\square$}] Ty scans (-4.5mm to 4.5mm) => compare with measurements -\end{itemize} +In order to fully validate the micro-station multi-body model, two time domain simulations corresponding to typical use cases are performed. + +First, a tomography experiment (i.e. a constant Spindle rotation) is performed and compared with experimental measurements (Section \ref{sec:ustation_experiments_tomography}). +Second, a constant velocity scans with the translation stage is performed and also compared with experimental data (Section \ref{sec:ustation_experiments_ty_scans}). \section{Tomography Experiment} +\label{sec:ustation_experiments_tomography} + +To simulate a tomography experiment, the setpoint of the Spindle is configured to perform a constant rotation with a rotational velocity of 60rpm. +Both ground motion and spindle vibration disturbances are simulation based on what was computed in Section \ref{sec:ustation_disturbances}. +A radial offset of \(\approx 1\,\mu m\) between the ``point-of-interest'' and the spindle's rotation axis is introduced to represent what is experimentally observed. +During the 10 second simulation (i.e. 10 spindle turns), the position of the ``point-of-interest'' with respect to the granite is recorded. +Results are shown in Figure \ref{fig:ustation_errors_model_spindle}. +A good correlation with the measurements are observed both for radial errors (Figure \ref{fig:ustation_errors_model_spindle_radial}) and axial errors (Figure \ref{fig:ustation_errors_model_spindle_axial}). + \begin{figure}[htbp] \begin{subfigure}{0.49\textwidth} \begin{center} @@ -808,13 +786,36 @@ Examples of obtained time domain disturbance signals are shown in Figure \ref{fi \end{center} \subcaption{\label{fig:ustation_errors_model_spindle_axial}Axial error} \end{subfigure} -\caption{\label{fig:ustation_errors_model_spindle}Measurement of strut flexible modes} +\caption{\label{fig:ustation_errors_model_spindle}Simulation results for a tomography experiment with a constant velocity of 60rpm. The comparison is made with measurements both for radial (\subref{fig:ustation_errors_model_spindle_radial}) and axial errors (\subref{fig:ustation_errors_model_spindle_axial}).} \end{figure} - \section{Raster Scans with the translation stage} +\label{sec:ustation_experiments_ty_scans} + +A second experiment is performed in which the translation stage is scanned with a constant velocity. +The translation stage setpoint is configured to have a ``triangular'' shape with stroke of \(\pm 4.5\, mm\). +Both ground motion and translation stage vibrations are included in the simulation. +Similar to what was performed for the tomography simulation, the PoI position with respect to the granite is recorded and compared with experimental measurements in Figure \ref{fig:ustation_errors_model_dy_vertical}. +Similar error amplitude can be observed, thus indicating that the multi-body model with included disturbances is accurately representing the micro-station behavior for typical scientific experiments. + +\begin{figure}[htbp] +\centering +\includegraphics[scale=1]{figs/ustation_errors_model_dy_vertical.png} +\caption{\label{fig:ustation_errors_model_dy_vertical}Vertical errors during a constant velocity scan of the translation stage. Comparison of the measurements and simulated errors.} +\end{figure} + \chapter{Conclusion} \label{sec:uniaxial_conclusion} +In order to have good model: +\begin{itemize} +\item kinematics +\item dynamics +\item disturbances +\end{itemize} + +Validated with time domain simulations. + + \printbibliography[heading=bibintoc,title={Bibliography}] \end{document}