Commit before modification for PhD thesis
304
.gitignore
vendored
@ -1,52 +1,260 @@
|
||||
auto/
|
||||
*.tex
|
||||
*.bbl
|
||||
*.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
|
||||
mat/
|
||||
figures/
|
||||
ltximg/
|
||||
slprj/
|
||||
sccprj/
|
||||
matlab/slprj/
|
||||
*.slxc
|
||||
|
||||
# Matlab code generation folders
|
||||
codegen/
|
||||
|
||||
# Simulink autosave extension
|
||||
*.autosave
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# LATEX
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
|
||||
# Octave session info
|
||||
octave-workspace
|
||||
## Core latex/pdflatex auxiliary files:
|
||||
*.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}
|