Commit before modification for PhD thesis
304
.gitignore
vendored
@ -1,52 +1,260 @@
|
|||||||
auto/
|
mat/
|
||||||
*.tex
|
figures/
|
||||||
*.bbl
|
ltximg/
|
||||||
*.synctex.gz
|
|
||||||
.auctex-auto/
|
|
||||||
_minted*
|
|
||||||
|
|
||||||
# Emacs
|
|
||||||
auto/
|
|
||||||
|
|
||||||
# Simulink Real Time
|
|
||||||
*bio.m
|
|
||||||
*pt.m
|
|
||||||
*ref.m
|
|
||||||
*ri.m
|
|
||||||
*xcp.m
|
|
||||||
*.mldatx
|
|
||||||
*.slxc
|
|
||||||
*.xml
|
|
||||||
*_slrt_rtw/
|
|
||||||
|
|
||||||
# data
|
|
||||||
data/
|
|
||||||
|
|
||||||
# Windows default autosave extension
|
|
||||||
*.asv
|
|
||||||
|
|
||||||
# OSX / *nix default autosave extension
|
|
||||||
*.m~
|
|
||||||
|
|
||||||
# Compiled MEX binaries (all platforms)
|
|
||||||
*.mex*
|
|
||||||
|
|
||||||
# Packaged app and toolbox files
|
|
||||||
*.mlappinstall
|
|
||||||
*.mltbx
|
|
||||||
|
|
||||||
# Generated helpsearch folders
|
|
||||||
helpsearch*/
|
|
||||||
|
|
||||||
# Simulink code generation folders
|
|
||||||
slprj/
|
slprj/
|
||||||
sccprj/
|
matlab/slprj/
|
||||||
|
*.slxc
|
||||||
|
|
||||||
# Matlab code generation folders
|
|
||||||
codegen/
|
|
||||||
|
|
||||||
# Simulink autosave extension
|
# ============================================================
|
||||||
*.autosave
|
# ============================================================
|
||||||
|
# LATEX
|
||||||
|
# ============================================================
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
# Octave session info
|
## Core latex/pdflatex auxiliary files:
|
||||||
octave-workspace
|
*.aux
|
||||||
|
*.lof
|
||||||
|
*.log
|
||||||
|
*.lot
|
||||||
|
*.fls
|
||||||
|
*.out
|
||||||
|
*.toc
|
||||||
|
*.fmt
|
||||||
|
*.fot
|
||||||
|
*.cb
|
||||||
|
*.cb2
|
||||||
|
.*.lb
|
||||||
|
|
||||||
|
## Intermediate documents:
|
||||||
|
*.dvi
|
||||||
|
*.xdv
|
||||||
|
*-converted-to.*
|
||||||
|
# these rules might exclude image files for figures etc.
|
||||||
|
# *.ps
|
||||||
|
# *.eps
|
||||||
|
# *.pdf
|
||||||
|
|
||||||
|
## Generated if empty string is given at "Please type another file name for output:"
|
||||||
|
.pdf
|
||||||
|
|
||||||
|
## Bibliography auxiliary files (bibtex/biblatex/biber):
|
||||||
|
*.bbl
|
||||||
|
*.bcf
|
||||||
|
*.blg
|
||||||
|
*-blx.aux
|
||||||
|
*-blx.bib
|
||||||
|
*.run.xml
|
||||||
|
|
||||||
|
## Build tool auxiliary files:
|
||||||
|
*.fdb_latexmk
|
||||||
|
*.synctex
|
||||||
|
*.synctex(busy)
|
||||||
|
*.synctex.gz
|
||||||
|
*.synctex.gz(busy)
|
||||||
|
*.pdfsync
|
||||||
|
|
||||||
|
## Build tool directories for auxiliary files
|
||||||
|
# latexrun
|
||||||
|
latex.out/
|
||||||
|
|
||||||
|
## Auxiliary and intermediate files from other packages:
|
||||||
|
# algorithms
|
||||||
|
*.alg
|
||||||
|
*.loa
|
||||||
|
|
||||||
|
# achemso
|
||||||
|
acs-*.bib
|
||||||
|
|
||||||
|
# amsthm
|
||||||
|
*.thm
|
||||||
|
|
||||||
|
# beamer
|
||||||
|
*.nav
|
||||||
|
*.pre
|
||||||
|
*.snm
|
||||||
|
*.vrb
|
||||||
|
|
||||||
|
# changes
|
||||||
|
*.soc
|
||||||
|
|
||||||
|
# cprotect
|
||||||
|
*.cpt
|
||||||
|
|
||||||
|
# elsarticle (documentclass of Elsevier journals)
|
||||||
|
*.spl
|
||||||
|
|
||||||
|
# endnotes
|
||||||
|
*.ent
|
||||||
|
|
||||||
|
# fixme
|
||||||
|
*.lox
|
||||||
|
|
||||||
|
# feynmf/feynmp
|
||||||
|
*.mf
|
||||||
|
*.mp
|
||||||
|
*.t[1-9]
|
||||||
|
*.t[1-9][0-9]
|
||||||
|
*.tfm
|
||||||
|
|
||||||
|
#(r)(e)ledmac/(r)(e)ledpar
|
||||||
|
*.end
|
||||||
|
*.?end
|
||||||
|
*.[1-9]
|
||||||
|
*.[1-9][0-9]
|
||||||
|
*.[1-9][0-9][0-9]
|
||||||
|
*.[1-9]R
|
||||||
|
*.[1-9][0-9]R
|
||||||
|
*.[1-9][0-9][0-9]R
|
||||||
|
*.eledsec[1-9]
|
||||||
|
*.eledsec[1-9]R
|
||||||
|
*.eledsec[1-9][0-9]
|
||||||
|
*.eledsec[1-9][0-9]R
|
||||||
|
*.eledsec[1-9][0-9][0-9]
|
||||||
|
*.eledsec[1-9][0-9][0-9]R
|
||||||
|
|
||||||
|
# glossaries
|
||||||
|
*.acn
|
||||||
|
*.acr
|
||||||
|
*.glg
|
||||||
|
*.glo
|
||||||
|
*.gls
|
||||||
|
*.glsdefs
|
||||||
|
|
||||||
|
# gnuplottex
|
||||||
|
*-gnuplottex-*
|
||||||
|
|
||||||
|
# gregoriotex
|
||||||
|
*.gaux
|
||||||
|
*.gtex
|
||||||
|
|
||||||
|
# htlatex
|
||||||
|
*.4ct
|
||||||
|
*.4tc
|
||||||
|
*.idv
|
||||||
|
*.lg
|
||||||
|
*.trc
|
||||||
|
*.xref
|
||||||
|
|
||||||
|
# hyperref
|
||||||
|
*.brf
|
||||||
|
|
||||||
|
# knitr
|
||||||
|
*-concordance.tex
|
||||||
|
# TODO Comment the next line if you want to keep your tikz graphics files
|
||||||
|
*.tikz
|
||||||
|
*-tikzDictionary
|
||||||
|
|
||||||
|
# listings
|
||||||
|
*.lol
|
||||||
|
|
||||||
|
# makeidx
|
||||||
|
*.idx
|
||||||
|
*.ilg
|
||||||
|
*.ind
|
||||||
|
*.ist
|
||||||
|
|
||||||
|
# minitoc
|
||||||
|
*.maf
|
||||||
|
*.mlf
|
||||||
|
*.mlt
|
||||||
|
*.mtc[0-9]*
|
||||||
|
*.slf[0-9]*
|
||||||
|
*.slt[0-9]*
|
||||||
|
*.stc[0-9]*
|
||||||
|
|
||||||
|
# minted
|
||||||
|
_minted*
|
||||||
|
*.pyg
|
||||||
|
|
||||||
|
# morewrites
|
||||||
|
*.mw
|
||||||
|
|
||||||
|
# nomencl
|
||||||
|
*.nlg
|
||||||
|
*.nlo
|
||||||
|
*.nls
|
||||||
|
|
||||||
|
# pax
|
||||||
|
*.pax
|
||||||
|
|
||||||
|
# pdfpcnotes
|
||||||
|
*.pdfpc
|
||||||
|
|
||||||
|
# sagetex
|
||||||
|
*.sagetex.sage
|
||||||
|
*.sagetex.py
|
||||||
|
*.sagetex.scmd
|
||||||
|
|
||||||
|
# scrwfile
|
||||||
|
*.wrt
|
||||||
|
|
||||||
|
# sympy
|
||||||
|
*.sout
|
||||||
|
*.sympy
|
||||||
|
sympy-plots-for-*.tex/
|
||||||
|
|
||||||
|
# pdfcomment
|
||||||
|
*.upa
|
||||||
|
*.upb
|
||||||
|
|
||||||
|
# pythontex
|
||||||
|
*.pytxcode
|
||||||
|
pythontex-files-*/
|
||||||
|
|
||||||
|
# thmtools
|
||||||
|
*.loe
|
||||||
|
|
||||||
|
# TikZ & PGF
|
||||||
|
*.dpth
|
||||||
|
*.md5
|
||||||
|
*.auxlock
|
||||||
|
|
||||||
|
# todonotes
|
||||||
|
*.tdo
|
||||||
|
|
||||||
|
# easy-todo
|
||||||
|
*.lod
|
||||||
|
|
||||||
|
# xmpincl
|
||||||
|
*.xmpi
|
||||||
|
|
||||||
|
# xindy
|
||||||
|
*.xdy
|
||||||
|
|
||||||
|
# xypic precompiled matrices
|
||||||
|
*.xyc
|
||||||
|
|
||||||
|
# endfloat
|
||||||
|
*.ttt
|
||||||
|
*.fff
|
||||||
|
|
||||||
|
# Latexian
|
||||||
|
TSWLatexianTemp*
|
||||||
|
|
||||||
|
## Editors:
|
||||||
|
# WinEdt
|
||||||
|
*.bak
|
||||||
|
*.sav
|
||||||
|
|
||||||
|
# Texpad
|
||||||
|
.texpadtmp
|
||||||
|
|
||||||
|
# LyX
|
||||||
|
*.lyx~
|
||||||
|
|
||||||
|
# Kile
|
||||||
|
*.backup
|
||||||
|
|
||||||
|
# KBibTeX
|
||||||
|
*~[0-9]*
|
||||||
|
|
||||||
|
# auto folder when using emacs and auctex
|
||||||
|
./auto/*
|
||||||
|
*.el
|
||||||
|
|
||||||
|
# expex forward references with \gathertags
|
||||||
|
*-tags.tex
|
||||||
|
|
||||||
|
# standalone packages
|
||||||
|
*.sta
|
||||||
|
111
.latexmkrc
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#!/bin/env perl
|
||||||
|
|
||||||
|
# Shebang is only to get syntax highlighting right across GitLab, GitHub and IDEs.
|
||||||
|
# This file is not meant to be run, but read by `latexmk`.
|
||||||
|
|
||||||
|
# ======================================================================================
|
||||||
|
# Perl `latexmk` configuration file
|
||||||
|
# ======================================================================================
|
||||||
|
|
||||||
|
# ======================================================================================
|
||||||
|
# PDF Generation/Building/Compilation
|
||||||
|
# ======================================================================================
|
||||||
|
|
||||||
|
@default_files=('test-bench-nass-spindle.tex');
|
||||||
|
|
||||||
|
# PDF-generating modes are:
|
||||||
|
# 1: pdflatex, as specified by $pdflatex variable (still largely in use)
|
||||||
|
# 2: postscript conversion, as specified by the $ps2pdf variable (useless)
|
||||||
|
# 3: dvi conversion, as specified by the $dvipdf variable (useless)
|
||||||
|
# 4: lualatex, as specified by the $lualatex variable (best)
|
||||||
|
# 5: xelatex, as specified by the $xelatex variable (second best)
|
||||||
|
$pdf_mode = 1;
|
||||||
|
|
||||||
|
# Treat undefined references and citations as well as multiply defined references as
|
||||||
|
# ERRORS instead of WARNINGS.
|
||||||
|
# This is only checked in the *last* run, since naturally, there are undefined references
|
||||||
|
# in initial runs.
|
||||||
|
# This setting is potentially annoying when debugging/editing, but highly desirable
|
||||||
|
# in the CI pipeline, where such a warning should result in a failed pipeline, since the
|
||||||
|
# final document is incomplete/corrupted.
|
||||||
|
#
|
||||||
|
# However, I could not eradicate all warnings, so that `latexmk` currently fails with
|
||||||
|
# this option enabled.
|
||||||
|
# Specifically, `microtype` fails together with `fontawesome`/`fontawesome5`, see:
|
||||||
|
# https://tex.stackexchange.com/a/547514/120853
|
||||||
|
# The fix in that answer did not help.
|
||||||
|
# Setting `verbose=silent` to mute `microtype` warnings did not work.
|
||||||
|
# Switching between `fontawesome` and `fontawesome5` did not help.
|
||||||
|
$warnings_as_errors = 0;
|
||||||
|
|
||||||
|
# Show used CPU time. Looks like: https://tex.stackexchange.com/a/312224/120853
|
||||||
|
$show_time = 1;
|
||||||
|
|
||||||
|
# Default is 5; we seem to need more owed to the complexity of the document.
|
||||||
|
# Actual documents probably don't need this many since they won't use all features,
|
||||||
|
# plus won't be compiling from cold each time.
|
||||||
|
$max_repeat=7;
|
||||||
|
|
||||||
|
# --shell-escape option (execution of code outside of latex) is required for the
|
||||||
|
#'svg' package.
|
||||||
|
# It converts raw SVG files to the PDF+PDF_TEX combo using InkScape.
|
||||||
|
#
|
||||||
|
# SyncTeX allows to jump between source (code) and output (PDF) in IDEs with support
|
||||||
|
# (many have it). A value of `1` is enabled (gzipped), `-1` is enabled but uncompressed,
|
||||||
|
# `0` is off.
|
||||||
|
# Testing in VSCode w/ LaTeX Workshop only worked for the compressed version.
|
||||||
|
# Adjust this as needed. Of course, only relevant for local use, no effect on a remote
|
||||||
|
# CI pipeline (except for slower compilation, probably).
|
||||||
|
#
|
||||||
|
# %O and %S will forward Options and the Source file, respectively, given to latexmk.
|
||||||
|
#
|
||||||
|
# `set_tex_cmds` applies to all *latex commands (latex, xelatex, lualatex, ...), so
|
||||||
|
# no need to specify these each. This allows to simply change `$pdf_mode` to get a
|
||||||
|
# different engine. Check if this works with `latexmk --commands`.
|
||||||
|
set_tex_cmds("--shell-escape -interaction=nonstopmode --synctex=1 %O %S");
|
||||||
|
|
||||||
|
# Use default pdf viewer
|
||||||
|
$pdf_previewer = 'zathura';
|
||||||
|
|
||||||
|
# option 2 is same as 1 (run biber when necessary), but also deletes the
|
||||||
|
# regeneratable bbl-file in a clenaup (`latexmk -c`). Do not use if original
|
||||||
|
# bib file is not available!
|
||||||
|
$bibtex_use = 2; # default: 1
|
||||||
|
|
||||||
|
# Change default `biber` call, help catch errors faster/clearer. See
|
||||||
|
# https://web.archive.org/web/20200526101657/https://www.semipol.de/2018/06/12/latex-best-practices.html#database-entries
|
||||||
|
$biber = "biber --validate-datamodel %O %S";
|
||||||
|
|
||||||
|
# Glossaries
|
||||||
|
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
|
||||||
|
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
|
||||||
|
|
||||||
|
sub run_makeglossaries {
|
||||||
|
if ( $silent ) {
|
||||||
|
system "makeglossaries -q -s '$_[0].ist' '$_[0]'";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
system "makeglossaries -s '$_[0].ist' '$_[0]'";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# ======================================================================================
|
||||||
|
# Auxiliary Files
|
||||||
|
# ======================================================================================
|
||||||
|
|
||||||
|
# Let latexmk know about generated files, so they can be used to detect if a
|
||||||
|
# rerun is required, or be deleted in a cleanup.
|
||||||
|
# loe: List of Examples (KOMAScript)
|
||||||
|
# lol: List of Listings (`listings` and `minted` packages)
|
||||||
|
# run.xml: biber runs
|
||||||
|
# glg: glossaries log
|
||||||
|
# glstex: generated from glossaries-extra
|
||||||
|
push @generated_exts, 'loe', 'lol', 'run.xml', 'glstex', 'glo', 'gls', 'glg', 'acn', 'acr', 'alg';
|
||||||
|
|
||||||
|
# Also delete the *.glstex files from package glossaries-extra. Problem is,
|
||||||
|
# that that package generates files of the form "basename-digit.glstex" if
|
||||||
|
# multiple glossaries are present. Latexmk looks for "basename.glstex" and so
|
||||||
|
# does not find those. For that purpose, use wildcard.
|
||||||
|
# Also delete files generated by gnuplot/pgfplots contour plots
|
||||||
|
# (.dat, .script, .table).
|
||||||
|
$clean_ext = "%R-*.glstex %R_contourtmp*.*";
|
BIN
doc/DB36_connections_english_V2.pdf
Normal file
BIN
doc/PD200-V7-R1.pdf
Normal file
BIN
doc/m12_f40_schematic.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
doc/sea-0013-dual.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
figs/G_damp_damped_exp_no_rotation.pdf
Normal file
BIN
figs/G_damp_damped_exp_no_rotation.png
Normal file
After Width: | Height: | Size: 223 KiB |
BIN
figs/G_damp_exp_no_rotation.pdf
Normal file
BIN
figs/G_damp_exp_no_rotation.png
Normal file
After Width: | Height: | Size: 248 KiB |
BIN
figs/G_hac_damped_exp_no_rotation.pdf
Normal file
BIN
figs/G_hac_damped_exp_no_rotation.png
Normal file
After Width: | Height: | Size: 223 KiB |
BIN
figs/G_hac_exp_no_rotation.pdf
Normal file
BIN
figs/G_hac_exp_no_rotation.png
Normal file
After Width: | Height: | Size: 248 KiB |
BIN
figs/G_iif_exp_comp_no_rotation.pdf
Normal file
BIN
figs/G_iif_exp_comp_no_rotation.png
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
figs/G_iif_exp_no_rotation.pdf
Normal file
BIN
figs/G_iif_exp_no_rotation.png
Normal file
After Width: | Height: | Size: 203 KiB |
BIN
figs/IMG_20221216_181305.jpg
Normal file
After Width: | Height: | Size: 282 KiB |
BIN
figs/IMG_20221216_181305.pdf
Normal file
BIN
figs/IMG_20221220_152429.jpg
Normal file
After Width: | Height: | Size: 378 KiB |
BIN
figs/LION_metrology_interferometers.pdf
Normal file
BIN
figs/LION_metrology_interferometers.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
figs/LION_metrology_interferometers.svg
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
figs/comp_damped_undamped_plant.pdf
Normal file
BIN
figs/comp_damped_undamped_plant.png
Normal file
After Width: | Height: | Size: 309 KiB |
BIN
figs/comp_dynamics_int_ext_metrology.pdf
Normal file
BIN
figs/comp_dynamics_int_ext_metrology.png
Normal file
After Width: | Height: | Size: 298 KiB |
BIN
figs/comp_hac_plant_exp_simscape.pdf
Normal file
BIN
figs/comp_hac_plant_exp_simscape.png
Normal file
After Width: | Height: | Size: 278 KiB |
BIN
figs/comp_plant_encoders_Va.pdf
Normal file
BIN
figs/comp_plant_encoders_Va.png
Normal file
After Width: | Height: | Size: 295 KiB |
BIN
figs/dx_dy_motion_rotation.pdf
Normal file
BIN
figs/dx_dy_motion_rotation.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
figs/dx_dy_spindle_rotation.pdf
Normal file
BIN
figs/dx_dy_spindle_rotation.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
figs/dx_dy_spindle_rotation_asd.pdf
Normal file
BIN
figs/dx_dy_spindle_rotation_asd.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
figs/dx_dy_spindle_rotation_cas.pdf
Normal file
BIN
figs/dx_dy_spindle_rotation_cas.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
figs/dz_motion_rotation.pdf
Normal file
BIN
figs/dz_motion_rotation.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
figs/dz_motion_rotation_excentricity.pdf
Normal file
BIN
figs/dz_motion_rotation_excentricity.png
Normal file
After Width: | Height: | Size: 218 KiB |
BIN
figs/dz_motion_rotation_poles.pdf
Normal file
BIN
figs/dz_motion_rotation_poles.png
Normal file
After Width: | Height: | Size: 384 KiB |
BIN
figs/dz_spindle_rotation_asd.pdf
Normal file
BIN
figs/dz_spindle_rotation_asd.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
figs/dz_spindle_rotation_cas.pdf
Normal file
BIN
figs/dz_spindle_rotation_cas.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
figs/first_hac_K_exp_loop_gain.pdf
Normal file
BIN
figs/first_hac_K_exp_loop_gain.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
figs/first_hac_K_exp_root_locus.pdf
Normal file
BIN
figs/first_hac_K_exp_root_locus.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
figs/lab_elmo_issue.PNG
Executable file
After Width: | Height: | Size: 124 KiB |
BIN
figs/root_locus_iff_no_payload.pdf
Normal file
BIN
figs/root_locus_iff_no_payload.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
figs/rx_ry_spindle_rotation.pdf
Normal file
BIN
figs/rx_ry_spindle_rotation.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
figs/rx_ry_spindle_rotation_asd.pdf
Normal file
BIN
figs/rx_ry_spindle_rotation_asd.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
figs/rx_ry_spindle_rotation_cas.pdf
Normal file
BIN
figs/rx_ry_spindle_rotation_cas.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
figs/simscape_model_hac_plant.pdf
Normal file
BIN
figs/simscape_model_hac_plant.png
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
figs/simscape_model_spindle_bench.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
figs/spindle_errors_1rpm_ol.pdf
Normal file
BIN
figs/spindle_errors_1rpm_ol.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
figs/spindle_errors_1rpm_op_cl.pdf
Normal file
BIN
figs/spindle_errors_1rpm_op_cl.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
figs/spindle_errors_1rpm_op_cl_rot.pdf
Normal file
BIN
figs/spindle_errors_1rpm_op_cl_rot.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
figs/test_bench_spindle_cad.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 100 KiB |
137
preamble.tex
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
\usepackage{float}
|
||||||
|
|
||||||
|
\usepackage{caption,tabularx,booktabs}
|
||||||
|
\usepackage{bm}
|
||||||
|
|
||||||
|
\usepackage{xpatch} % Recommanded for biblatex
|
||||||
|
\usepackage[ % use biblatex for bibliography
|
||||||
|
backend=biber, % use biber backend (bibtex replacement) or bibtex
|
||||||
|
style=ieee, % bib style
|
||||||
|
hyperref=true, % activate hyperref support
|
||||||
|
backref=true, % activate backrefs
|
||||||
|
isbn=false, % don't show isbn tags
|
||||||
|
url=false, % don't show url tags
|
||||||
|
doi=false, % don't show doi tags
|
||||||
|
urldate=long, % display type for dates
|
||||||
|
maxnames=3, %
|
||||||
|
minnames=1, %
|
||||||
|
maxbibnames=5, %
|
||||||
|
minbibnames=3, %
|
||||||
|
maxcitenames=2, %
|
||||||
|
mincitenames=1 %
|
||||||
|
]{biblatex}
|
||||||
|
|
||||||
|
\setlength\bibitemsep{1.1\itemsep}
|
||||||
|
|
||||||
|
% \renewcommand*{\bibfont}{\footnotesize}
|
||||||
|
|
||||||
|
\usepackage{fontawesome}
|
||||||
|
|
||||||
|
\usepackage{caption}
|
||||||
|
\usepackage{subcaption}
|
||||||
|
|
||||||
|
\captionsetup[figure]{labelfont=bf}
|
||||||
|
\captionsetup[subfigure]{labelfont=bf}
|
||||||
|
\captionsetup[listing]{labelfont=bf}
|
||||||
|
\captionsetup[table]{labelfont=bf}
|
||||||
|
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
\definecolor{my-blue}{HTML}{6b7adb}
|
||||||
|
\definecolor{my-pale-blue}{HTML}{e6e9f9}
|
||||||
|
\definecolor{my-red}{HTML}{db6b6b}
|
||||||
|
\definecolor{my-pale-red}{HTML}{f9e6e6}
|
||||||
|
\definecolor{my-green}{HTML}{6bdbb6}
|
||||||
|
\definecolor{my-pale-green}{HTML}{e6f9f3}
|
||||||
|
\definecolor{my-yellow}{HTML}{dbd26b}
|
||||||
|
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
|
||||||
|
\definecolor{my-orange}{HTML}{dba76b}
|
||||||
|
\definecolor{my-pale-orange}{HTML}{f9f0e6}
|
||||||
|
\definecolor{my-grey}{HTML}{a3a3a3}
|
||||||
|
\definecolor{my-pale-grey}{HTML}{f0f0f0}
|
||||||
|
\definecolor{my-turq}{HTML}{6bc7db}
|
||||||
|
\definecolor{my-pale-turq}{HTML}{e6f6f9}
|
||||||
|
|
||||||
|
\usepackage{inconsolata}
|
||||||
|
|
||||||
|
\usepackage[newfloat=true, chapter]{minted}
|
||||||
|
\usemintedstyle{autumn}
|
||||||
|
|
||||||
|
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
|
||||||
|
\setminted[matlab]{label=Matlab}
|
||||||
|
\setminted[latex]{label=LaTeX}
|
||||||
|
\setminted[bash]{label=Bash}
|
||||||
|
\setminted[python]{label=Python}
|
||||||
|
\setminted[text]{label=Results}
|
||||||
|
\setminted[md]{label=Org Mode}
|
||||||
|
|
||||||
|
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
|
||||||
|
|
||||||
|
\usepackage[most]{tcolorbox}
|
||||||
|
|
||||||
|
\tcbuselibrary{minted}
|
||||||
|
|
||||||
|
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
|
||||||
|
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
|
||||||
|
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
|
||||||
|
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
|
||||||
|
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
|
||||||
|
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
|
||||||
|
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
|
||||||
|
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
|
||||||
|
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
|
||||||
|
\newtcolorbox{note}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Note}
|
||||||
|
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
|
||||||
|
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
|
||||||
|
|
||||||
|
\newtcolorbox{my-quote}[1]{%
|
||||||
|
colback=my-pale-grey,
|
||||||
|
grow to right by=-10mm,
|
||||||
|
grow to left by=-10mm,
|
||||||
|
boxrule=0pt,
|
||||||
|
boxsep=0pt,
|
||||||
|
breakable,
|
||||||
|
enhanced jigsaw,
|
||||||
|
borderline west={4pt}{0pt}{my-grey}}
|
||||||
|
|
||||||
|
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
|
||||||
|
|
||||||
|
\newtcolorbox{my-verse}[1]{%
|
||||||
|
colback=my-pale-grey,
|
||||||
|
grow to right by=-10mm,
|
||||||
|
grow to left by=-10mm,
|
||||||
|
boxrule=0pt,
|
||||||
|
boxsep=0pt,
|
||||||
|
breakable,
|
||||||
|
enhanced jigsaw,
|
||||||
|
borderline west={4pt}{0pt}{my-grey}}
|
||||||
|
|
||||||
|
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
|
||||||
|
|
||||||
|
\usepackage{environ}% http://ctan.org/pkg/environ
|
||||||
|
\NewEnviron{aside}{%
|
||||||
|
\marginpar{\BODY}
|
||||||
|
}
|
||||||
|
|
||||||
|
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
|
||||||
|
|
||||||
|
\usepackage{soul}
|
||||||
|
\sethlcolor{my-pale-grey}
|
||||||
|
|
||||||
|
\let\OldTexttt\texttt
|
||||||
|
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\preto\Gin@extensions{png,}
|
||||||
|
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
|
||||||
|
\preto\Gin@extensions{gif,}
|
||||||
|
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
allcolors = my-blue
|
||||||
|
}
|
||||||
|
|
||||||
|
\usepackage{hypcap}
|
0
test-bench-nass-spindle.bib
Normal file
508
test-bench-nass-spindle.tex
Normal file
@ -0,0 +1,508 @@
|
|||||||
|
% Created 2024-03-19 Tue 11:19
|
||||||
|
% Intended LaTeX compiler: pdflatex
|
||||||
|
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||||
|
|
||||||
|
\input{preamble.tex}
|
||||||
|
\bibliography{test-bench-nass-spindle.bib}
|
||||||
|
\author{Dehaeze Thomas}
|
||||||
|
\date{\today}
|
||||||
|
\title{Nano-Hexapod on top of a Spindle - Test Bench}
|
||||||
|
\hypersetup{
|
||||||
|
pdfauthor={Dehaeze Thomas},
|
||||||
|
pdftitle={Nano-Hexapod on top of a Spindle - Test Bench},
|
||||||
|
pdfkeywords={},
|
||||||
|
pdfsubject={},
|
||||||
|
pdfcreator={Emacs 29.2 (Org mode 9.7)},
|
||||||
|
pdflang={English}}
|
||||||
|
\usepackage{biblatex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\maketitle
|
||||||
|
\tableofcontents
|
||||||
|
|
||||||
|
\clearpage
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1,width=\linewidth]{figs/IMG_20221220_152429.jpg}
|
||||||
|
\caption{\label{fig:picture_setup}Setup with the Spindle, nano-hexapod and metrology}
|
||||||
|
\end{figure}
|
||||||
|
\chapter{Test-Bench Description}
|
||||||
|
\begin{note}
|
||||||
|
Here are the documentation of the equipment used for this test bench:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Voltage Amplifier: PiezoDrive \href{doc/PD200-V7-R1.pdf}{PD200}
|
||||||
|
\item Amplified Piezoelectric Actuator: Cedrat \href{doc/APA300ML.pdf}{APA300ML}
|
||||||
|
\item DAC/ADC: Speedgoat \href{doc/IO131-OEM-Datasheet.pdf}{IO131}
|
||||||
|
\item Encoder: Renishaw \href{doc/L-9517-9678-05-A\_Data\_sheet\_VIONiC\_series\_en.pdf}{Vionic} and used \href{doc/L-9517-9862-01-C\_Data\_sheet\_RKLC\_EN.pdf}{Ruler}
|
||||||
|
\item LION Precision \href{doc/Catalog-CPL190290.pdf}{CPL290}
|
||||||
|
\item Spindle: Lab Motion \href{doc/RS250S.pdf}{RT250S} with \href{doc/DB36\_connections\_english\_V2.pdf}{Drivebox 3.6} controller
|
||||||
|
\end{itemize}
|
||||||
|
\end{note}
|
||||||
|
\section{Alignment}
|
||||||
|
|
||||||
|
Procedure:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Align bottom sphere with the spindle rotation axis (\textasciitilde{} 10um)
|
||||||
|
\item Align top sphere with the spindle rotation axis (\textasciitilde{} 10um)
|
||||||
|
\end{enumerate}
|
||||||
|
\section{Short Range metrology system}
|
||||||
|
|
||||||
|
There are 5 interferometers pointing at 2 spheres as shown in Figure \ref{fig:LION_metrology_interferometers}.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1,width=0.5\linewidth]{figs/IMG_20221216_181305.jpg}
|
||||||
|
\caption{\label{fig:picture_metrology}Metrology system with LION sphere (1 inch diameter) and 5 interferometers fixed to their individual tip-tilts}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
& Value\\
|
||||||
|
\hline
|
||||||
|
Sphere Diameter & 25.4mm\\
|
||||||
|
Distance between the spheres & 76.2mm\\
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1,width=0.5\linewidth]{figs/LION_metrology_interferometers.png}
|
||||||
|
\caption{\label{fig:LION_metrology_interferometers}Schematic of the measurement system}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\textbf{Assumptions}:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Interferometers are perfectly positioned / oriented
|
||||||
|
\item Sphere is perfect
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Compute the Jacobian matrix}:
|
||||||
|
\begin{itemize}
|
||||||
|
\item From pure X-Y-Z-Rx-Ry small motions, compute the effect on the 5 measured distances
|
||||||
|
\item Compute the matrix
|
||||||
|
\item Inverse the matrix
|
||||||
|
\item Verify that it is working with simple example (for example using Solidworkds)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
We have the following set of equations:
|
||||||
|
\begin{align}
|
||||||
|
d_1 &= -D_y + l_2 R_x \\
|
||||||
|
d_2 &= -D_y - l_1 R_x \\
|
||||||
|
d_3 &= -D_x - l_2 R_y \\
|
||||||
|
d_4 &= -D_x + l_1 R_y \\
|
||||||
|
d_5 &= -D_z
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
That can be written as a linear transformation:
|
||||||
|
\begin{equation}
|
||||||
|
\begin{bmatrix}
|
||||||
|
d_1 \\ d_2 \\ d_3 \\ d_4 \\ d_5
|
||||||
|
\end{bmatrix} = \begin{bmatrix}
|
||||||
|
0 & -1 & 0 & l_2 & 0 \\
|
||||||
|
0 & -1 & 0 & -l_1 & 0 \\
|
||||||
|
-1 & 0 & 0 & 0 & -l_2 \\
|
||||||
|
-1 & 0 & 0 & 0 & l_1 \\
|
||||||
|
0 & 0 & -1 & 0 & 0
|
||||||
|
\end{bmatrix} \cdot \begin{bmatrix}
|
||||||
|
D_x \\ D_y \\ D_z \\ R_x \\ R_y
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
By inverting the matrix, we obtain the Jacobian relation:
|
||||||
|
\begin{equation}
|
||||||
|
\begin{bmatrix}
|
||||||
|
D_x \\ D_y \\ D_z \\ R_x \\ R_y
|
||||||
|
\end{bmatrix} = \begin{bmatrix}
|
||||||
|
0 & -1 & 0 & l_2 & 0 \\
|
||||||
|
0 & -1 & 0 & -l_1 & 0 \\
|
||||||
|
-1 & 0 & 0 & 0 & -l_2 \\
|
||||||
|
-1 & 0 & 0 & 0 & l_1 \\
|
||||||
|
0 & 0 & -1 & 0 & 0
|
||||||
|
\end{bmatrix}^{-1} \cdot \begin{bmatrix}
|
||||||
|
d_1 \\ d_2 \\ d_3 \\ d_4 \\ d_5
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\caption{\label{tab:jacobian_metrology}Jacobian matrix for the metrology system}
|
||||||
|
\centering
|
||||||
|
\begin{tabularx}{\linewidth}{cXXXXX}
|
||||||
|
\toprule
|
||||||
|
& \textbf{d1} & \textbf{d2} & \textbf{d3} & \textbf{d4} & \textbf{d5}\\
|
||||||
|
\midrule
|
||||||
|
\textbf{Dx} & 0.0 & 0.0 & -0.79 & -0.21 & 0.0\\
|
||||||
|
\textbf{Dy} & -0.79 & -0.21 & -0.0 & -0.0 & 0.0\\
|
||||||
|
\textbf{Dz} & 0.0 & 0.0 & 0.0 & 0.0 & -1.0\\
|
||||||
|
\textbf{Rx} & 13.12 & -13.12 & 0.0 & -0.0 & 0.0\\
|
||||||
|
\textbf{Ry} & 0.0 & 0.0 & -13.12 & 13.12 & 0.0\\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabularx}
|
||||||
|
\end{table}
|
||||||
|
\section{Spindle errors}
|
||||||
|
The spindle is rotated at 60rpm during 10 turns.
|
||||||
|
The signal of all 5 interferometers are recorded.
|
||||||
|
\subsection{Errors in \(D_x\) and \(D_y\)}
|
||||||
|
|
||||||
|
Because of the eccentricity of the reference surfaces (the spheres), we expect the motion in the X-Y plane to be a circle as a first approximation.
|
||||||
|
We can first see that in Figure \ref{fig:dx_dy_motion_rotation} that shows the measured \(D_x\) and \(D_y\) motion as a function of the \(R_z\) angle.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dx_dy_motion_rotation.png}
|
||||||
|
\caption{\label{fig:dx_dy_motion_rotation}Dx and Dy motion during the rotation}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
A circle is fit, and the obtained radius of the circle (i.e. the excentricity) is estimated to be:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
Error linked to excentricity = 19 um
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
The motion in the X-Y plane as well as the circle fit and the residual motion (circle fit subtracted from the measured motion) are shown in Figure \ref{fig:dx_dy_spindle_rotation}.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dx_dy_spindle_rotation.png}
|
||||||
|
\caption{\label{fig:dx_dy_spindle_rotation}Dx and Dy motion during the spindle rotation}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Let's now analyse the frequency content in the signal.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dx_dy_spindle_rotation_asd.png}
|
||||||
|
\caption{\label{fig:dx_dy_spindle_rotation_asd}Amplitude Spectral Density of the measured Dx and Dy motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dx_dy_spindle_rotation_cas.png}
|
||||||
|
\caption{\label{fig:dx_dy_spindle_rotation_cas}Cumulative Amplitude Spectrum of the measured Dx and Dy motion}
|
||||||
|
\end{figure}
|
||||||
|
\subsection{Errors in vertical motion \(D_z\)}
|
||||||
|
|
||||||
|
The top interferometer is measuring the vertical motion of the sphere.
|
||||||
|
|
||||||
|
However, if the top sphere is not perfectly aligned with the spindle axis, there will also measure some vertical motion due to this excentricity.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dz_motion_rotation.png}
|
||||||
|
\caption{\label{fig:dz_motion_rotation}Dz motion during the rotation}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Let's fit a sinus with a period of one turn.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
Errors linked to excentricity = 410 [nm]
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dz_motion_rotation_excentricity.png}
|
||||||
|
\caption{\label{fig:dz_motion_rotation_excentricity}Effect of the excentricity and remaining Dz motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
If we look at the remaining motion after removing the effect of the eccentricity (Figure \ref{fig:dz_motion_rotation_excentricity}, right), we can see a signal with 20 periods every turn.
|
||||||
|
Let's fit this.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
Errors linked to spindle motor = 58 [nm]
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dz_motion_rotation_poles.png}
|
||||||
|
\caption{\label{fig:dz_motion_rotation_poles}Effect of the magnetic pole pairs and remaining Dz motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Let's look at the signal in the frequency domain.
|
||||||
|
|
||||||
|
On top of the peak at 1Hz (excentricity) and at 20Hz (number of pole pairs), we can observe a frequency of 126Hz (i.e. 126 periods per turn, approx 2.85 deg).
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Could this be related to the air bearing system?
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dz_spindle_rotation_asd.png}
|
||||||
|
\caption{\label{fig:dz_spindle_rotation_asd}Amplitude Spectral Density of the measured Dz motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/dz_spindle_rotation_cas.png}
|
||||||
|
\caption{\label{fig:dz_spindle_rotation_cas}Cumulative Amplitude Spectrum of the measured Dz motion}
|
||||||
|
\end{figure}
|
||||||
|
\subsection{Angle errors in \(R_x\) and \(R_y\)}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
amplitude = 281 urad
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/rx_ry_spindle_rotation.png}
|
||||||
|
\caption{\label{fig:rx_ry_spindle_rotation}Rx and Ry motion during the spindle rotation}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Let's now analyse the frequency content in the signal.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/rx_ry_spindle_rotation_asd.png}
|
||||||
|
\caption{\label{fig:rx_ry_spindle_rotation_asd}Amplitude Spectral Density of the measured Rx and Ry motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/rx_ry_spindle_rotation_cas.png}
|
||||||
|
\caption{\label{fig:rx_ry_spindle_rotation_cas}Cumulative Amplitude Spectrum of the measured Rx and Ry motion}
|
||||||
|
\end{figure}
|
||||||
|
\chapter{Simscape Model}
|
||||||
|
A 3D view of the Simscape model is shown in Figure \ref{fig:simscape_model_spindle_bench}.
|
||||||
|
The Spindle is represented by a \emph{Bushing joint}.
|
||||||
|
Axial, radial and tilt stiffnesses are taken from the Spindle datasheet (see Table).
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\caption{\label{tab:spindle_stiffnesses}Spindle stiffnesses}
|
||||||
|
\centering
|
||||||
|
\begin{tabularx}{\linewidth}{lXX}
|
||||||
|
\toprule
|
||||||
|
\textbf{Stiffness} & \textbf{Value} & \textbf{Unit}\\
|
||||||
|
\midrule
|
||||||
|
Axial & 402 & \(N/\mu m\)\\
|
||||||
|
Radial & 226 & \(N/\mu m\)\\
|
||||||
|
Tilt & 2380 & \(Nm/mrad\)\\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabularx}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
The metrology system consists of 5 distance measurements (represented by the red lines in Figure \ref{fig:simscape_model_spindle_bench}).
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1,width=0.5\linewidth]{figs/simscape_model_spindle_bench.jpg}
|
||||||
|
\caption{\label{fig:simscape_model_spindle_bench}Screenshot of the 3D view of the Simscape model}
|
||||||
|
\end{figure}
|
||||||
|
\section{Simscape model parameters}
|
||||||
|
The nano-hexapod is initialized.
|
||||||
|
|
||||||
|
The Jacobian matrix that computes the \([x, y, z, R_x, R_y]\) motion of the sample from the 5 interferometers is defined below.
|
||||||
|
\section{Control Architecture}
|
||||||
|
|
||||||
|
Let's note:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \(d\mathcal{L}_m = [d_{\mathcal{L}_1},\ d_{\mathcal{L}_2},\ d_{\mathcal{L}_3},\ d_{\mathcal{L}_4},\ d_{\mathcal{L}_5},\ d_{\mathcal{L}_6}]\) the measurement of the 6 encoders fixed to the nano-hexapod
|
||||||
|
\item \(\bm{\tau}_m = [\tau_{m_1},\ \tau_{m_2},\ \tau_{m_3},\ \tau_{m_4},\ \tau_{m_5},\ \tau_{m_6}]\) the voltages measured by the 6 force sensors
|
||||||
|
\item \(\bm{u} = [u_1,\ u_2,\ u_3,\ u_4,\ u_5,\ u_6]\) the voltages send to the voltage amplifiers for the 6 piezoelectric actuators
|
||||||
|
\item \(R_z\) the spindle measured angle (encoder)
|
||||||
|
\item \(\bm{d}_m = [d_1,\ d_2,\ d_3,\ d_4,\ d_5]\) the distances measured by the 5 interferometers (see Figure \ref{fig:LION_metrology_interferometers_bis})
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1,width=0.5\linewidth]{figs/LION_metrology_interferometers.png}
|
||||||
|
\caption{\label{fig:LION_metrology_interferometers_bis}Schematic of the measurement system}
|
||||||
|
\end{figure}
|
||||||
|
\section{Computation of the strut errors from the external metrology}
|
||||||
|
|
||||||
|
The following frames are defined:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \(\{ W \}\): the frame that represents the wanted pose of the sample
|
||||||
|
\item \(\{ M \}\): the frame that represents the measured pose of the sample (estimated from the 5 interferometers and the spindle encoder)
|
||||||
|
\item \(\{ G \}\): the frame fixed to the granite and positioned at the sample's center
|
||||||
|
\item \(\{ H \}\): the frame fixed to the the spindle rotor, and positioned at the sample's center
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
We can express several homogeneous transformation matrices.
|
||||||
|
|
||||||
|
Frame fixed to the spindle rotor (centered on the sample's position), expressed in the frame of the granite:
|
||||||
|
\begin{equation}
|
||||||
|
{}^{G}\bm{T}_H = \begin{bmatrix}
|
||||||
|
cos(R_z) & -sin(R_z) & 0 & 0 \\
|
||||||
|
sin(R_z) & cos(R_z) & 0 & 0 \\
|
||||||
|
0 & 0 & 1 & 0 \\
|
||||||
|
0 & 0 & 0 & 1
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
with \(R_z\) the spindle encoder.
|
||||||
|
|
||||||
|
|
||||||
|
Wanted position expressed in the frame of the granite:
|
||||||
|
\begin{equation}
|
||||||
|
{}^{G}\bm{T}_W = \begin{bmatrix}
|
||||||
|
& & & r_{D_x} \\
|
||||||
|
& \bm{R}_x(r_{R_x}) \bm{R}_y(r_{R_y}) \bm{R}_z(r_{R_z}) & & r_{D_y} \\
|
||||||
|
& & & r_{D_z} \\
|
||||||
|
0 & 0 & 0 & 1
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
with \(\bm{R}(r_{R_x}, r_{R_y}, r_{R_z})\) representing the wanted orientation of the sample with respect to the granite.
|
||||||
|
Typically, \(r_{R_x} = 0\), \(r_{R_y} = 0\) and \(r_{R_z}\) corresponds to the spindle encoder \(R_z\).
|
||||||
|
|
||||||
|
|
||||||
|
Measured position of the sample with respect to the granite:
|
||||||
|
\begin{equation}
|
||||||
|
{}^{G}\bm{T}_M = \begin{bmatrix}
|
||||||
|
& & & y_{D_x} \\
|
||||||
|
& \bm{R}_x(y_{R_x}) \bm{R}_y(y_{R_y}) \bm{R}_z(R_z) & & y_{D_y} \\
|
||||||
|
& & & y_{D_z} \\
|
||||||
|
0 & 0 & 0 & 1
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
with \(R_z\) the spindle encoder, and \([y_{D_x},\ y_{D_y},\ y_{D_z},\ y_{R_x},\ y_{R_y}]\) are obtained from the 5 interferometers:
|
||||||
|
\begin{equation}
|
||||||
|
\begin{bmatrix}
|
||||||
|
y_{D_x} \\ y_{D_y} \\ y_{D_z} \\ y_{R_x} \\ y_{R_y}
|
||||||
|
\end{bmatrix} = \begin{bmatrix}
|
||||||
|
0 & -1 & 0 & l_2 & 0 \\
|
||||||
|
0 & -1 & 0 & -l_1 & 0 \\
|
||||||
|
-1 & 0 & 0 & 0 & -l_2 \\
|
||||||
|
-1 & 0 & 0 & 0 & l_1 \\
|
||||||
|
0 & 0 & -1 & 0 & 0
|
||||||
|
\end{bmatrix}^{-1} \cdot \begin{bmatrix}
|
||||||
|
d_1 \\ d_2 \\ d_3 \\ d_4 \\ d_5
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
|
||||||
|
In order to have the \textbf{position error in the frame of the nano-hexapod}, we have to compute \({}^M\bm{T}_W\):
|
||||||
|
\begin{align}
|
||||||
|
{}^M\bm{T}_W &= {}^M\bm{T}_G \cdot {}^G\bm{T}_W \\
|
||||||
|
&= {{}^G\bm{T}_M}^{-1} \cdot {}^G\bm{T}_W
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
The \textbf{inverse of the transformation matrix} can be obtained by
|
||||||
|
\begin{equation}
|
||||||
|
{}^B\bm{T}_A = {}^A\bm{T}_B^{-1} =
|
||||||
|
\left[ \begin{array}{ccc|c}
|
||||||
|
& & & \\
|
||||||
|
& {}^A\bm{R}_B^T & & -{}^A \bm{R}_B^T {}^A\bm{P}_{O_B} \\
|
||||||
|
& & & \cr
|
||||||
|
\hline
|
||||||
|
0 & 0 & 0 & 1 \\
|
||||||
|
\end{array} \right]
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
The position errors \(\bm{\epsilon}_{\mathcal{X}} = [\epsilon_{D_x},\ \epsilon_{D_y},\ \epsilon_{D_z},\ \epsilon_{R_x},\ \epsilon_{R_y},\ \epsilon_{R_z}]\) expressed in a frame fixed to the nano-hexapod can be extracted from \({}^W\bm{T}_M\):
|
||||||
|
\begin{itemize}
|
||||||
|
\item \(\epsilon_{D_x} = {}^M\bm{T}_W(1,4)\)
|
||||||
|
\item \(\epsilon_{D_y} = {}^M\bm{T}_W(2,4)\)
|
||||||
|
\item \(\epsilon_{D_z} = {}^M\bm{T}_W(3,4)\)
|
||||||
|
\item \(\epsilon_{R_y} = \text{atan2}({}^M\bm{T}_W(1,3), \sqrt{{}^M\bm{T}_W(1,1)^2 + {}^M\bm{T}_W(1,2)^2})\)
|
||||||
|
\item \(\epsilon_{R_x} = \text{atan2}(\frac{-{}^M\bm{T}_W(2,3)}{\cos(\epsilon_{R_y})}, \frac{{}^M\bm{T}_W(3,3)}{\cos(\epsilon_{R_y})})\)
|
||||||
|
\item \(\epsilon_{R_z} = \text{atan2}(\frac{-{}^M\bm{T}_W(1,2)}{\cos(\epsilon_{R_y})}, \frac{{}^M\bm{T}_W(1,1)}{\cos(\epsilon_{R_y})})\)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Finally, the strut errors \(\bm{\epsilon}_{\mathcal{L}} = [\epsilon_{\matcal{L}_1},\ \epsilon_{\matcal{L}_2},\ \epsilon_{\matcal{L}_3},\ \epsilon_{\matcal{L}_4},\ \epsilon_{\matcal{L}_5},\ \epsilon_{\matcal{L}_6}]\) can be computed from:
|
||||||
|
\begin{equation}
|
||||||
|
\bm{\epsilon}_\mathcal{L} = \bm{J} \cdot \bm{\epsilon}_\mathcal{X}
|
||||||
|
\end{equation}
|
||||||
|
\section{IFF Plant}
|
||||||
|
\section{DVF Plant}
|
||||||
|
\section{HAC Plant}
|
||||||
|
The transfer functions from the 6 actuator inputs to the 6 estimated strut errors are extracted from the Simscape model.
|
||||||
|
|
||||||
|
The obtained transfer functions are shown in Figure \ref{fig:simscape_model_hac_plant}.
|
||||||
|
|
||||||
|
We can see that the system is well decoupled at low frequency (i.e. below the first resonance of the Nano-Hexapod).
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/simscape_model_hac_plant.png}
|
||||||
|
\caption{\label{fig:simscape_model_hac_plant}HAC plant obtained on the Simscape model}
|
||||||
|
\end{figure}
|
||||||
|
\chapter{Control Experiment}
|
||||||
|
\section{IFF Plant}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/G_iif_exp_no_rotation.png}
|
||||||
|
\caption{\label{fig:G_iif_exp_no_rotation}Obtained transfer function from generated voltages to measured voltages on the piezoelectric force sensor}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/G_iif_exp_comp_no_rotation.png}
|
||||||
|
\caption{\label{fig:G_iif_exp_comp_no_rotation}Comparison with the model}
|
||||||
|
\end{figure}
|
||||||
|
\section{IFF Controller}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/root_locus_iff_no_payload.png}
|
||||||
|
\caption{\label{fig:root_locus_iff_no_payload}Root Locus for IFF}
|
||||||
|
\end{figure}
|
||||||
|
\section{Open Loop Plant}
|
||||||
|
Here the \(R_z\) motion of the Hexapod is estimated from the encoders.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/G_damp_exp_no_rotation.png}
|
||||||
|
\caption{\label{fig:G_damp_exp_no_rotation}Obtained transfer function from generated voltages to estimated strut motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/comp_hac_plant_exp_simscape.png}
|
||||||
|
\caption{\label{fig:comp_hac_plant_exp_simscape}Comparison of the open-loop plant measured experimentally and extracted from Simscape}
|
||||||
|
\end{figure}
|
||||||
|
\section{Damped Plant}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/G_damp_damped_exp_no_rotation.png}
|
||||||
|
\caption{\label{fig:G_damp_damped_exp_no_rotation}Obtained transfer function from generated voltages to estimated strut motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/comp_damped_undamped_plant.png}
|
||||||
|
\caption{\label{fig:comp_damped_undamped_plant}Comparison of the undamped and damped plant with IFF}
|
||||||
|
\end{figure}
|
||||||
|
\section{HAC Controller}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/first_hac_K_exp_loop_gain.png}
|
||||||
|
\caption{\label{fig:first_hac_K_exp_loop_gain}Loop gain for the HAC}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/first_hac_K_exp_root_locus.png}
|
||||||
|
\caption{\label{fig:first_hac_K_exp_root_locus}Obtained Root Locus}
|
||||||
|
\end{figure}
|
||||||
|
\section{Compare dynamics seen by interferometers and by encoders}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/comp_dynamics_int_ext_metrology.png}
|
||||||
|
\caption{\label{fig:comp_dynamics_int_ext_metrology}Comparison of the identified dynamic by the internal metrology (encoders) and by the external metrology (interferometers)}
|
||||||
|
\end{figure}
|
||||||
|
\section{Compare dynamics obtained with different Rz estimations}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/comp_plant_encoders_Va.png}
|
||||||
|
\caption{\label{fig:comp_plant_encoders_Va}Comparison of the obtained plant using the Encoders or using the output Voltages to estimate Rz}
|
||||||
|
\end{figure}
|
||||||
|
\chapter{Closed-Loop Results}
|
||||||
|
\section{Open and Closed loop results}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1]{figs/spindle_errors_1rpm_ol.png}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/spindle_errors_1rpm_op_cl.png}
|
||||||
|
\caption{\label{fig:spindle_errors_1rpm_op_cl}Comparison of the Open-Loop and Closed-Loop spindle errors}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/spindle_errors_1rpm_op_cl_rot.png}
|
||||||
|
\caption{\label{fig:spindle_errors_1rpm_op_cl_rot}Comparison of the Open-Loop and Closed-Loop spindle errors - Rotation}
|
||||||
|
\end{figure}
|
||||||
|
\end{document}
|