Compare commits

..

4 Commits

56 changed files with 18949 additions and 251 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -5,8 +5,8 @@
viewBox="0 0 358.4128 148.3078" viewBox="0 0 358.4128 148.3078"
version="1.2" version="1.2"
id="svg251" id="svg251"
sodipodi:docname="introduction_nass_concept_schematic.svg" sodipodi:docname="nass_concept_schematic.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
@ -23,14 +23,14 @@
inkscape:document-units="pt" inkscape:document-units="pt"
showgrid="false" showgrid="false"
inkscape:zoom="2.828427" inkscape:zoom="2.828427"
inkscape:cx="301.2275" inkscape:cx="265.87216"
inkscape:cy="172.71084" inkscape:cy="126.7489"
inkscape:window-width="2534" inkscape:window-width="2534"
inkscape:window-height="1367" inkscape:window-height="1387"
inkscape:window-x="11" inkscape:window-x="11"
inkscape:window-y="60" inkscape:window-y="38"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:current-layer="layer6" inkscape:current-layer="layer7"
inkscape:snap-midpoints="true" inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true" inkscape:snap-smooth-nodes="true"
inkscape:snap-intersection-paths="true" inkscape:snap-intersection-paths="true"
@ -1143,7 +1143,7 @@
sodipodi:nodetypes="ccccc" /> sodipodi:nodetypes="ccccc" />
</g> </g>
<path <path
style="fill:none;stroke:#7e2f8e;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="fill:none;stroke:#0072bd;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 108.41049,50.622708 c 0.2286,45.975334 -13.668585,86.529352 16.28918,87.665242 25.75856,0.97668 67.2276,-20.02285 87.92248,-19.07679" d="m 108.41049,50.622708 c 0.2286,45.975334 -13.668585,86.529352 16.28918,87.665242 25.75856,0.97668 67.2276,-20.02285 87.92248,-19.07679"
id="path24-2" id="path24-2"
sodipodi:nodetypes="csc" /> sodipodi:nodetypes="csc" />
@ -1194,18 +1194,21 @@
id="path2837-7" id="path2837-7"
sodipodi:nodetypes="ccccscc" /> sodipodi:nodetypes="ccccscc" />
<path <path
style="fill:none;stroke:#7e2f8e;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="fill:none;stroke:#d95319;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 193.37751,84.42006 c 10.89348,6.304037 8.20878,21.53806 19.24463,20.2999" d="m 193.37751,84.42006 c 10.89348,6.304037 8.20878,21.53806 19.24463,20.2999"
id="path24" id="path24"
sodipodi:nodetypes="cc" sodipodi:nodetypes="cc" />
transform="translate(1.5242858e-7)" /> <path
style="fill:none;stroke:#edb120;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 181.86497,141.04203 c 14.45598,-0.16471 19.45721,-7.3211 30.77431,-7.3211"
id="path24-6"
sodipodi:nodetypes="cc" />
<circle <circle
style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1" style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1"
id="path22" id="path22"
cx="193.3775" cx="193.3775"
cy="84.420059" cy="84.420059"
r="1.4863875" r="1.4863875" />
transform="translate(1.5242858e-7)" />
</g> </g>
<g <g
inkscape:groupmode="layer" inkscape:groupmode="layer"
@ -1225,6 +1228,18 @@
cx="212.63928" cx="212.63928"
cy="116.77495" cy="116.77495"
r="1.4863875" /> r="1.4863875" />
<circle
style="font-variation-settings:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1"
id="path22-7-0-3"
cx="212.63928"
cy="131.28471"
r="1.4863875" />
<circle
style="font-variation-settings:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1"
id="path22-7-0-3-7"
cx="181.86497"
cy="138.60582"
r="1.4863875" />
<circle <circle
style="font-variation-settings:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1" style="font-variation-settings:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:0.75, 0.75;stroke-dashoffset:0;stroke-opacity:1"
id="path22-7" id="path22-7"
@ -1421,17 +1436,6 @@
</g> </g>
</g> </g>
</g> </g>
<text
xml:space="preserve"
style="font-size:9.99998px;line-height:1.25;font-family:'Latin Modern Roman';-inkscape-font-specification:'Latin Modern Roman, Normal';fill:#7e2f8e;stroke-width:0.75"
x="217.09187"
y="84.087959"
id="text11"><tspan
sodipodi:role="line"
id="tspan11"
style="fill:#7e2f8e;stroke-width:0.75"
x="217.09187"
y="84.087959">Instrumentation</tspan></text>
<text <text
xml:space="preserve" xml:space="preserve"
style="font-size:9.99998px;line-height:1.25;font-family:'Latin Modern Roman';-inkscape-font-specification:'Latin Modern Roman, Normal';fill:#edb120;stroke-width:0.75" style="font-size:9.99998px;line-height:1.25;font-family:'Latin Modern Roman';-inkscape-font-specification:'Latin Modern Roman, Normal';fill:#edb120;stroke-width:0.75"
@ -1527,5 +1531,31 @@
d="M -6.7950375,121.24058 H 8.8454188" d="M -6.7950375,121.24058 H 8.8454188"
id="path21" id="path21"
sodipodi:nodetypes="cc" /> sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:10px;line-height:1.25;font-family:'Latin Modern Roman';-inkscape-font-specification:'Latin Modern Roman, Normal';stroke-width:0.75"
x="252.41679"
y="103.76615"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="font-size:10px;text-align:center;text-anchor:middle;stroke-width:0.75"
x="252.41679"
y="103.76615">Instrumentation</tspan><tspan
sodipodi:role="line"
style="font-size:10px;text-align:center;text-anchor:middle;stroke-width:0.75"
x="252.41679"
y="116.26615"
id="tspan2">and</tspan><tspan
sodipodi:role="line"
style="font-size:10px;text-align:center;text-anchor:middle;stroke-width:0.75"
x="252.41679"
y="128.76614"
id="tspan3">Real-Time</tspan><tspan
sodipodi:role="line"
style="font-size:10px;text-align:center;text-anchor:middle;stroke-width:0.75"
x="252.41679"
y="141.26614"
id="tspan4">Control</tspan></text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

