diff --git a/phd-thesis.org b/phd-thesis.org index 393b8f4..c21f548 100644 --- a/phd-thesis.org +++ b/phd-thesis.org @@ -233,151 +233,8 @@ Once the system is well damped, a feedback position controller is applied and th Two key effects that may limit that positioning performances are then considered: the limited micro-station compliance (Section ref:sec:uniaxial_support_compliance) and the presence of dynamics between the nano-hexapod and the sample's point of interest (Section ref:sec:uniaxial_payload_dynamics). -#+begin_src latex :file uniaxial_overview_model_sections.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % IFF - % ==================== - % Ground - % ==================== - \draw[draw=colorblue] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed,draw=coloryellow] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=coloryellow] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=coloryellow]{$x_{f}$}; - % ==================== - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5,color=colorblue]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorblue] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorblue]{$k_{g}$}; - \draw[damper={colorblue}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorblue]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - - % Displacements - \draw[dashed, draw=colorpurple] (0.5*\massw, \spaceh+\massh) -- ++(7.5*\dispw, 0) coordinate(xg); - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5,color=colorblue]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorblue] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1,color=colorblue]{$k_{t}$}; - \draw[damper={colorblue}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2,color=colorblue]{$c_{t}$}; - - % Disturbance - \draw[actuator={0.45}{0.2}{coloryellow}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=coloryellow](ft){$f_{t}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5,color=colorblue]{$m_h$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorblue] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1,color=colorblue]{$k_h$}; - \draw[damper={colorblue}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2,color=colorblue]{$c_h$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[draw=colorred,fill=colorred!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5,color=colorred]{$m_{n}$}; - - % Force Sensor - \node[forcesensor={\massw}{\fsensh}{colorgreen}] (fsensn) at (0, \spaceh-\fsensh){}; - \node[right, color=colorgreen] (fn) at (fsensn.east) {$f_n$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorred] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh-\fsensh) node[midway, left=0.1,color=colorred]{$k_{n}$}; - \draw[damper={colorred}{}{}] (0, 0) -- ( 0, \spaceh-\fsensh) node[midway, left=0.2,color=colorred]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorred}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh-\fsensh) node[midway, right=0.1,color=colorred](f){$f$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexa}$}; - - % Displacements - \draw[dashed,draw=colorpurple] (0.5*\massw, \spaceh+\massh) -- ++(7.5*\dispw, 0) coordinate(xnpos); - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[draw=colorcyan,fill=colorcyan!10!white] (-0.3*\massw, \spaceh) rectangle (0.3*\massw, \spaceh+\massh) node[pos=0.5, color=colorcyan]{$m_{s}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorcyan] (-0.2*\massw, 0) -- (-0.2*\massw, \spaceh) node[midway, left=0.1, color=colorcyan]{$k_{s}$}; - \draw[damper={colorcyan}{}{}] ( 0.2*\massw, 0) -- ( 0.2*\massw, \spaceh) node[midway, left=0.2, color=colorcyan]{$c_{s}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Sample}; - - % External Force - \draw[->, color=coloryellow] (0, \spaceh+\massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=coloryellow]{$f_s$}; - \end{scope} - % ==================== - - % Measured displacement - \draw[<->, dashed, draw=colorpurple] ($(xg)+(-0.1, 0)$) -- node[left, color=colorpurple](d){$d$} ($(xnpos)+(-0.1, 0)$); - - % ==================== - % IFF Control - \node[block={2em}{2em}, right=1.0 of fn, color=colorgreen, fill=colorgreen!10!white] (iff) {$K_{\textsc{IFF}}$}; - \node[addb, draw=colorgreen, fill=colorgreen!10!white, right=0.5 of f.east] (ctrladd) {}; - \node[block={2em}{2em}, color=colorpurple, fill=colorpurple!10!white] (Khac) at (ctrladd|-d) {$K_{\textsc{HAC}}$}; - - \draw[->, draw=colorgreen] (fn.east) -- (iff.west); - \draw[->, draw=colorgreen] (iff.south) |- (ctrladd.east); - \draw[->, draw=colorgreen] (ctrladd.west) -- (f.east); - - \draw[->, draw=colorpurple] (d.west) -- (Khac.east); - \draw[->, draw=colorpurple] (Khac.north) -- (ctrladd.south) node[below right, color=colorpurple]{$f^{\prime}$}; - % ==================== -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_overview_model_sections #+caption: Uniaxial Micro-Station model in blue (Section ref:sec:uniaxial_micro_station_model), Nano-Hexapod models in red (Section ref:sec:uniaxial_nano_station_model), Disturbances in yellow (Section ref:sec:uniaxial_disturbances), Active Damping in green (Section ref:sec:uniaxial_active_damping), Position control in purple (Section ref:sec:uniaxial_position_control) and Sample dynamics in cyan (Section ref:sec:uniaxial_payload_dynamics) -#+RESULTS: [[file:figs/uniaxial_overview_model_sections.png]] *** Micro Station Model @@ -391,7 +248,7 @@ From the measured frequency response functions (FRF), the model can be tuned to #+name: fig:uniaxial_ustation_first_meas_dynamics #+caption: Experimental setup used for the first dynamical measurements on the Micro-Station. Geophones are fixed to different stages of the micro-station. -#+attr_latex: :width \linewidth +#+attr_nlatex: :width \linewidth [[file:figs/uniaxial_ustation_first_meas_dynamics.jpg]] **** Measured dynamics @@ -402,147 +259,6 @@ Three frequency response functions were computed: one from $F_{h}$ to $x_{h}$ (i Due to the poor coherence at low frequencies, these frequency response functions will only be shown between 20 and 200Hz (solid lines in Figure ref:fig:uniaxial_comp_frf_meas_model). -#+begin_src latex :file uniaxial_ustation_meas_dynamics_schematic.pdf :results file raw silent -\begin{tikzpicture} - % Parameters - \def\blockw{6.0cm} - \def\blockh{1.2cm} - - \def\tiltdeg{0} - \coordinate[] (rotationpoint) at (0, 4.5*\blockh); - - \begin{scope}[rotate around={\tiltdeg:(rotationpoint)}] - % Tilt - \path[] ([shift=(-120:4*\blockh)]rotationpoint) coordinate(beginarc) arc (-120:-110:4*\blockh) % - -- ([shift=(-70:4*\blockh)]rotationpoint) arc (-70:-60:4*\blockh)% - |- ++(-0.15*\blockw, 0.6*\blockh) coordinate (spindlene)% - |- ($(beginarc) + (0.15*\blockw, 0.2*\blockh)$) coordinate (spindlesw) -- ++(0, 0.4*\blockh) coordinate(tiltte) -| cycle; - - % Spindle - \coordinate[] (spindlese) at (spindlesw-|spindlene); - \draw[fill=black!30] ($(spindlese)+(-0.1,0.1)+(-0.1*\blockw, 0)$) -| ($(spindlene)+(-0.1, 0)$) -| coordinate[pos=0.25](spindletop) ($(spindlesw)+(0.1,0.1)$) -| ++(0.1*\blockw, -\blockh) -| coordinate[pos=0.25](spindlebot) cycle; - - % \draw[dashed, color=black!60] ($(spindletop)+(0, 0.2)$) -- ($(spindlebot)+(0,-0.2)$); - - % Tilt - \draw[fill=black!60] ([shift=(-120:4*\blockh)]rotationpoint) coordinate(beginarc) arc (-120:-110:4*\blockh) % - -- ([shift=(-70:4*\blockh)]rotationpoint) arc (-70:-60:4*\blockh)% - |- coordinate (tiltne) ++(-0.15*\blockw, 0.6*\blockh) coordinate (spindlene)% - |- ($(beginarc) + (0.15*\blockw, 0.2*\blockh)$) coordinate (spindlesw) -- ++(0, 0.4*\blockh) -| cycle; - - % Micro-Hexapod - \begin{scope}[shift={(spindletop)}] - % Parameters definitions - \def\baseh{0.22*\blockh} % Height of the base - \def\naceh{0.18*\blockh} % Height of the nacelle - \def\baser{0.22*\blockw} % Radius of the base - \def\nacer{0.18*\blockw} % Radius of the nacelle - - \def\armr{0.2*\blockh} % Radius of the arms - \def\basearmborder{0.2} - \def\nacearmborder{0.2} - - \def\xnace{0} \def\ynace{\blockh-\naceh} \def\anace{0} - \def\xbase{0} \def\ybase{0} \def\abase{0} - - % Hexapod1 - \begin{scope}[shift={(\xbase, \ybase)}, rotate=\abase] - % Base - \draw[fill=white] (-\baser, 0) coordinate[](uhexabot) rectangle (\baser, \baseh); - - \coordinate[] (armbasel) at (-\baser+\basearmborder+\armr, \baseh); - \coordinate[] (armbasec) at (0, \baseh); - \coordinate[] (armbaser) at (\baser-\basearmborder-\armr, \baseh); - - \begin{scope}[shift={(\xnace, \ynace)}, rotate=\anace] - \draw[fill=white] (-\nacer, 0) rectangle (\nacer, \naceh); - \coordinate[] (uhexatop) at (0, \naceh); - \coordinate[] (armnacel) at (-\nacer+\nacearmborder+\armr, 0); - \coordinate[] (armnacec) at (0, 0); - \coordinate[] (armnacer) at (\nacer-\nacearmborder-\armr, 0); - \end{scope} - - \draw[] (armbasec) -- (armnacer); - \draw[] (armbasec) -- (armnacel); - \draw[] (armbasel) -- coordinate(mhexaw) (armnacel); - \draw[] (armbasel) -- (armnacec); - \draw[] (armbaser) -- (armnacec); - \draw[] (armbaser) -- coordinate(mhexae) (armnacer); - \end{scope} - \end{scope} - - \begin{scope}[shift={(uhexatop)}] % Geophone - Hexapod - \draw[draw=colorgreen, fill=colorgreen!10!white] (-0.3, 0) rectangle node[midway, color=colorgreen, rotate=90]{\tiny geophone} (0.3, 1.2); - \draw[rounded corners=0.1, draw=colorgreen, fill=colorgreen!10!white] (-0.1, 1.2) -- ++(0, 0.1) -- ++(0.1, 0.1) -- ++(0.1, -0.1) -- ++(0, -0.1) --cycle; - \node[fill,shape=circle,minimum size=3pt,inner sep=0pt, color=colorgreen] at (0, 1.4){}; - \draw[out=90, in=180, draw=colorgreen] (0, 1.4) to ++(0.4, 0.2) node[right, color=colorgreen]{$x_{h}$}; - \end{scope} - - \begin{scope}[shift={(uhexatop)}] % Instrumented Hammer - Hexapod - \begin{scope}[shift={(-1.5, 0)}] - \draw[fill=white, rounded corners=0.2, draw=colorblue, fill=colorblue!10!white] (-0.5, 0.42) rectangle (0.5, 0.58); - \draw[fill=white, rounded corners=0.2, draw=colorblue, fill=colorblue!10!white] (0.5, 0.15) rectangle (0.7, 0.8); - \draw[fill=white, rounded corners=0.2, color=colorblue] (0.55, 0.15) rectangle (0.65, 0); - \draw[out=180, in=0, draw=colorblue] (-0.5, 0.5) to ++(-0.6, -0.1) node[above, color=colorblue]{$F_{h}$}; - \node[fill,shape=circle,minimum size=3pt,inner sep=0pt, color=colorblue] at (-0.5, 0.5){}; - \end{scope} - \end{scope} - \end{scope} - - \begin{scope}[shift={(0, -0.3*\blockh)}] - % Translation Stage - fixed part - \draw[fill=black!40] (-0.5*\blockw, 0) coordinate[](tyb) rectangle (0.5*\blockw, 0.15*\blockh); - \coordinate[] (measposbot) at (0.5*\blockw, 0); - - % Translation Stage - mobile part - \draw[fill=black!10, fill opacity=0.5] (-0.5*\blockw, 0.2*\blockh) -- (-0.5*\blockw, 1.5*\blockh) coordinate[](tyt) -- (0.5*\blockw, 1.5*\blockh) -- (0.5*\blockw, 0.2*\blockh) -- (0.35*\blockw, 0.2*\blockh) -- (0.35*\blockw, 0.8*\blockh) -- (-0.35*\blockw, 0.8*\blockh) -- (-0.35*\blockw, 0.2*\blockh) -- cycle; - - % Translation Guidance - \draw[dashed, color=black!60] ($(-0.5*\blockw, 0)+( 0.075*\blockw,0.5*\blockh)$) circle (0.2*\blockh); - \draw[dashed, color=black!60] ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$) circle (0.2*\blockh); - - % \draw[fill, color=black] ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$) circle (0.04); - % \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=above:$T_y$] at ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$){}; - - % Tilt Guidance - \draw[dashed, color=black!60] ([shift=(-107:4.1*\blockh)]rotationpoint) arc (-107:-120:4.1*\blockh); - \draw[dashed, color=black!60] ([shift=( -73:4.1*\blockh)]rotationpoint) arc (-73:-60:4.1*\blockh); - - \begin{scope}[shift={(4.0, 0)}] % Geophone - Granite - \draw[draw=colorgreen, fill=colorgreen!10!white] (-0.3, 0) rectangle node[midway, color=colorgreen, rotate=90]{\tiny geophone} (0.3, 1.2); - \draw[rounded corners=0.1, draw=colorgreen, fill=colorgreen!10!white] (-0.1, 1.2) -- ++(0, 0.1) -- ++(0.1, 0.1) -- ++(0.1, -0.1) -- ++(0, -0.1) --cycle; - \node[fill,shape=circle,minimum size=3pt,inner sep=0pt, color=colorgreen] at (0, 1.4){}; - \draw[out=90, in=180, draw=colorgreen] (0, 1.4) to ++(0.4, 0.2) node[right, color=colorgreen]{$x_{g}$}; - \end{scope} - - \begin{scope}[shift={(-4.0, 0)}] % Instrumented Hammer - Granite - \draw[fill=white, rounded corners=0.2, draw=colorblue, fill=colorblue!10!white] (-0.5, 0.42) rectangle (0.5, 0.58); - \draw[fill=white, rounded corners=0.2, draw=colorblue, fill=colorblue!10!white] (0.5, 0.15) rectangle (0.7, 0.8); - \draw[fill=white, rounded corners=0.2, color=colorblue] (0.55, 0.15) rectangle (0.65, 0); - \draw[out=180, in=0, draw=colorblue] (-0.5, 0.5) to ++(-0.6, -0.1) node[above, color=colorblue]{$F_{g}$}; - \node[fill,shape=circle,minimum size=3pt,inner sep=0pt, color=colorblue] at (-0.5, 0.5){}; - \end{scope} - \end{scope} - - % Granite - \draw[fill=black!40] (-0.8*\blockw, -0.3*\blockh) rectangle node[midway]{Granite} (0.8*\blockw, -1.5*\blockh); - - % Vertical line - % \draw[dashed, color=black] (spindlebot) -- ++(0, 2*\blockh); - % \node[] at ($(spindlebot)+(0, 1.1*\blockh)$) {\AxisRotator[rotate=-90]}; - % \node[right, shift={(0.3,0)}] at ($(spindlebot)+(0, 1.1*\blockh)$) {$\theta_z$}; - - % Axis - \begin{scope}[shift={(-0.6*\blockw, 2.5*\blockh)}] - \def\axissize{0.8cm} - \draw[->] (0, 0) -- ++(0, \axissize) node[right]{$z$}; - \draw[->] (0, 0) -- ++(-\axissize, 0) node[above]{$x$}; - \draw[fill, color=black] (0, 0) circle (0.05*\axissize); - \node[draw, circle, inner sep=0pt, minimum size=0.4*\axissize, label=right:$y$] (yaxis) at (0, 0){}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:micro_station_uniaxial_model #+caption: Schematic of the Micro-Station measurement setup and uniaxial model. #+attr_latex: :options [htbp] @@ -585,101 +301,6 @@ The parameters obtained are summarized in Table ref:tab:uniaxial_ustation_parame Two disturbances are considered which are shown in red: the floor motion $x_f$ and the stage vibrations represented by $f_t$. The hammer impacts $F_{h}, F_{g}$ are shown in blue, whereas the measured inertial motions $x_{h}, x_{g}$ are shown in black. -#+begin_src latex :file uniaxial_model_micro_station.pdf :results file raw silent -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.4} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % ==================== - % Floor - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, draw=colorred] (0.5*\massw+0.5*\dispw, 0) -- ++(0, \disph) node[right, color=colorred]{$x_{f}$}; - % ==================== - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - - % Displacement - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(\dispw, 0); - \draw[->] (0.5*\massw+0.5*\dispw, \spaceh+\massh) -- ++(0, \disph) node[right]{$x_{g}$}; - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - - % Disturbance - \draw[actuator={0.45}{0.2}{colorred}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorred](ft){$f_t$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - - % External Force - \draw[->, color=colorblue] (0, 0)node[branch] -- ++(0, 1.5*\dispw) node[below right]{$F_g$}; - - % % Displacement - % \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(\dispw, 0); - % \draw[->] (0.5*\massw+0.5*\dispw, \spaceh+\massh) -- ++(0, \disph) node[right]{$x_{t}$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{h}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{h}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{h}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{Hexa}$}; - - % Displacement - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(\dispw, 0); - \draw[->] (0.5*\massw+0.5*\dispw, \spaceh+\massh) -- ++(0, \disph) node[right]{$x_{h}$}; - - % External Force - \draw[->, color=colorblue] (0, \spaceh+\massh)node[branch] -- ++(0, 1.5*\dispw) node[below right]{$F_h$}; - \end{scope} - % ==================== -\end{tikzpicture} -#+end_src - **** Comparison of model and measurements The transfer functions from the forces injected by the hammers to the measured inertial motion of the micro-hexapod and granite are extracted from the uniaxial model and compared to the measurements in Figure ref:fig:uniaxial_comp_frf_meas_model. @@ -703,120 +324,6 @@ The control signal is the force applied by the nano-hexapod $f$ and the measurem The sample is here considered as a rigid body and rigidly fixed to the nano-hexapod. The effect of resonances between the sample's point of interest and the nano-hexapod actuator will be considered in Section ref:sec:uniaxial_payload_dynamics. -#+begin_src latex :file uniaxial_model_micro_station_nass.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % ==================== - % Ground - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorred] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorred]{$x_{f}$}; - % ==================== - - % ==================== - % Marble - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(2*\dispw, 0) coordinate(xm) -- ++(\dispw, 0) coordinate(dbot); - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorred}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorred](ft){$f_{t}$}; - - Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{h}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{h}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{h}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=colorblue!10!white, draw=colorblue] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5,color=colorblue]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring, draw=colorblue] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorblue]{$k_{n}$}; - \draw[damper={colorblue}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorblue]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorblue}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorblue](F){$f$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(2*\dispw, 0) coordinate(xn) -- ++(\dispw, 0) coordinate(drtop); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=colorgreen!10!white, draw=colorgreen] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5,color=colorgreen]{$m_{s}$}; - - % External Force - \draw[->, color=colorred] (0, \massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=colorred]{$f_s$}; - \end{scope} - % ==================== - - % ==================== - % Measured Displacement - \draw[<->, dashed] (xm) -- node[midway, right]{$d$} (xn); - % ==================== -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_model_micro_station_nass_with_tf #+caption: Uniaxial model of the NASS (\subref{fig:uniaxial_model_micro_station_nass}) with the micro-station shown in black, the nano-hexapod represented in blue and the sample represented in green. Disturbances are shown in red. Extracted transfer function from $f$ to $d$ (\subref{fig:uniaxial_plant_first_params}). #+attr_latex: :options [htbp] @@ -881,142 +388,6 @@ To quantify disturbances (red signals in Figure ref:fig:uniaxial_model_micro_sta One is located on the floor, another one on the granite, and the last one on the micro-hexapod's top platform (see Figure ref:fig:uniaxial_ustation_meas_disturbances). The geophone located on the floor was used to measure the floor motion $x_f$ while the other two geophones were used to measure vibrations introduced by scanning of the $T_y$ stage and $R_z$ stage (see Figure ref:fig:uniaxial_ustation_dynamical_id_setup). -#+begin_src latex :file uniaxial_ustation_meas_disturbances.pdf -\begin{tikzpicture} - % Parameters - \def\blockw{6.0cm} - \def\blockh{1.2cm} - - \def\tiltdeg{0} - \coordinate[] (rotationpoint) at (0, 4.5*\blockh); - - \begin{scope}[rotate around={\tiltdeg:(rotationpoint)}] - % Tilt - \path[] ([shift=(-120:4*\blockh)]rotationpoint) coordinate(beginarc) arc (-120:-110:4*\blockh) % - -- ([shift=(-70:4*\blockh)]rotationpoint) arc (-70:-60:4*\blockh)% - |- ++(-0.15*\blockw, 0.6*\blockh) coordinate (spindlene)% - |- ($(beginarc) + (0.15*\blockw, 0.2*\blockh)$) coordinate (spindlesw) -- ++(0, 0.4*\blockh) coordinate(tiltte) -| cycle; - - % Spindle - \coordinate[] (spindlese) at (spindlesw-|spindlene); - \draw[fill=black!30] ($(spindlese)+(-0.1,0.1)+(-0.1*\blockw, 0)$) -| ($(spindlene)+(-0.1, 0)$) -| coordinate[pos=0.25](spindletop) ($(spindlesw)+(0.1,0.1)$) -| ++(0.1*\blockw, -\blockh) -| coordinate[pos=0.25](spindlebot) cycle; - - % \draw[dashed, color=black!60] ($(spindletop)+(0, 0.2)$) -- ($(spindlebot)+(0,-0.2)$); - - % Tilt - \draw[fill=black!60] ([shift=(-120:4*\blockh)]rotationpoint) coordinate(beginarc) arc (-120:-110:4*\blockh) % - -- ([shift=(-70:4*\blockh)]rotationpoint) arc (-70:-60:4*\blockh)% - |- coordinate (tiltne) ++(-0.15*\blockw, 0.6*\blockh) coordinate (spindlene)% - |- ($(beginarc) + (0.15*\blockw, 0.2*\blockh)$) coordinate (spindlesw) -- ++(0, 0.4*\blockh) -| cycle; - - % Micro-Hexapod - \begin{scope}[shift={(spindletop)}] - % Parameters definitions - \def\baseh{0.22*\blockh} % Height of the base - \def\naceh{0.18*\blockh} % Height of the nacelle - \def\baser{0.22*\blockw} % Radius of the base - \def\nacer{0.18*\blockw} % Radius of the nacelle - - \def\armr{0.2*\blockh} % Radius of the arms - \def\basearmborder{0.2} - \def\nacearmborder{0.2} - - \def\xnace{0} \def\ynace{\blockh-\naceh} \def\anace{0} - \def\xbase{0} \def\ybase{0} \def\abase{0} - - % Hexapod - \begin{scope}[shift={(\xbase, \ybase)}, rotate=\abase] - % Base - \draw[fill=white] (-\baser, 0) coordinate[](uhexabot) rectangle (\baser, \baseh); - - \coordinate[] (armbasel) at (-\baser+\basearmborder+\armr, \baseh); - \coordinate[] (armbasec) at (0, \baseh); - \coordinate[] (armbaser) at (\baser-\basearmborder-\armr, \baseh); - - \begin{scope}[shift={(\xnace, \ynace)}, rotate=\anace] - \draw[fill=white] (-\nacer, 0) rectangle (\nacer, \naceh); - \coordinate[] (uhexatop) at (0, \naceh); - \coordinate[] (armnacel) at (-\nacer+\nacearmborder+\armr, 0); - \coordinate[] (armnacec) at (0, 0); - \coordinate[] (armnacer) at (\nacer-\nacearmborder-\armr, 0); - \end{scope} - - \draw[] (armbasec) -- (armnacer); - \draw[] (armbasec) -- (armnacel); - \draw[] (armbasel) -- coordinate(mhexaw) (armnacel); - \draw[] (armbasel) -- (armnacec); - \draw[] (armbaser) -- (armnacec); - \draw[] (armbaser) -- coordinate(mhexae) (armnacer); - \end{scope} - \end{scope} - - \begin{scope}[shift={(uhexatop)}] % Geophone - Hexapod - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] (-0.5, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] ( 0.3, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[draw=colorred, fill=colorred!10!white] (0.6, 0.4) rectangle ++(0.2, 0.2); - \node[shape=circle,minimum size=3pt,inner sep=0pt, draw=colorred, fill=colorred] at (0.8, 0.5){}; - \draw[out=0, in=180, draw=colorred] (0.8, 0.5) to ++(0.6, -0.1) node[above, color=colorred]{$x_h$}; - \draw[draw=colorred, fill=colorred!10!white] (-0.6, 0.2) rectangle node[midway, color=colorred]{\tiny geophone} (0.6, 0.8); - \end{scope} - \end{scope} - - \begin{scope}[shift={(0, -0.3*\blockh)}] - % Translation Stage - fixed part - \draw[fill=black!40] (-0.5*\blockw, 0) coordinate[](tyb) rectangle (0.5*\blockw, 0.15*\blockh); - \coordinate[] (measposbot) at (0.5*\blockw, 0); - - % Translation Stage - mobile part - \draw[fill=black!10, fill opacity=0.5] (-0.5*\blockw, 0.2*\blockh) -- (-0.5*\blockw, 1.5*\blockh) coordinate[](tyt) -- (0.5*\blockw, 1.5*\blockh) -- (0.5*\blockw, 0.2*\blockh) -- (0.35*\blockw, 0.2*\blockh) -- (0.35*\blockw, 0.8*\blockh) -- (-0.35*\blockw, 0.8*\blockh) -- (-0.35*\blockw, 0.2*\blockh) -- cycle; - - % Translation Guidance - \draw[dashed, color=black!60] ($(-0.5*\blockw, 0)+( 0.075*\blockw,0.5*\blockh)$) circle (0.2*\blockh); - \draw[dashed, color=black!60] ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$) circle (0.2*\blockh); - - \draw[fill, color=black] ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$) circle (0.04); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=above:$T_y$] at ($( 0.5*\blockw, 0)+(-0.075*\blockw,0.5*\blockh)$){}; - - % Tilt Guidance - \draw[dashed, color=black!60] ([shift=(-107:4.1*\blockh)]rotationpoint) arc (-107:-120:4.1*\blockh); - \draw[dashed, color=black!60] ([shift=( -73:4.1*\blockh)]rotationpoint) arc (-73:-60:4.1*\blockh); - - \begin{scope}[shift={(4.0, 0)}] % Geophone - Granite - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] (-0.5, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] ( 0.3, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[draw=colorred, fill=colorred!10!white] (0.6, 0.4) rectangle ++(0.2, 0.2); - \node[shape=circle,minimum size=3pt,inner sep=0pt, draw=colorred, fill=colorred] at (0.8, 0.5){}; - \draw[out=0, in=180, draw=colorred] (0.8, 0.5) to ++(0.6, -0.1) node[above, color=colorred]{$x_g$}; - \draw[draw=colorred, fill=colorred!10!white] (-0.6, 0.2) rectangle node[midway, color=colorred]{\tiny geophone} (0.6, 0.8); - \end{scope} - \end{scope} - - % Granite - \draw[fill=black!40] (-0.8*\blockw, -0.3*\blockh) rectangle node[midway]{Granite} (0.8*\blockw, -1.5*\blockh); - - \begin{scope}[shift={(4.0, -1.5*\blockh)}] % Geophone - Floor - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] (-0.5, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[rounded corners=0.1, draw=colorred, fill=colorred!10!white] ( 0.3, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[draw=colorred, fill=colorred!10!white] (0.6, 0.4) rectangle ++(0.2, 0.2); - \node[shape=circle,minimum size=3pt,inner sep=0pt, draw=colorred, fill=colorred] at (0.8, 0.5){}; - \draw[out=0, in=180, draw=colorred] (0.8, 0.5) to ++(0.6, -0.1) node[above, color=colorred]{$x_f$}; - \draw[draw=colorred, fill=colorred!10!white] (-0.6, 0.2) rectangle node[midway, color=colorred]{\tiny geophone} (0.6, 0.8); - \end{scope} - - % Vertical line - \draw[dashed, color=black] (spindlebot) -- ++(0, 2*\blockh); - \node[] at ($(spindlebot)+(0, 1.1*\blockh)$) {\AxisRotator[rotate=-90]}; - \node[right, shift={(0.3,0)}] at ($(spindlebot)+(0, 1.1*\blockh)$) {$\theta_z$}; - - % Axis - \begin{scope}[shift={(-0.6*\blockw, 2.5*\blockh)}] - \def\axissize{0.8cm} - \draw[->] (0, 0) -- ++(0, \axissize) node[right]{$z$}; - \draw[->] (0, 0) -- ++(-\axissize, 0) node[above]{$x$}; - \draw[fill, color=black] (0, 0) circle (0.05*\axissize); - \node[draw, circle, inner sep=0pt, minimum size=0.4*\axissize, label=right:$y$] (yaxis) at (0, 0){}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_ustation_meas_disturbances_setup #+caption: Identification of the disturbances coming from the micro-station. The measurement schematic is shown in (\subref{fig:uniaxial_ustation_meas_disturbances}). A picture of the setup is shown in (\subref{fig:uniaxial_ustation_dynamical_id_setup}) #+attr_latex: :options [htbp] @@ -1049,25 +420,6 @@ The gain of the voltage amplifier is $V^{\prime}_{x_f}/V_{x_f} = g_0 = 1000$. G_{geo}(s) = \frac{V_{x_f}}{x_f}(s) = T_{g} \cdot s \cdot \frac{s^2}{s^2 + 2 \xi \omega_0 s + \omega_0^2} \quad \left[ V/m \right] \end{equation} -#+begin_src latex :file uniaxial_geophone_meas_chain.pdf -\begin{tikzpicture} - \draw[rounded corners=0.1, draw=colorblack, fill=colorblack!10!white] (-0.5, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[rounded corners=0.1, draw=colorblack, fill=colorblack!10!white] ( 0.3, 0.2) -- ++(0, -0.1) -- ++(0.1, -0.1) -- ++(0.1, 0.1) -- ++(0, 0.1) --cycle; - \draw[draw=colorblack, fill=colorblack!10!white] (0.6, 0.4) rectangle ++(0.2, 0.2); - \node[shape=circle,minimum size=3pt,inner sep=0pt, draw=colorblack, fill=colorblack] at (0.8, 0.5){}; - \draw[out=0, in=180, draw=colorblack] (0.8, 0.5) to ++(0.6, -0.1) coordinate[](geophone_output); - \draw[draw=colorblack, fill=colorblack!10!white] (-0.6, 0.2) rectangle node[midway, color=colorblack]{\tiny geophone} (0.6, 0.8); - - \draw[dashed] (-1, 0) -- (1, 0); - \draw[->] (-0.8, 0) -- ++(0, 0.5)node[left]{$x_f$}; - \node[gain right, minimum width=0.8cm, right=0.5 of geophone_output] (gain) {$g_0$}; - \node[ADC, right=1 of gain] (adc) {ADC}; - \draw[->] (geophone_output) -- (gain.west) node[above left]{$V_{x_f}$}; - \draw[->] (gain.east) -- (adc.west) node[above left]{$V^{\prime}_{x_f}$}; - \draw[->] (adc.east) -- ++(1, 0) node[above left]{$\hat{V}_{x_f}$}; -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_geophone_meas_chain #+caption: Measurement setup for one geophone. The inertial displacement $x$ is converted to a voltage $V$ by the geophone. This voltage is amplified by a factor $g_0 = 60\,dB$ using a low-noise voltage amplifier. It is then converted to a digital value $\hat{V}_x$ using a 16bit ADC. #+RESULTS: @@ -1216,327 +568,6 @@ In this section, three active damping techniques are applied to the nano-hexapod These damping strategies are first described (Section ref:ssec:uniaxial_active_damping_strategies) and are then compared in terms of achievable damping of the nano-hexapod mode (Section ref:ssec:uniaxial_active_damping_achievable_damping), reduction of the effect of disturbances (i.e., $x_f$, $f_t$ and $f_s$) on the displacement $d$ (Sections ref:ssec:uniaxial_active_damping_sensitivity_disturbances). -#+begin_src latex :file uniaxial_active_damping_strategies_iff.pdf :results file raw -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % IFF - \begin{scope} - % ==================== - % Ground - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorpurple] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorpurple]{$x_{f}$}; - % ==================== - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorpurple}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorpurple](ft){$f_{t}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_h$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_h$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_h$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{n}$}; - - % Force Sensor - \node[forcesensor={\massw}{\fsensh}{colorblue}] (fsensn) at (0, \spaceh-\fsensh){}; - \node[right, color=colorblue] (fn) at (fsensn.east) {$f_n$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh-\fsensh) node[midway, left=0.1]{$k_{n}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh-\fsensh) node[midway, left=0.2]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- ( 0.3*\massw, \spaceh-\fsensh) node[midway, right=0.1](f){$f$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5]{$m_{s}$}; - - % External Force - \draw[->, color=colorpurple] (0, \massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=colorpurple]{$f_s$}; - \end{scope} - % ==================== - - % ==================== - % IFF Control - \node[block={2em}{2em}, right=0.3 of fn, color=colorblue, fill=colorblue!10!white] (iff) {$K_{\text{IFF}}$}; - \draw[->, draw=colorblue] (fn.east) -- (iff.west); - \draw[->, draw=colorblue] (iff.south) |- (f.east); - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_active_damping_strategies_rdc.pdf :results file raw -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % RDC - \begin{scope} - % ==================== - % Ground - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorpurple] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorpurple]{$x_{f}$}; - % ==================== - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorpurple}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorpurple](ft){$f_{t}$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_h$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_h$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_h$}; - - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(2*\dispw, 0) coordinate(drbot); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{n}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1](f){$f$}; - - \draw[dashed, draw=colorred] (0.5*\massw, \spaceh+\massh) -- ++(2*\dispw, 0) coordinate(drtop); - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5]{$m_{s}$}; - - % External Force - \draw[->, color=colorpurple] (0, \massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=colorpurple]{$f_s$}; - \end{scope} - % ==================== - - \draw[<->, dashed, draw=colorred] ($(drbot)+(-0.1, 0)$) -- ($(drtop)+(-0.1, 0)$) node[right, color=colorred](dr){$d\mathcal{L}$}; - - % ==================== - % RDC Control - \node[block={2em}{2em}, below right=0.2 and -0.2 of dr, color=colorred, fill=colorred!10!white] (rdc) {$K_{\text{RDC}}$}; - \draw[->, draw=colorred] (dr.east) -| (rdc.north); - \draw[->, draw=colorred] (rdc.south) |- (f.east); - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_active_damping_strategies_dvf.pdf :results file raw -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % DVF - \begin{scope} - % ==================== - % Ground - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorpurple] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorpurple]{$x_{f}$}; - % ==================== - - % ==================== - % Marble - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorpurple}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorpurple](ft){$f_{t}$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{h}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{h}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{h}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{n}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1](f){$f$}; - - % Velocity Sensor - \node[inertialsensor={\velsize}{coloryellow}] (veln) at (0.5*\massw, \spaceh+\massh) {}; - \node[right, color=coloryellow] (xn) at (veln.north east) {$v_n$}; - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5]{$m_{s}$}; - - % External Force - \draw[->, color=colorpurple] (0, \massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=colorpurple]{$f_s$}; - \end{scope} - % ==================== - - % ==================== - % DVF Control - \node[block={2em}{2em}, below right=0.4 and 0.1 of xn, color=coloryellow, fill=coloryellow!10!white] (ppf) {$K_{\text{DVF}}$}; - \draw[->, draw=coloryellow] (xn.east) -| (ppf.north); - \draw[->, draw=coloryellow] (ppf.south) |- (f.east); - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_active_damping_strategies #+caption: Three active damping strategies. Integral Force Feedback (\subref{fig:uniaxial_active_damping_strategies_iff}) using a force sensor, Relative Damping Control (\subref{fig:uniaxial_active_damping_strategies_rdc}) using a relative displacement sensor, and Direct Velocity Feedback (\subref{fig:uniaxial_active_damping_strategies_dvf}) using a geophone #+attr_latex: :options [htbp] @@ -1572,124 +603,6 @@ The Integral Force Feedback strategy consists of using a force sensor in series The mechanical equivalent of this IFF strategy is a dashpot in series with the actuator stiffness with a damping coefficient equal to the stiffness of the actuator divided by the controller gain $k/g$ (see Figure ref:fig:uniaxial_active_damping_iff_equiv). -#+begin_src latex :file uniaxial_active_damping_iff_schematic.pdf :results file raw -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope} - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, \spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; - \node[forcesensor={\massw}{\fsensh}{colorblue}] (fsensn) at (0, \spaceh-\fsensh){}; - \node[right, color=colorblue] (fn) at (fsensn.east) {$f_n$}; - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh-\fsensh) node[midway, left=0.1]{$k$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.25*\massw, 0) -- (0.25*\massw, \spaceh-\fsensh) coordinate[midway, shift={(0.1,0)}](f); - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, \spaceh) -- (0.5*\massw, \spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, \spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, \spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % IFF Control - \node[block={2em}{2em}, right=1.0 of f, color=colorblue, fill=colorblue!10!white] (iff) {$g/s$}; - \draw[->, draw=colorblue] (fn.east) -- ++(1.0, 0) |- (iff.east); - \draw[->, draw=colorblue] (iff.west) -- (f.east) node[above right, color=colorblue]{$f$}; - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_active_damping_iff_equiv.pdf :results file raw -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope}[shift={(6, 0)}] - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, 0.8*\spaceh) rectangle (0.5*\massw, 0.8*\spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, 0.8*\spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, 0.8*\spaceh); - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 0.8*\spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, 1.4*\spaceh) rectangle (0.5*\massw, 1.4*\spaceh+\massh) node[pos=0.5]{$m$}; - \draw[spring] (0, 0) -- node[midway, left=0.1]{$k$} (0, 0.8*\spaceh); - \draw[damper={colorblue}{}{}] (0, 0.8*\spaceh) node[branch]{} -- (0, 1.4*\spaceh) node[midway, left=0.2, color=colorblue]{$k/g$}; - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 0.8*\spaceh+\massh+1.4*\spaceh+\massh)}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, 0.8*\spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, 0.8*\spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0.8*\spaceh) -- (0.5*\massw, 0.8*\spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0.8*\spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0.8*\spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - \end{scope} - - % % Equiv - % \draw[double, <->, draw=colorblue, double distance=1.5] (3.0, 1.5*\spaceh+\massh) -- ++(1.5,0); - -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_active_damping_iff #+caption: Integral Force Feedback (\subref{fig:uniaxial_active_damping_iff_schematic}) is equivalent to a damper in series with the actuator stiffness (\subref{fig:uniaxial_active_damping_iff_equiv}) #+attr_latex: :options [htbp] @@ -1717,130 +630,6 @@ For the Relative Damping Control strategy, a relative motion sensor that measure The mechanical equivalent of acrshort:rdc is a dashpot in parallel with the actuator with a damping coefficient equal to the controller gain $g$ (see Figure ref:fig:uniaxial_active_damping_rdc_equiv). -#+begin_src latex :file uniaxial_active_damping_rdc_schematic.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope} - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[dashed, draw=colorred] (0.5*\massw, \spaceh+\massh) -- ++(1*\dispw, 0) coordinate(drbot); - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, \spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) coordinate[midway, shift={(0.1,0)}](f); - - \draw[dashed, draw=colorred] (0.5*\massw, \spaceh+\massh) -- ++(1*\dispw, 0) coordinate(drtop); - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, \spaceh) -- (0.5*\massw, \spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, \spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, \spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - - \draw[<->, dashed, draw=colorred] ($(drbot)+(-0.1, 0)$) -- ($(drtop)+(-0.1, 0)$) node[right, color=colorred](dr){$d\mathcal{L}$}; - % ==================== - % RDC Control - \node[block={2em}{2em}, below right=0.2 and -0.3 of dr, color=colorred, fill=colorred!10!white] (rdc) {$-g \cdot s$}; - \draw[->, draw=colorred] (dr.east) -| (rdc.north); - \draw[->, draw=colorred] (rdc.south) |- (f.east) node[above right, color=colorred]{$f$}; - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_active_damping_rdc_equiv.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope} - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, \spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; - \draw[damper={colorred}{}{}] ( 0.4*\massw, 0) -- ( 0.4*\massw, \spaceh) node[midway, left=0.15, color=colorred]{$g$}; - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, \spaceh) -- (0.5*\massw, \spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, \spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, \spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - \end{scope} - - % % Equiv - % \draw[double, <->, draw=colorred, double distance=1.5] (3.0, 1.5*\spaceh+\massh) -- ++(1.5,0); -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_active_damping_rdc #+caption: Relative Damping Control (\subref{fig:uniaxial_active_damping_rdc_schematic}) is equivalent to a damper in parallel with the actuator (\subref{fig:uniaxial_active_damping_rdc_equiv}) #+attr_latex: :options [htbp] @@ -1870,132 +659,6 @@ This velocity is fed back to the actuator with a "proportional" controller eqref This is equivalent to a dashpot (with a damping coefficient equal to the controller gain $g$) between the body (on which the inertial sensor is fixed) and an inertial reference frame (see Figure ref:fig:uniaxial_active_damping_dvf_equiv). This is usually referred to as "/sky hook damper/". -#+begin_src latex :file uniaxial_active_damping_dvf_schematic.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope} - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, \spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) coordinate[midway, shift={(0.1,0)}](f); - - % Velocity Sensor - \node[inertialsensor={\velsize}{coloryellow}] (veln) at (0.5*\massw, \spaceh+\massh) {}; - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, \spaceh) -- (0.5*\massw, \spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, \spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, \spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % DVF Control - \node[block={2em}{2em}, below right=0.3 and 0.4 of veln, color=coloryellow, fill=coloryellow!10!white] (ppf) {$-g$}; - \draw[->, draw=coloryellow] (veln.east) node[above right, color=coloryellow]{$v$} -| (ppf.north); - \draw[->, draw=coloryellow] (ppf.south) |- (f.east) node[above right, color=coloryellow]{$f$}; - % ==================== - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_active_damping_dvf_equiv.pdf -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - \begin{scope} - % ==================== - % Stage Below - \begin{scope} - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh); - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, 0) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, 0) -- ++( 0.5, 0); - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, \spaceh+\massh)}] - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; - - \draw[damper={coloryellow}{}{}] ( 0.8*\massw, \massh) -- ( 0.8*\massw, \massh+\spaceh)node[midway, left=0.2, color=coloryellow]{$g$}; - \draw[draw=coloryellow] (0.5*\massw, \massh+\spaceh) -- ( 0.8*\massw, \massh+\spaceh); - \node[mground={0.5}{0.3}{coloryellow}] at (0.8*\massw, \massh); - \end{scope} - % ==================== - - % ==================== - % Stage Above - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - \draw[spring] (-0.25*\massw, 0) -- (-0.25*\massw, \spaceh); - \draw[damper] ( 0.25*\massw, 0) -- ( 0.25*\massw, \spaceh); - - \draw[decorate,decoration={zigzag,segment length=6pt},draw=black!50!white,very thick] (-0.5*\massw, \spaceh) -- (0.5*\massw, \spaceh); - \draw[draw=black!50!white,very thick, dashed] (-0.5*\massw, \spaceh) -- ++(-0.5, 0); - \draw[draw=black!50!white,very thick, dashed] ( 0.5*\massw, \spaceh) -- ++( 0.5, 0); - \end{scope} - % ==================== - \end{scope} - - % % Equiv - % \draw[double, <->, draw=coloryellow, double distance=1.5] (2.5, 1.5*\spaceh+\massh) -- ++(1.5,0); -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_active_damping_dvf #+caption: Direct velocity Feedback (\subref{fig:uniaxial_active_damping_dvf_schematic}) is equivalent to a "sky hook damper" (\subref{fig:uniaxial_active_damping_dvf_equiv}) #+attr_latex: :options [htbp] @@ -2243,169 +906,6 @@ This corresponds to a /two step/ control strategy: In this section, Integral Force Feedback is used as the Low Authority Controller (the other two damping strategies would lead to the same conclusions here). This control architecture applied to the uniaxial model is shown in Figure ref:fig:uniaxial_hac_lac_model. -#+begin_src latex :file uniaxial_hac_lac_architecture.pdf :results none -\begin{tikzpicture} - % Blocs - \node[block={3.0cm}{3.0cm}] (P) {Plant}; - \coordinate[] (input) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputH) at ($(P.south east)!0.2!(P.north east)$); - \coordinate[] (outputL) at ($(P.south east)!0.8!(P.north east)$); - - \node[block, above=0.4 of P] (Klac) {$\bm{K}_{\textsc{LAC}}$}; - \node[addb, left=0.6 of input] (addF) {}; - \node[block, left=1.0 of addF] (Khac) {$\bm{K}_{\textsc{HAC}}$}; - \node[addb={+}{}{}{}{-}, left=0.6 of Khac] (subr) {}; - - % Connections and labels - \draw[->] (outputL) -- ++(0.6, 0) coordinate(eastlac) |- (Klac.east); - \node[above right] at (outputL){$y^{\prime}$}; - \draw[->] (Klac.west) -| (addF.north); - \draw[->] (addF.east) -- (input) node[above left]{$u$}; - - \draw[<-] (subr.west) --node[midway, above]{$r$} ++(-0.8, 0); - \draw[->] (outputH) -- ++(1.6, 0); - \draw[->] ($(outputH) + (1.2, 0)$)node[branch]{} node[above]{$y$} -- ++(0, -1.2) -| (subr.south); - \draw[->] (subr.east) -- (Khac.west) node[above left]{$\epsilon$}; - \draw[->] (Khac.east) -- (addF.west) node[above left=0 and 0.2]{$u^{\prime}$}; - - \begin{scope}[on background layer] - \node[fit={(Klac.north-|eastlac) (addF.west|-P.south)}, fill=black!20!white, draw, dashed, inner sep=6pt] (Pi) {}; - \node[anchor={north west}] at (Pi.north west){\small Damped Plant}; - \end{scope} -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_hac_lac_model.pdf :results silent -\begin{tikzpicture} - % ==================== - % Parameters - % ==================== - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - % ==================== - - % IFF - % ==================== - % Ground - % ==================== - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorpurple] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorpurple]{$x_{f}$}; - % ==================== - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(7.5*\dispw, 0) coordinate(xg); - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorpurple}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorpurple](ft){$f_{t}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_h$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_h$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_h$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{n}$}; - - % Force Sensor - \node[forcesensor={\massw}{\fsensh}{colorblue}] (fsensn) at (0, \spaceh-\fsensh){}; - \node[right, color=colorblue] (fn) at (fsensn.east) {$f_n$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh-\fsensh) node[midway, left=0.1]{$k_{n}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh-\fsensh) node[midway, left=0.2]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- ( 0.3*\massw, \spaceh-\fsensh) node[midway, right=0.1](f){$f$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexa}$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(7.5*\dispw, 0) coordinate(xnpos); - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5]{$m_{s}$}; - - % External Force - \draw[->, color=colorpurple] (0, \massh) node[]{$\bullet$} -- ++(0, 0.5*\massh) node[right, color=colorpurple]{$f_s$}; - \end{scope} - % ==================== - - % Measured displacement - \draw[<->, dashed, draw=colorred] ($(xg)+(-0.1, 0)$) -- node[left, color=colorred](d){$d$} ($(xnpos)+(-0.1, 0)$); - - % ==================== - % IFF Control - \node[block={2em}{2em}, right=1.0 of fn, color=colorblue, fill=colorblue!10!white] (iff) {$K_{\textsc{IFF}}$}; - \node[addb, right=0.5 of f.east] (ctrladd) {}; - \node[block={2em}{2em}, color=colorred, fill=colorred!10!white] (Khac) at (ctrladd|-d) {$K_{\textsc{HAC}}$}; - - \draw[->, draw=colorblue] (fn.east) -- (iff.west); - \draw[->, draw=colorblue] (iff.south) |- (ctrladd.east); - \draw[->] (ctrladd.west) -- (f.east); - - \draw[->, draw=colorred] (d.west) -- (Khac.east); - \draw[->, draw=colorred] (Khac.north) -- (ctrladd.south) node[below right, color=colorred]{$f^{\prime}$}; - % ==================== -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_hac_lac #+caption: acrfull:haclac #+attr_latex: :options [htbp] @@ -2648,101 +1148,6 @@ To study this, two models are used (Figure ref:fig:uniaxial_support_compliance_m The first one consists of the nano-hexapod directly fixed on top of the granite, thus neglecting any support compliance (Figure ref:fig:uniaxial_support_compliance_nano_hexapod_only). The second one consists of the nano-hexapod fixed on top of the micro-station having some limited compliance (Figure ref:fig:uniaxial_support_compliance_test_system) -#+begin_src latex :file uniaxial_support_compliance_nano_hexapod_only.pdf :results file raw silent -\begin{tikzpicture} - % Parameters - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.3} % Width of the dashed line for the displacement - \def\disph{0.5} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-10pt} % Brace shift horizontaly - - % Granite - \draw[fill=white!70!black] (-1*\massw, -\massh) rectangle (\massw, 0) node[pos=0.5]{Granite}; - \coordinate(origin) at (0,0); - - % Nano Hexapod - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[draw=colorred,fill=colorred!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5, color=colorred]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorred] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred]{$k_{n}$}; - \draw[damper={colorred}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorred]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorred}] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred](F){$f$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh) -- coordinate[near end](dhigh) ++(1.2, 0); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{$\nu$-hexapod}; - \end{scope} - - \draw[<->, dashed, colorred] (dhigh) --node[midway, right]{$L^\prime$} (origin-|dhigh); -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_support_compliance_test_system.pdf :results file raw silent -\begin{tikzpicture} - % Parameters - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.3} % Width of the dashed line for the displacement - \def\disph{0.5} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-10pt} % Brace shift horizontaly - - % Granite - \draw[fill=white!70!black] (-1*\massw, -\massh) rectangle (\massw, 0) node[pos=0.5]{Granite}; - \coordinate(origin) at (0,0); - - % Micro Station - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5, color=colorblue]{$m_{\mu}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorblue] (-0.3*\massw, 0) -- (-0.3*\massw, \spaceh) node[midway, left=0.1, color=colorblue]{$k_{\mu}$}; - \draw[damper={colorblue}{}{}] ( 0.3*\massw, 0) -- ( 0.3*\massw, \spaceh) node[midway, left=0.2, color=colorblue]{$c_{\mu}$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- coordinate[near end](dmid) ++(0.3, 0); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu$-station}; - \end{scope} - - % Nano Station - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[draw=colorred,fill=colorred!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5, color=colorred]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorred] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred]{$k_{n}$}; - \draw[damper={colorred}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorred]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorred}] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred](F){$f$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh) -- coordinate[near end](dhigh) ++(1.2, 0); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{$\nu$-hexapod}; - \end{scope} - - \draw[<->, dashed, coloryellow] (dhigh) --node[midway, right]{$d$} (origin-|dhigh); - \draw[<->, dashed, colorred] (dmid) --node[midway, right]{$L$} (dhigh-|dmid); -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_support_compliance_models #+caption: Models used to study the effect of limited support compliance #+attr_latex: :options [htbp] @@ -2885,103 +1290,6 @@ Up to this section, the sample was modeled as a mass rigidly fixed to the nano-h However, such a sample may present internal dynamics, and its fixation to the nano-hexapod may have limited stiffness. To study the effect of the sample dynamics, the models shown in Figure ref:fig:uniaxial_paylaod_dynamics_schematic are used. -#+begin_src latex :file uniaxial_paylaod_dynamics_rigid_schematic.pdf :results file raw silent -\begin{tikzpicture} - % Parameters - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.3} % Width of the dashed line for the displacement - \def\disph{0.5} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-10pt} % Brace shift horizontaly - - % Granite - \draw[fill=white!70!black] (-1*\massw, -\massh) rectangle (\massw, 0) node[pos=0.5]{Granite}; - \coordinate(origin) at (0,0); - - % Nano Station - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[draw=colorred,fill=colorred!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5, color=colorred]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorred] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred]{$k_{n}$}; - \draw[damper={colorred}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorred]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorred}] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred](F){$f$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh) -- coordinate[near end](dhigh) ++(1.2, 0); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{$\nu$-hexapod}; - \end{scope} - - % Sample - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.3*\massw, 0) rectangle (0.3*\massw, \massh) node[pos=0.5, color=colorblue]{$m_{s}$}; - \end{scope} - - \draw[<->, dashed] (dhigh) --node[midway, right]{$L$} (origin-|dhigh); -\end{tikzpicture} -#+end_src - -#+begin_src latex :file uniaxial_paylaod_dynamics_schematic.pdf :results file raw silent -\begin{tikzpicture} - % Parameters - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.3} % Width of the dashed line for the displacement - \def\disph{0.5} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-10pt} % Brace shift horizontaly - - % Granite - \draw[fill=white!70!black] (-1*\massw, -\massh) rectangle (\massw, 0) node[pos=0.5]{Granite}; - \coordinate(origin) at (0,0); - - % Nano Station - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[draw=colorred,fill=colorred!10!white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5, color=colorred]{$m_{n}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorred] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred]{$k_{n}$}; - \draw[damper={colorred}{}{}] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2, color=colorred]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{colorred}] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1, color=colorred](F){$f$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh) -- coordinate[near end](dhigh) ++(1.2, 0); - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{$\nu$-hexapod}; - \end{scope} - - % Sample - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[draw=colorblue,fill=colorblue!10!white] (-0.3*\massw, \spaceh) rectangle (0.3*\massw, \spaceh+\massh) node[pos=0.5, color=colorblue]{$m_{s}$}; - - % Spring, Damper, and Actuator - \draw[spring,draw=colorblue] (-0.2*\massw, 0) -- (-0.2*\massw, \spaceh) node[midway, left=0.1, color=colorblue]{$k_{s}$}; - \draw[damper={colorblue}{}{}] ( 0.2*\massw, 0) -- ( 0.2*\massw, \spaceh) node[midway, left=0.2, color=colorblue]{$c_{s}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Payload}; - \end{scope} - - \draw[<->, dashed] (dhigh) --node[midway, right]{$L^\prime$} (origin-|dhigh); -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_payload_dynamics_models #+caption: Models used to study the effect of payload dynamics #+attr_latex: :options [htbp] @@ -3062,146 +1370,8 @@ To estimate whether the sample flexibility is critical for the closed-loop posit This is the same model that was used in Section ref:sec:uniaxial_position_control but with an added flexibility between the nano-hexapod and the sample (considered sample modes are at $\omega_s = 20\,\text{Hz}$ and $\omega_n = 200\,\text{Hz}$). In this case, the measured (i.e., controlled) distance $d$ is no longer equal to the real performance index (the distance $y$). -#+begin_src latex :file uniaxial_sample_flexibility_control.pdf -\begin{tikzpicture} - % Parameters - \def\massw{2.2} % Width of the masses - \def\massh{0.8} % Height of the masses - \def\spaceh{1.2} % Height of the springs/dampers - \def\dispw{0.4} % Width of the dashed line for the displacement - \def\disph{0.3} % Height of the arrow for the displacements - \def\bracs{0.05} % Brace spacing vertically - \def\brach{-12pt} % Brace shift horizontaly - \def\fsensh{0.2} % Height of the force sensor - \def\velsize{0.2} % Size of the velocity sensor - - % Ground - \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); - \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0); - \draw[->, color=colorpurple] (0.5*\massw+0.5*\dispw, 0) -- ++(0, 2*\disph) node[right, color=colorpurple]{$x_{f}$}; - - % ==================== - % Granite - \begin{scope}[shift={(0, 0)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{g}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{g}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{g}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{Granite}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(9.0*\dispw, 0) coordinate(xg); - \end{scope} - % ==================== - - % ==================== - % Stages - \begin{scope}[shift={(0, \spaceh+\massh)}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{t}$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_{t}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_{t}$}; - \draw[actuator={0.45}{0.2}{colorpurple}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh) node[midway, right=0.1, color=colorpurple](ft){$f_{t}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$T_y$/$R_y$/$R_z$}; - \end{scope} - % ==================== - - % ==================== - % Hexapod - \begin{scope}[shift={(0, 2*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_h$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k_h$}; - \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c_h$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\mu\text{-hexa}$}; - \end{scope} - % ==================== - - % ==================== - % NASS - \begin{scope}[shift={(0, 3*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m_{n}$}; - - % Force Sensor - \node[forcesensor={\massw}{\fsensh}{colorblue}] (fsensn) at (0, \spaceh-\fsensh){}; - \node[right, color=colorblue] (fn) at (fsensn.east) {$f_n$}; - - % Spring, Damper, and Actuator - \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh-\fsensh) node[midway, left=0.1]{$k_{n}$}; - \draw[damper] (0, 0) -- ( 0, \spaceh-\fsensh) node[midway, left=0.2]{$c_{n}$}; - \draw[actuator={0.4}{0.2}{black}] ( 0.3*\massw, 0) -- (0.3*\massw, \spaceh-\fsensh) node[midway, right=0.1](f){$f$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) node[midway,rotate=90,anchor=south,yshift=10pt]{$\nu\text{-hexa}$}; - - % Displacements - \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(7.5*\dispw, 0) coordinate(xnpos); - \end{scope} - % ==================== - - % ==================== - % sample - \begin{scope}[shift={(0, 4*(\spaceh+\massh))}] - % Mass - \draw[fill=white] (-0.3*\massw, \spaceh) rectangle (0.3*\massw, \spaceh+\massh) coordinate[pos=0.5](poi); - - % Spring, Damper, and Actuator - \draw[spring] (-0.2*\massw, 0) -- (-0.2*\massw, \spaceh) node[midway, left=0.1]{$k_{s}$}; - \draw[damper] ( 0.2*\massw, 0) -- ( 0.2*\massw, \spaceh) node[midway, left=0.2]{$c_{s}$}; - - % Legend - \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % - (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % - node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Sample}; - - % X-ray - \draw[dashed, draw=red, -<-=.5] (poi)node[branch, color=red]{} -- node[near end, above]{x-ray} ++(2.5, 0); - - % Displacements - \draw[dashed] (0.2*\massw, \spaceh)coordinate(a) -- (xg|-a) coordinate(xspos); - \end{scope} - % ==================== - - % Measured displacement - \draw[<->, dashed, draw=colorred] ($(xnpos)+(-0.1, 0)$)coordinate(a) -- node[left, color=colorred](d){$d$} (xg-|a); - \draw[<->, dashed] ($(xg)+(-0.1, 0)$) -- node[left]{$y$} ($(xspos)+(-0.1, 0)$); - - % ==================== - % IFF Control - \node[block={2em}{2em}, right=1.0 of fn, color=colorblue, fill=colorblue!10!white] (iff) {$K_{\textsc{IFF}}$}; - \node[addb, right=0.5 of f.east] (ctrladd) {}; - \node[block={2em}{2em}, color=colorred, fill=colorred!10!white] (Khac) at (ctrladd|-d) {$K_{\textsc{HAC}}$}; - - \draw[->, draw=colorblue] (fn.east) -- (iff.west); - \draw[->, draw=colorblue] (iff.south) |- (ctrladd.east); - \draw[->] (ctrladd.west) -- (f.east); - - \draw[->, draw=colorred] (d.west) -- (Khac.east); - \draw[->, draw=colorred] (Khac.north) -- (ctrladd.south) node[below right, color=colorred]{$f^{\prime}$}; - % ==================== -\end{tikzpicture} -#+end_src - #+name: fig:uniaxial_sample_flexibility_control #+caption: Uniaxial model considering some flexibility between the nano-hexapod top platform and the sample. In this case, the measured and controlled distance $d$ is different from the distance $y$ which is the real performance index -#+RESULTS: [[file:figs/uniaxial_sample_flexibility_control.png]] The system dynamics is computed and IFF is applied using the same gains as those used in Section ref:sec:uniaxial_active_damping. @@ -3306,69 +1476,9 @@ Two reference frames are used: an /inertial/ frame $(\vec{i}_x, \vec{i}_y, \vec{ The position of the payload is represented by $(d_u, d_v, 0)$ expressed in the rotating frame. After the dynamics of this system is studied, the objective will be to dampen the two suspension modes of the payload while the rotating stage performs a constant rotation. -#+begin_src latex :file rotating_3dof_model_schematic.pdf -\begin{tikzpicture} - % Angle - \def\thetau{25} - - % Rotational Stage - \draw[fill=black!60!white] (0, 0) circle (4.3); - \draw[fill=black!40!white] (0, 0) circle (3.8); - - % Label - \node[anchor=north west, rotate=\thetau] at (-2.5, 2.5) {\small Rotating Stage}; - - % Rotating Scope - \begin{scope}[rotate=\thetau] - % Rotating Frame - \draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6); - % Label - \node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small Suspended Platform}; - - % Mass - \draw[fill=white] (-1, -1) rectangle (1, 1); - % Label - \node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload}; - - % Attached Points - \node[] at (-1, 0){$\bullet$}; - \draw[] (-1, 0) -- ++(-0.2, 0) coordinate(cu); - \draw[] ($(cu) + (0, -0.8)$) coordinate(actu) -- ($(cu) + (0, 0.8)$) coordinate(ku); - \node[] at (0, -1){$\bullet$}; - \draw[] (0, -1) -- ++(0, -0.2) coordinate(cv); - \draw[] ($(cv) + (-0.8, 0)$)coordinate(kv) -- ($(cv) + (0.8, 0)$) coordinate(actv); - - % Spring and Actuator for U - \draw[actuator={0.6}{0.2}{black}] (actu) -- node[above=0.1, rotate=\thetau]{$F_u$} (actu-|-2.6,0); - \draw[spring=0.2] (ku) -- node[above=0.1, rotate=\thetau]{$k$} (ku-|-2.6,0); - \draw[damper={black}{8}{8}] (cu) -- node[above left=0.2 and -0.1, rotate=\thetau]{$c$} (cu-|-2.6,0); - - \draw[actuator={0.6}{0.2}{black}] (actv) -- node[left, rotate=\thetau]{$F_v$} (actv|-0,-2.6); - \draw[spring=0.2] (kv) -- node[left, rotate=\thetau]{$k$} (kv|-0,-2.6); - \draw[damper={black}{8}{8}] (cv) -- node[left=0.1, rotate=\thetau]{$c$} (cv|-0,-2.6); - \end{scope} - - % Inertial Frame - \draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$}; - \draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$}; - \draw[fill, color=black] (-4, -4) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){}; - - \draw[->] (0, 0) node[above left, rotate=\thetau]{$\vec{i}_w$} -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$}; - \draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$}; - \draw[fill, color=black] (0,0) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm] at (0, 0){}; - \draw[dashed] (0, 0) -- ++(2, 0); - \draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$}; - - \draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$}; -\end{tikzpicture} -#+end_src - #+name: fig:rotating_3dof_model_schematic #+caption: Schematic of the studied system #+attr_latex: :scale 0.8 -#+RESULTS: [[file:figs/rotating_3dof_model_schematic.png]] **** Equations of motion and transfer functions @@ -3523,113 +1633,6 @@ Two identical controllers $K_F$ described by eqref:eq:rotating_iff_controller ar K_{F}(s) = g \cdot \frac{1}{s} \end{equation} -#+begin_src latex :file rotating_3dof_model_schematic_iff.pdf -\begin{tikzpicture} - % Angle - \def\thetau{25} - - % Rotational Stage - \draw[fill=black!60!white] (0, 0) circle (4.3); - \draw[fill=black!40!white] (0, 0) circle (3.8); - - % Label - \node[anchor=north west, rotate=\thetau] at (-2.5, 2.5) {\small Rotating Stage}; - - % Rotating Scope - \begin{scope}[rotate=\thetau] - % Rotating Frame - \draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6); - % Label - \node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small Suspended Platform}; - - % Mass - \draw[fill=white] (-1, -1) rectangle (1, 1); - % Label - \node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload}; - - % Attached Points - \node[] at (-1, 0){$\bullet$}; - \draw[] (-1, 0) -- ++(-0.2, 0) coordinate(au); - \node[] at (0, -1){$\bullet$}; - \draw[] (0, -1) -- ++(0, -0.2) coordinate(av); - - % Force Sensors - \draw[draw=colorblue, fill=colorblue!10!white] ($(au) + (-0.2, -0.5)$) rectangle ($(au) + (0, 0.5)$); - \draw[draw=colorblue] ($(au) + (-0.2, -0.5)$)coordinate(actu) -- ($(au) + (0, 0.5)$); - \draw[draw=colorblue] ($(au) + (-0.2, 0.5)$)coordinate(ku) -- ($(au) + (0, -0.5)$); - - \draw[draw=colorblue, fill=colorblue!10!white] ($(av) + (-0.5, -0.2)$) rectangle ($(av) + (0.5, 0)$); - \draw[draw=colorblue] ($(av) + ( 0.5, -0.2)$)coordinate(actv) -- ($(av) + (-0.5, 0)$); - \draw[draw=colorblue] ($(av) + (-0.5, -0.2)$)coordinate(kv) -- ($(av) + ( 0.5, 0)$); - - % Spring and Actuator for U - \draw[actuator={0.6}{0.2}{black}] (actu) -- coordinate[midway](actumid) (actu-|-2.6,0); - \draw[spring=0.2] (ku) -- node[above=0.1, rotate=\thetau]{$k$} (ku-|-2.6,0); - - % \draw[actuator={0.6}{0.2}] (actv) -- node[right, rotate=\thetau]{$F_v$} (actv|-0,-2.6); - \draw[actuator={0.6}{0.2}{black}] (actv) -- coordinate[midway](actvmid) (actv|-0,-2.6); - \draw[spring=0.2] (kv) -- node[left, rotate=\thetau]{$k$} (kv|-0,-2.6); - - \node[color=colorblue, block={0.8cm}{0.6cm}, fill=colorblue!10!white, rotate=\thetau] (Ku) at ($(actumid) + (0, -1.2)$) {$K_{F}$}; - \draw[->, draw=colorblue] ($(au) + (-0.1, -0.5)$) |- (Ku.east) node[below right, rotate=\thetau]{$f_{u}$}; - \draw[->, draw=colorblue] (Ku.north) -- ($(actumid) + (0, -0.1)$) node[below left, rotate=\thetau]{$F_u$}; - - \node[color=colorblue, block={0.8cm}{0.6cm}, fill=colorblue!10!white, rotate=\thetau] (Kv) at ($(actvmid) + (1.2, 0)$) {$K_{F}$}; - \draw[->, draw=colorblue] ($(av) + (0.5, -0.1)$) -| (Kv.north) node[above right, rotate=\thetau]{$f_{v}$}; - \draw[->, draw=colorblue] (Kv.west) -- ($(actvmid) + (0.1, 0)$) node[below right, rotate=\thetau]{$F_v$}; - \end{scope} - - % Inertial Frame - \draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$}; - \draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$}; - \draw[fill, color=black] (-4, -4) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){}; - - \node[draw, circle, inner sep=0pt, minimum size=0.3cm] at (0, 0){}; - \draw[->] (0, 0) node[above left, rotate=\thetau]{$\vec{i}_w$} -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$}; - \draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$}; - \draw[dashed] (0, 0) -- ++(2, 0); - \draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$}; - \node[] at (0,0) {$\bullet$}; - - \draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$}; -\end{tikzpicture} -#+end_src - -#+begin_src latex :file rotating_iff_diagram.pdf -\tikzset{block/.default={0.8cm}{0.8cm}} -\tikzset{addb/.append style={scale=0.7}} -\tikzset{node distance=0.6} - -\begin{tikzpicture} - \node[block={1.8cm}{2.2cm}] (G) {$\bm{G}_f$}; - - % Inputs of the controllers - \coordinate[] (output1) at ($(G.south east)!0.75!(G.north east)$); - \coordinate[] (output2) at ($(G.south east)!0.25!(G.north east)$); - \coordinate[] (input1) at ($(G.south west)!0.75!(G.north west)$); - \coordinate[] (input2) at ($(G.south west)!0.25!(G.north west)$); - - \node[block, left=1.8 of input1] (K1) {$g/s$}; - \node[block] (K2) at ($(K1.east|-input2)+(0.6, 0)$) {$g/s$}; - - % Connections and labels - \draw[->] (K1.east) -- (input1)node[above left]{$F_u$}; - \draw[->] (K2.east) -- (input2)node[above left]{$F_v$}; - - \draw[->] (output1) -- ++(0.8, 0) node[above left]{$f_u$}; - \draw[->] (output2) -- ++(0.8, 0) node[above left]{$f_v$}; - - \draw[->] ($(output1)+(0.2, 0)$)node[branch]{} -- ++(0, 1.2) -| ($(K1.west) + (-0.8, 0)$)coordinate(start) -- (K1.west); - \draw[->] ($(output2)+(0.2, 0)$)node[branch]{} -- ++(0, -1.2) -| (start|-K2) -- (K2.west); - - \begin{scope}[on background layer] - \node[fit={(K1.north west) (K2.south east)}, inner sep=6pt, draw, dashed, fill=black!20!white] (K) {}; - \node[below left] at (K.north east) {$\bm{K}_F$}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:rotating_iff_pure_int #+caption: Integral Force Feedback applied to the suspended rotating platform. The damper $c$ in (\subref{fig:rotating_3dof_model_schematic_iff}) is omitted for readability. #+attr_latex: :options [htbp] @@ -3847,76 +1850,9 @@ The same trade-off can be seen between achievable damping and loss of compliance In this section it is proposed to add springs in parallel with the force sensors to counteract the negative stiffness induced by the gyroscopic effects. Such springs are schematically shown in Figure ref:fig:rotating_3dof_model_schematic_iff_parallel_springs where $k_a$ is the stiffness of the actuator and $k_p$ the added stiffness in parallel with the actuator and force sensor. -#+begin_src latex :file rotating_3dof_model_schematic_iff_parallel_springs.pdf -\begin{tikzpicture} - % Angle - \def\thetau{25} - - % Rotational Stage - \draw[fill=black!60!white] (0, 0) circle (4.3); - \draw[fill=black!40!white] (0, 0) circle (3.8); - - % Label - \node[anchor=north west, rotate=\thetau] at (-2.5, 2.5) {\small Rotating Stage}; - - % Rotating Scope - \begin{scope}[rotate=\thetau] - % Rotating Frame - \draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6); - % Label - \node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small Suspended Platform}; - - % Mass - \draw[fill=white] (-1, -1) rectangle (1, 1); - % Label - \node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload}; - - % Attached Points - \draw[] (-1, 0) -- ++(-0.2, 0) coordinate(au); - \draw[] (0, -1) -- ++(0, -0.2) coordinate(av); - - % Force Sensors - \draw[fill=white] ($(au) + (-0.2, -0.5)$) rectangle ($(au) + (0, 0.5)$); - \draw[] ($(au) + (-0.2, -0.5)$)coordinate(actu) -- ($(au) + (0, 0.5)$); - \draw[] ($(au) + (-0.2, 0.5)$)coordinate(ku) -- ($(au) + (0, -0.5)$); - \node[below=0.1, rotate=\thetau] at ($(au) + (-0.1, -0.5)$) {$f_{u}$}; - - \draw[fill=white] ($(av) + (-0.5, -0.2)$) rectangle ($(av) + (0.5, 0)$); - \draw[] ($(av) + ( 0.5, -0.2)$)coordinate(actv) -- ($(av) + (-0.5, 0)$); - \draw[] ($(av) + (-0.5, -0.2)$)coordinate(kv) -- ($(av) + ( 0.5, 0)$); - \node[right=0.1, rotate=\thetau] at ($(av) + (0.5, -0.1)$) {$f_{v}$}; - - % Spring and Actuator for U - \draw[actuator={0.6}{0.2}{black}] (actu) -- node[below=0.1, rotate=\thetau]{$F_u$} (actu-|-2.6,0); - \draw[spring=0.2] (ku) -- node[below=0.1, rotate=\thetau]{$k_a$} (ku-|-2.6,0); - \draw[spring=0.2,draw=colorred] (-1, 0.8) -- node[above=0.1, rotate=\thetau, color=colorred]{$k_p$} (-1, 0.8-|-2.6,0); - - \draw[actuator={0.6}{0.2}{black}] (actv) -- node[right=0.1, rotate=\thetau]{$F_v$} (actv|-0,-2.6); - \draw[spring=0.2] (kv) -- node[right=0.1, rotate=\thetau]{$k_a$} (kv|-0,-2.6); - \draw[spring=0.2, draw=colorred] (-0.8, -1) -- node[left=0.1, rotate=\thetau, color=colorred]{$k_p$} (-0.8, -1|-0,-2.6); - \end{scope} - - % Inertial Frame - \draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$}; - \draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$}; - \draw[fill, color=black] (-4, -4) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){}; - - \node[draw, circle, inner sep=0pt, minimum size=0.3cm] at (0, 0){}; - \draw[->] (0, 0) node[above left, rotate=\thetau]{$\vec{i}_w$} -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$}; - \draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$}; - \draw[dashed] (0, 0) -- ++(2, 0); - \draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$}; - \node[] at (0,0) {$\bullet$}; - - \draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$}; -\end{tikzpicture} -#+end_src - #+name: fig:rotating_3dof_model_schematic_iff_parallel_springs #+caption: Studied system with additional springs in parallel with the actuators and force sensors (shown in red) #+attr_latex: :scale 0.8 -#+RESULTS: [[file:figs/rotating_3dof_model_schematic_iff_parallel_springs.png]] **** Equations @@ -4063,77 +1999,9 @@ These controllers are in principle pure derivators ($K_d = s$), but to be implem K_d(s) = g \cdot \frac{s}{s + \omega_d} \end{equation} -#+begin_src latex :file rotating_3dof_model_schematic_rdc.pdf -\begin{tikzpicture} - % Angle - \def\thetau{25} - - % Rotational Stage - \draw[fill=black!60!white] (0, 0) circle (4.3); - \draw[fill=black!40!white] (0, 0) circle (3.8); - - % Label - \node[anchor=north west, rotate=\thetau] at (-2.5, 2.5) {\small Rotating Stage}; - - % Rotating Scope - \begin{scope}[rotate=\thetau] - % Rotating Frame - \draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6); - % Label - \node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small Suspended Platform}; - - % Mass - \draw[fill=white] (-1, -1) rectangle (1, 1); - % Label - \node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload}; - - % Attached Points - \node[] at (-1, 0){$\bullet$}; - \draw[] (-1, 0) -- ++(-0.2, 0) coordinate(cu); - \draw[] ($(cu) + (0, -0.8)$) coordinate(actu) -- ($(cu) + (0, 0.8)$) coordinate(ku); - \node[] at (0, -1){$\bullet$}; - \draw[] (0, -1) -- ++(0, -0.2) coordinate(cv); - \draw[] ($(cv) + (-0.8, 0)$)coordinate(kv) -- ($(cv) + (0.8, 0)$) coordinate(actv); - - % Spring and Actuator for U - \draw[actuator={0.6}{0.2}{black}] (cu) -- coordinate[midway, below=0.1](actumid) node[above=0.1, rotate=\thetau]{$F_u$} (cu-|-2.6,0); - \draw[spring=0.2] (ku) -- node[above=0.1, rotate=\thetau]{$k$} (ku-|-2.6,0); - \draw[<->, dashed, draw=colorgreen] (actu) node[below=0.1, rotate=\thetau, color=colorgreen](du){$d_u$} -- (actu-|-2.6,0); - - \node[color=colorgreen, block={0.6cm}{0.6cm}, fill=colorgreen!10!white, rotate=\thetau] (Ku) at ($(actumid) + (0, -1.4)$) {$K_{d}$}; - \draw[->, draw=colorgreen] (du.south) -- ++(0, -0.8) -| (Ku.south); - \draw[->, draw=colorgreen] (Ku.north) -- (actumid); - - \draw[actuator={0.6}{0.2}{black}] (cv) -- coordinate[midway, right=0.1](actvmid) node[left, rotate=\thetau]{$F_v$} (cv|-0,-2.6); - \draw[spring=0.2] (kv) -- node[left, rotate=\thetau]{$k$} (kv|-0,-2.6); - \draw[<->, dashed, draw=colorgreen] (actv)node[right=0.1, rotate=\thetau, color=colorgreen](dv){$d_v$} -- (actv|-0,-2.6); - - \node[color=colorgreen, block={0.6cm}{0.6cm}, fill=colorgreen!10!white, rotate=\thetau] (Kv) at ($(actvmid) + (1.4, 0)$) {$K_{d}$}; - \draw[->, draw=colorgreen] (dv.east) -- ++(0.8, 0) |- (Kv.east); - \draw[->, draw=colorgreen] (Kv.west) -- (actvmid); - \end{scope} - - % Inertial Frame - \draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$}; - \draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$}; - \draw[fill, color=black] (-4, -4) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){}; - - \draw[->] (0, 0) node[above left, rotate=\thetau]{$\vec{i}_w$} -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$}; - \draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$}; - \draw[fill, color=black] (0,0) circle (0.06); - \node[draw, circle, inner sep=0pt, minimum size=0.3cm] at (0, 0){}; - \draw[dashed] (0, 0) -- ++(2, 0); - \draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$}; - - \draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$}; -\end{tikzpicture} -#+end_src - #+name: fig:rotating_3dof_model_schematic_rdc #+caption: System with relative motion sensor and decentralized "relative damping control" applied. #+attr_latex: :scale 0.8 -#+RESULTS: [[file:figs/rotating_3dof_model_schematic_rdc.png]] **** Equations of motion @@ -4621,28 +2489,8 @@ First, a /response model/ is obtained, which corresponds to a set of frequency r From this response model, the modal model can be computed, which consists of two matrices: one containing the natural frequencies and damping factors of the considered modes, and another describing the mode shapes. This modal model can then be used to tune the spatial model (i.e. the multi-body model), that is, to tune the mass of the considered solid bodies and the springs and dampers connecting the solid bodies. -#+begin_src latex :file modal_vibration_analysis_procedure.pdf -\begin{tikzpicture} - \node[block, inner sep = 8pt, align=center] (1) {Description\\of structure}; - \node[block, inner sep = 8pt, align=center, left=1.0 of 1] (2) {Vibration\\Modes}; - \node[block, inner sep = 8pt, align=center, left=1.0 of 2] (3) {Response\\Levels}; - - \draw[<->] (1) -- (2); - \draw[<->] (2) -- (3); - - \node[above] (labelt) at (1.north) {Spatial Model}; - \node[] at (2|-labelt) {Modal Model}; - \node[] at (3|-labelt) {Response Model}; - - \node[align = center, font=\tiny, below] (labelb) at (1.south) {Mass\\Stiffness\\Damping}; - \node[align = center, font=\tiny] at (2|-labelb) {Natural Frequencies\\Mode Shapes\\}; - \node[align = center, font=\tiny] at (3|-labelb) {Time Responses\\Frequency Responses\\}; -\end{tikzpicture} -#+end_src - #+name: fig:modal_vibration_analysis_procedure #+caption: Three models of the same structure. The goal is to tune a spatial model (i.e. mass, stiffness and damping properties) from a response model. The modal model can be used as an intermediate step. -#+RESULTS: [[file:figs/modal_vibration_analysis_procedure.png]] The measurement setup used to obtain the response model is described in Section ref:sec:modal_meas_setup. @@ -4915,43 +2763,8 @@ To validate this reduction of acrshort:dof and the solid body assumption, the fr Let us consider the schematic shown in Figure ref:fig:modal_local_to_global_coordinates where the motion of a solid body is measured at 4 distinct locations (in $x$, $y$ and $z$ directions). The goal here is to link these $4 \times 3 = 12$ measurements to the 6 acrshort:dof of the solid body expressed in the frame $\{O\}$. -#+begin_src latex :file modal_local_to_global_coordinates.pdf - \newcommand\irregularcircle[2]{% radius, irregularity - \pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}} - +(0:\len pt) - \foreach \a in {10,20,...,350}{ - \pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}} - -- +(\a:\len pt) - } -- cycle - } - \begin{tikzpicture} - \draw[rounded corners=1mm, fill=blue!30!white] (0, 0) \irregularcircle{3cm}{1mm}; - - \node[] (origin) at (0, 0) {$\bullet$}; - \begin{scope}[shift={(origin)}] - \def\axissize{0.8cm} - \draw[->] (0, 0) -- ++(\axissize, 0) node[above left]{$x$}; - \draw[->] (0, 0) -- ++(0, \axissize) node[below right]{$y$}; - \draw[fill, color=black] (0, 0) circle (0.05*\axissize); - \node[draw, circle, inner sep=0pt, minimum size=0.4*\axissize, label=left:$z$] (yaxis) at (0, 0){}; - \node[below right] at (0, 0){$\{O\}$}; - \end{scope} - - \coordinate[] (p1) at (-1.5, -1.5); - \coordinate[] (p2) at (-1.5, 1.5); - \coordinate[] (p3) at ( 1.5, 1.5); - \coordinate[] (p4) at ( 1.5, -1.5); - - \draw[->] (p1)node[]{$\bullet$}node[above]{$\vec{p}_1$} -- ++( 1 , 0.1)node[right]{$\delta \vec{p}_1$}; - \draw[->] (p2)node[]{$\bullet$}node[above]{$\vec{p}_2$} -- ++(-0.5,-0.4)node[below]{$\delta \vec{p}_2$}; - \draw[->] (p3)node[]{$\bullet$}node[above]{$\vec{p}_3$} -- ++(-0.8,-0.1)node[below]{$\delta \vec{p}_3$}; - \draw[->] (p4)node[]{$\bullet$}node[above]{$\vec{p}_4$} -- ++( 0.5, 0.2)node[below]{$\delta \vec{p}_4$}; - \end{tikzpicture} -#+end_src - #+name: fig:modal_local_to_global_coordinates #+caption: Schematic of the measured motions of a solid body -#+RESULTS: [[file:figs/modal_local_to_global_coordinates.png]] The motion of the rigid body of figure ref:fig:modal_local_to_global_coordinates can be described by its displacement $\vec{\delta}p = [\delta p_x,\ \delta p_y,\ \delta p_z]$ and (small) rotations $[\delta \Omega_x,\ \delta \Omega_y,\ \delta \Omega_z]$ with respect to the reference frame $\{O\}$. @@ -6859,51 +4672,6 @@ The diagonal terms of the plant (transfer functions from force to displacement o This simplifies the control design because only one controller needs to be tuned. Furthermore, at low frequencies, the plant exhibits good decoupling between the struts, allowing for effective independent control of each axis. -#+begin_src latex :file nhexa_control_strut.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (inputF) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputX) at ($(P.south east)!0.5!(P.north east)$); - - \node[block={2.0cm}{2.0cm}, left=0.8 of inputF] (K) {\begin{matrix}K_1 & & 0 \\ & \ddots & \\ 0 & & K_6\end{matrix}}; - \node[block, left=0.8 of K] (J) {$\bm{J}$}; - \node[addb={+}{}{}{}{-}, left=0.8 of J] (subr) {}; - % \node[block, align=center, left=0.6 of subr] (J) {Inverse\\Kinematics}; - - % Connections and labels - \draw[->] (outputX) -- ++(0.8, 0); - \draw[->] ($(outputX) + (0.3, 0)$)node[branch]{} node[above]{$\bm{\mathcal{X}}$} -- ++(0, -1.2) -| (subr.south); - \draw[->] (subr.east) -- node[midway, above]{$\bm{\epsilon}_{\mathcal{X}}$} (J.west); - \draw[->] (J.east) -- node[midway, above]{$\bm{\epsilon}_{\mathcal{L}}$} (K.west); - \draw[->] (K.east) -- node[midway, above]{$\bm{f}$} (inputF); - - \draw[<-] (subr.west)node[above left]{$\bm{r}_{\mathcal{X}}$} -- ++(-0.8, 0); -\end{tikzpicture} -#+end_src - -#+begin_src latex :file nhexa_control_cartesian.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (inputF) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputX) at ($(P.south east)!0.5!(P.north east)$); - - \node[block, left=0.8 of inputF] (J) {$\bm{J}^{-T}$}; - \node[block={2.0cm}{2.0cm}, left=0.8 of J] (K) {\begin{matrix}K_{D_x} & & 0 \\ & \ddots & \\ 0 & & K_{R_z}\end{matrix}}; - \node[addb={+}{}{}{}{-}, left=0.8 of K] (subr) {}; - - % Connections and labels - \draw[->] (outputX) -- ++(0.8, 0); - \draw[->] ($(outputX) + (0.3, 0)$)node[branch]{} node[above]{$\bm{\mathcal{X}}$} -- ++(0, -1.2) -| (subr.south); - - \draw[->] (subr.east) -- node[midway, above]{$\bm{\epsilon}_{\mathcal{X}}$} (K.west); - \draw[->] (K.east) -- node[midway, above]{$\bm{\mathcal{F}}$} (J.west); - \draw[->] (J.east) -- node[midway, above]{$\bm{f}$} (inputF.west); - \draw[<-] (subr.west)node[above left]{$\bm{r}_{\mathcal{X}}$} -- ++(-0.8, 0); -\end{tikzpicture} -#+end_src - #+name: fig:nhexa_control_frame #+caption: Two control strategies #+attr_latex: :options [htbp] @@ -6964,36 +4732,8 @@ The decentralized Integral Force Feedback (IFF) control strategy is implemented The corresponding block diagram of the control loop is shown in Figure ref:fig:nhexa_decentralized_iff_schematic, in which the controller $\bm{K}_{\text{IFF}}(s)$ is a diagonal matrix, where each diagonal element is a pure integrator eqref:eq:nhexa_kiff. -#+begin_src latex :file nhexa_decentralized_iff_schematic.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (input) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputH) at ($(P.south east)!0.2!(P.north east)$); - \coordinate[] (outputL) at ($(P.south east)!0.8!(P.north east)$); - - \node[block, above=0.2 of P] (Klac) {$\bm{K}_\text{IFF}$}; - \node[addb, left=0.8 of input] (addF) {}; - - % Connections and labels - \draw[->] (outputL) -- ++(0.7, 0) coordinate(eastlac) |- (Klac.east); - \node[above right] at (outputL){$\bm{f}_n$}; - \draw[->] (Klac.west) -| (addF.north); - \draw[->] (addF.east) -- (input) node[above left]{$\bm{f}$}; - - \draw[->] (outputH) -- ++(1.7, 0) node[above left]{$\bm{\mathcal{L}}$}; - \draw[<-] (addF.west) -- ++(-0.8, 0) node[above right]{$\bm{f}^{\prime}$}; - - \begin{scope}[on background layer] - \node[fit={(Klac.north-|eastlac) (addF.west|-P.south)}, fill=black!20!white, draw, dashed, inner sep=8pt] (Pi) {}; - \node[anchor={north west}] at (Pi.north west){\footnotesize{Damped Plant}}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:nhexa_decentralized_iff_schematic #+caption: Schematic of the implemented decentralized IFF controller. The damped plant has a new inputs $\bm{f}^{\prime}$ -#+RESULTS: [[file:figs/nhexa_decentralized_iff_schematic.png]] \begin{equation}\label{eq:nhexa_kiff} @@ -7043,47 +4783,8 @@ Following the analysis from Section ref:ssec:nhexa_control_space, the control is The Jacobian matrix $\bm{J}^{-1}$ performs (approximate) real-time approximate inverse kinematics to map position errors from Cartesian space $\bm{\epsilon}_{\mathcal{X}}$ to strut space $\bm{\epsilon}_{\mathcal{L}}$. A diagonal High Authority Controller $\bm{K}_{\text{HAC}}$ then processes these errors in the frame of the struts. -#+begin_src latex :file nhexa_hac_iff_schematic.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (input) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputH) at ($(P.south east)!0.2!(P.north east)$); - \coordinate[] (outputL) at ($(P.south east)!0.8!(P.north east)$); - - \node[block, above=0.2 of P] (Klac) {$\bm{K}_\text{IFF}$}; - \node[addb, left=0.8 of input] (addF) {}; - - \node[block, left=0.8 of addF] (Khac) {$\bm{K}_\text{HAC}$}; - \node[block, left=0.8 of Khac] (inverseK) {$\bm{J}$}; - - \node[addb={+}{}{}{}{-}, left=0.8 of inverseK] (subL) {}; - - % Connections and labels - \draw[->] (outputL) -- ++(0.7, 0) coordinate(eastlac) |- (Klac.east); - \node[above right] at (outputL){$\bm{f}_n$}; - \draw[->] (Klac.west) -| (addF.north); - \draw[->] (addF.east) -- (input) node[above left]{$\bm{f}$}; - - \draw[->] (outputH) -- ++(1.7, 0) node[above left]{$\bm{\mathcal{X}}$}; - \draw[->] (Khac.east) node[above right]{$\bm{f}^{\prime}$} -- (addF.west); - - \draw[->] ($(outputH) + (1.2, 0)$)node[branch]{} |- ($(subL.south)+(0, -1.2)$) -- (subL.south); - \draw[->] (subL.east) -- (inverseK.west) node[above left]{$\bm{\epsilon}_\mathcal{X}$}; - \draw[->] (inverseK.east) -- (Khac.west) node[above left]{$\bm{\epsilon}_\mathcal{L}$}; - - \draw[<-] (subL.west) -- ++(-0.8, 0) node[above right]{$\bm{r}_\mathcal{X}$}; - - \begin{scope}[on background layer] - \node[fit={(Klac.north-|eastlac) (addF.west|-P.south)}, fill=black!20!white, draw, dashed, inner sep=8pt] (Pi) {}; - \node[anchor={north west}] at (Pi.north west){\footnotesize{Damped Plant}}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:nhexa_hac_iff_schematic #+caption: HAC-IFF control architecture with the High Authority Controller being implemented in the frame of the struts -#+RESULTS: [[file:figs/nhexa_hac_iff_schematic.png]] The effect of decentralized IFF on the plant dynamics can be observed by comparing two sets of transfer functions. @@ -7337,82 +5038,10 @@ Then, the Jacobian matrix $\bm{J}$ maps these errors to individual strut coordin For control purposes, force sensors mounted on each strut are used in a decentralized manner 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_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: Control architecture for the NASS. Physical systems are shown in blue, control kinematics elements in red, decentralized Integral Force Feedback controller in yellow, and centralized high authority controller in green. #+attr_latex: :options [h!tbp] #+attr_latex: :width \linewidth -#+RESULTS: [[file:figs/nass_control_architecture.png]] *** Decentralized Active Damping @@ -8221,152 +5850,6 @@ The unit vectors corresponding to the edges of the cube are described by equatio \hat{\bm{s}}_6 = \begin{bmatrix} \frac{-1}{\sqrt{6}} \\ \frac{ 1}{\sqrt{2}} \\ \frac{1}{\sqrt{3}} \end{bmatrix} \end{equation} -#+begin_src latex :file detail_kinematics_cubic_schematic_full.pdf :results file - \begin{tikzpicture} - \begin{scope}[rotate={45}, shift={(0, 0, -4)}] - % We first define the coordinate of the points of the Cube - \coordinate[] (bot) at (0,0,4); - \coordinate[] (top) at (4,4,0); - \coordinate[] (A1) at (0,0,0); - \coordinate[] (A2) at (4,0,4); - \coordinate[] (A3) at (0,4,4); - \coordinate[] (B1) at (4,0,0); - \coordinate[] (B2) at (4,4,4); - \coordinate[] (B3) at (0,4,0); - - % Center of the Cube - \coordinate[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$); - - % We draw parts of the cube that corresponds to the Stewart platform - \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); - - % ai and bi are computed - \def\lfrom{0.0} - \def\lto{1.0} - - \coordinate(a1) at ($(A1) - \lfrom*(A1) + \lfrom*(B1)$); - \coordinate(b1) at ($(A1) - \lto*(A1) + \lto*(B1)$); - \coordinate(a2) at ($(A2) - \lfrom*(A2) + \lfrom*(B1)$); - \coordinate(b2) at ($(A2) - \lto*(A2) + \lto*(B1)$); - \coordinate(a3) at ($(A2) - \lfrom*(A2) + \lfrom*(B2)$); - \coordinate(b3) at ($(A2) - \lto*(A2) + \lto*(B2)$); - \coordinate(a4) at ($(A3) - \lfrom*(A3) + \lfrom*(B2)$); - \coordinate(b4) at ($(A3) - \lto*(A3) + \lto*(B2)$); - \coordinate(a5) at ($(A3) - \lfrom*(A3) + \lfrom*(B3)$); - \coordinate(b5) at ($(A3) - \lto*(A3) + \lto*(B3)$); - \coordinate(a6) at ($(A1) - \lfrom*(A1) + \lfrom*(B3)$); - \coordinate(b6) at ($(A1) - \lto*(A1) + \lto*(B3)$); - - % We draw the fixed and mobiles platforms - \path[fill=colorblue, opacity=0.2] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \path[fill=colorblue, opacity=0.2] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - \draw[color=colorblue, dashed] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \draw[color=colorblue, dashed] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - - % The legs of the hexapod are drawn - \draw[color=colorblue] (a1)node{$\bullet$} -- (b1)node{$\bullet$}; - \draw[color=colorblue] (a2)node{$\bullet$} -- (b2)node{$\bullet$}; - \draw[color=colorblue] (a3)node{$\bullet$} -- (b3)node{$\bullet$}; - \draw[color=colorblue] (a4)node{$\bullet$} -- (b4)node{$\bullet$}; - \draw[color=colorblue] (a5)node{$\bullet$} -- (b5)node{$\bullet$}; - \draw[color=colorblue] (a6)node{$\bullet$} -- (b6)node{$\bullet$}; - - % Unit vector - \draw[color=colorred, ->] ($0.9*(a1)+0.1*(b1)$)node{$\bullet$} -- ($0.65*(a1)+0.35*(b1)$)node[right]{$\hat{\bm{s}}_3$}; - \draw[color=colorred, ->] ($0.9*(a2)+0.1*(b2)$)node{$\bullet$} -- ($0.65*(a2)+0.35*(b2)$)node[left]{$\hat{\bm{s}}_4$}; - \draw[color=colorred, ->] ($0.9*(a3)+0.1*(b3)$)node{$\bullet$} -- ($0.65*(a3)+0.35*(b3)$)node[below]{$\hat{\bm{s}}_5$}; - \draw[color=colorred, ->] ($0.9*(a4)+0.1*(b4)$)node{$\bullet$} -- ($0.65*(a4)+0.35*(b4)$)node[below]{$\hat{\bm{s}}_6$}; - \draw[color=colorred, ->] ($0.9*(a5)+0.1*(b5)$)node{$\bullet$} -- ($0.65*(a5)+0.35*(b5)$)node[left]{$\hat{\bm{s}}_1$}; - \draw[color=colorred, ->] ($0.9*(a6)+0.1*(b6)$)node{$\bullet$} -- ($0.65*(a6)+0.35*(b6)$)node[right]{$\hat{\bm{s}}_2$}; - - % Labels - \node[above=0.1 of B1] {$\tilde{\bm{b}}_3 = \tilde{\bm{b}}_4$}; - \node[above=0.1 of B2] {$\tilde{\bm{b}}_5 = \tilde{\bm{b}}_6$}; - \node[above=0.1 of B3] {$\tilde{\bm{b}}_1 = \tilde{\bm{b}}_2$}; - \end{scope} - - % Height of the Hexapod - \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); - \coordinate[] (origin) at (0,0,0); - - \draw[->, color=colorgreen] (cubecenter.center) node[above right]{$\{B\}$} -- ++(0,0,1); - \draw[->, color=colorgreen] (cubecenter.center) -- ++(1,0,0); - \draw[->, color=colorgreen] (cubecenter.center) -- ++(0,1,0); - - \node[] at (cubecenter.center){$\bullet$}; - \node[above left] at (cubecenter.center){$\{C\}$}; - - % Useful part of the cube - \draw[<->, dashed] ($(A2)+(0.5,0)$) -- node[midway, right]{$H_{C}$} ($(B1)+(0.5,0)$); - \end{tikzpicture} -#+end_src - -#+begin_src latex :file detail_kinematics_cubic_schematic.pdf :results file - \begin{tikzpicture} - \begin{scope}[rotate={45}, shift={(0, 0, -4)}] - % We first define the coordinate of the points of the Cube - \coordinate[] (bot) at (0,0,4); - \coordinate[] (top) at (4,4,0); - \coordinate[] (A1) at (0,0,0); - \coordinate[] (A2) at (4,0,4); - \coordinate[] (A3) at (0,4,4); - \coordinate[] (B1) at (4,0,0); - \coordinate[] (B2) at (4,4,4); - \coordinate[] (B3) at (0,4,0); - - % Center of the Cube - \coordinate[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$); - - % We draw parts of the cube that corresponds to the Stewart platform - \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); - - % ai and bi are computed - \def\lfrom{0.2} - \def\lto{0.8} - - \coordinate(a1) at ($(A1) - \lfrom*(A1) + \lfrom*(B1)$); - \coordinate(b1) at ($(A1) - \lto*(A1) + \lto*(B1)$); - \coordinate(a2) at ($(A2) - \lfrom*(A2) + \lfrom*(B1)$); - \coordinate(b2) at ($(A2) - \lto*(A2) + \lto*(B1)$); - \coordinate(a3) at ($(A2) - \lfrom*(A2) + \lfrom*(B2)$); - \coordinate(b3) at ($(A2) - \lto*(A2) + \lto*(B2)$); - \coordinate(a4) at ($(A3) - \lfrom*(A3) + \lfrom*(B2)$); - \coordinate(b4) at ($(A3) - \lto*(A3) + \lto*(B2)$); - \coordinate(a5) at ($(A3) - \lfrom*(A3) + \lfrom*(B3)$); - \coordinate(b5) at ($(A3) - \lto*(A3) + \lto*(B3)$); - \coordinate(a6) at ($(A1) - \lfrom*(A1) + \lfrom*(B3)$); - \coordinate(b6) at ($(A1) - \lto*(A1) + \lto*(B3)$); - - % We draw the fixed and mobiles platforms - \path[fill=colorblue, opacity=0.2] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \path[fill=colorblue, opacity=0.2] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - \draw[color=colorblue, dashed] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \draw[color=colorblue, dashed] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - - % The legs of the hexapod are drawn - \draw[color=colorblue] (a1)node{$\bullet$} -- (b1)node{$\bullet$}node[below right]{$\bm{b}_3$}; - \draw[color=colorblue] (a2)node{$\bullet$} -- (b2)node{$\bullet$}node[right]{$\bm{b}_4$}; - \draw[color=colorblue] (a3)node{$\bullet$} -- (b3)node{$\bullet$}node[above right]{$\bm{b}_5$}; - \draw[color=colorblue] (a4)node{$\bullet$} -- (b4)node{$\bullet$}node[above left]{$\bm{b}_6$}; - \draw[color=colorblue] (a5)node{$\bullet$} -- (b5)node{$\bullet$}node[left]{$\bm{b}_1$}; - \draw[color=colorblue] (a6)node{$\bullet$} -- (b6)node{$\bullet$}node[below left]{$\bm{b}_2$}; - \end{scope} - - % Height of the Hexapod - \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); - \coordinate[] (origin) at (0,0,0); - - \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) node[above right]{$\{B\}$} -- ++(0,0,1); - \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) -- ++(1,0,0); - \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) -- ++(0,1,0); - - \node[] at (cubecenter.center){$\bullet$}; - \node[right] at (cubecenter.center){$\{C\}$}; - - \draw[<->, dashed] (cubecenter.center) -- node[midway, right]{$H$} ($(cubecenter.center)+(0,2.0,0)$); - \end{tikzpicture} -#+end_src - #+name: fig:detail_kinematics_cubic_schematic_cases #+caption: Cubic architecture. Struts are represented in blue. The cube's center by a black dot. The Struts can match the cube's edges (\subref{fig:detail_kinematics_cubic_schematic_full}) or just take a portion of the edge (\subref{fig:detail_kinematics_cubic_schematic}) #+attr_latex: :options [htbp] @@ -8481,29 +5964,8 @@ Furthermore, an inverse relationship exists between the cube's dimension and rot This section examines the dynamics of the cubic architecture in the Cartesian frame which corresponds to the transfer function from forces and torques $\bm{\mathcal{F}}$ to translations and rotations $\bm{\mathcal{X}}$ of the top platform. When relative motion sensors are integrated in each strut (measuring $\bm{\mathcal{L}}$), the pose $\bm{\mathcal{X}}$ is computed using the Jacobian matrix as shown in Figure ref:fig:detail_kinematics_centralized_control. -#+begin_src latex :file detail_kinematics_centralized_control.pdf -\begin{tikzpicture} - \node[block] (Jt) at (0, 0) {$\bm{J}^{-T}$}; - \node[block, right= of Jt] (G) {$\bm{G}$}; - \node[block, right= of G] (J) {$\bm{J}^{-1}$}; - \node[block, left= of Jt] (Kx) {$\bm{K}_{\mathcal{X}}$}; - - \draw[->] (Kx.east) -- node[midway, above]{$\bm{\mathcal{F}}$} (Jt.west); - \draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$}; - \draw[->] (G.east) -- (J.west) node[above left]{$\bm{\mathcal{L}}$}; - \draw[->] (J.east) -- ++(1.0, 0); - \draw[->] ($(J.east) + (0.5, 0)$)node[]{$\bullet$} node[above]{$\bm{\mathcal{X}}$} -- ++(0, -1) -| ($(Kx.west) + (-0.5, 0)$) -- (Kx.west); - - \begin{scope}[on background layer] - \node[fit={(Jt.south west) (J.north east)}, fill=black!20!white, draw, dashed, inner sep=4pt] (Px) {}; - \node[anchor={south}] at (Px.north){\small{Cartesian Plant}}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:detail_kinematics_centralized_control #+caption: Typical control architecture in the cartesian frame -#+RESULTS: [[file:figs/detail_kinematics_centralized_control.png]] ****** Low frequency and High frequency coupling @@ -8596,26 +6058,8 @@ The orthogonal arrangement of struts in the cubic architecture suggests a potent Two sensor types integrated in the struts are considered: displacement sensors and force sensors. The control architecture is illustrated in Figure ref:fig:detail_kinematics_decentralized_control, where $\bm{K}_{\mathcal{L}}$ represents a diagonal transfer function matrix. -#+begin_src latex :file detail_kinematics_decentralized_control.pdf -\begin{tikzpicture} - \node[block] (G) at (0,0) {$\bm{G}$}; - - \node[block, left= of G] (Kl) {$\bm{K}_{\mathcal{L}}$}; - - \draw[->] (Kl.east) -- node[midway, above]{$\bm{\tau}$} (G.west); - \draw[->] (G.east) -- ++(1.0, 0); - \draw[->] ($(G.east) + (0.5, 0)$)node[]{$\bullet$} node[above]{$\bm{\mathcal{L}}$} -- ++(0, -1) -| ($(Kl.west) + (-0.5, 0)$) -- (Kl.west); - - \begin{scope}[on background layer] - \node[fit={(G.south west) (G.north east)}, fill=black!20!white, draw, dashed, inner sep=4pt] (Pl) {}; - \node[anchor={south}] at (Pl.north){\small{Strut Plant}}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:detail_kinematics_decentralized_control #+caption: Decentralized control in the frame of the struts. -#+RESULTS: [[file:figs/detail_kinematics_decentralized_control.png]] The obtained plant dynamics in the frame of the struts are compared for two Stewart platforms. @@ -9746,70 +7190,8 @@ Finally, Section ref:sec:detail_instrumentation_characterization validates the s Each instrument is characterized individually, measuring actual noise levels and performance characteristics. The measured noise characteristics are then incorporated into the multi-body model to confirm that the combined effect of all instrumentation noise sources remains within acceptable limits. -#+begin_src latex :file detail_instrumentation_plant.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}, align=center] (plant) {NASS}; - - \coordinate[] (inputVa) at ($(plant.south west)!0.5!(plant.north west)$); - \coordinate[] (outputVs) at ($(plant.south east)!0.7!(plant.north east)$); - \coordinate[] (outputde) at ($(plant.south east)!0.3!(plant.north east)$); - - \node[addb={+}{}{}{}{}, left=0.8 of inputVa] (ampl_noise) {}; - \node[block={1.0cm}{1.0cm}, left=0.4 of ampl_noise] (ampl_tf) {$G_{\text{ampl}}$}; - - \node[addb={+}{}{}{}{}, left=0.8 of ampl_tf] (dac_noise) {}; - \node[DAC, left=0.4 of dac_noise] (dac_tf) {}; - - \node[addb={+}{}{}{}{}, left=1.0 of dac_tf] (iff_sum) {}; - - \node[block={1.0cm}{1.0cm}, above=0.4 of iff_sum] (Kiff) {$\bm{K}_{\text{IFF}}$}; - \node[block={1.0cm}{1.0cm}, left=0.4 of iff_sum] (Khac) {$\bm{K}_{\text{HAC}}$}; - - \node[addb={+}{}{}{}{}, right=0.8 of outputVs] (adc_noise) {}; - \node[ADC, right=0.4 of adc_noise] (adc_tf) {}; - - \draw[->] (iff_sum.east) --node[midway, above]{$\bm{u}$} node[near start, sloped]{$/$} (dac_tf.west); - \draw[->] (dac_tf.east) -- (dac_noise.west); - \draw[->] (dac_noise.east) -- (ampl_tf.west); - \draw[->] (ampl_tf.east) -- (ampl_noise.west); - \draw[->] (ampl_noise.east) -- (inputVa)node[above left]{$\bm{V}_a$}; - \draw[->] (outputVs)node[above right]{$\bm{V}_s$} -- (adc_noise.west); - \draw[->] (adc_noise.east) -- (adc_tf.west); - \draw[->] (adc_tf.east) -| ++(0.4, 1.8) -| node[near start, sloped]{$/$} (Kiff.north); - \draw[->] (Kiff.south) -- node[sloped]{$/$} (iff_sum.north); - \draw[->] (outputde)node[above right]{$\bm{\epsilon}_{\mathcal{L}}$} -| ++(0.6, -1.0) -| node[near start, sloped]{$/$} ($(Khac.west)+(-0.6, 0)$) -- (Khac.west); - \draw[->] (Khac.east) -- node[sloped]{$/$} (iff_sum.west); - - \draw[<-] (dac_noise.north) -- ++(0, 0.8)coordinate(dac_noise_input) node[below left]{$n_{\text{da}}$}; - \draw[<-] (ampl_noise.north) -- ++(0, 0.8)coordinate(ampl_noise_input) node[below left]{$n_{\text{amp}}$}; - \draw[<-] (adc_noise.north) -- ++(0, 0.8)coordinate(adc_noise_input) node[below right]{$n_{\text{ad}}$}; - - \begin{scope}[on background layer] - \node[fit={(dac_tf.south west) (dac_noise.east|-dac_noise_input)}, fill=colorblue!20!white, draw, dashed, inner sep=4pt] (dac_system) {}; - \node[anchor={north}] at (dac_system.south){$\text{DAC}$}; - \end{scope} - - \begin{scope}[on background layer] - \node[fit={(ampl_tf.south west) (ampl_noise.east|-ampl_noise_input)}, fill=colorred!20!white, draw, dashed, inner sep=4pt] (ampl_system) {}; - \node[anchor={north}] at (ampl_system.south){$\text{Amplifier}$}; - \end{scope} - - \begin{scope}[on background layer] - \node[fit={(adc_noise.south -| adc_noise.west) (adc_tf.east|-adc_noise_input)}, fill=coloryellow!20!white, draw, dashed, inner sep=4pt] (adc_system) {}; - \node[anchor={north}] at (adc_system.south){$\text{ADC}$}; - \end{scope} - - \begin{scope}[on background layer] - \node[fit={(Khac.south west) (Kiff.north east)}, fill=black!20!white, draw, dashed, inner sep=4pt] (control_system) {}; - \node[anchor={north}] at (control_system.south){$\text{RT Controller}$}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:detail_instrumentation_plant #+caption: Block diagram of the NASS with considered instrumentation. The RT controller is a Speedgoat machine. -#+RESULTS: [[file:figs/detail_instrumentation_plant.png]] *** Dynamic Error Budgeting @@ -9988,23 +7370,8 @@ The quantization step size, denoted as $q = \Delta V/2^n$, represents the voltag The quantization noise ranges between $\pm q/2$, and its probability density function is constant across this range (uniform distribution). Since the integral of this probability density function $p(e)$ equals one, its value is $1/q$ for $-q/2 < e < q/2$, as illustrated in Figure ref:fig:detail_instrumentation_adc_quantization. -#+begin_src latex :file detail_instrumentation_adc_quantization.pdf -\begin{tikzpicture} - \path[fill=black!20!white] (-1, 0) |- (1, 1) |- (-1, 0); - - \draw[->] (-2, 0) -- (2, 0) node[above left]{$e$}; - \draw[->] (0, -0.5) -- (0, 2) node[below right]{$p(e)$}; - \draw[dashed] (-2, 0) -- (-1, 0) |- (1, 1) |- (2, 0); - - \node[below] at (1, 0){$\frac{q}{2}$}; - \node[below] at (-1, 0){$-\frac{q}{2}$}; - \node[right] at (1, 1){$\frac{1}{q}$}; -\end{tikzpicture} -#+end_src - #+name: fig:detail_instrumentation_adc_quantization #+caption: Probability density function $p(e)$ of the ADC quantization error $e$ -#+RESULTS: [[file:figs/detail_instrumentation_adc_quantization.png]] The variance (or time-average power) of the quantization noise is expressed by eqref:eq:detail_instrumentation_quant_power. @@ -10223,43 +7590,6 @@ The measured voltage $n$ was then divided by 10000 to determine the equivalent n In this configuration, the noise contribution from the ADC $q_{ad}$ is rendered negligible due to the high gain employed. The resulting amplifier noise amplitude spectral density $\Gamma_{n_a}$ and the (negligible) contribution of the ADC noise are presented in Figure ref:fig:detail_instrumentation_femto_input_noise. -#+begin_src latex :file detail_instrumentation_femto_meas_setup.pdf -\begin{tikzpicture} - \node[block={0.6cm}{0.6cm}] (const) {$0$}; - % Pre Amp - \node[addb, right=0.4 of const] (addna) {}; - \node[block, right=0.3 of addna] (Ga) {$G_a(s)$}; - - % ADC - \node[addb, right=0.8 of Ga] (addqad){}; - \node[ADC, right=0.3 of addqad] (ADC) {ADC}; - - \draw[->] (const.east) -- (addna.west); - \draw[->] (addna.east) -- (Ga.west); - \draw[->] (Ga.east) -- (addqad.west); - \draw[->] (addqad.east) -- (ADC.west); - \draw[->] (ADC.east) -- node[sloped]{$/$} ++(0.8, 0) node[above left]{$n$}; - - \draw[<-] (addna.north) -- ++(0, 0.6) node[below right](na){$n_{a}$}; - \draw[<-] (addqad.north) -- ++(0, 0.6) node[below right](qad){$q_{ad}$}; - - \coordinate[] (top) at (na.north); - \coordinate[] (bot) at (Ga.south); - - % 5113 - \begin{scope}[on background layer] - \node[fit={(addna.west|-bot) (Ga.east|-top)}, inner sep=4pt, draw, dashed, fill=colorgreen!20!white] (P) {}; - \node[above] at (P.north) {Pre Amp}; - \end{scope} - - % ADC - \begin{scope}[on background layer] - \node[fit={(addqad.west|-bot) (ADC.east|-top)}, inner sep=4pt, draw, dashed, fill=coloryellow!20!white] (P) {}; - \node[above] at (P.north) {ADC}; - \end{scope} -\end{tikzpicture} -#+end_src - #+attr_latex: :options [b]{0.48\linewidth} #+begin_minipage #+name: fig:detail_instrumentation_femto_meas_setup @@ -10288,60 +7618,8 @@ The noise profile is predominantly white with an ASD of $0.6\,\mu V/\sqrt{\text{ Minor $50\,\text{Hz}$ noise is present, along with some low frequency $1/f$ noise, but these are not expected to pose issues as they are well within specifications. It should be noted that all DAC channels demonstrated similar performance, so only one channel measurement is presented. -#+begin_src latex :file detail_instrumentation_dac_setup.pdf -\begin{tikzpicture} - \node[block={0.6cm}{0.6cm}] (const) {$0$}; - - % DAC - \node[DAC, right=0.4 of const] (DAC) {DAC}; - \node[addb, right=0.3 of DAC] (addnda){}; - - % Pre Amp - \node[addb, right=0.8 of addnda] (addna) {}; - \node[block, right=0.3 of addna] (Ga) {$G_a(s)$}; - - % ADC - \node[addb, right=0.8 of Ga] (addqad){}; - \node[ADC, right=0.3 of addqad] (ADC) {ADC}; - - \draw[->] (const.east) -- node[sloped]{$/$} (DAC.west); - \draw[->] (DAC.east) -- (addnda.west); - \draw[->] (addnda.east) -- (addna.west); - \draw[->] (addna.east) -- (Ga.west); - \draw[->] (Ga.east) -- (addqad.west); - \draw[->] (addqad.east) -- (ADC.west); - \draw[->] (ADC.east) -- node[sloped]{$/$} ++(0.8, 0); - - \draw[<-] (addnda.north) -- ++(0, 0.6) node[below left](nda){$n_{da}$}; - \draw[<-] (addna.north) -- ++(0, 0.6) node[below right](na){$n_{a}$}; - \draw[<-] (addqad.north) -- ++(0, 0.6) node[below right](qad){$q_{ad}$}; - - \coordinate[] (top) at (na.north); - \coordinate[] (bot) at (Ga.south); - - % DAC - \begin{scope}[on background layer] - \node[fit={(DAC.west|-bot) (addnda.east|-top)}, inner sep=4pt, draw, dashed, fill=colorblue!20!white] (P) {}; - \node[above] at (P.north) {DAC}; - \end{scope} - - % 5113 - \begin{scope}[on background layer] - \node[fit={(addna.west|-bot) (Ga.east|-top)}, inner sep=4pt, draw, dashed, fill=colorgreen!20!white] (P) {}; - \node[above] at (P.north) {Pre Amp}; - \end{scope} - - % ADC - \begin{scope}[on background layer] - \node[fit={(addqad.west|-bot) (ADC.east|-top)}, inner sep=4pt, draw, dashed, fill=coloryellow!20!white] (P) {}; - \node[above] at (P.north) {ADC}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:detail_instrumentation_dac_setup #+caption: Measurement of the DAC output voltage noise. A pre-amplifier with a gain of 1000 is used before measuring the signal with the ADC. -#+RESULTS: [[file:figs/detail_instrumentation_dac_setup.png]] ***** Delay from ADC to DAC @@ -10376,60 +7654,8 @@ The input of the PD200 amplifier was shunted with a $50\,\Ohm$ resistor to ensur The pre-amplifier gain was increased to produce a signal substantially larger than the noise floor of the ADC. Two piezoelectric stacks from the APA95ML were connected to the PD200 output to provide an appropriate load for the amplifier. -#+begin_src latex :file detail_instrumentation_pd200_setup.pdf -\begin{tikzpicture} - \node[block={0.6cm}{0.6cm}] (const) {$0$}; - - % PD200 - \node[block, right=0.4 of const] (Gp){$G_p(s)$}; - \node[addb, right=0.3 of Gp] (addnp){}; - - % Pre Amp - \node[addb, right=0.8 of addnp] (addna) {}; - \node[block, right=0.3 of addna] (Ga) {$G_a(s)$}; - - % ADC - \node[addb, right=0.8 of Ga] (addqad){}; - \node[ADC, right=0.3 of addqad] (ADC) {ADC}; - - \draw[->] (const.east) -- (Gp.west); - \draw[->] (Gp.east) -- (addnp.west); - \draw[->] (addnp.east) -- (addna.west); - \draw[->] (addna.east) -- (Ga.west); - \draw[->] (Ga.east) -- (addqad.west); - \draw[->] (addqad.east) -- (ADC.west); - \draw[->] (ADC.east) -- node[sloped]{$/$} ++(0.8, 0) node[above left]{$n$}; - - \draw[<-] (addnp.north) -- ++(0, 0.6) node[below left](np){$n_{p}$}; - \draw[<-] (addna.north) -- ++(0, 0.6) node[below right](na){$n_{a}$}; - \draw[<-] (addqad.north) -- ++(0, 0.6) node[below right](qad){$q_{ad}$}; - - \coordinate[] (top) at (na.north); - \coordinate[] (bot) at (Ga.south); - - % PD200 - \begin{scope}[on background layer] - \node[fit={(addnp.east|-bot) (Gp.west|-top)}, inner sep=4pt, draw, dashed, fill=colorred!20!white] (P) {}; - \node[above] at (P.north) {PD200}; - \end{scope} - - % 5113 - \begin{scope}[on background layer] - \node[fit={(addna.west|-bot) (Ga.east|-top)}, inner sep=4pt, draw, dashed, fill=colorgreen!20!white] (P) {}; - \node[above] at (P.north) {Pre Amp}; - \end{scope} - - % ADC - \begin{scope}[on background layer] - \node[fit={(addqad.west|-bot) (ADC.east|-top)}, inner sep=4pt, draw, dashed, fill=coloryellow!20!white] (P) {}; - \node[above] at (P.north) {ADC}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:detail_instrumentation_pd200_setup #+caption: Setup used to measured the output voltage noise of the PD200 voltage amplifier. A gain $G_a = 1000$ was used for the instrumentation amplifier. -#+RESULTS: [[file:figs/detail_instrumentation_pd200_setup.png]] The Amplitude Spectral Density $\Gamma_{n}(\omega)$ of the signal measured by the ADC was computed. @@ -13135,67 +10361,8 @@ Finally, the Jacobian matrix $\bm{J}$ of the nano-hexapod is used to map $\bm{\e Voltages generated by the force sensor piezoelectric stacks $\bm{V}_s = [V_{s1},\ V_{s2},\ V_{s3},\ V_{s4},\ V_{s5},\ V_{s6}]$ will be used for active damping. -#+begin_src latex :file test_id31_block_schematic_plant.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{1.0cm}] (metrology) {Metrology}; - \node[block={2.0cm}{2.0cm}, below=0.1 of metrology, align=center] (nhexa) {Nano\\Hexapod}; - \node[block={4.0cm}{1.5cm}, below=0.1 of nhexa, align=center] (ustation) {Micro\\Station}; - - \coordinate[] (inputVa) at ($(nhexa.south west)!0.5!(nhexa.north west)$); - \coordinate[] (outputVs) 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}, left=0.8 of inputVa] (pd200) {PD200}; - \node[block={1.0cm}{1.0cm}, right=0.8 of outputde] (Rz_kinematics) {$\bm{J}_{R_z}^{-1}$}; - \node[block={2.0cm}{2.0cm}, right=2.2 of ustation, align=center] (ustation_kinematics) {Compute\\Reference\\Position}; - \node[block={2.0cm}{2.0cm}, right=0.8 of ustation_kinematics, align=center] (compute_error) {Compute\\Error\\Position}; - \node[block={2.0cm}{2.0cm}, above=0.8 of compute_error, align=center] (compute_pos) {Compute\\Sample\\Position}; - \node[block={1.0cm}{1.0cm}, right=0.8 of compute_error] (hexa_jacobian) {$\bm{J}$}; - \node[block={1.0cm}{1.0cm}, right=0.8 of metrology] (metrology_kinematics) {$\bm{J}_d^{-1}$}; - - \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] (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[->] (outputVs) -- ++(0.8, 0) node[above left]{$\bm{V}_s$}; - - \draw[->] (metrology.east) -- (metrology_kinematics.west) node[above left]{$\bm{d}$}; - - \draw[->] (metrology_kinematics.east)node[above right]{$[D_x,\,D_y,\,D_z,\,R_x,\,R_y]$} -- (compute_pos.west|-metrology_kinematics); - \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{d}_{e}$}; - \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) -- ++(0.8, 0)coordinate(eL) node[above left]{$\bm{\epsilon\mathcal{L}}$}; - \draw[->] (pd200.east) -- (inputVa) node[above left]{$\bm{V}_a$}; - \draw[<-] (pd200.west) -- ++(-0.8, 0) node[above right]{$\bm{u}$}; - - \draw[->] (outputVs) -- (outputVs-|eL) node[above left]{$\bm{V}_s$}; - - \begin{scope}[on background layer] - \node[fit={(metrology.north-|pd200.west) (hexa_jacobian.east|-compute_error.south)}, fill=black!20!white, draw, dashed, inner sep=4pt] (plant) {}; - \node[anchor={north west}] at (plant.north west){$\text{Plant}$}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:test_id31_block_schematic_plant #+caption: Schematic of the NASS plant -#+RESULTS: [[file:figs/test_id31_block_schematic_plant.png]] **** Open-Loop Plant Identification @@ -13384,36 +10551,8 @@ K_{\text{IFF}} & & 0 \\ The decentralized Integral Force Feedback is implemented as shown in the block diagram of Figure ref:fig:test_id31_iff_block_diagram. -#+begin_src latex :file test_id31_iff_schematic.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (input) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputH) at ($(P.south east)!0.2!(P.north east)$); - \coordinate[] (outputL) at ($(P.south east)!0.8!(P.north east)$); - - \node[block, above=0.6 of P] (Klac) {$\bm{K}_\text{IFF}$}; - \node[addb, left= of input] (addF) {}; - - % Connections and labels - \draw[->] (outputL) -- ++(0.6, 0) coordinate(eastlac) |- (Klac.east); - \node[above right] at (outputL){$\bm{V}_s$}; - \draw[->] (Klac.west) -| (addF.north); - \draw[->] (addF.east) -- (input) node[above left]{$\bm{u}$}; - - \draw[->] (outputH) -- ++(1.6, 0) node[above left]{$\bm{\epsilon\mathcal{L}}$}; - \draw[<-] (addF.west) -- ++(-1.0, 0) node[above right]{$\bm{u^{\prime}}$}; - - \begin{scope}[on background layer] - \node[fit={(Klac.north-|eastlac) (addF.west|-P.south)}, fill=black!20!white, draw, dashed, inner sep=10pt] (Pi) {}; - \node[anchor={north west}] at (Pi.north west){$\text{Damped Plant}$}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:test_id31_iff_block_diagram #+caption: Block diagram of the implemented decentralized IFF controller. The controller $\bm{K}_{\text{IFF}}$ is a diagonal controller with the same elements for every diagonal term $K_{\text{IFF}}$. -#+RESULTS: [[file:figs/test_id31_iff_schematic.png]] **** IFF Plant @@ -13557,40 +10696,8 @@ K_{\text{HAC}} & & 0 \\ \end{bmatrix} \end{equation} -#+begin_src latex :file test_id31_iff_hac_schematic.pdf -\begin{tikzpicture} - % Blocs - \node[block={2.0cm}{2.0cm}] (P) {Plant}; - \coordinate[] (input) at ($(P.south west)!0.5!(P.north west)$); - \coordinate[] (outputH) at ($(P.south east)!0.2!(P.north east)$); - \coordinate[] (outputL) at ($(P.south east)!0.8!(P.north east)$); - - \node[block, above=0.6 of P] (Klac) {$\bm{K}_\text{IFF}$}; - \node[addb, left= of input] (addF) {}; - - \node[block, left= of addF] (Khac) {$\bm{K}_\text{HAC}$}; - - % Connections and labels - \draw[->] (outputL) -- ++(0.6, 0) coordinate(eastlac) |- (Klac.east); - \node[above right] at (outputL){$\bm{V}_s$}; - \draw[->] (Klac.west) -| (addF.north); - \draw[->] (addF.east) -- (input) node[above left]{$\bm{u}$}; - - \draw[->] (outputH) -- ++(1.6, 0) node[above left]{$\bm{\epsilon\mathcal{L}}$}; - \draw[->] (Khac.east) node[above right]{$\bm{u}^{\prime}$} -- (addF.west); - - \draw[->] ($(outputH) + (1.2, 0)$)node[branch]{} |- ($(Khac.west)+(-0.6, -1.6)$) |- (Khac.west); - - \begin{scope}[on background layer] - \node[fit={(Klac.north-|eastlac) (addF.west|-P.south)}, fill=black!20!white, draw, dashed, inner sep=10pt] (Pi) {}; - \node[anchor={north west}] at (Pi.north west){$\text{Damped Plant}$}; - \end{scope} -\end{tikzpicture} -#+end_src - #+name: fig:test_id31_iff_hac_schematic #+caption: Block diagram of the implemented HAC-IFF controllers. The controller $\bm{K}_{\text{HAC}}$ is a diagonal controller with the same elements on every diagonal term $K_{\text{HAC}}$. -#+RESULTS: [[file:figs/test_id31_iff_hac_schematic.png]] **** Damped Plant