diff --git a/paper/dehaeze21_mechatronics_approach_nass.org b/paper/dehaeze21_mechatronics_approach_nass.org index 2365442..651714e 100644 --- a/paper/dehaeze21_mechatronics_approach_nass.org +++ b/paper/dehaeze21_mechatronics_approach_nass.org @@ -1,10 +1,14 @@ #+TITLE: MECHATRONICS APPROACH FOR THE DEVELOPMENT OF A NANO-ACTIVE-STABILIZATION-SYSTEM :DRAWER: #+LATEX_CLASS: jacow -#+LaTeX_CLASS_OPTIONS: [a4paper, keeplastbox, biblatex] +#+LATEX_CLASS_OPTIONS: [a4paper, keeplastbox, biblatex] #+OPTIONS: toc:nil #+STARTUP: overview +#+BIND: org-latex-default-packages-alist nil +#+BIND: org-latex-packages-alist nil +#+BIND: org-latex-with-hyperref nil + #+DATE: {{{time(%Y-%m-%d)}}} #+AUTHOR: T. Dehaeze\textsuperscript{1,}\thanks{thomas.dehaeze@esrf.fr}, J. Bonnefoy, ESRF, Grenoble, France #+AUTHOR: @@latex:\\@@ @@ -12,12 +16,13 @@ #+AUTHOR: @@latex:\\@@ #+AUTHOR: \textsuperscript{1}also at Precision Mechatronics Laboratory, University of Liege, Belgium -#+LaTeX_HEADER: \usepackage{pdfpages,multirow,ragged2e} -#+LaTeX_HEADER: \usepackage{graphicx,tabularx,booktabs} -#+LaTeX_HEADER: \usepackage{blindtext} -#+LaTeX_HEADER: \usepackage[USenglish]{babel} -#+LaTeX_HEADER: \addbibresource{ref.bib} -#+LaTeX_HEADER: \setcounter{footnote}{1} +#+LATEX_HEADER: \usepackage{pdfpages,multirow,ragged2e} +#+LATEX_HEADER: \usepackage{graphicx,tabularx,booktabs} +#+LATEX_HEADER: \usepackage{blindtext} +#+LATEX_HEADER: \usepackage[USenglish]{babel} +#+LATEX_HEADER: \setcounter{footnote}{1} +#+LATEX_HEADER_EXTRA: \usepackage[colorlinks=true, allcolors=blue]{hyperref} +#+LATEX_HEADER_EXTRA: \addbibresource{ref.bib} :END: * BUILD :noexport: @@ -32,9 +37,6 @@ ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) ) -(setq org-latex-packages-alist nil) -(setq org-latex-default-packages-alist nil) -(setq org-latex-with-hyperref nil) #+END_SRC * ABSTRACT :ignore: @@ -52,7 +54,40 @@ Further tests should be done in order to confirm that the performances of the sy The presented development approach is foreseen to be applied more frequently to future mechatronic system design at the ESRF. #+END_abstract +* INTRODUCTION + +See cite:dehaeze18_sampl_stabil_for_tomog_exper. + +* MECHATRONIC APPROACH + +#+name: fig:nass_concept_schematic +#+attr_latex: :scale 1 +#+caption: Nano Active Stabilization System - Schematic representation. 1) micro-station, 2) nano-hexapod, 3) sample, 4) metrology system +[[file:figs/nass_concept_schematic.pdf]] + + + +#+name: fig:nass_mechatronics_approach +#+attr_latex: :float multicolumn :width \linewidth +#+caption: Overview of the mechatronic approach +[[file:figs/nass_mechatronics_approach.pdf]] + +* NANO-HEXAPOD DESIGN + +#+name: fig:nano_hexapod_elements +#+attr_latex: :float multicolumn :width \linewidth +#+caption: CAD view of the nano-hexapod with key elements +[[file:figs/nano_hexapod_elements.pdf]] + +* TEST-BENCHES + +#+name: fig:nass_hac_lac_schematic +#+attr_latex: :float multicolumn :width \linewidth +#+caption: HAC-LAC Strategy - Block Diagram +[[file:figs/nass_hac_lac_schematic.pdf]] + * CONCLUSION + * ACKNOWLEDGMENTS This research was made possible by a grant from the FRIA. We thank the following people for their support, without whose help this work would never have been possible: V. Honkimaki, L. Ducotte and M. Lessourd and the whole team of the Precision Mechatronic Laboratory. diff --git a/paper/dehaeze21_mechatronics_approach_nass.pdf b/paper/dehaeze21_mechatronics_approach_nass.pdf index a72fd42..3bfc3bd 100644 Binary files a/paper/dehaeze21_mechatronics_approach_nass.pdf and b/paper/dehaeze21_mechatronics_approach_nass.pdf differ diff --git a/paper/dehaeze21_mechatronics_approach_nass.tex b/paper/dehaeze21_mechatronics_approach_nass.tex index 6d3e667..a8948eb 100644 --- a/paper/dehaeze21_mechatronics_approach_nass.tex +++ b/paper/dehaeze21_mechatronics_approach_nass.tex @@ -1,4 +1,4 @@ -% Created 2021-06-28 lun. 11:31 +% Created 2021-07-12 lun. 14:47 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, keeplastbox, biblatex]{jacow} @@ -6,10 +6,11 @@ \usepackage{graphicx,tabularx,booktabs} \usepackage{blindtext} \usepackage[USenglish, english]{babel} -\addbibresource{ref.bib} \setcounter{footnote}{1} +\usepackage[colorlinks=true, allcolors=blue]{hyperref} +\addbibresource{ref.bib} \author{T. Dehaeze\textsuperscript{1,}\thanks{thomas.dehaeze@esrf.fr}, J. Bonnefoy, ESRF, Grenoble, France \\ C. Collette\textsuperscript{1}, Université Libre de Bruxelles, BEAMS department, Brussels, Belgium \\ \textsuperscript{1}also at Precision Mechatronics Laboratory, University of Liege, Belgium} -\date{2021-06-28} +\date{2021-07-12} \title{MECHATRONICS APPROACH FOR THE DEVELOPMENT OF A NANO-ACTIVE-STABILIZATION-SYSTEM} \begin{document} @@ -29,12 +30,53 @@ Further tests should be done in order to confirm that the performances of the sy The presented development approach is foreseen to be applied more frequently to future mechatronic system design at the ESRF. \end{abstract} +\section{INTRODUCTION} +\label{sec:org308d5f7} + +See \cite{dehaeze18_sampl_stabil_for_tomog_exper}. + +\section{MECHATRONIC APPROACH} +\label{sec:org8ceb80a} + +\begin{figure}[htbp] +\centering +\includegraphics[scale=1,scale=1]{figs/nass_concept_schematic.pdf} +\caption{\label{fig:nass_concept_schematic}Nano Active Stabilization System - Schematic representation. 1) micro-station, 2) nano-hexapod, 3) sample, 4) metrology system} +\end{figure} + + + +\begin{figure*} +\centering +\includegraphics[scale=1,width=\linewidth]{figs/nass_mechatronics_approach.pdf} +\caption{\label{fig:nass_mechatronics_approach}Overview of the mechatronic approach} +\end{figure*} + +\section{NANO-HEXAPOD DESIGN} +\label{sec:org41b979c} + +\begin{figure*} +\centering +\includegraphics[scale=1,width=\linewidth]{figs/nano_hexapod_elements.pdf} +\caption{\label{fig:nano_hexapod_elements}CAD view of the nano-hexapod with key elements} +\end{figure*} + +\section{TEST-BENCHES} +\label{sec:orgd4b8fb2} + +\begin{figure*} +\centering +\includegraphics[scale=1,width=\linewidth]{figs/nass_hac_lac_schematic.pdf} +\caption{\label{fig:nass_hac_lac_schematic}HAC-LAC Strategy - Block Diagram} +\end{figure*} + \section{CONCLUSION} -\label{sec:orgd68d15d} +\label{sec:org45fae73} + \section{ACKNOWLEDGMENTS} -\label{sec:orgf6f432d} +\label{sec:org36b4615} This research was made possible by a grant from the FRIA. -We thank the following people for their support, without whose help this work would never have been possible: V. Honkimaki, A. Jublan, L. Ducotte, C. Carole, M. Brendike and M. Lessourd and the whole team of the Precision Mechatronic Laboratory. +We thank the following people for their support, without whose help this work would never have been possible: V. Honkimaki, L. Ducotte and M. Lessourd and the whole team of the Precision Mechatronic Laboratory. \printbibliography \end{document} diff --git a/paper/figs/nano_hexapod_elements.pdf b/paper/figs/nano_hexapod_elements.pdf new file mode 100644 index 0000000..f22bced Binary files /dev/null and b/paper/figs/nano_hexapod_elements.pdf differ diff --git a/paper/figs/nano_hexapod_elements.svg b/paper/figs/nano_hexapod_elements.svg new file mode 100644 index 0000000..1c6ebdf Binary files /dev/null and b/paper/figs/nano_hexapod_elements.svg differ diff --git a/paper/figs/nass_concept_schematic.pdf b/paper/figs/nass_concept_schematic.pdf new file mode 100644 index 0000000..ecd991a Binary files /dev/null and b/paper/figs/nass_concept_schematic.pdf differ diff --git a/paper/figs/nass_concept_schematic.svg b/paper/figs/nass_concept_schematic.svg new file mode 100644 index 0000000..cf97603 Binary files /dev/null and b/paper/figs/nass_concept_schematic.svg differ diff --git a/paper/figs/nass_hac_lac_schematic.pdf b/paper/figs/nass_hac_lac_schematic.pdf new file mode 100644 index 0000000..8840cf8 Binary files /dev/null and b/paper/figs/nass_hac_lac_schematic.pdf differ diff --git a/paper/figs/nass_hac_lac_schematic.svg b/paper/figs/nass_hac_lac_schematic.svg new file mode 100644 index 0000000..a60e826 Binary files /dev/null and b/paper/figs/nass_hac_lac_schematic.svg differ diff --git a/paper/figs/nass_mechatronics_approach.pdf b/paper/figs/nass_mechatronics_approach.pdf new file mode 100644 index 0000000..b551ead Binary files /dev/null and b/paper/figs/nass_mechatronics_approach.pdf differ diff --git a/paper/figs/nass_mechatronics_approach.png b/paper/figs/nass_mechatronics_approach.png new file mode 100644 index 0000000..48764c1 Binary files /dev/null and b/paper/figs/nass_mechatronics_approach.png differ diff --git a/paper/figs/nass_mechatronics_approach.svg b/paper/figs/nass_mechatronics_approach.svg new file mode 100644 index 0000000..a4d659f Binary files /dev/null and b/paper/figs/nass_mechatronics_approach.svg differ diff --git a/paper/ref.bib b/paper/ref.bib index fb6c15f..8036ae0 100644 --- a/paper/ref.bib +++ b/paper/ref.bib @@ -1,66 +1,57 @@ -@article{martinez2016, -title = {ID16B: a hard X-ray nanoprobe beamline at the ESRF for nano-analysis}, -author = {Martinez-Criado, Gema and Villanova, Julie and Tucoulou, Remi and Salomon, Damien and Suuronen, J-P and Laboure, Sylvain and Guilloud, Cyril and Valls, Valentin and Barrett, Raymond and Gagliardini, Eric and others}, -journal = {Journal of synchrotron radiation}, -volume = {23}, -pages = {344--352}, -year = {2016}, -month = {1}, -doi = {10.1107/S1600577515019839}, -publisher = {International Union of Crystallography} -} -@unpublished{DucotteMEDSI2016, -author = {Ducotte, L and Clement, J.M and Gleyzolle, H and Wright, J}, -title = {The new ID11 nanoscope end-station - a nano-tomography scanner}, -note = {presented at MEDSI'16, Barcelona, Spain, Sept. 2016, unpublished} -} -@inproceedings{ogurreck2013nanotomography, -title = {The nanotomography endstation at the PETRA III imaging beamline}, -author = {Ogurreck, M and Wilde, F and Herzen, J and Beckmann, F and Nazmov, V and Mohr, J and Haibel, A and M{\"u}ller, M and Schreyer, A}, -booktitle = {Journal of Physics: Conference Series}, -volume = {425}, -number = {18}, -year = {2013}, -doi = {10.1088/1742-6596/425/18/182002} -} -% Stewart Platform -@article{Geng1992, -author = {Geng, Zheng and Haynes, Leonard S}, -journal = {Journal of Robotic Systems}, -number = {5}, -pages = {725--744}, -title = {Six-degree-of-freedom active vibration isolation using a stewart platform mechanism}, -volume = {10}, -doi = {10.1109/87.273110}, -year = {1992} +@inproceedings{dehaeze18_sampl_stabil_for_tomog_exper, + author = {Thomas Dehaeze and M. Magnin Mattenet and Christophe + Collette}, + title = {Sample Stabilization For Tomography Experiments In Presence + Of Large Plant Uncertainty}, + booktitle = {MEDSI'18}, + year = 2018, + number = 10, + pages = {153--157}, + doi = {10.18429/JACoW-MEDSI2018-WEOAMA02}, + url = {https://doi.org/10.18429/JACoW-MEDSI2018-WEOAMA02}, + address = {Geneva, Switzerland}, + isbn = {978-3-95450-207-3}, + language = {english}, + month = {Dec}, + publisher = {JACoW Publishing}, + series = {Mechanical Engineering Design of Synchrotron Radiation + Equipment and Instrumentation}, + venue = {Paris, France}, } -@article{McInroy1999a, -author = {McInroy, J.E.}, -journal = {Proc. of the 1999 IEEE International Conference On Control Applications, Kohala Coast, Hawaii, USA}, -pages = {508--513}, -title = {Dynamic modeling of flexure jointed hexapods for control purposes}, -doi = {10.1109/CCA.1999.806694}, -year = {1999} -} -@article{preumont2007, -author = {Preumont, A. and Horodinca, M. and Romanescu, I. and de Marneffe, B. and Avraam, M. and Deraemaeker, A. and Bossens, F.}, -journal = {Journal of Sound and Vibration}, -number = {3-5}, -title = {A six-axis single-stage active vibration isolator based on Stewart platform}, -volume = {300}, -doi = {10.1016/j.jsv.2006.07.050}, -year = {2007} -} -@article{McInroy2000, -author = {McInroy, John E. and Hamann, Jerry C.}, -journal = {IEEE Transactions on Robotics and Automation}, -number = {4}, -pages = {372--381}, -title = {Design and control of flexure jointed hexapods}, -volume = {16}, -doi = {10.1109/70.864229}, -year = {2000} +@inproceedings{brumund21_multib_simul_reduc_order_flexib_bodies_fea, + author = {Philipp Brumund and Thomas Dehaeze}, + title = {Multibody Simulations with Reduced Order Flexible Bodies + obtained by FEA}, + booktitle = {MEDSI'20}, + year = 2021, + language = {english}, + publisher = {JACoW Publishing}, + series = {Mechanical Engineering Design of Synchrotron Radiation + Equipment and Instrumentation}, + venue = {Chicago, USA}, } +@article{souleille18_concep_activ_mount_space_applic, + author = {Souleille, Adrien and Lampert, Thibault and Lafarga, V and + Hellegouarch, Sylvain and Rondineau, Alan and Rodrigues, + Gon{\c{c}}alo and Collette, Christophe}, + title = {A Concept of Active Mount for Space Applications}, + journal = {CEAS Space Journal}, + volume = 10, + number = 2, + pages = {157--165}, + year = 2018, + publisher = {Springer} +} +@article{dehaeze21_activ_dampin_rotat_platf_using, + author = {Thomas Dehaeze and Christophe Collette}, + title = {Active Damping of Rotating Platforms Using Integral Force + Feedback}, + journal = {Engineering Research Express}, + year = 2021, + doi = {10.1088/2631-8695/abe803}, + url = {https://doi.org/10.1088/2631-8695/abe803}, + month = {Feb}, +} diff --git a/tikz/config.org b/tikz/config.org new file mode 100644 index 0000000..4d1b957 --- /dev/null +++ b/tikz/config.org @@ -0,0 +1,707 @@ +#+TITLE: LaTeX Configuration for Tikz Figures +:DRAWER: +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args:latex+ :tangle config.tex +#+PROPERTY: header-args:latex+ :exports code +:END: + +* Packages +#+begin_src latex +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +\usepackage[french, english]{babel} % Last language is main language + +\usepackage{lmodern} % Latin Modern Font +\usepackage{gensymb} % Generic symbols for both text and math mode + +\usepackage{standalone} % Used to generate standalone Tikz + +\usepackage{amsmath} % Main math Package +\usepackage{mathtools} % Extension package to amsmath +\usepackage{amsthm} % Typesetting theorems (AMS style) +\usepackage{amsfonts} % More fonts from the AMS +\usepackage{textcomp} % provide many text symbols +\usepackage{steinmetz} % For phase symbol + +\usepackage{xstring} % Utils to manipulate strings +\usepackage{etoolbox} % Add basic if/then +\usepackage{esvect} % Beautyfull vectors +\usepackage{graphicx} % Enhanced support for graphics +\usepackage{grffile} % Used by matlab2tikz + +\usepackage{microtype} % typographic tuning +\usepackage{setspace} % for line spacing, e.g. \onehalfspacing +\usepackage{tabularx} % table features +\usepackage{enumitem} % for simple list modifications +\usepackage{booktabs} % better table support + +\usepackage{stackengine} % + +\usepackage[load-configurations=abbreviations]{siunitx} % SI units +\sisetup{ + locale = US, + detect-all, + range-phrase=--, + range-units=single +} +#+end_src + +* Tikz related packages +#+begin_src latex + \usepackage{tikz} % Tikz + \usepackage{tikzscale} % Used to scale Tikz graphics + \usepackage{adjustbox} % Used to proper positioning of tikz pictures + \usepackage{circuitikz} % Draw electronic circuits + \usepackage{pgfpages} % Needed to use notes + \usepackage{pgfplots} % Used to plot functions +#+end_src + +* Tikz Libraries +#+begin_src latex + \usetikzlibrary{arrows} % Arrow tip library + \usetikzlibrary{arrows.meta} % Add some arrows + \usetikzlibrary{calc} % The library allows advanced Coordinate Calculations + \usetikzlibrary{intersections} % calculate intersections of paths + \usetikzlibrary{matrix} % + \usetikzlibrary{patterns} % + \usetikzlibrary{shapes} % Defines circle and rectangle + \usetikzlibrary{shapes.geometric} % Use for the shape diamond and isosceles triangle + \usetikzlibrary{snakes} % snake=coil and snake=zigzag using segment amplitude=10pt + \usetikzlibrary{positioning} % Additional options for placing nodes + \usetikzlibrary{3d} % Plot 3D shapes + \usetikzlibrary{spy} % Creating a magnified area + \usetikzlibrary{decorations.text} % Used to make text follows a curve + \usetikzlibrary{decorations.pathmorphing} % deformation of a path + \usetikzlibrary{decorations.markings} % Used for spring and damper + \usetikzlibrary{babel} % A tiny library that make the interaction with the babel package easier + \usetikzlibrary{plotmarks} % This library defines a number of plot marks + \usetikzlibrary{fit} % Used to make rectangle as nodes by specifying two points + \usetikzlibrary{backgrounds} % Used to put things under others +#+end_src + +* PGF Plot libraries and config +#+begin_src latex + \usepgfplotslibrary{patchplots} + \usepgfplotslibrary{groupplots} + + \pgfplotsset{compat=newest} + \pgfplotsset{plot coordinates/math parser=false} +#+end_src + +* Setup size of figures +#+begin_src latex + \newlength{\fheight} + \newlength{\fwidth} + + \setlength{\fwidth}{85mm} + \setlength{\fheight}{112mm} +#+end_src + +* Setup Arrows style +#+begin_src latex + \tikzset{>=Stealth} + % Setup default Linewidth + \tikzset{every path/.style={line width=1pt}} +#+end_src + +* Colors +#+begin_src latex +\usepackage{xcolor}% Color extension + +\definecolor{colorblack}{rgb}{0, 0, 0} +\definecolor{colorblue}{HTML}{0072bd} +\definecolor{colorred}{HTML}{d95218} +\definecolor{coloryellow}{HTML}{ecb01f} +\definecolor{colorpurple}{HTML}{7d2e8e} +\definecolor{colorgreen}{HTML}{77ab2f} + +\definecolor{lightblue}{HTML}{dbf0ff} +\definecolor{lightred}{HTML}{f9d9cb} +\definecolor{lightyellow}{HTML}{faf0d1} +\definecolor{lightpurple}{HTML}{efdcf4} +\definecolor{lightgreen}{HTML}{e6f3d3} + +% Main color +\definecolor{maincolor}{RGB}{89, 9, 38} +\definecolor{secondcolor}{RGB}{20, 9, 89} +#+end_src + +* Control +** Blocks +#+begin_src latex + \tikzset{% + block/.style n args={2}{% + draw, + fill=white, + minimum width = #1, + minimum height = #2, + }, + block/.default={1.2cm}{1.0cm} + } +#+end_src + +** Branches +#+begin_src latex + \tikzstyle{branch}=[fill,shape=circle,minimum size=4pt,inner sep=0pt] + \tikzstyle{->top}=[-{Stealth[color=black, scale=0.8]}, draw=white, double=black, double distance=1pt, line width=1pt] + \tikzstyle{<-top}=[{stealth[color=black, scale=0.8]}-, draw=white, double=black, double distance=1pt, line width=1pt] +#+end_src + +** Hand Writen Style +Usefull for schematic plots +#+begin_src latex + \tikzstyle{handwriten}=[decorate,decoration={random steps,amplitude=0.1pt,segment length=0.8pt}] +#+end_src + +** DAC +#+begin_src latex + \tikzset{% + DAC/.style={% + draw, + signal, + } + } +#+end_src + +** ADC +#+begin_src latex + \tikzset{% + ADC/.style={% + draw, + signal, + signal to = west, + } + } +#+end_src + +** Gain +#+begin_src latex + \tikzset{% + gain right/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=-90 + }, + gain left/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=90 + }, + gain top/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=0 + }, + gain bottom/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=180 + }, + } +#+end_src + +** Add / Substract / Divide / Multiply block +#+begin_src latex + \tikzset{% Add block with Circled operations + addc/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addc/.default={+}{}{}{}{}, + } +#+end_src + +#+begin_src latex + \tikzset{% Add Block + addb/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[outer sep=2pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[outer sep=2pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[outer sep=2pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[outer sep=2pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addb/.default={+}{}{}{}{}, + } +#+end_src + +* Plots +** Default line caps +#+begin_src latex + \pgfplotsset{ + every axis plot/.append style={line join=round}, + every axis plot/.append style={line cap=round}, + } +#+end_src + +** Grid +#+begin_src latex + \pgfplotsset{grid style={black}} + \pgfplotsset{major grid style={black!30!white}} + \pgfplotsset{minor grid style={black!10!white}} + \pgfplotsset{xmajorgrids} + \pgfplotsset{ymajorgrids} +#+end_src + +** Lines +#+begin_src latex + \pgfplotsset{separate axis lines=false} % draw axis as rectangle and not as 4 lines + \pgfplotsset{every outer x axis line/.append style={black}} + \pgfplotsset{every outer y axis line/.append style={black}} + \pgfplotsset{axis background/.style={fill=white}} + \pgfplotsset{axis x line*=bottom} % solid line on the bottom with thin on the top + \pgfplotsset{axis y line*=left} % solid line on the left with thin on the right +#+end_src + +** Ticks +#+begin_src latex + \pgfplotsset{every y tick label/.append style={font=\color{black}}} + \pgfplotsset{every y tick/.append style={black}} + \pgfplotsset{every x tick label/.append style={font=\color{black}}} + \pgfplotsset{every x tick/.append style={black}} +#+end_src + +** Size +If =scale only axis=false= (the default), pgfplots will try to produce the desired width including labels, titles and ticks. +#+begin_src latex + \pgfplotsset{scale only axis=true} +#+end_src + +** Label +Used to align all of ylabel of one figure. +#+begin_src latex + \pgfplotsset{ylabel absolute} +#+end_src + +** Legend +#+begin_src latex + % https://tex.stackexchange.com/questions/54794/using-a-pgfplots-style-legend-in-a-plain-old-tikzpicture#54834 + + % argument #1: any options + \newenvironment{customlegend}[1][]{% + \begingroup + % inits/clears the lists (which might be populated from previous + % axes): + \csname pgfplots@init@cleared@structures\endcsname + \pgfplotsset{#1}% + }{% + % draws the legend: + \csname pgfplots@createlegend\endcsname + \endgroup + }% + + % makes \addlegendimage available (typically only available within an + % axis environment): + \def\addlegendimage{\csname pgfplots@addlegendimage\endcsname} + + % definition to insert numbers + % \pgfkeys{/pgfplots/number in legend/.style={% + % /pgfplots/legend image code/.code={% + % \node at (0.125,-0.0225){#1}; % <= changed x value + % },% + % }, + % } + \pgfplotsset{ + every legend to name picture/.style={west} + } +#+end_src + +** Upper and Lower bounds +#+begin_src latex + \pgfplotsset{upperbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=60}}] + \pgfplotsset{lowerbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=-60}}] +#+end_src + +And we add the corresdonding +#+begin_src latex + \pgfplotsset{ + /pgfplots/upperbound/.style 1 args={ + legend image code/.code={ + \draw[##1, upperbound] + plot coordinates { + (0cm,0cm) + (0.6cm,0cm) + } + } + } + } +#+end_src + +** Pole +#+begin_src latex + \tikzset{% + pole/.style{% + color=red, + cross out, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + pole/.default={4} + } +#+end_src + +** Zero +#+begin_src latex + \tikzset{% + zero/.style{% + color=red, + circle, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + zero/.default={4} + } +#+end_src + +* Mechanical +** Spring +#+begin_src latex + \tikzset{% + spring/.style={% + thick, + decoration={ + zigzag, + pre length = #1cm, + post length = #1cm, + segment length = 6 + }, + decorate + }, + spring/.default={0.2} + } +#+end_src + +** Coil +#+begin_src latex + \tikzset{% + coil/.style n args={2}{% + thick, + decoration={ + coil, + pre length = #1cm, + post length = #2cm, + segment length = 4 + }, + decorate + }, + coil/.default={0.3}{0.3} + } +#+end_src + +** Damper +#+begin_src latex + \tikzset{% + damper/.style n args={2}{% + thick, + decoration={markings, mark connection node=dmp, mark=at position 0.5 with { + \node (dmp) [thick, + inner sep = 0pt, + transform shape, + rotate =-90, + minimum width = #1pt, + minimum height = #2pt, + draw=none] {}; + \draw [thick] ($(dmp.north east)+(0.6*#2pt,0)$) -- (dmp.south east) -- (dmp.south west) -- ($(dmp.north west)+(0.6*#2pt,0)$); + \draw [thick] ($(dmp.north)+(0,-0.3*#1pt)$) -- ($(dmp.north)+(0,0.3*#1pt)$); + } + }, + decorate + }, + damper/.default={12}{3} + } +#+end_src + +** Actuator +#+begin_src latex + \tikzset{% + actuator/.style n args={2}{% + thick, + draw=none, + decoration={ + markings, + mark connection node=my node, + mark=at position .5 with { + \node [draw, inner sep=0pt, minimum width=#1cm, minimum height=#2cm, + transform shape, fill=white] (my node) {}; + }, + mark=at position .0 with { + \draw[<-] (0, 0) -- (my node); + }, + mark=at position 1.0 with { + \draw[<-] (0, 0) -- (my node); + } + }, + decorate + }, + actuator/.default={0.5}{0.2} + } +#+end_src + +** Ground +#+begin_src latex + \tikzset{% + ground/.style n args={2}{% + fill, + pattern = north east lines, + draw = none, + anchor = north, + minimum width = #1cm, + minimum height = #2cm, + append after command={ + (\tikzlastnode.north west) edge (\tikzlastnode.north east) + } + }, + ground/.default={2.5}{0.3} + } +#+end_src + +** Force Sensor +#+begin_src latex + \tikzset{% + forcesensor/.style n args={2}{% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south, + minimum width =#1cm, + minimum height=#2cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + forcesensor/.default={2.0}{0.5} + } +#+end_src + +** Inertial Sensor +#+begin_src latex + \tikzset{% + inertialsensor/.style={% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south east, + minimum size=#1cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + inertialsensor/.default={0.3} + } +#+end_src + +** Cross +#+begin_src latex + \tikzstyle{cross}=[path picture={ + \draw[black] + (path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east); + }] + +#+end_src + +** Piezoelectric actuator +#+begin_src latex + \tikzset{% + piezo/.style n args={3}{% + draw, + rectangle, + minimum width = #1cm, + minimum height = #2cm, + fill=blue!10!white, + anchor=center, + append after command={ + [every edge/.append style={ + thick, + black, + }] + \foreach \i in {1,...,#3}{ + (${\i/(1+#3)}*(\tikzlastnode.north west)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south west)+0.1*(#1,0)$) edge (${\i/(1+#3)}*(\tikzlastnode.north east)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south east)-0.1*(#1,0)$) + } + } + }, + piezo/.default={2}{4}{10} + } +#+end_src + +** Voice coil +#+begin_src latex + \def\voicecoil#1#2#3{ + % ====================== + % Parameters + % ====================== + \def\voicecoilw{#1} % Total Width + \def\voicecoilh{#2} % Total Height + + \def\magnetw{\voicecoilw} % Width of the magnet + \def\magneth{\voicecoilh/1.4} % Height of the magnet + + \def\magnetwb{0.15*\magnetw} % Width of the borders of the magnet + \def\magnetmw{0.15*\magnetw} % Width of the middle part of the magnet + \def\magnetwg{0.5*\magnetw} % Width of the gap of the magnet + + \def\magnethl{\magnetwb} % Height of the low part of the magnet + \def\magnetmh{0.15*\magneth} % Height of the middle part of the magnet + \def\magnethg{0.2*\magneth} % Height of the gap of the magnet + % ====================== + + \begin{scope}[shift={(0.5*\voicecoilw, 0.5*\voicecoilh)}, rotate=#3, shift={(0, -0.5*\voicecoilh)}] + % ====================== + % Magnet + % ====================== + \draw[fill=white] (0, 0) -| ++(0.5*\magnetw, \magneth) -| ++(-0.5*\magnetw+0.5*\magnetwg, -\magnethg) -| (0.5*\magnetw-\magnetwb, \magnethl) -| (-0.5*\magnetw+\magnetwb, \magneth-\magnethg) -| (-0.5*\magnetwg, \magneth) -| (-0.5*\magnetw, 0) -- (cycle); + \begin{scope}[shift={(0, \magnethl)}] + \draw[fill=red] (-0.5*\magnetmw, 0) rectangle (0.5*\magnetmw, \magnetmh); + \draw[fill=blue] (-0.5*\magnetmw, \magnetmh) rectangle (0.5*\magnetmw, 2*\magnetmh); + % Top conductive Magnet + \draw[fill=white] (-0.5*\magnetmw, 2*\magnetmh) -| (0.5*\magnetmw, -\magnethl+\magneth-\magnethg) -| ++(0.1, \magnethg) -| ++(-0.2-\magnetmw, -\magnethg) -| (-0.5*\magnetmw, \magnetmh); + \end{scope} + % ====================== + + % ====================== + % Coil + % ====================== + \pgfmathsetmacro{\coilwidth}{0.5*0.5*\magnetmw+0.5*0.1+0.25*\magnetwg}% + \draw[] ( \coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + \draw[] (-\coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + % Point on the coil + \foreach \x in {0,1,...,9} + { + \node[circle,inner sep=0.6pt,fill] at ( \coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + \node[circle,inner sep=0.6pt,fill] at (-\coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + } + \draw[fill=white] (-0.5*\magnetw, 1.2*\magneth) rectangle ++(\magnetw, \magnethg); + % ====================== + + % ====================== + % Coordinates + % ====================== + % Force + \coordinate[] (vc_force) at (0, \magneth-0.5*\magnethg); + % Coil + \coordinate[] (vc_coil) at (0, \voicecoilh); + % Magnet + \coordinate[] (vc_magnet) at (0, 0); + % Coil Wires + \coordinate[] (vc_wire_one) at ( \coilwidth, 1.2*\magneth); + \coordinate[] (vc_wire_two) at (-\coilwidth, 1.2*\magneth); + % ====================== + \end{scope} + } +#+end_src + +** Axis Rotator +#+begin_src latex + \newcommand{\AxisRotator}[1][rotate=0]{% + \tikz [x=0.1cm,y=0.30cm,-stealth,#1] \draw (0,0) arc (-150:150:1 and 1);% + } +#+end_src + +* Optics +#+begin_src latex + \tikzset{% + ->-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{>} + } + }, + postaction={decorate} + } + } + \tikzset{% + -<-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{<} + } + }, + postaction={decorate} + } + } +#+end_src + +* Misc +#+begin_src latex + \tikzset{% + labelc/.style= {% + draw, + fill=white, + shape=circle, + inner sep=2pt, + outer sep=6pt, + } + } +#+end_src + +* More Defaults specific to this paper +#+begin_src latex + \tikzset{block/.default={0.8cm}{0.8cm}} + \tikzset{addb/.append style={scale=0.7}} + \tikzset{node distance=0.6} +#+end_src diff --git a/tikz/config.tex b/tikz/config.tex new file mode 100644 index 0000000..10b7ab4 --- /dev/null +++ b/tikz/config.tex @@ -0,0 +1,569 @@ +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +\usepackage[french, english]{babel} % Last language is main language + +\usepackage{lmodern} % Latin Modern Font +\usepackage{gensymb} % Generic symbols for both text and math mode + +\usepackage{standalone} % Used to generate standalone Tikz + +\usepackage{amsmath} % Main math Package +\usepackage{mathtools} % Extension package to amsmath +\usepackage{amsthm} % Typesetting theorems (AMS style) +\usepackage{amsfonts} % More fonts from the AMS +\usepackage{textcomp} % provide many text symbols +\usepackage{steinmetz} % For phase symbol + +\usepackage{xstring} % Utils to manipulate strings +\usepackage{etoolbox} % Add basic if/then +\usepackage{esvect} % Beautyfull vectors +\usepackage{graphicx} % Enhanced support for graphics +\usepackage{grffile} % Used by matlab2tikz + +\usepackage{microtype} % typographic tuning +\usepackage{setspace} % for line spacing, e.g. \onehalfspacing +\usepackage{tabularx} % table features +\usepackage{enumitem} % for simple list modifications +\usepackage{booktabs} % better table support + +\usepackage{stackengine} % + +\usepackage[load-configurations=abbreviations]{siunitx} % SI units +\sisetup{ + locale = US, + detect-all, + range-phrase=--, + range-units=single +} + +\usepackage{tikz} % Tikz + \usepackage{tikzscale} % Used to scale Tikz graphics + \usepackage{adjustbox} % Used to proper positioning of tikz pictures + \usepackage{circuitikz} % Draw electronic circuits + \usepackage{pgfpages} % Needed to use notes + \usepackage{pgfplots} % Used to plot functions + +\usetikzlibrary{arrows} % Arrow tip library + \usetikzlibrary{arrows.meta} % Add some arrows + \usetikzlibrary{calc} % The library allows advanced Coordinate Calculations + \usetikzlibrary{intersections} % calculate intersections of paths + \usetikzlibrary{matrix} % + \usetikzlibrary{patterns} % + \usetikzlibrary{shapes} % Defines circle and rectangle + \usetikzlibrary{shapes.geometric} % Use for the shape diamond and isosceles triangle + \usetikzlibrary{snakes} % snake=coil and snake=zigzag using segment amplitude=10pt + \usetikzlibrary{positioning} % Additional options for placing nodes + \usetikzlibrary{3d} % Plot 3D shapes + \usetikzlibrary{spy} % Creating a magnified area + \usetikzlibrary{decorations.text} % Used to make text follows a curve + \usetikzlibrary{decorations.pathmorphing} % deformation of a path + \usetikzlibrary{decorations.markings} % Used for spring and damper + \usetikzlibrary{babel} % A tiny library that make the interaction with the babel package easier + \usetikzlibrary{plotmarks} % This library defines a number of plot marks + \usetikzlibrary{fit} % Used to make rectangle as nodes by specifying two points + \usetikzlibrary{backgrounds} % Used to put things under others + +\usepgfplotslibrary{patchplots} + \usepgfplotslibrary{groupplots} + + \pgfplotsset{compat=newest} + \pgfplotsset{plot coordinates/math parser=false} + +\newlength{\fheight} + \newlength{\fwidth} + + \setlength{\fwidth}{85mm} + \setlength{\fheight}{112mm} + +\tikzset{>=Stealth} + % Setup default Linewidth + \tikzset{every path/.style={line width=1pt}} + +\usepackage{xcolor}% Color extension + +\definecolor{colorblack}{rgb}{0, 0, 0} +\definecolor{colorblue}{HTML}{0072bd} +\definecolor{colorred}{HTML}{d95218} +\definecolor{coloryellow}{HTML}{ecb01f} +\definecolor{colorpurple}{HTML}{7d2e8e} +\definecolor{colorgreen}{HTML}{77ab2f} + +\definecolor{lightblue}{HTML}{dbf0ff} +\definecolor{lightred}{HTML}{f9d9cb} +\definecolor{lightyellow}{HTML}{faf0d1} +\definecolor{lightpurple}{HTML}{efdcf4} +\definecolor{lightgreen}{HTML}{e6f3d3} + +% Main color +\definecolor{maincolor}{RGB}{89, 9, 38} +\definecolor{secondcolor}{RGB}{20, 9, 89} + +\tikzset{% + block/.style n args={2}{% + draw, + fill=white, + minimum width = #1, + minimum height = #2, + }, + block/.default={1.2cm}{1.0cm} + } + +\tikzstyle{branch}=[fill,shape=circle,minimum size=4pt,inner sep=0pt] + \tikzstyle{->top}=[-{Stealth[color=black, scale=0.8]}, draw=white, double=black, double distance=1pt, line width=1pt] + \tikzstyle{<-top}=[{stealth[color=black, scale=0.8]}-, draw=white, double=black, double distance=1pt, line width=1pt] + +\tikzstyle{handwriten}=[decorate,decoration={random steps,amplitude=0.1pt,segment length=0.8pt}] + +\tikzset{% + DAC/.style={% + draw, + signal, + } + } + +\tikzset{% + ADC/.style={% + draw, + signal, + signal to = west, + } + } + +\tikzset{% + gain right/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=-90 + }, + gain left/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=90 + }, + gain top/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=0 + }, + gain bottom/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=180 + }, + } + +\tikzset{% Add block with Circled operations + addc/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addc/.default={+}{}{}{}{}, + } + +\tikzset{% Add Block + addb/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[outer sep=2pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[outer sep=2pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[outer sep=2pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[outer sep=2pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addb/.default={+}{}{}{}{}, + } + +\pgfplotsset{ + every axis plot/.append style={line join=round}, + every axis plot/.append style={line cap=round}, + } + +\pgfplotsset{grid style={black}} + \pgfplotsset{major grid style={black!30!white}} + \pgfplotsset{minor grid style={black!10!white}} + \pgfplotsset{xmajorgrids} + \pgfplotsset{ymajorgrids} + +\pgfplotsset{separate axis lines=false} % draw axis as rectangle and not as 4 lines + \pgfplotsset{every outer x axis line/.append style={black}} + \pgfplotsset{every outer y axis line/.append style={black}} + \pgfplotsset{axis background/.style={fill=white}} + \pgfplotsset{axis x line*=bottom} % solid line on the bottom with thin on the top + \pgfplotsset{axis y line*=left} % solid line on the left with thin on the right + +\pgfplotsset{every y tick label/.append style={font=\color{black}}} + \pgfplotsset{every y tick/.append style={black}} + \pgfplotsset{every x tick label/.append style={font=\color{black}}} + \pgfplotsset{every x tick/.append style={black}} + +\pgfplotsset{scale only axis=true} + +\pgfplotsset{ylabel absolute} + +% https://tex.stackexchange.com/questions/54794/using-a-pgfplots-style-legend-in-a-plain-old-tikzpicture#54834 + + % argument #1: any options + \newenvironment{customlegend}[1][]{% + \begingroup + % inits/clears the lists (which might be populated from previous + % axes): + \csname pgfplots@init@cleared@structures\endcsname + \pgfplotsset{#1}% + }{% + % draws the legend: + \csname pgfplots@createlegend\endcsname + \endgroup + }% + + % makes \addlegendimage available (typically only available within an + % axis environment): + \def\addlegendimage{\csname pgfplots@addlegendimage\endcsname} + + % definition to insert numbers + % \pgfkeys{/pgfplots/number in legend/.style={% + % /pgfplots/legend image code/.code={% + % \node at (0.125,-0.0225){#1}; % <= changed x value + % },% + % }, + % } + \pgfplotsset{ + every legend to name picture/.style={west} + } + +\pgfplotsset{upperbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=60}}] + \pgfplotsset{lowerbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=-60}}] + +\pgfplotsset{ + /pgfplots/upperbound/.style 1 args={ + legend image code/.code={ + \draw[##1, upperbound] + plot coordinates { + (0cm,0cm) + (0.6cm,0cm) + } + } + } + } + +\tikzset{% + pole/.style{% + color=red, + cross out, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + pole/.default={4} + } + +\tikzset{% + zero/.style{% + color=red, + circle, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + zero/.default={4} + } + +\tikzset{% + spring/.style={% + thick, + decoration={ + zigzag, + pre length = #1cm, + post length = #1cm, + segment length = 6 + }, + decorate + }, + spring/.default={0.2} + } + +\tikzset{% + coil/.style n args={2}{% + thick, + decoration={ + coil, + pre length = #1cm, + post length = #2cm, + segment length = 4 + }, + decorate + }, + coil/.default={0.3}{0.3} + } + +\tikzset{% + damper/.style n args={2}{% + thick, + decoration={markings, mark connection node=dmp, mark=at position 0.5 with { + \node (dmp) [thick, + inner sep = 0pt, + transform shape, + rotate =-90, + minimum width = #1pt, + minimum height = #2pt, + draw=none] {}; + \draw [thick] ($(dmp.north east)+(0.6*#2pt,0)$) -- (dmp.south east) -- (dmp.south west) -- ($(dmp.north west)+(0.6*#2pt,0)$); + \draw [thick] ($(dmp.north)+(0,-0.3*#1pt)$) -- ($(dmp.north)+(0,0.3*#1pt)$); + } + }, + decorate + }, + damper/.default={12}{3} + } + +\tikzset{% + actuator/.style n args={2}{% + thick, + draw=none, + decoration={ + markings, + mark connection node=my node, + mark=at position .5 with { + \node [draw, inner sep=0pt, minimum width=#1cm, minimum height=#2cm, + transform shape, fill=white] (my node) {}; + }, + mark=at position .0 with { + \draw[<-] (0, 0) -- (my node); + }, + mark=at position 1.0 with { + \draw[<-] (0, 0) -- (my node); + } + }, + decorate + }, + actuator/.default={0.5}{0.2} + } + +\tikzset{% + ground/.style n args={2}{% + fill, + pattern = north east lines, + draw = none, + anchor = north, + minimum width = #1cm, + minimum height = #2cm, + append after command={ + (\tikzlastnode.north west) edge (\tikzlastnode.north east) + } + }, + ground/.default={2.5}{0.3} + } + +\tikzset{% + forcesensor/.style n args={2}{% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south, + minimum width =#1cm, + minimum height=#2cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + forcesensor/.default={2.0}{0.5} + } + +\tikzset{% + inertialsensor/.style={% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south east, + minimum size=#1cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + inertialsensor/.default={0.3} + } + +\tikzstyle{cross}=[path picture={ + \draw[black] + (path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east); + }] + +\tikzset{% + piezo/.style n args={3}{% + draw, + rectangle, + minimum width = #1cm, + minimum height = #2cm, + fill=blue!10!white, + anchor=center, + append after command={ + [every edge/.append style={ + thick, + black, + }] + \foreach \i in {1,...,#3}{ + (${\i/(1+#3)}*(\tikzlastnode.north west)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south west)+0.1*(#1,0)$) edge (${\i/(1+#3)}*(\tikzlastnode.north east)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south east)-0.1*(#1,0)$) + } + } + }, + piezo/.default={2}{4}{10} + } + +\def\voicecoil#1#2#3{ + % ====================== + % Parameters + % ====================== + \def\voicecoilw{#1} % Total Width + \def\voicecoilh{#2} % Total Height + + \def\magnetw{\voicecoilw} % Width of the magnet + \def\magneth{\voicecoilh/1.4} % Height of the magnet + + \def\magnetwb{0.15*\magnetw} % Width of the borders of the magnet + \def\magnetmw{0.15*\magnetw} % Width of the middle part of the magnet + \def\magnetwg{0.5*\magnetw} % Width of the gap of the magnet + + \def\magnethl{\magnetwb} % Height of the low part of the magnet + \def\magnetmh{0.15*\magneth} % Height of the middle part of the magnet + \def\magnethg{0.2*\magneth} % Height of the gap of the magnet + % ====================== + + \begin{scope}[shift={(0.5*\voicecoilw, 0.5*\voicecoilh)}, rotate=#3, shift={(0, -0.5*\voicecoilh)}] + % ====================== + % Magnet + % ====================== + \draw[fill=white] (0, 0) -| ++(0.5*\magnetw, \magneth) -| ++(-0.5*\magnetw+0.5*\magnetwg, -\magnethg) -| (0.5*\magnetw-\magnetwb, \magnethl) -| (-0.5*\magnetw+\magnetwb, \magneth-\magnethg) -| (-0.5*\magnetwg, \magneth) -| (-0.5*\magnetw, 0) -- (cycle); + \begin{scope}[shift={(0, \magnethl)}] + \draw[fill=red] (-0.5*\magnetmw, 0) rectangle (0.5*\magnetmw, \magnetmh); + \draw[fill=blue] (-0.5*\magnetmw, \magnetmh) rectangle (0.5*\magnetmw, 2*\magnetmh); + % Top conductive Magnet + \draw[fill=white] (-0.5*\magnetmw, 2*\magnetmh) -| (0.5*\magnetmw, -\magnethl+\magneth-\magnethg) -| ++(0.1, \magnethg) -| ++(-0.2-\magnetmw, -\magnethg) -| (-0.5*\magnetmw, \magnetmh); + \end{scope} + % ====================== + + % ====================== + % Coil + % ====================== + \pgfmathsetmacro{\coilwidth}{0.5*0.5*\magnetmw+0.5*0.1+0.25*\magnetwg}% + \draw[] ( \coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + \draw[] (-\coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + % Point on the coil + \foreach \x in {0,1,...,9} + { + \node[circle,inner sep=0.6pt,fill] at ( \coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + \node[circle,inner sep=0.6pt,fill] at (-\coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + } + \draw[fill=white] (-0.5*\magnetw, 1.2*\magneth) rectangle ++(\magnetw, \magnethg); + % ====================== + + % ====================== + % Coordinates + % ====================== + % Force + \coordinate[] (vc_force) at (0, \magneth-0.5*\magnethg); + % Coil + \coordinate[] (vc_coil) at (0, \voicecoilh); + % Magnet + \coordinate[] (vc_magnet) at (0, 0); + % Coil Wires + \coordinate[] (vc_wire_one) at ( \coilwidth, 1.2*\magneth); + \coordinate[] (vc_wire_two) at (-\coilwidth, 1.2*\magneth); + % ====================== + \end{scope} + } + +\newcommand{\AxisRotator}[1][rotate=0]{% + \tikz [x=0.1cm,y=0.30cm,-stealth,#1] \draw (0,0) arc (-150:150:1 and 1);% + } + +\tikzset{% + ->-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{>} + } + }, + postaction={decorate} + } + } + \tikzset{% + -<-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{<} + } + }, + postaction={decorate} + } + } + +\tikzset{% + labelc/.style= {% + draw, + fill=white, + shape=circle, + inner sep=2pt, + outer sep=6pt, + } + } + +\tikzset{block/.default={0.8cm}{0.8cm}} + \tikzset{addb/.append style={scale=0.7}} + \tikzset{node distance=0.6} diff --git a/tikz/figs b/tikz/figs new file mode 120000 index 0000000..30fa883 --- /dev/null +++ b/tikz/figs @@ -0,0 +1 @@ +../paper/figs \ No newline at end of file diff --git a/tikz/figs-tikz/classical_feedback_small.pdf b/tikz/figs-tikz/classical_feedback_small.pdf new file mode 100644 index 0000000..99f988c Binary files /dev/null and b/tikz/figs-tikz/classical_feedback_small.pdf differ diff --git a/tikz/figs-tikz/simscape_nano_hexapod.png b/tikz/figs-tikz/simscape_nano_hexapod.png new file mode 100644 index 0000000..8f556b1 Binary files /dev/null and b/tikz/figs-tikz/simscape_nano_hexapod.png differ diff --git a/tikz/figs-tikz/simscape_picture.jpg b/tikz/figs-tikz/simscape_picture.jpg new file mode 100644 index 0000000..6614aa2 Binary files /dev/null and b/tikz/figs-tikz/simscape_picture.jpg differ diff --git a/tikz/figs-tikz/simscape_simulations.pdf b/tikz/figs-tikz/simscape_simulations.pdf new file mode 100644 index 0000000..3366414 Binary files /dev/null and b/tikz/figs-tikz/simscape_simulations.pdf differ diff --git a/tikz/figures.org b/tikz/figures.org new file mode 100644 index 0000000..65b545f --- /dev/null +++ b/tikz/figures.org @@ -0,0 +1,273 @@ +#+TITLE: Tikz Figures +:DRAWER: +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{/home/thomas/Cloud/thesis/papers/dehaeze21_mechatronics_approach_nass/tikz/}{config.tex}") +#+PROPERTY: header-args:latex+ :imagemagick t :fit yes +#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 +#+PROPERTY: header-args:latex+ :imoutoptions -quality 100 +#+PROPERTY: header-args:latex+ :results file raw replace +#+PROPERTY: header-args:latex+ :eval no-export +#+PROPERTY: header-args:latex+ :exports both +#+PROPERTY: header-args:latex+ :mkdirp yes +#+PROPERTY: header-args:latex+ :output-dir figs +#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") +:END: + +* Mechatronic Approach +#+begin_src latex :file nass_mechatronics_approach.pdf +\graphicspath{ {/home/thomas/Cloud/thesis/papers/dehaeze21_mechatronics_approach_nass/tikz/figs-tikz} } + +\begin{tikzpicture} + % Styles + \tikzset{myblock/.style= {draw, fill=white, text width=3cm, align=center, minimum height=1.8cm}}; + \tikzset{mylabel/.style= {anchor=north, below, font=\bfseries\small, color=black, text width=3cm, align=center}}; + \tikzset{mymodel/.style= {anchor=south, above, font=\small, color=black, text width=3cm, align=center}}; + \tikzset{mystep/.style= {->, ultra thick}}; + + % Blocks + \node[myblock, fill=lightblue, draw, label={[mylabel, text width=9.8cm] Dynamical Models / Simulations / Control}, minimum height = 6cm, text width = 9.8cm] (model) at (0, 0) {}; + + \node[myblock, fill=lightgreen, label={[mylabel] $\mu$ Station}, left = 3 of model.south west, anchor=south east] (mustation) {}; + \node[myblock, fill=lightgreen, label={[mylabel] Disturbances}, left = 3 of model.west] (dist) {}; + \node[myblock, fill=lightgreen, label={[mylabel] $\nu$ Hexapod}, left = 3 of model.north west, anchor=north east] (nanohexapod) {}; + + \node[myblock, fill=lightyellow, label={[mylabel] Mech. Design}, above = 1 of model.north] (mechanical) {}; + \node[myblock, fill=lightyellow, label={[mylabel] Instrumentation}, left = 1 of mechanical] (instrumentation) {}; + \node[myblock, fill=lightyellow, label={[mylabel] FEM}, right = 1 of mechanical] (fem) {}; + + \node[myblock, fill=lightred, label={[mylabel] Assembly}, right = 3 of model.north east, anchor=north west] (mounting) {}; + \node[myblock, fill=lightred, label={[mylabel] Test Benches}, right = 3 of model.east] (testbenches) {}; + \node[myblock, fill=lightred, label={[mylabel] Implementation}, right = 3 of model.south east, anchor=south west] (implementation) {}; + + % Text + \node[mymodel] at (mustation.south) {Multiple stages\\Complex dynamics\\Solid bodies}; + \node[mymodel] at (dist.south) {Ground motion\\Vibrations\\Position errors}; + \node[mymodel] at (nanohexapod.south) {Different concepts\\ Optimal geometry \\ Choice of sensors}; + + \node[mymodel] at (instrumentation.south) {Sensors, Actuators\\Amplifiers\\Control electronics}; + \node[mymodel] at (mechanical.south) {Parts optimization\\Proper integration\\Ease of assembly}; + \node[mymodel] at (fem.south) {Optimize key parts:\\Flexible joints\\Plates}; + + \node[mymodel] at (mounting.south) {Mounting Tools:\\Struts\\ Nano-Hexapod}; + \node[mymodel] at (testbenches.south) {Instrumentation\\APA, Struts\\Hexapod}; + \node[mymodel] at (implementation.south) {Test Benches\\$\mu$ Station}; + + % Links + \draw[->] (dist.east) -- node[above, midway]{Measurements} node[below,midway]{} (dist.east-|model.west); + \draw[->] (mustation.east) -- node[above, midway]{Measurements} node[below, midway]{CAD Model} (mustation.east-|model.west); + + \draw[->] ($(nanohexapod.east-|model.west)+(0, 0.2)$) -- node[above, midway]{Optimization} ($(nanohexapod.east)+(0, 0.2)$); + \draw[<-] ($(nanohexapod.east-|model.west)-(0, 0.2)$) -- node[below, midway]{Model} ($(nanohexapod.east)-(0, 0.2)$); + + \draw[->] ($(fem.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(fem.south)+(0.2,0)$); + \draw[<-] ($(fem.south|-model.north)-(0.2, 0)$) -- node[left, midway,align=right]{Super\\Element} ($(fem.south)-(0.2,0)$); + + \draw[->] ($(mechanical.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(mechanical.south)+(0.2,0)$); + \draw[<-] ($(mechanical.south|-model.north)-(0.2, 0)$) -- node[left, midway]{3D parts} ($(mechanical.south)-(0.2,0)$); + + \draw[->] ($(instrumentation.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(instrumentation.south)+(0.2,0)$); + \draw[<-] ($(instrumentation.south|-model.north)-(0.2, 0)$) -- node[left, midway]{Model} ($(instrumentation.south)-(0.2,0)$); + + \draw[->] ($(testbenches.west-|model.east)+(0, 0.2)$) -- node[above, midway]{Control Laws} ($(testbenches.west)+(0, 0.2)$); + \draw[<-] ($(testbenches.west-|model.east)-(0, 0.2)$) -- node[below, midway]{Refinement} ($(testbenches.west)-(0, 0.2)$); + + \draw[->] ($(implementation.west-|model.east)+(0, 0.2)$) -- node[above, midway]{Control Laws} ($(implementation.west)+(0, 0.2)$); + \draw[<-] ($(implementation.west-|model.east)-(0, 0.2)$) -- node[below, midway]{Refinement} ($(implementation.west)-(0, 0.2)$); + + % Main steps + \node[font=\bfseries, rotate=90, anchor=south, above] (conceptual_phase_node) at (dist.west) {Conceptual Phase}; + \node[font=\bfseries, above] (detailed_phase_node) at (mechanical.north) {Detail Design Phase}; + \node[font=\bfseries, rotate=-90, anchor=south, above] (implementation_phase_node) at (testbenches.east) {Experimental Phase}; + \begin{scope}[on background layer] + \node[fit={(conceptual_phase_node.north|-nanohexapod.north) (mustation.south east)}, fill=lightgreen!50!white, draw, dashed, inner sep=2pt] (conceptual_phase) {}; + \node[fit={(detailed_phase_node.north-|instrumentation.west) (fem.south east)}, fill=lightyellow!50!white, draw, dashed, inner sep=2pt] (detailed_phase) {}; + \node[fit={(implementation_phase_node.north|-mounting.north) (implementation.south west)}, fill=lightred!50!white, draw, dashed, inner sep=2pt] (implementation_phase) {}; + % \node[above left] at (dob.south east) {DOB}; + \end{scope} + + % Between main steps + \draw[mystep, dashed, postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={Concept Validation}}}] (conceptual_phase.north) to[out=90, in=180] (detailed_phase.west); + \draw[mystep, dashed, postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={Procurement}}}] (detailed_phase.east) to[out=0, in=90] (implementation_phase.north); + + % % Inside Model + % \node[inner sep=1pt, outer sep=6pt, anchor=north west, draw, fill=white, thin] (multibodymodel) at ($(model.north west) - (0, 0.5)$) + % {\includegraphics[width=5.6cm]{simscape_nano_hexapod.png}}; + + % \node[inner sep=1pt, outer sep=6pt, anchor=south west, draw, fill=white, thin] (simscape) at (model.south west) + % {\includegraphics[width=5.6cm]{simscape_picture.jpg}}; + + % % Feedback Model + % \node[inner sep=3pt, outer sep=6pt, anchor=north east, draw, fill=white, thin] (simscape_sim) at ($(model.north east) - (0, 0.5)$) + % {\includegraphics[width=3.6cm]{simscape_simulations.pdf}}; + + % % FeedBack + % \node[inner sep=3pt, outer sep=6pt, anchor=south east, draw, fill=white, thin] (feedback) at (model.south east) + % {\includegraphics[width=3.6cm]{classical_feedback_small.pdf}}; +\end{tikzpicture} +#+end_src + +#+RESULTS: +[[file:figs/nass_mechatronics_approach.png]] + +* Schematic Representation - NASS +#+begin_src latex :file nass_concept_schematic.pdf + \begin{tikzpicture} + % Parameters + \def\blockw{6.0cm} + \def\blockh{1.2cm} + + % Translation Stage + \begin{scope} + % 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); + + % Tilt + \path[] ([shift=(-120:4*\blockh)]0, 4.9*\blockh) coordinate(beginarc) arc (-120:-110:4*\blockh) % + -- ([shift=(-70:4*\blockh)]0, 4.9*\blockh) 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)]0, 4.9*\blockh) coordinate(beginarc) arc (-120:-110:4*\blockh) % + -- ([shift=(-70:4*\blockh)]0, 4.9*\blockh) 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) -| cycle; + + % 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); + + % Tilt Guidance + \draw[dashed, color=black!60] ([shift=(-110:4*\blockh)]0, 4.8*\blockh) arc (-110:-120:4*\blockh); + \draw[dashed, color=black!60] ([shift=( -70:4*\blockh)]0, 4.8*\blockh) arc (-70:-60:4*\blockh); + \end{scope} + + % Micro-Hexapod + \begin{scope}[shift={(spindletop)}] + % Parameters definitions + \def\baseh{0.2*\blockh} % Height of the base + \def\naceh{0.2*\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); + + % Nacelle1 + \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} + % Nacelle1 END + + \draw[] (armbasec) -- (armnacer); + \draw[] (armbasec) -- (armnacel); + \draw[] (armbasel) -- (armnacel); + \draw[] (armbasel) -- (armnacec); + \draw[] (armbaser) -- (armnacec); + \draw[] (armbaser) -- (armnacer); + \end{scope} + \end{scope} + + % NASS + \begin{scope}[shift={(uhexatop)}] + % Parameters definitions + \def\baseh{0.1*\blockh} % Height of the base + \def\naceh{0.1*\blockh} % Height of the nacelle + \def\baser{0.16*\blockw} % Radius of the base + \def\nacer{0.14*\blockw} % Radius of the nacelle + + \def\armr{0.1*\blockh} % Radius of the arms + \def\basearmborder{0.2} + \def\nacearmborder{0.2} + + \def\xnace{0} \def\ynace{0.6*\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=red!50!black] (-\baser, 0) coordinate[](nhexabot) rectangle (\baser, \baseh); + + \coordinate[] (armbasel) at (-\baser+\basearmborder+\armr, \baseh); + \coordinate[] (armbasec) at (0, \baseh); + \coordinate[] (armbaser) at (\baser-\basearmborder-\armr, \baseh); + + % Nacelle1 + \begin{scope}[shift={(\xnace, \ynace)}, rotate=\anace] + \draw[fill=red!50!black] (-\nacer, 0) rectangle (\nacer, \naceh); + \coordinate[] (nhexatop) at (0, \naceh); + \coordinate[] (armnacel) at (-\nacer+\nacearmborder+\armr, 0); + \coordinate[] (armnacec) at (0, 0); + \coordinate[] (armnacer) at (\nacer-\nacearmborder-\armr, 0); + \coordinate[] (measpostop) at (\nacer, \naceh); + \end{scope} + % Nacelle1 END + + \draw[color=red!50!black] (armbasec) -- (armnacer); + \draw[color=red!50!black] (armbasec) -- (armnacel); + \draw[color=red!50!black] (armbasel) -- (armnacel); + \draw[color=red!50!black] (armbasel) -- (armnacec); + \draw[color=red!50!black] (armbaser) -- (armnacec); + \draw[color=red!50!black] (armbaser) -- (armnacer); + + % Force actuator + \coordinate[] (nassfbot) at (0.8*\baser, \baseh); + \coordinate[] (nassftop) at (armnacec-|nassfbot); + \end{scope} + \end{scope} + + % Sample + \begin{scope}[shift={(nhexatop)}] + \draw[fill=white] (-0.1*\blockw, 0) coordinate[](samplebot) rectangle coordinate[pos=0.5](samplecenter) (0.1*\blockw, \blockh) coordinate[](sampletop); + \end{scope} + + % Laser + \begin{scope}[shift={(samplecenter)}] + \draw[color=red, -<-=0.5] (samplecenter) node[circle, fill=red, inner sep=0pt, minimum size=3pt]{} -- node[midway, above, color=black]{X-ray} ($(samplecenter)+(0.5*\blockw,0)$); + \end{scope} + + %% Measurement + \draw[dashed, color=black!50] (measposbot) -- ++(0.8,0) coordinate (measposbotend); + \draw[dashed, color=black!50] (measpostop) -- (measpostop-|measposbotend) coordinate (measpostopend); + \draw[<->, dashed] ($(measposbotend)+(-0.2, 0)$) -- node[midway, left](d){$d$} ($(measpostopend)+(-0.2, 0)$); + + %% Control + \draw[<->, line width=0.5pt] (nassfbot) -- node[midway, right](F){$F$} (nassftop); + \node[draw, block={2.3em}{1.7em}, right=0.3 of F] (K){$K$}; + \draw[->] (d.west) -| ($(K.east)+(0.5, 0)$) -- (K.east); + \draw[->] (K.west) -- (F.east); + \end{tikzpicture} +#+end_src diff --git a/tikz/flycheck_config.org b/tikz/flycheck_config.org new file mode 100644 index 0000000..4d1b957 --- /dev/null +++ b/tikz/flycheck_config.org @@ -0,0 +1,707 @@ +#+TITLE: LaTeX Configuration for Tikz Figures +:DRAWER: +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args:latex+ :tangle config.tex +#+PROPERTY: header-args:latex+ :exports code +:END: + +* Packages +#+begin_src latex +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +\usepackage[french, english]{babel} % Last language is main language + +\usepackage{lmodern} % Latin Modern Font +\usepackage{gensymb} % Generic symbols for both text and math mode + +\usepackage{standalone} % Used to generate standalone Tikz + +\usepackage{amsmath} % Main math Package +\usepackage{mathtools} % Extension package to amsmath +\usepackage{amsthm} % Typesetting theorems (AMS style) +\usepackage{amsfonts} % More fonts from the AMS +\usepackage{textcomp} % provide many text symbols +\usepackage{steinmetz} % For phase symbol + +\usepackage{xstring} % Utils to manipulate strings +\usepackage{etoolbox} % Add basic if/then +\usepackage{esvect} % Beautyfull vectors +\usepackage{graphicx} % Enhanced support for graphics +\usepackage{grffile} % Used by matlab2tikz + +\usepackage{microtype} % typographic tuning +\usepackage{setspace} % for line spacing, e.g. \onehalfspacing +\usepackage{tabularx} % table features +\usepackage{enumitem} % for simple list modifications +\usepackage{booktabs} % better table support + +\usepackage{stackengine} % + +\usepackage[load-configurations=abbreviations]{siunitx} % SI units +\sisetup{ + locale = US, + detect-all, + range-phrase=--, + range-units=single +} +#+end_src + +* Tikz related packages +#+begin_src latex + \usepackage{tikz} % Tikz + \usepackage{tikzscale} % Used to scale Tikz graphics + \usepackage{adjustbox} % Used to proper positioning of tikz pictures + \usepackage{circuitikz} % Draw electronic circuits + \usepackage{pgfpages} % Needed to use notes + \usepackage{pgfplots} % Used to plot functions +#+end_src + +* Tikz Libraries +#+begin_src latex + \usetikzlibrary{arrows} % Arrow tip library + \usetikzlibrary{arrows.meta} % Add some arrows + \usetikzlibrary{calc} % The library allows advanced Coordinate Calculations + \usetikzlibrary{intersections} % calculate intersections of paths + \usetikzlibrary{matrix} % + \usetikzlibrary{patterns} % + \usetikzlibrary{shapes} % Defines circle and rectangle + \usetikzlibrary{shapes.geometric} % Use for the shape diamond and isosceles triangle + \usetikzlibrary{snakes} % snake=coil and snake=zigzag using segment amplitude=10pt + \usetikzlibrary{positioning} % Additional options for placing nodes + \usetikzlibrary{3d} % Plot 3D shapes + \usetikzlibrary{spy} % Creating a magnified area + \usetikzlibrary{decorations.text} % Used to make text follows a curve + \usetikzlibrary{decorations.pathmorphing} % deformation of a path + \usetikzlibrary{decorations.markings} % Used for spring and damper + \usetikzlibrary{babel} % A tiny library that make the interaction with the babel package easier + \usetikzlibrary{plotmarks} % This library defines a number of plot marks + \usetikzlibrary{fit} % Used to make rectangle as nodes by specifying two points + \usetikzlibrary{backgrounds} % Used to put things under others +#+end_src + +* PGF Plot libraries and config +#+begin_src latex + \usepgfplotslibrary{patchplots} + \usepgfplotslibrary{groupplots} + + \pgfplotsset{compat=newest} + \pgfplotsset{plot coordinates/math parser=false} +#+end_src + +* Setup size of figures +#+begin_src latex + \newlength{\fheight} + \newlength{\fwidth} + + \setlength{\fwidth}{85mm} + \setlength{\fheight}{112mm} +#+end_src + +* Setup Arrows style +#+begin_src latex + \tikzset{>=Stealth} + % Setup default Linewidth + \tikzset{every path/.style={line width=1pt}} +#+end_src + +* Colors +#+begin_src latex +\usepackage{xcolor}% Color extension + +\definecolor{colorblack}{rgb}{0, 0, 0} +\definecolor{colorblue}{HTML}{0072bd} +\definecolor{colorred}{HTML}{d95218} +\definecolor{coloryellow}{HTML}{ecb01f} +\definecolor{colorpurple}{HTML}{7d2e8e} +\definecolor{colorgreen}{HTML}{77ab2f} + +\definecolor{lightblue}{HTML}{dbf0ff} +\definecolor{lightred}{HTML}{f9d9cb} +\definecolor{lightyellow}{HTML}{faf0d1} +\definecolor{lightpurple}{HTML}{efdcf4} +\definecolor{lightgreen}{HTML}{e6f3d3} + +% Main color +\definecolor{maincolor}{RGB}{89, 9, 38} +\definecolor{secondcolor}{RGB}{20, 9, 89} +#+end_src + +* Control +** Blocks +#+begin_src latex + \tikzset{% + block/.style n args={2}{% + draw, + fill=white, + minimum width = #1, + minimum height = #2, + }, + block/.default={1.2cm}{1.0cm} + } +#+end_src + +** Branches +#+begin_src latex + \tikzstyle{branch}=[fill,shape=circle,minimum size=4pt,inner sep=0pt] + \tikzstyle{->top}=[-{Stealth[color=black, scale=0.8]}, draw=white, double=black, double distance=1pt, line width=1pt] + \tikzstyle{<-top}=[{stealth[color=black, scale=0.8]}-, draw=white, double=black, double distance=1pt, line width=1pt] +#+end_src + +** Hand Writen Style +Usefull for schematic plots +#+begin_src latex + \tikzstyle{handwriten}=[decorate,decoration={random steps,amplitude=0.1pt,segment length=0.8pt}] +#+end_src + +** DAC +#+begin_src latex + \tikzset{% + DAC/.style={% + draw, + signal, + } + } +#+end_src + +** ADC +#+begin_src latex + \tikzset{% + ADC/.style={% + draw, + signal, + signal to = west, + } + } +#+end_src + +** Gain +#+begin_src latex + \tikzset{% + gain right/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=-90 + }, + gain left/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=90 + }, + gain top/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=0 + }, + gain bottom/.style={% + draw, + regular polygon, + regular polygon sides = 3, + inner sep = 2pt, + shape border rotate=180 + }, + } +#+end_src + +** Add / Substract / Divide / Multiply block +#+begin_src latex + \tikzset{% Add block with Circled operations + addc/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[draw, circle, outer sep=6pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addc/.default={+}{}{}{}{}, + } +#+end_src + +#+begin_src latex + \tikzset{% Add Block + addb/.style n args={5}{% + draw, + fill=white, + circle, + outer sep = 0pt, + inner sep = 0pt, + minimum size = 2em, + execute at begin node={\LARGE $#1$}, + append after command={\pgfextra{\let\mainnode=\tikzlastnode} + \ifx#2\empty\else + node[outer sep=2pt, inner sep=0pt, above left] at (\mainnode.west) {$#2$}% + \fi + \ifx#3\empty\else + node[outer sep=2pt, inner sep=0pt, above right] at (\mainnode.north) {$#3$}% + \fi + \ifx#4\empty\else + node[outer sep=2pt, inner sep=0pt, below right] at (\mainnode.east) {$#4$}% + \fi + \ifx#5\empty\else + node[outer sep=2pt, inner sep=0pt, below left] at (\mainnode.south) {$#5$}% + \fi + } + }, + addb/.default={+}{}{}{}{}, + } +#+end_src + +* Plots +** Default line caps +#+begin_src latex + \pgfplotsset{ + every axis plot/.append style={line join=round}, + every axis plot/.append style={line cap=round}, + } +#+end_src + +** Grid +#+begin_src latex + \pgfplotsset{grid style={black}} + \pgfplotsset{major grid style={black!30!white}} + \pgfplotsset{minor grid style={black!10!white}} + \pgfplotsset{xmajorgrids} + \pgfplotsset{ymajorgrids} +#+end_src + +** Lines +#+begin_src latex + \pgfplotsset{separate axis lines=false} % draw axis as rectangle and not as 4 lines + \pgfplotsset{every outer x axis line/.append style={black}} + \pgfplotsset{every outer y axis line/.append style={black}} + \pgfplotsset{axis background/.style={fill=white}} + \pgfplotsset{axis x line*=bottom} % solid line on the bottom with thin on the top + \pgfplotsset{axis y line*=left} % solid line on the left with thin on the right +#+end_src + +** Ticks +#+begin_src latex + \pgfplotsset{every y tick label/.append style={font=\color{black}}} + \pgfplotsset{every y tick/.append style={black}} + \pgfplotsset{every x tick label/.append style={font=\color{black}}} + \pgfplotsset{every x tick/.append style={black}} +#+end_src + +** Size +If =scale only axis=false= (the default), pgfplots will try to produce the desired width including labels, titles and ticks. +#+begin_src latex + \pgfplotsset{scale only axis=true} +#+end_src + +** Label +Used to align all of ylabel of one figure. +#+begin_src latex + \pgfplotsset{ylabel absolute} +#+end_src + +** Legend +#+begin_src latex + % https://tex.stackexchange.com/questions/54794/using-a-pgfplots-style-legend-in-a-plain-old-tikzpicture#54834 + + % argument #1: any options + \newenvironment{customlegend}[1][]{% + \begingroup + % inits/clears the lists (which might be populated from previous + % axes): + \csname pgfplots@init@cleared@structures\endcsname + \pgfplotsset{#1}% + }{% + % draws the legend: + \csname pgfplots@createlegend\endcsname + \endgroup + }% + + % makes \addlegendimage available (typically only available within an + % axis environment): + \def\addlegendimage{\csname pgfplots@addlegendimage\endcsname} + + % definition to insert numbers + % \pgfkeys{/pgfplots/number in legend/.style={% + % /pgfplots/legend image code/.code={% + % \node at (0.125,-0.0225){#1}; % <= changed x value + % },% + % }, + % } + \pgfplotsset{ + every legend to name picture/.style={west} + } +#+end_src + +** Upper and Lower bounds +#+begin_src latex + \pgfplotsset{upperbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=60}}] + \pgfplotsset{lowerbound}=[line cap=round, postaction={decorate,draw,decoration={border, segment length=0.2cm, amplitude=0.3cm, angle=-60}}] +#+end_src + +And we add the corresdonding +#+begin_src latex + \pgfplotsset{ + /pgfplots/upperbound/.style 1 args={ + legend image code/.code={ + \draw[##1, upperbound] + plot coordinates { + (0cm,0cm) + (0.6cm,0cm) + } + } + } + } +#+end_src + +** Pole +#+begin_src latex + \tikzset{% + pole/.style{% + color=red, + cross out, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + pole/.default={4} + } +#+end_src + +** Zero +#+begin_src latex + \tikzset{% + zero/.style{% + color=red, + circle, + draw, + inner sep=0pt, + outer sep=0pt, + minimum size=#1pt + }, + zero/.default={4} + } +#+end_src + +* Mechanical +** Spring +#+begin_src latex + \tikzset{% + spring/.style={% + thick, + decoration={ + zigzag, + pre length = #1cm, + post length = #1cm, + segment length = 6 + }, + decorate + }, + spring/.default={0.2} + } +#+end_src + +** Coil +#+begin_src latex + \tikzset{% + coil/.style n args={2}{% + thick, + decoration={ + coil, + pre length = #1cm, + post length = #2cm, + segment length = 4 + }, + decorate + }, + coil/.default={0.3}{0.3} + } +#+end_src + +** Damper +#+begin_src latex + \tikzset{% + damper/.style n args={2}{% + thick, + decoration={markings, mark connection node=dmp, mark=at position 0.5 with { + \node (dmp) [thick, + inner sep = 0pt, + transform shape, + rotate =-90, + minimum width = #1pt, + minimum height = #2pt, + draw=none] {}; + \draw [thick] ($(dmp.north east)+(0.6*#2pt,0)$) -- (dmp.south east) -- (dmp.south west) -- ($(dmp.north west)+(0.6*#2pt,0)$); + \draw [thick] ($(dmp.north)+(0,-0.3*#1pt)$) -- ($(dmp.north)+(0,0.3*#1pt)$); + } + }, + decorate + }, + damper/.default={12}{3} + } +#+end_src + +** Actuator +#+begin_src latex + \tikzset{% + actuator/.style n args={2}{% + thick, + draw=none, + decoration={ + markings, + mark connection node=my node, + mark=at position .5 with { + \node [draw, inner sep=0pt, minimum width=#1cm, minimum height=#2cm, + transform shape, fill=white] (my node) {}; + }, + mark=at position .0 with { + \draw[<-] (0, 0) -- (my node); + }, + mark=at position 1.0 with { + \draw[<-] (0, 0) -- (my node); + } + }, + decorate + }, + actuator/.default={0.5}{0.2} + } +#+end_src + +** Ground +#+begin_src latex + \tikzset{% + ground/.style n args={2}{% + fill, + pattern = north east lines, + draw = none, + anchor = north, + minimum width = #1cm, + minimum height = #2cm, + append after command={ + (\tikzlastnode.north west) edge (\tikzlastnode.north east) + } + }, + ground/.default={2.5}{0.3} + } +#+end_src + +** Force Sensor +#+begin_src latex + \tikzset{% + forcesensor/.style n args={2}{% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south, + minimum width =#1cm, + minimum height=#2cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + forcesensor/.default={2.0}{0.5} + } +#+end_src + +** Inertial Sensor +#+begin_src latex + \tikzset{% + inertialsensor/.style={% + rectangle, + outer sep=0pt, + inner sep=0pt, + draw=black, + fill=white!60!black, + anchor=south east, + minimum size=#1cm, + append after command={ + [every edge/.append style={ + thick, + black, + }] + (\tikzlastnode.north west) edge (\tikzlastnode.south east) + (\tikzlastnode.north east) edge (\tikzlastnode.south west) + } + }, + inertialsensor/.default={0.3} + } +#+end_src + +** Cross +#+begin_src latex + \tikzstyle{cross}=[path picture={ + \draw[black] + (path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east); + }] + +#+end_src + +** Piezoelectric actuator +#+begin_src latex + \tikzset{% + piezo/.style n args={3}{% + draw, + rectangle, + minimum width = #1cm, + minimum height = #2cm, + fill=blue!10!white, + anchor=center, + append after command={ + [every edge/.append style={ + thick, + black, + }] + \foreach \i in {1,...,#3}{ + (${\i/(1+#3)}*(\tikzlastnode.north west)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south west)+0.1*(#1,0)$) edge (${\i/(1+#3)}*(\tikzlastnode.north east)+{(1+#3-\i)/(1+#3)}*(\tikzlastnode.south east)-0.1*(#1,0)$) + } + } + }, + piezo/.default={2}{4}{10} + } +#+end_src + +** Voice coil +#+begin_src latex + \def\voicecoil#1#2#3{ + % ====================== + % Parameters + % ====================== + \def\voicecoilw{#1} % Total Width + \def\voicecoilh{#2} % Total Height + + \def\magnetw{\voicecoilw} % Width of the magnet + \def\magneth{\voicecoilh/1.4} % Height of the magnet + + \def\magnetwb{0.15*\magnetw} % Width of the borders of the magnet + \def\magnetmw{0.15*\magnetw} % Width of the middle part of the magnet + \def\magnetwg{0.5*\magnetw} % Width of the gap of the magnet + + \def\magnethl{\magnetwb} % Height of the low part of the magnet + \def\magnetmh{0.15*\magneth} % Height of the middle part of the magnet + \def\magnethg{0.2*\magneth} % Height of the gap of the magnet + % ====================== + + \begin{scope}[shift={(0.5*\voicecoilw, 0.5*\voicecoilh)}, rotate=#3, shift={(0, -0.5*\voicecoilh)}] + % ====================== + % Magnet + % ====================== + \draw[fill=white] (0, 0) -| ++(0.5*\magnetw, \magneth) -| ++(-0.5*\magnetw+0.5*\magnetwg, -\magnethg) -| (0.5*\magnetw-\magnetwb, \magnethl) -| (-0.5*\magnetw+\magnetwb, \magneth-\magnethg) -| (-0.5*\magnetwg, \magneth) -| (-0.5*\magnetw, 0) -- (cycle); + \begin{scope}[shift={(0, \magnethl)}] + \draw[fill=red] (-0.5*\magnetmw, 0) rectangle (0.5*\magnetmw, \magnetmh); + \draw[fill=blue] (-0.5*\magnetmw, \magnetmh) rectangle (0.5*\magnetmw, 2*\magnetmh); + % Top conductive Magnet + \draw[fill=white] (-0.5*\magnetmw, 2*\magnetmh) -| (0.5*\magnetmw, -\magnethl+\magneth-\magnethg) -| ++(0.1, \magnethg) -| ++(-0.2-\magnetmw, -\magnethg) -| (-0.5*\magnetmw, \magnetmh); + \end{scope} + % ====================== + + % ====================== + % Coil + % ====================== + \pgfmathsetmacro{\coilwidth}{0.5*0.5*\magnetmw+0.5*0.1+0.25*\magnetwg}% + \draw[] ( \coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + \draw[] (-\coilwidth, 0.5*\magneth) -- ++(0, 0.7*\magneth); + % Point on the coil + \foreach \x in {0,1,...,9} + { + \node[circle,inner sep=0.6pt,fill] at ( \coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + \node[circle,inner sep=0.6pt,fill] at (-\coilwidth, \x*0.7*\magneth/10+0.5*\magneth); + } + \draw[fill=white] (-0.5*\magnetw, 1.2*\magneth) rectangle ++(\magnetw, \magnethg); + % ====================== + + % ====================== + % Coordinates + % ====================== + % Force + \coordinate[] (vc_force) at (0, \magneth-0.5*\magnethg); + % Coil + \coordinate[] (vc_coil) at (0, \voicecoilh); + % Magnet + \coordinate[] (vc_magnet) at (0, 0); + % Coil Wires + \coordinate[] (vc_wire_one) at ( \coilwidth, 1.2*\magneth); + \coordinate[] (vc_wire_two) at (-\coilwidth, 1.2*\magneth); + % ====================== + \end{scope} + } +#+end_src + +** Axis Rotator +#+begin_src latex + \newcommand{\AxisRotator}[1][rotate=0]{% + \tikz [x=0.1cm,y=0.30cm,-stealth,#1] \draw (0,0) arc (-150:150:1 and 1);% + } +#+end_src + +* Optics +#+begin_src latex + \tikzset{% + ->-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{>} + } + }, + postaction={decorate} + } + } + \tikzset{% + -<-/.style={ + decoration={ + markings, + mark = at position #1 with {\arrow{<} + } + }, + postaction={decorate} + } + } +#+end_src + +* Misc +#+begin_src latex + \tikzset{% + labelc/.style= {% + draw, + fill=white, + shape=circle, + inner sep=2pt, + outer sep=6pt, + } + } +#+end_src + +* More Defaults specific to this paper +#+begin_src latex + \tikzset{block/.default={0.8cm}{0.8cm}} + \tikzset{addb/.append style={scale=0.7}} + \tikzset{node distance=0.6} +#+end_src diff --git a/tikz/flycheck_figures.org b/tikz/flycheck_figures.org new file mode 100644 index 0000000..807be21 --- /dev/null +++ b/tikz/flycheck_figures.org @@ -0,0 +1,110 @@ +#+TITLE: Tikz Figures +:DRAWER: +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{/home/thomas/Cloud/thesis/papers/dehaeze21_mechatronics_approach_nass/tikz/}{config.tex}") +#+PROPERTY: header-args:latex+ :imagemagick t :fit yes +#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 +#+PROPERTY: header-args:latex+ :imoutoptions -quality 100 +#+PROPERTY: header-args:latex+ :results file raw replace +#+PROPERTY: header-args:latex+ :eval no-export +#+PROPERTY: header-args:latex+ :exports both +#+PROPERTY: header-args:latex+ :mkdirp yes +#+PROPERTY: header-args:latex+ :output-dir figs +#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") +:END: + +* Mechatronic Approach +#+begin_src latex :file nass_mechatronics_approach.pdf +\graphicspath{ {/home/thomas/Cloud/thesis/papers/dehaeze21_mechatronics_approach_nass/tikz/figs-tikz} } + +\begin{tikzpicture} + % Styles + \tikzset{myblock/.style= {draw, fill=white, text width=3cm, align=center, minimum height=1.8cm}}; + \tikzset{mylabel/.style= {anchor=north, below, font=\bfseries\small, color=black, text width=3cm, align=center}}; + \tikzset{mymodel/.style= {anchor=south, above, font=\small, color=black, text width=3cm, align=center}}; + \tikzset{mystep/.style= {->, ultra thick}}; + + % Blocks + \node[myblock, fill=lightblue, draw, label={[mylabel, text width=9.8cm] Dynamical Models / Simulations / Control}, minimum height = 8cm, text width = 9.8cm] (model) at (0, 0) {}; + + \node[myblock, fill=lightgreen, label={[mylabel] $\mu$ Station}, left = 3 of model.south west, anchor=south east] (mustation) {}; + \node[myblock, fill=lightgreen, label={[mylabel] Disturbances}, left = 3 of model.west] (dist) {}; + \node[myblock, fill=lightgreen, label={[mylabel] $\nu$ Hexapod}, left = 3 of model.north west, anchor=north east] (nanohexapod) {}; + + \node[myblock, fill=lightyellow, label={[mylabel] Mech. Design}, above = 1 of model.north] (mechanical) {}; + \node[myblock, fill=lightyellow, label={[mylabel] Instrumentation}, left = 1 of mechanical] (instrumentation) {}; + \node[myblock, fill=lightyellow, label={[mylabel] FEM}, right = 1 of mechanical] (fem) {}; + + \node[myblock, fill=lightred, label={[mylabel] Assembly}, right = 3 of model.north east, anchor=north west] (mounting) {}; + \node[myblock, fill=lightred, label={[mylabel] Test Benches}, right = 3 of model.east] (testbenches) {}; + \node[myblock, fill=lightred, label={[mylabel] Implementation}, right = 3 of model.south east, anchor=south west] (implementation) {}; + + % Text + \node[mymodel] at (mustation.south) {Multiple Stages\\Complex Dynamics\\Solid Bodies}; + \node[mymodel] at (dist.south) {Ground Motion\\Vibrations\\Pos. Errors}; + \node[mymodel] at (nanohexapod.south) {Concepts (Soft, Stiff) \\ Geometry \\ Sensors}; + + \node[mymodel] at (instrumentation.south) {Sensors\\Amplifiers\\Actuators}; + \node[mymodel] at (mechanical.south) {Geometry\\Part Optimization\\Integration}; + \node[mymodel] at (fem.south) {Flexible joints\\APA\\Plates}; + + \node[mymodel] at (mounting.south) {Mounting Tools:\\Struts\\ Nano-Hexapod}; + \node[mymodel] at (testbenches.south) {Instrumentation\\APA, Struts\\Hexapod}; + \node[mymodel] at (implementation.south) {Test Benches\\$\mu$ Station}; + + % Links + \draw[->] (dist.east) -- node[above, midway]{Measurements} node[below,midway]{} (dist.east-|model.west); + \draw[->] (mustation.east) -- node[above, midway]{Measurements} node[below, midway]{CAD Model} (mustation.east-|model.west); + + \draw[->] ($(nanohexapod.east-|model.west)+(0, 0.2)$) -- node[above, midway]{Optimization} ($(nanohexapod.east)+(0, 0.2)$); + \draw[<-] ($(nanohexapod.east-|model.west)-(0, 0.2)$) -- node[below, midway]{Model} ($(nanohexapod.east)-(0, 0.2)$); + + \draw[->] ($(fem.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(fem.south)+(0.2,0)$); + \draw[<-] ($(fem.south|-model.north)-(0.2, 0)$) -- node[left, midway,align=right]{Super\\Element} ($(fem.south)-(0.2,0)$); + + \draw[->] ($(mechanical.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(mechanical.south)+(0.2,0)$); + \draw[<-] ($(mechanical.south|-model.north)-(0.2, 0)$) -- node[left, midway]{3D parts} ($(mechanical.south)-(0.2,0)$); + + \draw[->] ($(instrumentation.south|-model.north)+(0.2, 0)$) -- node[right, midway]{Specif.} ($(instrumentation.south)+(0.2,0)$); + \draw[<-] ($(instrumentation.south|-model.north)-(0.2, 0)$) -- node[left, midway]{Model} ($(instrumentation.south)-(0.2,0)$); + + \draw[->] ($(testbenches.west-|model.east)+(0, 0.2)$) -- node[above, midway]{Control Laws} ($(testbenches.west)+(0, 0.2)$); + \draw[<-] ($(testbenches.west-|model.east)-(0, 0.2)$) -- node[below, midway]{Refinement} ($(testbenches.west)-(0, 0.2)$); + + \draw[->] ($(implementation.west-|model.east)+(0, 0.2)$) -- node[above, midway]{Control Laws} ($(implementation.west)+(0, 0.2)$); + \draw[<-] ($(implementation.west-|model.east)-(0, 0.2)$) -- node[below, midway]{Refinement} ($(implementation.west)-(0, 0.2)$); + + % Steps + \draw[mystep] (mustation.north) -- (dist.south); + \draw[mystep] (dist.north) -- (nanohexapod.south); + \draw[mystep, postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={Validation of Concept}}}] (nanohexapod.north) to[out=90, in=180] (instrumentation.west); + \draw[mystep] (instrumentation.east) -- (mechanical.west); + \draw[mystep] (mechanical.east) -- (fem.west); + \draw[mystep, postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={Procurement}}}] (fem.east) to[out=0, in=90] (mounting.north); + \draw[mystep] (mounting.south) -- (testbenches.north); + \draw[mystep] (testbenches.south) -- (implementation.north); + + % Inside Model + \node[inner sep=1pt, outer sep=6pt, anchor=north west, draw, fill=white, thin] (multibodymodel) at ($(model.north west) - (0, 0.5)$) + {\includegraphics[width=5.6cm]{simscape_nano_hexapod.png}}; + + \node[inner sep=1pt, outer sep=6pt, anchor=south west, draw, fill=white, thin] (simscape) at (model.south west) + {\includegraphics[width=5.6cm]{simscape_picture.jpg}}; + + % Feedback Model + \node[inner sep=3pt, outer sep=6pt, anchor=north east, draw, fill=white, thin] (simscape_sim) at ($(model.north east) - (0, 0.5)$) + {\includegraphics[width=3.6cm]{simscape_simulations.pdf}}; + + % FeedBack + \node[inner sep=3pt, outer sep=6pt, anchor=south east, draw, fill=white, thin] (feedback) at (model.south east) + {\includegraphics[width=3.6cm]{classical_feedback_small.pdf}}; +\end{tikzpicture} +#+end_src + +#+RESULTS: +[[file:figs/nass_mechatronics_approach.png]] diff --git a/tikz/nass-mechatronics-approach.pdf b/tikz/nass-mechatronics-approach.pdf new file mode 100644 index 0000000..c995a8e Binary files /dev/null and b/tikz/nass-mechatronics-approach.pdf differ