BIN
figs/nass_hac_loci.pdf Normal file

Binary file not shown.

BIN
figs/nass_hac_loci.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
figs/nass_hac_loop_gain.pdf Normal file

Binary file not shown.

BIN
figs/nass_hac_loop_gain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
figs/nass_hac_plants.pdf Normal file

Binary file not shown.

BIN
figs/nass_hac_plants.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

2151
figs/nass_iff_loop_gain.pdf Normal file

File diff suppressed because it is too large Load Diff

BIN
figs/nass_iff_loop_gain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

2314
figs/nass_iff_plant_kp.pdf Normal file

File diff suppressed because it is too large Load Diff

BIN
figs/nass_iff_plant_kp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Binary file not shown.

View File

@ -15,7 +15,7 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
%% Actuators %% Actuators
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof' args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 1e6 args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 1e6
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e4 args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e4
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605 args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302 args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 50 args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 50

View File

@ -14,3 +14,5 @@
\makeindex \makeindex
\makeglossaries \makeglossaries
\usepackage{bm}

View File

@ -2,7 +2,6 @@
\usepackage{enumitem} \usepackage{enumitem}
\usepackage{caption,tabularx,booktabs} \usepackage{caption,tabularx,booktabs}
\usepackage{bm}
\usepackage{xpatch} % Recommanded for biblatex \usepackage{xpatch} % Recommanded for biblatex
\usepackage[ % use biblatex for bibliography \usepackage[ % use biblatex for bibliography

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2025-02-12 Wed 15:35 % Created 2025-02-17 Mon 22:37
% Intended LaTeX compiler: pdflatex % Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -28,139 +28,277 @@ From last sections:
\begin{itemize} \begin{itemize}
\item Uniaxial: No stiff nano-hexapod (should also demonstrate that here) \item Uniaxial: No stiff nano-hexapod (should also demonstrate that here)
\item Rotating: No soft nano-hexapod, Decentralized IFF can be used robustly by adding parallel stiffness \item Rotating: No soft nano-hexapod, Decentralized IFF can be used robustly by adding parallel stiffness
\item Micro-Station multi body model tuned from a modal analysis
\item Multi-body model of a nano-hexapod that can be merged with the multi-body model of the micro-station
\end{itemize} \end{itemize}
In this section: In this section:
\begin{itemize} \begin{itemize}
\item Take the model of the nano-hexapod with stiffness 1um/N \item Take the model of the nano-hexapod described in previous section (stiffness 1um/N)
\item Apply decentralized IFF \item Control kinematics: how the external metrology, the nano-hexapod metrology are used to control the sample's position (Section \ref{sec:nass_kinematics})
\item Apply HAC-LAC \item Apply decentralized IFF (Section \ref{sec:nass_active_damping})
\item Check robustness to payload change \item Apply HAC-LAC (Section \ref{sec:nass_hac})
\begin{itemize}
\item Check robustness to change of payload and to spindle rotation
\item Simulation of experiments \item Simulation of experiments
\end{itemize} \end{itemize}
\item Conclusion of the conceptual phase, validation with simulations
\end{itemize}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.8\linewidth]{figs/nass_simscape_model.jpg}
\caption{\label{fig:nass_simscape_model}3D view of the NASS multi-body model}
\end{figure}
\chapter{Control Kinematics} \chapter{Control Kinematics}
\label{sec:nass_kinematics} \label{sec:nass_kinematics}
\begin{itemize} Figure \ref{fig:nass_concept_schematic} presents a schematic overview of the NASS.
\item Explained during the last section: HAC-IFF This section focuses specifically on the components of the ``Instrumentation and Real-Time Control'' block.
Decentralized IFF
Centralized HAC, control in the frame of the struts
\item To compute the positioning errors in the frame of the struts
\begin{itemize}
\item Compute the wanted pose of the sample with respect to the granite using the micro-station kinematics (Section \ref{ssec:nass_ustation_kinematics})
\item Measure the sample pose with respect to the granite using the external metrology and internal metrology for Rz (Section \ref{ssec:nass_sample_pose_error})
\item Compute the sample pose error and map these errors in the frame of the struts (Section \ref{ssec:nass_error_struts})
\end{itemize}
\item The complete control architecture is shown in Section \ref{ssec:nass_control_architecture}
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/positioning\_error.org}{positioning\_error}: Explain how the NASS control is made (computation of the wanted position, measurement of the sample position, computation of the errors)
\item[{$\square$}] Schematic with micro-station + nass + metrology + control system => explain what is inside the control system
\end{itemize}
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/nass_concept_schematic.png} \includegraphics[scale=1]{figs/nass_concept_schematic.png}
\caption{\label{fig:nass_concept_schematic}Figure caption} \caption{\label{fig:nass_concept_schematic}Schematic of the Nano Active Stabilization System}
\end{figure} \end{figure}
As established in the previous section on Stewart platforms, the proposed control strategy combines Decentralized Integral Force Feedback with a High Authority Controller performed in the frame of the struts.
For the Nano Active Stabilization System, computing the positioning errors in the frame of the struts involves three key steps.
First, the system computes the desired sample pose relative to a frame representing the point where the X-ray light is focused using micro-station kinematics, as detailed in Section \ref{ssec:nass_ustation_kinematics}.
Second, it measures the actual sample pose relative to the same fix frame, described in Section \ref{ssec:nass_sample_pose_error}.
Finally, it determines the sample pose error and maps these errors to the nano-hexapod struts, as explained in Section \ref{ssec:nass_error_struts}.
The complete control architecture is detailed in Section \ref{ssec:nass_control_architecture}.
\section{Micro Station Kinematics} \section{Micro Station Kinematics}
\label{ssec:nass_ustation_kinematics} \label{ssec:nass_ustation_kinematics}
\begin{itemize} The micro-station kinematics enables the computation of the desired sample pose from the reference signals of each micro-station stage.
\item from \ref{ssec:ustation_kinematics}, computation of the wanted sample pose from the setpoint of each stage. These reference signals consist of the desired lateral position \(r_{D_y}\), tilt angle \(r_{R_y}\), and spindle angle \(r_{R_z}\).
\end{itemize} The micro-hexapod pose is defined by six parameters: three translations (\(r_{D_{\mu x}}\), \(r_{D_{\mu y}}\), \(r_{D_{\mu z}}\)) and three rotations (\(r_{\theta_{\mu x}}\), \(r_{\theta_{\mu y}}\), \(r_{\theta_{\mu z}}\)).
wanted pose = Tdy * Try * Trz * Tu Using these reference signals, the desired sample position relative to the fixed frame is expressed through the homogeneous transformation matrix \(\bm{T}_{\mu\text{-station}}\), as defined in equation \eqref{eq:nass_sample_ref}.
\begin{equation}\label{eq:nass_sample_ref}
\bm{T}_{\mu\text{-station}} = \bm{T}_{D_y} \cdot \bm{T}_{R_y} \cdot \bm{T}_{R_z} \cdot \bm{T}_{\mu\text{-hexapod}}
\end{equation}
\begin{equation}\label{eq:nass_ustation_matrices}
\begin{align}
\bm{T}_{D_y} &= \begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & r_{D_y} \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix} \quad
\bm{T}_{\mu\text{-hexapod}} =
\left[ \begin{array}{ccc|c}
& & & r_{D_{\mu x}} \\
& \bm{R}_x(r_{\theta_{\mu x}}) \bm{R}_y(r_{\theta_{\mu y}}) \bm{R}_{z}(r_{\theta_{\mu z}}) & & r_{D_{\mu y}} \\
& & & r_{D_{\mu z}} \cr
\hline
0 & 0 & 0 & 1
\end{array} \right] \\
\bm{T}_{R_z} &= \begin{bmatrix}
\cos(r_{R_z}) & -\sin(r_{R_z}) & 0 & 0 \\
\sin(r_{R_z}) & \cos(r_{R_z}) & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix} \quad
\bm{T}_{R_y} = \begin{bmatrix}
\cos(r_{R_y}) & 0 & \sin(r_{R_y}) & 0 \\
0 & 1 & 0 & 0 \\
-\sin(r_{R_y}) & 0 & \cos(r_{R_y}) & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\end{align}
\end{equation}
\section{Computation of the sample's pose error} \section{Computation of the sample's pose error}
\label{ssec:nass_sample_pose_error} \label{ssec:nass_sample_pose_error}
From metrology (here supposed to be perfect 6-DoF), compute the sample's pose error. The external metrology system measures the sample position relative to the fixed granite.
Has to invert the homogeneous transformation. Due to the system's symmetry, this metrology provides measurements for five degrees of freedom: three translations (\(D_x\), \(D_y\), \(D_z\)) and two rotations (\(R_x\), \(R_y\)).
In reality, 5DoF metrology => have to estimate the Rz using spindle encoder + nano-hexapod internal metrology (micro-hexapod does not perform Rz rotation). The sixth degree of freedom (\(R_z\)) is still required to compute the errors in the frame of the nano-hexapod struts (i.e. to compute the nano-hexapod inverse kinematics).
This \(R_z\) rotation is estimated by combining measurements from the spindle encoder and the nano-hexapod's internal metrology, which consists of relative motion sensors in each strut (note that the micro-hexapod is not used for \(R_z\) rotation, and is therefore ignore for \(R_z\) estimation).
The measured sample pose is represented by the homogeneous transformation matrix \(\bm{T}_{\text{sample}}\), as shown in equation \eqref{eq:nass_sample_pose}.
\begin{equation}\label{eq:nass_sample_pose}
\bm{T}_{\text{sample}} =
\left[ \begin{array}{ccc|c}
& & & D_{x} \\
& \bm{R}_x(R_{x}) \bm{R}_y(R_{y}) \bm{R}_{z}(R_{z}) & & D_{y} \\
& & & D_{z} \cr
\hline
0 & 0 & 0 & 1
\end{array} \right]
\end{equation}
\section{Position error in the frame of the struts} \section{Position error in the frame of the struts}
\label{ssec:nass_error_struts} \label{ssec:nass_error_struts}
Explain how to compute the errors in the frame of the struts (rotating):
\begin{itemize}
\item Errors in the granite frame
\item Errors in the frame of the nano-hexapod
\item Errors in the frame of the struts => used for control
\end{itemize}
\section{Control Architecture} The homogeneous transformation formalism enables straightforward computation of the sample position error.
This computation involves the previously computed homogeneous \(4 \times 4\) matrices: \(\bm{T}_{\mu\text{-station}}\) representing the desired pose, and \(\bm{T}_{\text{sample}}\) representing the measured pose.
Their combination yields \(\bm{T}_{\text{error}}\), which expresses the position error of the sample in the frame of the rotating nano-hexapod, as shown in equation \eqref{eq:nass_transformation_error}.
\begin{equation}\label{eq:nass_transformation_error}
\bm{T}_{\text{error}} = \bm{T}_{\mu\text{-station}}^{-1} \cdot \bm{T}_{\text{sample}}
\end{equation}
The known structure of the homogeneous transformation matrix facilitates efficient real-time computation of the inverse.
From \(\bm{T}_{\text{error}}\), the position and orientation errors \(\bm{\epsilon}_{\mathcal{X}} = [\epsilon_{D_x},\ \epsilon_{D_y},\ \epsilon_{D_z},\ \epsilon_{R_x},\ \epsilon_{R_y},\ \epsilon_{R_z}]\) of the sample are extracted using equation \eqref{eq:nass_compute_errors}:
\begin{equation}\label{eq:nass_compute_errors}
\begin{align}
\epsilon_{D_x} & = \bm{T}_{\text{error}}(1,4) \\
\epsilon_{D_y} & = \bm{T}_{\text{error}}(2,4) \\
\epsilon_{D_z} & = \bm{T}_{\text{error}}(3,4) \\
\epsilon_{R_y} & = \text{atan2}(\bm{T}_{\text{error}}(1,3), \sqrt{\bm{T}_{\text{error}}(1,1)^2 + \bm{T}_{\text{error}}(1,2)^2}) \\
\epsilon_{R_x} & = \text{atan2}(-\bm{T}_{\text{error}}(2,3)/\cos(\epsilon_{R_y}), \bm{T}_{\text{error}}(3,3)/\cos(\epsilon_{R_y})) \\
\epsilon_{R_z} & = \text{atan2}(-\bm{T}_{\text{error}}(1,2)/\cos(\epsilon_{R_y}), \bm{T}_{\text{error}}(1,1)/\cos(\epsilon_{R_y})) \\
\end{align}
\end{equation}
Finally, these errors are mapped to the strut space through the nano-hexapod Jacobian matrix \eqref{eq:nass_inverse_kinematics}.
\begin{equation}\label{eq:nass_inverse_kinematics}
\bm{\epsilon}_{\mathcal{L}} = \bm{J} \cdot \bm{\epsilon}_{\mathcal{X}}
\end{equation}
\section{Control Architecture - Summary}
\label{ssec:nass_control_architecture} \label{ssec:nass_control_architecture}
\begin{itemize} The complete control architecture is summarized in Figure \ref{fig:nass_control_architecture}.
\item Say that there are many control strategies. The sample pose is measured using external metrology for five degrees of freedom, while the sixth degree of freedom (Rz) is estimated by combining measurements from the nano-hexapod encoders and spindle encoder.
It will be the topic of chapter 2.3.
Here, we start with something simple: control in the frame of the struts The sample reference pose is determined by the reference signals of the translation stage, tilt stage, spindle, and micro-hexapod.
\item[{$\square$}] block diagram of the complete control architecture Position error computation follows a two-step process: first, homogeneous transformation matrices are used to determine the error in the nano-hexapod frame, then the Jacobian matrix \(\bm{J}\) maps these errors to individual strut coordinates.
\end{itemize}
For control purposes, force sensors mounted on each strut are used in a decentralized way for active damping, as detailed in Section \ref{sec:nass_active_damping}.
Then, the high authority controller uses the computed errors in the frame of the struts to provides real-time stabilization of the sample position (Section \ref{sec:nass_hac}).
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1,width=\linewidth]{figs/nass_control_architecture.png} \includegraphics[scale=1,width=\linewidth]{figs/nass_control_architecture.png}
\caption{\label{fig:nass_control_architecture}Figure caption} \caption{\label{fig:nass_control_architecture}The physical systems are shown in blue, the control kinematics in red, the decentralized Integral Force Feedback in yellow and the centralized High Authority Controller in green.}
\end{figure} \end{figure}
\chapter{Decentralized Active Damping} \chapter{Decentralized Active Damping}
\label{sec:nass_active_damping} \label{sec:nass_active_damping}
\begin{itemize} Building upon the uniaxial model study, this section implements decentralized Integral Force Feedback (IFF) as the first component of the HAC-LAC strategy.
\item How to apply/optimize IFF on an hexapod? Springs in parallel to the force sensors are used to guarantee the control robustness as was found using the 3DoF rotating model.
\item Robustness to payload mass The objective here is to design a decentralized IFF controller that provides good damping of the nano-hexapod modes across payload masses ranging from \(1\) to \(50\,\text{kg}\) and rotational velocity up to \(360\,\text{deg/s}\).
\item Root Locus Used payloads have a cylindrical shape with 250 mm height and with masses of 1 kg, 25 kg, and 50 kg.
\item Damping optimization
\end{itemize}
Explain which samples are tested:
\begin{itemize}
\item 1kg, 25kg, 50kg
\item cylindrical, 200mm height?
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/control\_active\_damping.org}{control\_active\_damping}
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/control-active-damping.org}{active damping for stewart platforms}
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org}{Vibration Control and Active Damping}
\end{itemize}
\section{IFF Plant} \section{IFF Plant}
\label{ssec:nass_active_damping_plant}
\begin{itemize} Transfer functions from actuator forces \(f_i\) to force sensor measurements \(f_{mi}\) are computed using the multi-body model.
\item[{$\square$}] Show how it changes with the payload mass (1, 25, 50) Figure \ref{fig:nass_iff_plant_effect_kp} examines how parallel stiffness affects the plant dynamics, with identification performed at maximum spindle velocity \(\Omega_z = 360\,\text{deg/s}\) and with a payload mass of 25 kg.
\item[{$\square$}] Effect of rotation (no rotation - 60rpm)
\item[{$\square$}] Added parallel stiffness Without parallel stiffness (Figure \ref{fig:nass_iff_plant_no_kp}), the dynamics exhibits non-minimum phase zeros at low frequency, confirming predictions from the three-degree-of-freedom rotating model.
\end{itemize} Adding parallel stiffness (Figure \ref{fig:nass_iff_plant_kp}) transforms these into minimum phase complex conjugate zeros, enabling unconditionally stable decentralized IFF implementation.
Though both cases show significant coupling around resonances, stability is guaranteed by the collocated arrangement of actuators and sensors \cite{preumont08_trans_zeros_struc_contr_with}.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_no_kp.png}
\end{center}
\subcaption{\label{fig:nass_iff_plant_no_kp}without parallel stiffness}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_kp.png}
\end{center}
\subcaption{\label{fig:nass_iff_plant_kp}with parallel stiffness}
\end{subfigure}
\caption{\label{fig:nass_iff_plant_effect_kp}Effect of stiffness parallel to the force sensor on the IFF plant with \(\Omega_z = 360\,\text{deg/s}\) and payload mass of 25kg. The dynamics without parallel stiffness has non-minimum phase zeros at low frequency (\subref{fig:nass_iff_plant_no_kp}). The added parallel stiffness transforms the non-minimum phase zeros to complex conjugate zeros (\subref{fig:nass_iff_plant_kp})}
\end{figure}
The effect of rotation, shown in Figure \ref{fig:nass_iff_plant_effect_rotation}, is negligible as the actuator stiffness (\(k_a = 1\,N/\mu m\)) is large compared to the negative stiffness induced by gyroscopic effects (estimated from the 3DoF rotating model).
Figure \ref{fig:nass_iff_plant_effect_payload} illustrate the effect of payload mass on the plant dynamics.
While the poles and zeros are shifting with payload mass, the alternating pattern of poles and zeros is maintained, ensuring that the phase remains bounded between 0 and 180 degrees, and thus good robustness properties.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_effect_rotation.png}
\end{center}
\subcaption{\label{fig:nass_iff_plant_effect_rotation}Effect of Spindle rotation}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_effect_payload.png}
\end{center}
\subcaption{\label{fig:nass_iff_plant_effect_payload}Effect of payload mass}
\end{subfigure}
\caption{\label{fig:nass_iff_plant_effect_rotation_payload}Effect of the Spindle's rotational velocity on the IFF plant (\subref{fig:nass_iff_plant_effect_rotation}) and effect of the payload's mass on the IFF plant (\subref{fig:nass_iff_plant_effect_payload})}
\end{figure}
\section{Controller Design} \section{Controller Design}
\label{ssec:nass_active_damping_control}
\begin{itemize} Previous analysis using the 3DoF rotating model showed that decentralized Integral Force Feedback (IFF) with pure integrators is unstable due to gyroscopic effects caused by spindle rotation.
\item Use Integral controller (with parallel stiffness) This finding is also confirmed with the multi-body model of the NASS: the system is unstable when using pure integrators and without parallel stiffness.
\item Show Root Locus (show that without parallel stiffness => unstable?)
\item Choose optimal gain.
Here in MIMO, cannot have optimal damping for all modes. (there is a paper that tries to optimize that)
\item Show robustness to change of payload (loci?) / Change of rotating velocity ?
\item Reference to paper showing stability in MIMO for decentralized IFF
\end{itemize}
\section{Sensitivity to disturbances} This instability can be mitigated by introducing sufficient stiffness in parallel with the force sensors.
However, as illustrated in Figure \ref{fig:nass_iff_plant_kp}, adding parallel stiffness increases the low frequency gain.
If using pure integrators, this would results in high loop gain at low frequencies, adversely affecting the damped plant dynamics, which is undesirable.
To resolve this issue, a second-order high-pass filter is introduced to limit the low frequency gain, as shown in Equation \eqref{eq:nass_kiff}.
Disturbances: \begin{equation}\label{eq:nass_kiff}
\begin{itemize} \bm{K}_{\text{IFF}}(s) = g \cdot \begin{bmatrix}
\item floor motion K_{\text{IFF}}(s) & & 0 \\
\item Spindle X and Z & \ddots & \\
\item Direct forces? 0 & & K_{\text{IFF}}(s)
\end{bmatrix}, \quad K_{\text{IFF}}(s) = \frac{1}{s} \cdot \frac{\frac{s^2}{\omega_z^2}}{\frac{s^2}{\omega_z^2} + 2 \xi_z \frac{s}{\omega_z} + 1}
\end{equation}
\item Compute sensitivity to disturbances with and without IFF (and compare without the NASS) The cut-off frequency of the second-order high-pass filter is tuned to be below the frequency of the complex conjugate zero for the highest mass, which is at \(5\,\text{Hz}\).
The overall gain is then increased to have large loop gain around resonances to be damped, as illustrated in Figure \ref{fig:nass_iff_loop_gain}.
\item Maybe noise budgeting, but may be complex in MIMO\ldots{} ? \begin{figure}[htbp]
\end{itemize} \centering
\includegraphics[scale=1]{figs/nass_iff_loop_gain.png}
\caption{\label{fig:nass_iff_loop_gain}Loop gain for the decentralized IFF: \(K_{\text{IFF}}(s) \cdot \frac{f_{mi}}{f_i}(s)\)}
\end{figure}
To verify stability, root loci for the three payload configurations are computed and shown in Figure \ref{fig:nass_iff_root_locus}.
The results demonstrate that the closed-loop poles remain within the left-half plane, indicating the robust stability properties of the applied decentralized IFF.
\begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_1kg.png}
\end{center}
\subcaption{\label{fig:nass_iff_root_locus_1kg} $1\,\text{kg}$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_25kg.png}
\end{center}
\subcaption{\label{fig:nass_iff_root_locus_25kg} $25\,\text{kg}$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_50kg.png}
\end{center}
\subcaption{\label{fig:nass_iff_root_locus_50kg} $50\,\text{kg}$}
\end{subfigure}
\caption{\label{fig:nass_iff_root_locus}Root Loci for Decentralized IFF for three payload masses. Closed-loop poles are shown by the black crosses.}
\end{figure}
\chapter{Centralized Active Vibration Control} \chapter{Centralized Active Vibration Control}
\label{sec:nass_hac} \label{sec:nass_hac}
\begin{itemize} \begin{itemize}
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/uncertainty\_experiment.org}{uncertainty\_experiment}: Effect of experimental conditions on the plant (payload mass, Ry position, Rz position, Rz velocity, etc\ldots{}) \item[{$\square$}] Effect of micro-station compliance
\item Effect of micro-station compliance Compare plant with ``rigid'' u-station and normal u-station
\item Effect of IFF \item Effect of IFF
\item Effect of payload mass \item Effect of payload mass
\item Decoupled plant \item Decoupled plant
@ -175,38 +313,206 @@ From control kinematics:
\section{HAC Plant} \section{HAC Plant}
\begin{itemize} \begin{itemize}
\item[{$\square$}] Compute transfer function from \(\bm{f}\) to \(\bm{\epsilon\mathcal{L}}\) (with IFF applied) for all masses \item Effect of rotation: \ref{fig:nass_undamped_plant_effect_Wz}
\item[{$\square$}] Show effect of rotation Add some coupling at low frequency, but still small at the considered velocity.
\item[{$\square$}] Show effect of payload mass This is thanks to the relatively stiff nano-hexapod (CF rotating model)
\item[{$\square$}] Compare with undamped plants \item Effect of payload mass:
Decrease resonance frequencies
Increase coupling: \ref{fig:nass_undamped_plant_effect_mass}
=> control challenge for high payload masses
\item Other effects such as: Ry tilt angle, Rz spindle position, micro-hexapod position are found to have negligible effect on the plant dynamics.
This is thanks to the fact the the plant dynamics is well decoupled from the micro-station dynamics.
\end{itemize} \end{itemize}
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_undamped_plant_effect_Wz.png}
\end{center}
\subcaption{\label{fig:nass_undamped_plant_effect_Wz}Effect of rotational velocity $\Omega_z$}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_undamped_plant_effect_mass.png}
\end{center}
\subcaption{\label{fig:nass_undamped_plant_effect_mass}Effect of payload's mass}
\end{subfigure}
\caption{\label{fig:nass_undamped_plant_effect}Effect of the Spindle's rotational velocity on the positioning plant (\subref{fig:nass_undamped_plant_effect_Wz}) and effect of the payload's mass on the positioning plant (\subref{fig:nass_undamped_plant_effect_mass})}
\end{figure}
\begin{itemize}
\item Effect of IFF on the plant \ref{fig:nass_comp_undamped_damped_plant_m1}
Modes are well damped
Small coupling increase at low frequency
\item Benefits of using IFF \ref{fig:nass_hac_plants}
with added damping, the set of plants to be controlled (with payloads from 1kg to 50kg) is more easily controlled.
Between 10 and 50Hz, the plant dynamics does not vary a lot with the frequency, whereas without active damping, it would be impossible to design a robust controller with bandwidth above 10Hz that is robust to the change of payload
\end{itemize}
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_comp_undamped_damped_plant_m1.png}
\end{center}
\subcaption{\label{fig:nass_comp_undamped_damped_plant_m1}Effect of IFF - $m = 1\,\text{kg}$}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_plants.png}
\end{center}
\subcaption{\label{fig:nass_hac_plants}Effect of IFF on the set of plants to control}
\end{subfigure}
\caption{\label{fig:nass_hac_plant}Effect of the Spindle's rotational velocity on the positioning plant (\subref{fig:nass_undamped_plant_effect_Wz}) and effect of the payload's mass on the positioning plant (\subref{fig:nass_undamped_plant_effect_mass})}
\end{figure}
\section{Effect of micro-station compliance}
Micro-Station complex dynamics has almost no effect on the plant dynamics (Figure \ref{fig:nass_effect_ustation_compliance}):
\begin{itemize}
\item adds some alternating poles and zeros above 100Hz, which should not be an issue for control
\end{itemize}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/nass_effect_ustation_compliance.png}
\caption{\label{fig:nass_effect_ustation_compliance}Effect of the micro-station limited compliance on the plant dynamics}
\end{figure}
\section{Higher or lower nano-hexapod stiffness?}
\textbf{Goal}: confirm the analysis with simpler models (uniaxial and 3DoF) that a nano-hexapod stiffness of \(\approx 1\,N/\mu m\) should give better performances than a very stiff or very soft nano-hexapod.
\begin{itemize}
\item \textbf{Stiff nano-hexapod}:
uniaxial model: high nano-hexapod stiffness induce coupling between the nano-hexapod and the micro-station dynamics.
considering the complex dynamics of the micro-station as shown by the modal analysis, that would result in a complex system to control
To show that, a nano-hexapod with actuator stiffness equal to 100N/um is initialized, payload of 25kg.
The dynamics from \(\bm{f}\) to \(\bm{\epsilon}_{\mathcal{L}}\) is identified and compared to the case where the micro-station is infinitely rigid (figure \ref{fig:nass_stiff_nano_hexapod_coupling_ustation}):
\begin{itemize}
\item Coupling induced by the micro-station: much more complex and difficult to model / predict
\item Similar to what was predicted using the uniaxial model
\end{itemize}
\item \textbf{Soft nano-hexapod}:
Nano-hexapod with stiffness of 0.01N/um is initialized, payload of 25kg.
Dynamics is identified with no spindle rotation, and with spindle rotation of 36deg/s and 360deg/s (Figure \ref{fig:nass_soft_nano_hexapod_effect_Wz})
\begin{itemize}
\item Rotation as huge effect on the dynamics: unstable for high rotational velocities, added coupling due to gyroscopic effects, and change of resonance frequencies as a function of the rotational velocity
\item Simple 3DoF rotating model is helpful to understand the complex effect of the rotation => similar conclusion
\item Say that controlling the frame of the struts is not adapted with a soft nano-hexapod, but we should rather control in the frame matching the center of mass of the payload, but we would still obtain large coupling and change of dynamics due to gyroscopic effects.
\end{itemize}
\end{itemize}
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_stiff_nano_hexapod_coupling_ustation.png}
\end{center}
\subcaption{\label{fig:nass_stiff_nano_hexapod_coupling_ustation}Stiff nano-hexapod - Coupling with the micro-station}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_soft_nano_hexapod_effect_Wz.png}
\end{center}
\subcaption{\label{fig:nass_soft_nano_hexapod_effect_Wz}Soft nano-hexapod - Effect of Spindle rotational velocity}
\end{subfigure}
\caption{\label{fig:nass_soft_stiff_hexapod}Plant dynamics of a stiff (\(k_a = 100\,N/\mu m\)) nano-hexapod (\subref{fig:nass_stiff_nano_hexapod_coupling_ustation}) and of a soft (\(k_a = 0.01\,N/\mu m\)) nano-hexapod (\subref{fig:nass_soft_nano_hexapod_effect_Wz})}
\end{figure}
\section{Controller design} \section{Controller design}
In this section, a high authority controller is design such that:
\begin{itemize} \begin{itemize}
\item[{$\square$}] Show design HAC with formulas and parameters \item it is robust to the change of payload mass (i.e. is should be stable for all the damped plants of Figure \ref{fig:nass_hac_plants})
\item[{$\square$}] Show robustness with Loci for all masses \item it has reasonably high bandwidth to give good performances (here 10Hz)
\end{itemize} \end{itemize}
\section{Sensitivity to disturbances} \eqref{eq:nass_robust_hac}
\begin{equation}\label{eq:nass_robust_hac}
K_{\text{HAC}}(s) = g_0 \cdot \underbrace{\frac{\omega_c}{s}}_{\text{int}} \cdot \underbrace{\frac{1}{\sqrt{\alpha}}\frac{1 + \frac{s}{\omega_c/\sqrt{\alpha}}}{1 + \frac{s}{\omega_c\sqrt{\alpha}}}}_{\text{lead}} \cdot \underbrace{\frac{1}{1 + \frac{s}{\omega_0}}}_{\text{LPF}}, \quad \left( \omega_c = 2\pi10\,\text{rad/s},\ \alpha = 2,\ \omega_0 = 2\pi80\,\text{rad/s} \right)
\end{equation}
\begin{itemize} \begin{itemize}
\item Compute transfer functions from spindle vertical error to sample vertical error with HAC-IFF \item ``Decentralized'' Loop Gain:
Compare without the NASS, and with just IFF Bandwidth around 10Hz
\item Same for horizontal \item Characteristic Loci:
Stable for all payloads with acceptable stability margins
\end{itemize} \end{itemize}
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_loop_gain.png}
\end{center}
\subcaption{\label{fig:nass_hac_loop_gain}Loop Gain}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_loci.png}
\end{center}
\subcaption{\label{fig:nass_hac_loci}Characteristic Loci}
\end{subfigure}
\caption{\label{fig:nass_hac_controller}High Authority Controller - ``Diagonal Loop Gain'' (\subref{fig:nass_hac_loop_gain}) and Characteristic Loci (\subref{fig:nass_hac_loci})}
\end{figure}
\section{Tomography experiment} \section{Tomography experiment}
\begin{itemize} \begin{itemize}
\item With HAC-IFF, perform tomography experiment, and compare with open-loop \item Validation of concept with tomography scans at the highest rotational velocity of \(\Omega_z = 360\,\text{deg/s}\)
\item Compare obtained results with the smallest beam size that is expected with future beamline upgrade: 200nm (horizontal size) x 100nm (vertical size)
\item Take into account disturbances, metrology sensor noise. Maybe say here that we don't take in account other noise sources as they will be optimized latter (detail design phase) \item Take into account the two main sources of disturbances: ground motion, spindle vibrations
\item Tomography + lateral scans (same as what was done in open loop \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/phd-thesis-chapters/A4-simscape-micro-station/simscape-micro-station.org}{here}) Other noise sources are not taken into account here as they will be optimized latter (detail design phase): measurement noise, electrical noise for DAC and voltage amplifiers, \ldots{}
\item Validation of concept
\end{itemize} \end{itemize}
\chapter{Conclusion} The open-loop errors and the closed-loop errors for the tomography scan with the light sample \(1\,kg\) are shown in Figure \ref{fig:nass_tomo_1kg_60rpm}.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,scale=0.9]{figs/nass_tomo_1kg_60rpm_xy.png}
\end{center}
\subcaption{\label{fig:nass_tomo_1kg_60rpm_xy}XY plane}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,scale=0.9]{figs/nass_tomo_1kg_60rpm_yz.png}
\end{center}
\subcaption{\label{fig:nass_tomo_1kg_60rpm_yz}YZ plane}
\end{subfigure}
\caption{\label{fig:nass_tomo_1kg_60rpm}Position error of the sample in the XY (\subref{fig:nass_tomo_1kg_60rpm_xy}) and YZ (\subref{fig:nass_tomo_1kg_60rpm_yz}) planes during a simulation of a tomography experiment at \(360\,\text{deg/s}\). 1kg payload is placed on top of the nano-hexapod.}
\end{figure}
\begin{itemize}
\item Effect of payload mass (Figure \ref{fig:nass_tomography_hac_iff}):
Worse performance for high masses, as expected from the control analysis, but still acceptable considering that the rotational velocity of 360deg/s is only used for light payloads.
\end{itemize}
\begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m1.png}
\end{center}
\subcaption{\label{fig:nass_tomography_hac_iff_m1} $m = 1\,kg$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m25.png}
\end{center}
\subcaption{\label{fig:nass_tomography_hac_iff_m25} $m = 25\,kg$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m50.png}
\end{center}
\subcaption{\label{fig:nass_tomography_hac_iff_m50} $m = 50\,kg$}
\end{subfigure}
\caption{\label{fig:nass_tomography_hac_iff}Simulation of tomography experiments - 360deg/s. Beam size shown by dashed black}
\end{figure}
\section*{Conclusion}
\chapter*{Conclusion}
\label{sec:nass_conclusion} \label{sec:nass_conclusion}