diff --git a/figs/nass_concept_schematic.pdf b/figs/nass_concept_schematic.pdf new file mode 100644 index 0000000..0f9aadc Binary files /dev/null and b/figs/nass_concept_schematic.pdf differ diff --git a/figs/nass_concept_schematic.png b/figs/nass_concept_schematic.png new file mode 100644 index 0000000..60cdea9 Binary files /dev/null and b/figs/nass_concept_schematic.png differ diff --git a/figs/nass_concept_schematic.svg b/figs/nass_concept_schematic.svg new file mode 100644 index 0000000..d9fde48 --- /dev/null +++ b/figs/nass_concept_schematic.svg @@ -0,0 +1,1531 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X-ray + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Instrumentation + MicroStation + OnlineMetrology + Sample + StabilizationPlatform + + + + Sample + + + + diff --git a/figs/nass_control_architecture.pdf b/figs/nass_control_architecture.pdf new file mode 100644 index 0000000..3bbca94 Binary files /dev/null and b/figs/nass_control_architecture.pdf differ diff --git a/figs/nass_control_architecture.png b/figs/nass_control_architecture.png new file mode 100644 index 0000000..b74d073 Binary files /dev/null and b/figs/nass_control_architecture.png differ diff --git a/figs/nass_control_architecture.svg b/figs/nass_control_architecture.svg new file mode 100644 index 0000000..589e01b --- /dev/null +++ b/figs/nass_control_architecture.svg @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/matlab/nass_model.slx b/matlab/nass_model.slx index f141667..149fbe6 100644 Binary files a/matlab/nass_model.slx and b/matlab/nass_model.slx differ diff --git a/matlab/src/initializeSimplifiedNanoHexapod.m b/matlab/src/initializeSimplifiedNanoHexapod.m index 6b466cd..5687f47 100644 --- a/matlab/src/initializeSimplifiedNanoHexapod.m +++ b/matlab/src/initializeSimplifiedNanoHexapod.m @@ -1,6 +1,7 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) arguments + args.type char {mustBeMember(args.type,{'none', 'stewart'})} = 'stewart' %% initializeFramesPositions args.H (1,1) double {mustBeNumeric, mustBePositive} = 95e-3 % Height of the nano-hexapod [m] args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m] @@ -61,6 +62,13 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) stewart = initializeStewartPlatform(); + switch args.type + case 'none' + stewart.type = 0; + case 'stewart' + stewart.type = 1; + end + stewart = initializeFramesPositions(stewart, ... 'H', args.H, ... 'MO_B', args.MO_B); diff --git a/matlab/subsystems/micro_hexapod_bot_plate.slx b/matlab/subsystems/micro_hexapod_bot_plate.slx index 7e756b6..3f5c357 100644 Binary files a/matlab/subsystems/micro_hexapod_bot_plate.slx and b/matlab/subsystems/micro_hexapod_bot_plate.slx differ diff --git a/matlab/subsystems/micro_hexapod_strut.slx b/matlab/subsystems/micro_hexapod_strut.slx index b336103..7c3b348 100644 Binary files a/matlab/subsystems/micro_hexapod_strut.slx and b/matlab/subsystems/micro_hexapod_strut.slx differ diff --git a/matlab/subsystems/micro_hexapod_top_plate.slx b/matlab/subsystems/micro_hexapod_top_plate.slx index a4eac09..651612b 100644 Binary files a/matlab/subsystems/micro_hexapod_top_plate.slx and b/matlab/subsystems/micro_hexapod_top_plate.slx differ diff --git a/simscape-nass.org b/simscape-nass.org index d18aace..87e8ee6 100644 --- a/simscape-nass.org +++ b/simscape-nass.org @@ -219,8 +219,8 @@ CLOSED: [2025-02-12 Wed 12:10] SCHEDULED: <2025-02-12 Wed> - [X] Remove nano-hexapod model and add simplified model - [ ] Add "cylindrical" payloads (configurable in mass) -** TODO [#B] Add payload configurable subsystem -SCHEDULED: <2025-02-12 Wed> +** DONE [#B] Add payload configurable subsystem +CLOSED: [2025-02-12 Wed 14:17] SCHEDULED: <2025-02-12 Wed> ** TODO [#B] Discuss the necessity of estimated Rz? @@ -231,6 +231,16 @@ Here it can be reminded when doing the control in the cartesian frame. ** TODO [#B] Check if things are compatible to results of uniaxial model +** TODO [#C] Check if it would be interesting to show soft/stiff nano-hexapod plants + +- [ ] Would we see u-station dynamics with very stiff nano-hexapod? +- [ ] Would rotation be difficult to handle with soft nano-hexapod? + +** DONE [#A] Add possibility to configure the nano-hexapod to be fully rigid +CLOSED: [2025-02-12 Wed 14:46] + +- Use to compare TF without the NASS + ** CANC [#C] What performance metric can we use? :@christophe: CLOSED: [2024-11-12 Tue 09:22] - State "CANC" from "QUES" [2024-11-12 Tue 09:22] @@ -264,16 +274,21 @@ In this section: <> ** Introduction :ignore: -- Explain how the position error can be expressed in the frame of the nano-hexapod -- [ ] [[file:~/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) -- Control architecture, block diagram +- Explained during the last section: HAC-IFF + Decentralized IFF + Centralized HAC, control in the frame of the struts +- To compute the positioning errors in the frame of the struts + - Compute the wanted pose of the sample with respect to the granite using the micro-station kinematics (Section ref:ssec:nass_ustation_kinematics) + - 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) + - Compute the sample pose error and map these errors in the frame of the struts (Section ref:ssec:nass_error_struts) +- The complete control architecture is shown in Section ref:ssec:nass_control_architecture -- Schematic with micro-station + nass + metrology + control system -- Zoom in the control system with blocs -- Then explain all the blocs -- Say that there are many control strategies. - It will be the topic of chapter 2.3. - Here, we start with something simple: control in the frame of the struts +- [ ] [[file:~/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) + +- [ ] Schematic with micro-station + nass + metrology + control system => explain what is inside the control system +#+name: fig:nass_concept_schematic +#+caption: Figure caption +[[file:figs/nass_concept_schematic.png]] ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -301,17 +316,112 @@ In this section: #+end_src ** Micro Station Kinematics +<> - from ref:ssec:ustation_kinematics, computation of the wanted sample pose from the setpoint of each stage. +wanted pose = Tdy * Try * Trz * Tu + + ** Computation of the sample's pose error +<> From metrology (here supposed to be perfect 6-DoF), compute the sample's pose error. Has to invert the homogeneous transformation. -** Position error in the frame of the nano-hexapod +In reality, 5DoF metrology => have to estimate the Rz using spindle encoder + nano-hexapod internal metrology (micro-hexapod does not perform Rz rotation). -Explain how to compute the errors in the frame of the struts (rotating) +** Position error in the frame of the struts +<> + +Explain how to compute the errors in the frame of the struts (rotating): +- Errors in the granite frame +- Errors in the frame of the nano-hexapod +- Errors in the frame of the struts => used for control + +** Control Architecture +<> + +- Say that there are many control strategies. + It will be the topic of chapter 2.3. + Here, we start with something simple: control in the frame of the struts + +#+begin_src latex :file nass_control_architecture.pdf +\begin{tikzpicture} + % Blocs + \node[block={2.0cm}{1.0cm}, fill=colorblue!20!white] (metrology) {Metrology}; + \node[block={2.0cm}{2.0cm}, below=0.1 of metrology, align=center, fill=colorblue!20!white] (nhexa) {Nano\\Hexapod}; + \node[block={3.0cm}{1.5cm}, below=0.1 of nhexa, align=center, fill=colorblue!20!white] (ustation) {Micro\\Station}; + + \coordinate[] (inputf) at ($(nhexa.south west)!0.5!(nhexa.north west)$); + \coordinate[] (outputfn) at ($(nhexa.south east)!0.3!(nhexa.north east)$); + \coordinate[] (outputde) at ($(nhexa.south east)!0.7!(nhexa.north east)$); + + \coordinate[] (outputDy) at ($(ustation.south east)!0.1!(ustation.north east)$); + \coordinate[] (outputRy) at ($(ustation.south east)!0.5!(ustation.north east)$); + \coordinate[] (outputRz) at ($(ustation.south east)!0.9!(ustation.north east)$); + + \node[block={1.0cm}{1.0cm}, right=0.5 of outputde, fill=colorred!20!white] (Rz_kinematics) {$\bm{J}_{R_z}^{-1}$}; + \node[block={2.0cm}{2.0cm}, right=2.2 of ustation, align=center, fill=colorred!20!white] (ustation_kinematics) {Compute\\Reference\\Position}; + \node[block={2.0cm}{2.0cm}, right=0.8 of ustation_kinematics, align=center, fill=colorred!20!white] (compute_error) {Compute\\Error\\Position}; + \node[block={2.0cm}{2.0cm}, above=0.8 of compute_error, align=center, fill=colorred!20!white] (compute_pos) {Compute\\Sample\\Position}; + \node[block={1.0cm}{1.0cm}, right=0.8 of compute_error, fill=colorred!20!white] (hexa_jacobian) {$\bm{J}$}; + + \coordinate[] (inputMetrology) at ($(compute_error.north east)!0.3!(compute_error.north west)$); + \coordinate[] (inputRz) at ($(compute_error.north east)!0.7!(compute_error.north west)$); + + \node[addb={+}{}{}{}{}, right=0.4 of Rz_kinematics, fill=colorred!20!white] (addRz) {}; + \draw[->] (Rz_kinematics.east) -- (addRz.west); + \draw[->] (outputRz-|addRz)node[branch]{} -- (addRz.south); + + \draw[->] (outputDy) node[above right]{$r_{D_y}$} -- (outputDy-|ustation_kinematics.west); + \draw[->] (outputRy) node[above right]{$r_{R_y}$} -- (outputRy-|ustation_kinematics.west); + \draw[->] (outputRz) node[above right]{$r_{R_z}$} -- (outputRz-|ustation_kinematics.west); + + \draw[->] (metrology.east)node[above right]{$[D_x,\,D_y,\,D_z,\,R_x,\,R_y]$} -- (compute_pos.west|-metrology); + \draw[->] (addRz.east)node[above right]{$R_z$} -- (compute_pos.west|-addRz); + \draw[->] (compute_pos.south)node -- (compute_error.north)node[above right]{$\bm{y}_{\mathcal{X}}$}; + + \draw[->] (outputde) -- (Rz_kinematics.west) node[above left]{$\bm{\mathcal{L}}$}; + \draw[->] (ustation_kinematics.east) -- (compute_error.west) node[above left]{$\bm{r}_{\mathcal{X}}$}; + \draw[->] (compute_error.east) -- (hexa_jacobian.west) node[above left]{$\bm{\epsilon\mathcal{X}}$}; + \draw[->] (hexa_jacobian.east) -- ++(1.8, 0) node[above left]{$\bm{\epsilon\mathcal{L}}$}; + + \draw[->] (outputfn) -- ($(outputfn-|hexa_jacobian.east) + (1.0, 0)$)coordinate(fn) node[above left]{$\bm{f}_n$}; + + \begin{scope}[on background layer] + \node[fit={(metrology.north-|ustation.west) (hexa_jacobian.east|-compute_error.south)}, fill=black!10!white, draw, dashed, inner sep=4pt] (plant) {}; + \node[anchor={north east}] at (plant.north east){$\text{Plant}$}; + \end{scope} + + \node[block, above=0.2 of plant, fill=coloryellow!20!white] (Kiff) {$\bm{K}_{\text{IFF}}$}; + \draw[->] ($(fn)-(0.6,0)$)node[branch]{} |- (Kiff.east); + + \node[addb={+}{}{}{}{}, left=0.8 of inputf] (addf) {}; + \draw[->] (Kiff.west) -| (addf.north); + + \begin{scope}[on background layer] + \node[fit={(plant.south-|fn) (addf.west|-Kiff.north)}, fill=black!20!white, draw, dashed, inner sep=4pt] (damped_plant) {}; + \node[anchor={north east}] at (damped_plant.north east){$\text{Damped Plant}$}; + \end{scope} + + \begin{scope}[on background layer] + \node[fit={(metrology.north-|ustation.west) (hexa_jacobian.east|-compute_error.south)}, fill=black!10!white, draw, dashed, inner sep=4pt] (plant) {}; + \node[anchor={north east}] at (plant.north east){$\text{Plant}$}; + \end{scope} + + \node[block, left=0.8 of addf, fill=colorgreen!20!white] (Khac) {$\bm{K}_{\text{HAC}}$}; + \draw[->] ($(hexa_jacobian.east)+(1.4,0)$)node[branch]{} |- ($(Khac.west)+(-0.4, -3.4)$) |- (Khac.west); + \draw[->] (Khac.east) -- node[midway, above]{$\bm{f}^{\prime}$} (addf.west); + \draw[->] (addf.east) -- (inputf) node[above left]{$\bm{f}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:nass_control_architecture +#+caption: 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. +#+attr_latex: :width \linewidth +#+RESULTS: +[[file:figs/nass_control_architecture.png]] * Decentralized Active Damping :PROPERTIES: @@ -320,14 +430,18 @@ Explain how to compute the errors in the frame of the struts (rotating) <> ** Introduction :ignore: -- How to apply/optimize IFF on an hexapod? () +- How to apply/optimize IFF on an hexapod? - Robustness to payload mass - Root Locus - Damping optimization -- [ ][[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/control_active_damping.org][control_active_damping]] -- [ ][[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/control-active-damping.org][active damping for stewart platforms]] -- [ ][[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Vibration Control and Active Damping][Vibration Control and Active Damping]] +Explain which samples are tested: +- 1kg, 25kg, 50kg +- cylindrical, 200mm height? + +- [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/control_active_damping.org][control_active_damping]] +- [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/control-active-damping.org][active damping for stewart platforms]] +- [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Vibration Control and Active Damping][Vibration Control and Active Damping]] ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -356,6 +470,10 @@ Explain how to compute the errors in the frame of the struts (rotating) ** IFF Plant +- [ ] Show how it changes with the payload mass (1, 25, 50) +- [ ] Effect of rotation (no rotation - 60rpm) +- [ ] Added parallel stiffness + #+begin_src matlab %% Identify the plant dynamics using the Simscape model @@ -388,23 +506,25 @@ initializeReferences(); % 'eL1', 'eL2', 'eL3', 'eL4', 'eL5', 'eL6'}; #+end_src -- Show how it changes with the payload mass (1, 25, 50) -- Effect of rotation (1rpm, 60rpm) - ** Controller Design -- Apply IFF -- Show Root Locus +- Use Integral controller (with parallel stiffness) +- Show Root Locus (show that without parallel stiffness => unstable?) - Choose optimal gain. Here in MIMO, cannot have optimal damping for all modes. (there is a paper that tries to optimize that) -- Show robustness to change of payload (loci?) +- Show robustness to change of payload (loci?) / Change of rotating velocity ? - Reference to paper showing stability in MIMO for decentralized IFF ** Sensitivity to disturbances -- Compute transfer functions from spindle vertical error to sample vertical error with IFF (and compare without the NASS) -- Same for horizontal -- Maybe noise budgeting, but may be complex in MIMO... +Disturbances: +- floor motion +- Spindle X and Z +- Direct forces? + +- Compute sensitivity to disturbances with and without IFF (and compare without the NASS) + +- Maybe noise budgeting, but may be complex in MIMO... ? * Centralized Active Vibration Control :PROPERTIES: @@ -451,22 +571,21 @@ From control kinematics: ** HAC Plant -- Compute transfer function from u to dL (with IFF applied) - -** Effect of Payload mass - -- Show effect of payload mass + rotation +- [ ] Compute transfer function from $\bm{f}$ to $\bm{\epsilon\mathcal{L}}$ (with IFF applied) for all masses +- [ ] Show effect of rotation +- [ ] Show effect of payload mass +- [ ] Compare with undamped plants ** Controller design -- Show robustness with Loci +- [ ] Show design HAC with formulas and parameters +- [ ] Show robustness with Loci for all masses ** Sensitivity to disturbances - Compute transfer functions from spindle vertical error to sample vertical error with HAC-IFF Compare without the NASS, and with just IFF - Same for horizontal -- Maybe noise budgeting, but may be complex in MIMO... ** Tomography experiment @@ -1802,6 +1921,7 @@ end function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) arguments + args.type char {mustBeMember(args.type,{'none', 'stewart'})} = 'stewart' %% initializeFramesPositions args.H (1,1) double {mustBeNumeric, mustBePositive} = 95e-3 % Height of the nano-hexapod [m] args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m] @@ -1862,6 +1982,13 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) stewart = initializeStewartPlatform(); + switch args.type + case 'none' + stewart.type = 0; + case 'stewart' + stewart.type = 1; + end + stewart = initializeFramesPositions(stewart, ... 'H', args.H, ... 'MO_B', args.MO_B); diff --git a/simscape-nass.pdf b/simscape-nass.pdf index c64e5ed..7e76748 100644 Binary files a/simscape-nass.pdf and b/simscape-nass.pdf differ diff --git a/simscape-nass.tex b/simscape-nass.tex index 8735420..fda9e8f 100644 --- a/simscape-nass.tex +++ b/simscape-nass.tex @@ -1,4 +1,4 @@ -% Created 2025-02-12 Wed 11:34 +% Created 2025-02-12 Wed 15:35 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -39,84 +39,121 @@ In this section: \item Simulation of experiments \end{itemize} -\begin{table}[htbp] -\centering -\begin{tabularx}{0.6\linewidth}{lX} -\toprule -\textbf{Sections} & \textbf{Matlab File}\\ -\midrule -Section \ref{sec:nass_1_a} & \texttt{nass\_1\_.m}\\ -\bottomrule -\end{tabularx} -\caption{\label{tab:nass_section_matlab_code}Report sections and corresponding Matlab files} - -\end{table} - \chapter{Control Kinematics} \label{sec:nass_kinematics} \begin{itemize} -\item Explain how the position error can be expressed in the frame of the nano-hexapod -\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 Control architecture, block diagram - -\item Schematic with micro-station + nass + metrology + control system -\item Zoom in the control system with blocs -\item Then explain all the blocs -\item Say that there are many control strategies. -It will be the topic of chapter 2.3. -Here, we start with something simple: control in the frame of the struts +\item Explained during the last section: HAC-IFF +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] +\centering +\includegraphics[scale=1]{figs/nass_concept_schematic.png} +\caption{\label{fig:nass_concept_schematic}Figure caption} +\end{figure} \section{Micro Station Kinematics} +\label{ssec:nass_ustation_kinematics} \begin{itemize} \item from \ref{ssec:ustation_kinematics}, computation of the wanted sample pose from the setpoint of each stage. \end{itemize} +wanted pose = Tdy * Try * Trz * Tu + + \section{Computation of the sample's pose error} +\label{ssec:nass_sample_pose_error} From metrology (here supposed to be perfect 6-DoF), compute the sample's pose error. Has to invert the homogeneous transformation. -\section{Position error in the frame of the nano-hexapod} +In reality, 5DoF metrology => have to estimate the Rz using spindle encoder + nano-hexapod internal metrology (micro-hexapod does not perform Rz rotation). -Explain how to compute the errors in the frame of the struts (rotating) +\section{Position error in the frame of the 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} +\label{ssec:nass_control_architecture} + +\begin{itemize} +\item Say that there are many control strategies. +It will be the topic of chapter 2.3. +Here, we start with something simple: control in the frame of the struts +\item[{$\square$}] block diagram of the complete control architecture +\end{itemize} + +\begin{figure}[htbp] +\centering +\includegraphics[scale=1,width=\linewidth]{figs/nass_control_architecture.png} +\caption{\label{fig:nass_control_architecture}Figure caption} +\end{figure} \chapter{Decentralized Active Damping} \label{sec:nass_active_damping} \begin{itemize} -\item How to apply/optimize IFF on an hexapod? () +\item How to apply/optimize IFF on an hexapod? \item Robustness to payload mass \item Root Locus \item Damping optimization +\end{itemize} -\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/control\_active\_damping.org}{control\_active\_damping} -\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/control-active-damping.org}{active damping for stewart platforms} -\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org}{Vibration Control and Active Damping} +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} \begin{itemize} -\item Show how it changes with the payload mass (1, 25, 50) -\item Effect of rotation (1rpm, 60rpm) +\item[{$\square$}] Show how it changes with the payload mass (1, 25, 50) +\item[{$\square$}] Effect of rotation (no rotation - 60rpm) +\item[{$\square$}] Added parallel stiffness \end{itemize} \section{Controller Design} \begin{itemize} -\item Apply IFF -\item Show Root Locus +\item Use Integral controller (with 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?) +\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} +Disturbances: \begin{itemize} -\item Compute transfer functions from spindle vertical error to sample vertical error with IFF (and compare without the NASS) -\item Same for horizontal -\item Maybe noise budgeting, but may be complex in MIMO\ldots{} +\item floor motion +\item Spindle X and Z +\item Direct forces? + +\item Compute sensitivity to disturbances with and without IFF (and compare without the NASS) + +\item Maybe noise budgeting, but may be complex in MIMO\ldots{} ? \end{itemize} \chapter{Centralized Active Vibration Control} @@ -138,19 +175,17 @@ From control kinematics: \section{HAC Plant} \begin{itemize} -\item Compute transfer function from u to dL (with IFF applied) -\end{itemize} - -\section{Effect of Payload mass} - -\begin{itemize} -\item Show effect of payload mass + rotation +\item[{$\square$}] Compute transfer function from \(\bm{f}\) to \(\bm{\epsilon\mathcal{L}}\) (with IFF applied) for all masses +\item[{$\square$}] Show effect of rotation +\item[{$\square$}] Show effect of payload mass +\item[{$\square$}] Compare with undamped plants \end{itemize} \section{Controller design} \begin{itemize} -\item Show robustness with Loci +\item[{$\square$}] Show design HAC with formulas and parameters +\item[{$\square$}] Show robustness with Loci for all masses \end{itemize} \section{Sensitivity to disturbances} @@ -159,7 +194,6 @@ From control kinematics: \item Compute transfer functions from spindle vertical error to sample vertical error with HAC-IFF Compare without the NASS, and with just IFF \item Same for horizontal -\item Maybe noise budgeting, but may be complex in MIMO\ldots{} \end{itemize} \section{Tomography experiment}