Initial commit

This commit is contained in:
2025-11-27 18:26:54 +01:00
commit 267080d14f
61 changed files with 28674 additions and 0 deletions

259
.gitignore vendored Normal file
View File

@@ -0,0 +1,259 @@
ltximg/
*.autosave
slprj/
matlab/slprj/
*.slxc
# ============================================================
# ============================================================
# LATEX
# ============================================================
# ============================================================
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# makeidx
*.idx
*.ilg
*.ind
*.ist
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# easy-todo
*.lod
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices
*.xyc
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# KBibTeX
*~[0-9]*
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 188 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 188 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 180 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 183 KiB

View File

@@ -0,0 +1,356 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="13.278759mm"
height="33.567581mm"
viewBox="0 0 13.278759 33.567582"
version="1.1"
id="svg1704"
sodipodi:docname="detail_control_strut_model.svg"
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs1698">
<marker
style="overflow:visible"
id="marker2944"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Mend"
inkscape:isstock="true">
<path
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
id="path2942" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Send"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send"
inkscape:isstock="true">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path2659" />
</marker>
<clipPath
id="clip7">
<path
d="m 330,207.1875 h 13 V 215 h -13 z m 0,0"
id="path628" />
</clipPath>
<clipPath
id="clip8">
<path
d="m 344,295 h 5 v 12.71484 h -5 z m 0,0"
id="path631" />
</clipPath>
<g
id="g5348">
<symbol
overflow="visible"
id="symbol2127">
<path
style="stroke:none"
d=""
id="path7918" />
</symbol>
<symbol
overflow="visible"
id="symbol3179">
<path
style="stroke:none"
d="m 3.015625,-3.234375 h 0.96875 c 0.75,0 0.828125,0.15625 0.828125,0.4375 0,0.078125 0,0.1875 -0.0625,0.5 C 4.71875,-2.25 4.71875,-2.21875 4.71875,-2.1875 c 0,0.078125 0.0625,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.203125 L 5.53125,-4.453125 C 5.5625,-4.5625 5.5625,-4.578125 5.5625,-4.609375 5.5625,-4.625 5.546875,-4.71875 5.4375,-4.71875 5.34375,-4.71875 5.328125,-4.671875 5.296875,-4.5 5.078125,-3.734375 4.859375,-3.546875 4,-3.546875 H 3.09375 l 0.640625,-2.53125 C 3.828125,-6.4375 3.84375,-6.46875 4.28125,-6.46875 h 1.3125 c 1.21875,0 1.453125,0.328125 1.453125,1.09375 0,0.234375 0,0.265625 -0.03125,0.546875 C 7,-4.703125 7,-4.6875 7,-4.65625 c 0,0.046875 0.03125,0.125 0.125,0.125 0.109375,0 0.109375,-0.0625 0.125,-0.25 L 7.453125,-6.515625 C 7.484375,-6.78125 7.4375,-6.78125 7.1875,-6.78125 H 2.296875 c -0.1875,0 -0.296875,0 -0.296875,0.203125 0,0.109375 0.09375,0.109375 0.28125,0.109375 0.375,0 0.65625,0 0.65625,0.171875 0,0.046875 0,0.0625 -0.0625,0.25 L 1.5625,-0.78125 c -0.09375,0.390625 -0.109375,0.46875 -0.90625,0.46875 -0.171875,0 -0.28125,0 -0.28125,0.1875 C 0.375,0 0.5,0 0.53125,0 0.8125,0 1.5625,-0.03125 1.84375,-0.03125 2.171875,-0.03125 3,0 3.328125,0 3.421875,0 3.53125,0 3.53125,-0.1875 3.53125,-0.265625 3.484375,-0.296875 3.484375,-0.296875 3.453125,-0.3125 3.421875,-0.3125 3.203125,-0.3125 c -0.21875,0 -0.265625,0 -0.515625,-0.015625 -0.296875,-0.03125 -0.328125,-0.078125 -0.328125,-0.203125 0,-0.015625 0,-0.078125 0.046875,-0.21875 z m 0,0"
id="path2139" />
</symbol>
<symbol
overflow="visible"
id="symbol2267">
<path
style="stroke:none"
d=""
id="path2113" />
</symbol>
<symbol
overflow="visible"
id="symbol7919">
<path
style="stroke:none"
d="m 2.265625,-4.359375 c 0,-0.109375 -0.09375,-0.265625 -0.28125,-0.265625 -0.1875,0 -0.390625,0.1875 -0.390625,0.390625 0,0.109375 0.078125,0.265625 0.28125,0.265625 0.1875,0 0.390625,-0.203125 0.390625,-0.390625 z M 0.84375,-0.8125 c -0.03125,0.09375 -0.0625,0.171875 -0.0625,0.296875 0,0.328125 0.265625,0.578125 0.65625,0.578125 0.6875,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.109375,0.046875 -0.140625,0.125 -0.15625,0.5625 -0.453125,0.84375 -0.734375,0.84375 -0.140625,0 -0.171875,-0.09375 -0.171875,-0.25 0,-0.15625 0.046875,-0.28125 0.109375,-0.4375 C 1.46875,-1 1.546875,-1.1875 1.609375,-1.375 1.671875,-1.546875 1.9375,-2.171875 1.953125,-2.265625 1.984375,-2.328125 2,-2.40625 2,-2.484375 2,-2.8125 1.71875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.75,-2.625 1.0625,-2.875 1.3125,-2.875 c 0.109375,0 0.171875,0.046875 0.171875,0.234375 0,0.171875 -0.03125,0.265625 -0.203125,0.703125 z m 0,0"
id="path4488" />
</symbol>
</g>
<g
id="g6153">
<symbol
overflow="visible"
id="symbol6338">
<path
style="stroke:none"
d=""
id="path8765" />
</symbol>
<symbol
overflow="visible"
id="symbol8917">
<path
style="stroke:none"
d="m 2.859375,-6.8125 c 0,0 0,-0.109375 -0.125,-0.109375 -0.234375,0 -0.953125,0.078125 -1.21875,0.109375 -0.078125,0 -0.1875,0.015625 -0.1875,0.1875 0,0.125 0.09375,0.125 0.234375,0.125 0.484375,0 0.5,0.0625 0.5,0.171875 L 2.03125,-6.125 0.59375,-0.390625 c -0.046875,0.140625 -0.046875,0.15625 -0.046875,0.21875 0,0.234375 0.203125,0.28125 0.296875,0.28125 0.125,0 0.265625,-0.09375 0.328125,-0.203125 0.046875,-0.09375 0.5,-1.9375 0.5625,-2.1875 0.34375,0.03125 1.15625,0.1875 1.15625,0.84375 0,0.078125 0,0.109375 -0.03125,0.21875 -0.015625,0.109375 -0.03125,0.234375 -0.03125,0.34375 0,0.578125 0.390625,0.984375 0.90625,0.984375 0.296875,0 0.578125,-0.15625 0.796875,-0.53125 0.25,-0.4375 0.359375,-0.984375 0.359375,-1 0,-0.109375 -0.09375,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.046875 -0.140625,0.1875 -0.203125,0.71875 -0.421875,1.234375 -0.859375,1.234375 -0.203125,0 -0.328125,-0.109375 -0.328125,-0.46875 0,-0.171875 0.046875,-0.40625 0.078125,-0.5625 C 3.5625,-1.3125 3.5625,-1.34375 3.5625,-1.453125 3.5625,-2.09375 2.9375,-2.375 2.078125,-2.5 2.390625,-2.671875 2.71875,-2.984375 2.9375,-3.234375 3.421875,-3.765625 3.875,-4.1875 4.359375,-4.1875 c 0.0625,0 0.078125,0 0.09375,0.015625 0.125,0.015625 0.125,0.015625 0.21875,0.078125 0.015625,0 0.015625,0.015625 0.03125,0.03125 -0.46875,0.03125 -0.5625,0.421875 -0.5625,0.546875 0,0.15625 0.109375,0.34375 0.375,0.34375 0.265625,0 0.546875,-0.21875 0.546875,-0.609375 0,-0.296875 -0.234375,-0.625 -0.671875,-0.625 -0.28125,0 -0.734375,0.078125 -1.453125,0.875 -0.34375,0.375 -0.734375,0.78125 -1.109375,0.921875 z m 0,0"
id="path4386" />
</symbol>
<symbol
overflow="visible"
id="symbol5917">
<path
style="stroke:none"
d=""
id="path6746" />
</symbol>
<symbol
overflow="visible"
id="symbol6271">
<path
style="stroke:none"
d="m 2.265625,-4.359375 c 0,-0.109375 -0.09375,-0.265625 -0.28125,-0.265625 -0.1875,0 -0.390625,0.1875 -0.390625,0.390625 0,0.109375 0.078125,0.265625 0.28125,0.265625 0.1875,0 0.390625,-0.203125 0.390625,-0.390625 z M 0.84375,-0.8125 c -0.03125,0.09375 -0.0625,0.171875 -0.0625,0.296875 0,0.328125 0.265625,0.578125 0.65625,0.578125 0.6875,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.109375,0.046875 -0.140625,0.125 -0.15625,0.5625 -0.453125,0.84375 -0.734375,0.84375 -0.140625,0 -0.171875,-0.09375 -0.171875,-0.25 0,-0.15625 0.046875,-0.28125 0.109375,-0.4375 C 1.46875,-1 1.546875,-1.1875 1.609375,-1.375 1.671875,-1.546875 1.9375,-2.171875 1.953125,-2.265625 1.984375,-2.328125 2,-2.40625 2,-2.484375 2,-2.8125 1.71875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.75,-2.625 1.0625,-2.875 1.3125,-2.875 c 0.109375,0 0.171875,0.046875 0.171875,0.234375 0,0.171875 -0.03125,0.265625 -0.203125,0.703125 z m 0,0"
id="path6431" />
</symbol>
</g>
<marker
inkscape:stockid="Arrow2Sstart"
orient="auto"
refY="0"
refX="0"
id="marker17601-2-5"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path17599-9-6"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="marker17513-1-2"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path17511-2-9"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="27.767857"
inkscape:cy="66.071428"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
inkscape:window-width="2534"
inkscape:window-height="1367"
inkscape:window-x="11"
inkscape:window-y="60"
inkscape:window-maximized="1"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata1701">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-17.244688,-19.048727)">
<path
style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 21.064788,40.352595 v -0.805093 l -1.18161,-0.388228 1.74865,-0.652061 -1.74865,-0.664122 1.74865,-0.707499 -1.74865,-0.699796 1.74865,-0.653532 -1.74865,-0.631163 1.18161,-0.767104 v -0.857424"
id="path17444-0-3"
sodipodi:nodetypes="ccccccccccc"
inkscape:export-xdpi="252"
inkscape:export-ydpi="252" />
<path
sodipodi:nodetypes="cc"
id="path17446-3-6"
d="M 23.884528,40.352595 V 37.591568"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000" />
<path
sodipodi:nodetypes="cccc"
id="path17450-6-0"
d="m 22.938538,36.034274 v 1.557294 h 1.89199 v -1.557294"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path17454-0-6"
d="m 23.243248,36.415127 h 1.28257"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path17456-6-2"
d="m 23.884528,33.526578 v 2.888549"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000" />
<rect
y="35.074936"
x="26.019251"
height="3.7292752"
width="1.0184269"
id="rect17480-6-6"
style="fill:none;fill-opacity:0.450598;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000" />
<path
sodipodi:nodetypes="cc"
id="path17482-1-1"
d="m 26.528468,33.76906 v 1.305878"
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17601-2-5)" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17513-1-2)"
d="M 26.528468,38.804217 V 40.05268"
id="path17482-3-8-8" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 20.295688,33.419112 h 7.17442 v -6.49745 h -7.17442 z"
id="path2202-7-2"
sodipodi:nodetypes="ccccc" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 18.902228,26.72138 h -1.52272 v 15.23146 h 13.01144 V 26.72138 h -1.52411 v 13.70873 h -9.96461 z"
id="path2220"
sodipodi:nodetypes="ccccccccc" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 23.885228,47.5022 -1.66191,2.87872 h 3.32383 z m 0,0"
id="path2238-5" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 23.885228,47.71029 -3.32383,-5.75745 h 6.64766 z m 0,0"
id="path2240-3" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.352777"
d="m 25.013838,47.62622 c 0,0.62288 -0.50574,1.12724 -1.12861,1.12724 -0.62287,0 -1.12861,-0.50436 -1.12861,-1.12724 0,-0.62425 0.50574,-1.12861 1.12861,-1.12861 0.62287,0 1.12861,0.50436 1.12861,1.12861"
id="path2242" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 25.013838,47.62622 c 0,0.62288 -0.50574,1.12724 -1.12861,1.12724 -0.62287,0 -1.12861,-0.50436 -1.12861,-1.12724 0,-0.62425 0.50574,-1.12861 1.12861,-1.12861 0.62287,0 1.12861,0.50436 1.12861,1.12861 z m 0,0"
id="path2244" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.352777"
d="m 24.261428,47.62622 c 0,0.20671 -0.16811,0.3762 -0.3762,0.3762 -0.20808,0 -0.3762,-0.16949 -0.3762,-0.3762 0,-0.20808 0.16812,-0.3762 0.3762,-0.3762 0.20809,0 0.3762,0.16812 0.3762,0.3762"
id="path2246" />
<path
style="fill:none;stroke:#000000;stroke-width:0.214932;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 24.261438,47.62622 c 0,0.20671 -0.16813,0.37621 -0.37621,0.37621 -0.20808,0 -0.3762,-0.1695 -0.3762,-0.37621 0,-0.20808 0.16812,-0.3762 0.3762,-0.3762 0.20808,0 0.37621,0.16812 0.37621,0.3762 z m 0,0"
id="path2248" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 17.379508,52.48381 h 13.01143 v -2.10702 h -13.01143 z m 0,0"
id="path2250" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 17.377188,21.288247 h 13.01143 v -2.10702 h -13.01143 z m 0,0"
id="path2250-7" />
<g
id="g8"
transform="translate(-99.98304,-10.238269)"
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000">
<g
id="g7"
transform="translate(1.5886083,0.0381105)"
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1">
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,42.751794 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path2206" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,41.164293 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path5" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,39.576792 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path6" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,37.989291 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path7" />
</g>
<g
id="g7-9"
transform="translate(10.157917,0.0381105)"
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1">
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,42.751794 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path2206-4" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,41.164293 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path5-7" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,39.576792 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path6-8" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 118.47656,37.989291 c 0,-0.267157 -0.21673,-0.48388 -0.48388,-0.48388 -0.26716,0 -0.48389,0.216723 -0.48389,0.48388 0,0.267163 0.21673,0.483886 0.48389,0.483886 0.26715,0 0.48388,-0.216723 0.48388,-0.483886 z m 0,0"
id="path7-4" />
</g>
</g>
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 23.882898,24.042942 -1.66191,2.87872 h 3.32383 z m 0,0"
id="path2238-5-6" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 23.882908,24.166967 1.66191,-2.87872 h -3.32383 z m 0,0"
id="path2238-5-6-4" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.352777"
d="m 25.011508,24.166962 c 0,0.62288 -0.50574,1.12724 -1.12861,1.12724 -0.62287,0 -1.12861,-0.50436 -1.12861,-1.12724 0,-0.62425 0.50574,-1.12861 1.12861,-1.12861 0.62287,0 1.12861,0.50436 1.12861,1.12861"
id="path2242-6" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 25.011508,24.166962 c 0,0.62288 -0.50574,1.12724 -1.12861,1.12724 -0.62287,0 -1.12861,-0.50436 -1.12861,-1.12724 0,-0.62425 0.50574,-1.12861 1.12861,-1.12861 0.62287,0 1.12861,0.50436 1.12861,1.12861 z m 0,0"
id="path2244-4" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.352777"
d="m 24.259098,24.166962 c 0,0.20671 -0.16811,0.3762 -0.3762,0.3762 -0.20808,0 -0.3762,-0.16949 -0.3762,-0.3762 0,-0.20808 0.16812,-0.3762 0.3762,-0.3762 0.20809,0 0.3762,0.16812 0.3762,0.3762"
id="path2246-9" />
<path
style="fill:none;stroke:#000000;stroke-width:0.214932;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 24.259108,24.166962 c 0,0.20671 -0.16813,0.37621 -0.37621,0.37621 -0.20808,0 -0.3762,-0.1695 -0.3762,-0.37621 0,-0.20808 0.16812,-0.3762 0.3762,-0.3762 0.20808,0 0.37621,0.16812 0.37621,0.3762 z m 0,0"
id="path2248-5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

1
inkscape/figs Symbolic link
View File

@@ -0,0 +1 @@
../paper/figs

93
inkscape/tikz.org Normal file
View File

@@ -0,0 +1,93 @@
#+TITLE: Decoupling Control of Parallel Manipulators
:DRAWER:
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{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+ :buffer no
#+PROPERTY: header-args:latex+ :tangle no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
#+latex: \clearpage
#+begin_src latex :file detail_control_decoupling_control_jacobian.pdf
\begin{tikzpicture}
\node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$};
\node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{O\}}^{-\intercal}$};
\node[block, right=0.6 of G] (Ja) {$\bm{J}_{\{O\}}^{-1}$};
% Connections and labels
\draw[<-] (Jt.west) -- ++(-1.4, 0) node[above right]{$\bm{\mathcal{F}}_{\{O\}}$};
\draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (Ja.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (Ja.east) -- ++( 1.4, 0) node[above left]{$\bm{\mathcal{X}}_{\{O\}}$};
\begin{scope}[on background layer]
\node[fit={(Jt.south west) (Ja.north east)}, fill=black!10!white, draw, dashed, inner sep=4pt] (Gx) {};
\node[above] at (Gx.north) {$\bm{G}_{\{O\}}$};
\end{scope}
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/detail_control_decoupling_control_jacobian.png]]
#+begin_src latex :file detail_control_decoupling_modal.pdf
\begin{tikzpicture}
\node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$};
\node[block, left=0.6 of G] (Jt) {$\bm{J}_{\{M\}}^{-\intercal}$};
\node[block, left=1.2 of Jt] (Bm) {$\bm{\Phi}^{-\intercal}$};
\node[block, right=0.6 of G] (J) {$\bm{J}_{\{M\}}^{-1}$};
\node[block, right=1.2 of J] (Cm) {$\bm{\Phi}^{-1}$};
% Connections and labels
\draw[<-] (Bm.west) -- ++(-1.0, 0) node[above right]{$\bm{\tau}_m$};
\draw[->] (Bm.east) -- (Jt.west) node[above left]{$\bm{\mathcal{F}}_{\{M\}}$};
\draw[->] (Jt.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (J.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (J.east) -- (Cm.west) node[above left]{$\bm{\mathcal{X}}_{\{M\}}$};
\draw[->] (Cm.east) -- ++( 1.0, 0) node[above left]{$\bm{\mathcal{X}}_m$};
\begin{scope}[on background layer]
\node[fit={(Bm.south west) (Cm.north east)}, fill=black!10!white, draw, dashed, inner sep=4pt] (Gm) {};
\node[above] at (Gm.north) {$\bm{G}_m$};
\end{scope}
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/detail_control_decoupling_modal.png]]
#+begin_src latex :file detail_control_decoupling_svd.pdf
\begin{tikzpicture}
\node[block] (G) {$\bm{G}_{\{\mathcal{L}\}}$};
\node[block, left=0.6 of G.west] (V) {$\bm{V}^{-\intercal}$};
\node[block, right=0.6 of G.east] (U) {$\bm{U}^{-1}$};
% Connections and labels
\draw[<-] (V.west) -- ++(-0.8, 0) node[above right]{$\bm{u}$};
\draw[->] (V.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) -- (U.west) node[above left]{$\bm{\mathcal{L}}$};
\draw[->] (U.east) -- ++( 0.8, 0) node[above left]{$\bm{y}$};
\begin{scope}[on background layer]
\node[fit={(V.south west) (G.north-|U.east)}, fill=black!10!white, draw, dashed, inner sep=4pt] (Gsvd) {};
\node[above] at (Gsvd.north) {$\bm{G}_{\text{SVD}}$};
\end{scope}
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/detail_control_decoupling_svd.png]]

View File

@@ -0,0 +1,248 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
%% Path for functions, data and scripts
addpath('./src/'); % Path for functions
%% Colors for the figures
colors = colororder;
%% Initialize Frequency Vector
freqs = logspace(0, 3, 1000);
%% Compute Equation of motion
l = 1; h=2;
la = 0.5; % Horizontal position of actuators [m]
ha = 0.2; % Vertical of actuators [m]
m = 40; % Payload mass [kg]
I = 5; % Payload rotational inertia [kg m^2]
c = 2e2; % Actuator Damping [N/(m/s)]
k = 1e6; % Actuator Stiffness [N/m]
% Unit vectors of the actuators
s1 = [1;0];
s2 = [0;1];
s3 = [0;1];
% Stiffnesss and Damping matrices of the struts
Kr = diag([k,k,k]);
Cr = diag([c,c,c]);
% Location of the joints with respect to the center of mass
Mb1 = [-l/2;-ha];
Mb2 = [-la; -h/2];
Mb3 = [ la; -h/2];
% Jacobian matrix (Center of Mass)
J_CoM = [s1', Mb1(1)*s1(2)-Mb1(2)*s1(1);
s2', Mb2(1)*s2(2)-Mb2(2)*s2(1);
s3', Mb3(1)*s3(2)-Mb3(2)*s3(1)];
% Mass Matrix in frame {M}
M = diag([m,m,I]);
% Stiffness Matrix in frame {M}
K = J_CoM'*Kr*J_CoM;
% Damping Matrix in frame {M}
C = J_CoM'*Cr*J_CoM;
% Plant in the frame of the struts
G_L = J_CoM*inv(M*s^2 + C*s + K)*J_CoM';
figure;
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
for out_i = 1:3
for in_i = 1:3
nexttile;
plot(freqs, abs(squeeze(freqresp(G_L(out_i,in_i), freqs, 'Hz'))), 'k-', ...
'DisplayName', sprintf('$\\mathcal{L}_%i/\\tau_%i$', out_i, in_i));
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlim([freqs(1), freqs(end)]); ylim([2e-8, 4e-5]);
xticks([1e0, 1e1, 1e2])
yticks([1e-7, 1e-6, 1e-5])
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
if in_i == 1
ylabel('Mag. [m/N]')
else
set(gca, 'YTickLabel',[]);
end
if out_i == 3
xlabel('Frequency [Hz]')
else
set(gca, 'XTickLabel',[]);
end
end
end
%% Jacobian Decoupling - Center of Mass
G_CoM = pinv(J_CoM)*G_L*pinv(J_CoM');
G_CoM.InputName = {'Fx', 'Fy', 'Mz'};
G_CoM.OutputName = {'Dx', 'Dy', 'Rz'};
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_CoM(1, 3), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$D_{x,\{M\}}/M_{z,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(3, 1), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$R_{z,\{M\}}/F_{x,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(1, 1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$D_{x,\{M\}}/F_{x,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(2, 2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$D_{y,\{M\}}/F_{y,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(3, 3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$R_{z,\{M\}}/M_{z,\{M\}}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 1e-3]);
leg = legend('location', 'southwest', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
%% Jacobian Decoupling - Center of Mass
% Location of the joints with respect to the center of stiffness
Mb1 = [-l/2; 0];
Mb2 = [-la; -h/2+ha];
Mb3 = [ la; -h/2+ha];
% Jacobian matrix (Center of Stiffness)
J_CoK = [s1', Mb1(1)*s1(2)-Mb1(2)*s1(1);
s2', Mb2(1)*s2(2)-Mb2(2)*s2(1);
s3', Mb3(1)*s3(2)-Mb3(2)*s3(1)];
G_CoK = pinv(J_CoK)*G_L*pinv(J_CoK');
G_CoK.InputName = {'Fx', 'Fy', 'Mz'};
G_CoK.OutputName = {'Dx', 'Dy', 'Rz'};
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_CoK(1, 1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$D_{x,\{K\}}/F_{x,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(2, 2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$D_{y,\{K\}}/F_{y,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(3, 3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$R_{z,\{K\}}/M_{z,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(1, 3), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$D_{x,\{K\}}/M_{z,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(3, 1), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$R_{z,\{K\}}/F_{x,\{K\}}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 1e-3]);
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
leg.ItemTokenSize(1) = 18;
%% Modal decoupling
% Compute the eigen vectors
[phi, wi] = eig(M\K);
% Sort the eigen vectors by increasing associated frequency
[~, i] = sort(diag(wi));
phi = phi(:, i);
% Plant in the modal space
Gm = inv(phi)*inv(J_CoM)*G_L*inv(J_CoM')*inv(phi');
%% Modal decoupled plant
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(Gm(1,1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$\mathcal{X}_{m,1}/\tau_{m,1}$');
plot(freqs, abs(squeeze(freqresp(Gm(2,2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$\mathcal{X}_{m,2}/\tau_{m,2}$');
plot(freqs, abs(squeeze(freqresp(Gm(3,3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$\mathcal{X}_{m,3}/\tau_{m,3}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-8, 1e-4]);
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
%% SVD Decoupling
wc = 2*pi*100; % Decoupling frequency [rad/s]
% System's response at the decoupling frequency
H1 = evalfr(G_L, j*wc);
% Real approximation of G(j.wc)
D = pinv(real(H1'*H1));
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
[U,S,V] = svd(H1);
Gsvd = inv(U)*G_L*inv(V');
figure;
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gsvd(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gsvd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gsvd(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 2e-4]);
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
%% Simscape model with relative motion sensor at alternative positions
mdl = 'detail_control_decoupling_test_model';
open(mdl)
deq = 0.2; % Length of the actuators [m]
% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 2, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 3, 'openoutput'); io_i = io_i + 1;
G_L_alt = linearize(mdl, io);
G_L_alt.InputName = {'F1', 'F2', 'F3'};
G_L_alt.OutputName = {'d1', 'd2', 'd32'};
% SVD Decoupling with the new plant
wc = 2*pi*100; % Decoupling frequency [rad/s]
% System's response at the decoupling frequency
H1 = evalfr(G_L_alt, j*wc);
% Real approximation of G(j.wc)
D = pinv(real(H1'*H1));
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
[U,S,V] = svd(H1);
Gsvd_alt = inv(U)*G_L_alt*inv(V');
%% Obtained plant after SVD decoupling - Relative motion sensors are not collocated with the actuators
figure;
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([5e-11, 7e-5]);
leg = legend('location', 'southwest', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;

Binary file not shown.

1
matlab/figs Symbolic link
View File

@@ -0,0 +1 @@
../paper/figs

867
matlab/index.org Normal file
View File

@@ -0,0 +1,867 @@
#+TITLE: Decoupling Properties of the Cubic Architecture
:DRAWER:
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments no
#+PROPERTY: header-args:matlab+ :exports none
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :noweb yes
#+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :tangle dehaeze26_decoupling.m
:END:
* Introduction :ignore:
The control of parallel manipulators (and any MIMO system in general) typically involves a two-step approach: first decoupling the plant dynamics (using various strategies discussed in this section), followed by the application of SISO control for the decoupled plant (discussed in section ref:sec:detail_control_cf).
When sensors are integrated within the struts, decentralized control may be applied, as the system is already well decoupled at low frequency.
For instance, [[cite:&furutani04_nanom_cuttin_machin_using_stewar]] implemented a system where each strut consists of piezoelectric stack actuators and eddy current displacement sensors, with separate PI controllers for each strut.
A similar control architecture was proposed in [[cite:&du14_piezo_actuat_high_precis_flexib]] using strain gauge sensors integrated in each strut.
An alternative strategy involves decoupling the system in the Cartesian frame using Jacobian matrices.
As demonstrated during the study of Stewart platform kinematics, Jacobian matrices can be utilized to map actuator forces to forces and torques applied on the top platform.
This approach enables the implementation of controllers in a defined frame.
It has been applied with various sensor types including force sensors [[cite:&mcinroy00_desig_contr_flexur_joint_hexap]], relative displacement sensors [[cite:&kim00_robus_track_contr_desig_dof_paral_manip]], and inertial sensors [[cite:&li01_simul_vibrat_isolat_point_contr;&abbas14_vibrat_stewar_platf]].
The Cartesian frame in which the system is decoupled is typically chosen at the point of interest (i.e., where the motion is of interest) or at the center of mass.
Modal decoupling represents another noteworthy decoupling strategy, wherein the "local" plant inputs and outputs are mapped to the modal space.
In this approach, multiple SISO plants, each corresponding to a single mode, can be controlled independently.
This decoupling strategy has been implemented for active damping applications [[cite:&holterman05_activ_dampin_based_decoup_colloc_contr]], which is logical as it is often desirable to dampen specific modes.
The strategy has also been employed in [[cite:&pu11_six_degree_of_freed_activ]] for vibration isolation purposes using geophones, and in [[cite:&yang19_dynam_model_decoup_contr_flexib]] using force sensors.
Another completely different strategy would be to implement a multivariable control directly on the coupled system.
$\mathcal{H}_\infty$ and $\mu\text{-synthesis}$ were applied to a Stewart platform model in [[cite:&lei08_multi_objec_robus_activ_vibrat]].
In [[cite:&xie17_model_contr_hybrid_passiv_activ]], decentralized force feedback was first applied, followed by $\mathcal{H}_2\text{-synthesis}$ for vibration isolation based on accelerometers.
$\mathcal{H}_\infty\text{-synthesis}$ was also employed in [[cite:&jiao18_dynam_model_exper_analy_stewar]] for active damping based on accelerometers.
A comparative study between $\mathcal{H}_\infty\text{-synthesis}$ and decentralized control in the frame of the struts was performed in [[cite:&thayer02_six_axis_vibrat_isolat_system]].
Their experimental closed-loop results indicated that the $\mathcal{H}_\infty$ controller did not outperform the decentralized controller in the frame of the struts.
These limitations were attributed to the model's poor ability to predict off-diagonal dynamics, which is crucial for $\mathcal{H}_\infty\text{-synthesis}$.
The purpose of this section is to compare several methods for the decoupling of parallel manipulators, an analysis that appears to be lacking in the literature.
A simplified parallel manipulator model is introduced in Section ref:ssec:detail_control_decoupling_model as a test case for evaluating decoupling strategies.
The decentralized plant (transfer functions from actuators to sensors integrated in the struts) is examined in Section ref:ssec:detail_control_decoupling_decentralized.
Three approaches are investigated across subsequent sections: Jacobian matrix decoupling (Section ref:ssec:detail_control_decoupling_jacobian), modal decoupling (Section ref:ssec:detail_control_decoupling_modal), and Singular Value Decomposition (SVD) decoupling (Section ref:ssec:detail_control_decoupling_svd).
Finally, a comparative analysis with concluding observations is provided in Section ref:ssec:detail_control_decoupling_comp.
* Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :eval no :noweb yes :results silent
<<m-init-path-tangle>>
#+end_src
#+begin_src matlab :noweb yes :results silent
<<m-init-other>>
%% Initialize Frequency Vector
freqs = logspace(0, 3, 1000);
#+end_src
* Test Model
<<ssec:detail_control_decoupling_model>>
Instead of utilizing the Stewart platform for comparing decoupling strategies, a simplified parallel manipulator is employed to facilitate a more straightforward analysis.
The system illustrated in Figure ref:fig:detail_control_decoupling_model_test is used for this purpose.
It possesses three degrees of freedom (DoF) and incorporates three parallel struts.
Being a fully parallel manipulator, it is therefore quite similar to the Stewart platform.
Two reference frames are defined within this model: frame $\{M\}$ with origin $O_M$ at the center of mass of the solid body, and frame $\{K\}$ with origin $O_K$ at the center of stiffness of the parallel manipulator.
#+attr_latex: :options [b]{0.60\linewidth}
#+begin_minipage
#+name: fig:detail_control_decoupling_model_test
#+caption: Model used to compare decoupling strategies
#+attr_latex: :float nil :scale 1
[[file:figs/detail_control_decoupling_model_test.png]]
#+end_minipage
\hfill
#+attr_latex: :options [b]{0.36\linewidth}
#+begin_minipage
#+begin_scriptsize
#+latex: \centering
#+attr_latex: :environment tabularx :width \linewidth :placement [b] :align cXc
#+attr_latex: :booktabs t :float nil :center nil
| | *Description* | *Value* |
|-------+-----------------------+-------------------|
| $l_a$ | | $0.5\,m$ |
| $h_a$ | | $0.2\,m$ |
| $k$ | Actuator stiffness | $10\,N/\mu m$ |
| $c$ | Actuator damping | $200\,Ns/m$ |
| $m$ | Payload mass | $40\,\text{kg}$ |
| $I$ | Payload $R_z$ inertia | $5\,\text{kg}m^2$ |
#+latex: \captionof{table}{\label{tab:detail_control_decoupling_test_model_params}Model parameters}
#+end_scriptsize
#+end_minipage
The equations of motion are derived by applying Newton's second law to the suspended mass, expressed at its center of mass eqref:eq:detail_control_decoupling_model_eom, where $\bm{\mathcal{X}}_{\{M\}}$ represents the two translations and one rotation with respect to the center of mass, and $\bm{\mathcal{F}}_{\{M\}}$ denotes the forces and torque applied at the center of mass.
\begin{equation}\label{eq:detail_control_decoupling_model_eom}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t), \quad
\bm{\mathcal{X}}_{\{M\}} = \begin{bmatrix}
x \\
y \\
R_z
\end{bmatrix}, \quad \bm{\mathcal{F}}_{\{M\}} = \begin{bmatrix}
F_x \\
F_y \\
M_z
\end{bmatrix}
\end{equation}
The Jacobian matrix $\bm{J}_{\{M\}}$ is employed to map the spring, damping, and actuator forces to XY forces and Z torque expressed at the center of mass eqref:eq:detail_control_decoupling_jacobian_CoM.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}
\end{equation}
Subsequently, the equation of motion relating the actuator forces $\tau$ to the motion of the mass $\bm{\mathcal{X}}_{\{M\}}$ is derived eqref:eq:detail_control_decoupling_plant_cartesian.
\begin{equation}\label{eq:detail_control_decoupling_plant_cartesian}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
The matrices representing the payload inertia, actuator stiffness, and damping are shown in eqref:eq:detail_control_decoupling_system_matrices.
\begin{equation}\label{eq:detail_control_decoupling_system_matrices}
\bm{M}_{\{M\}} = \begin{bmatrix}
m & 0 & 0 \\
0 & m & 0 \\
0 & 0 & I
\end{bmatrix}, \quad
\bm{\mathcal{K}} = \begin{bmatrix}
k & 0 & 0 \\
0 & k & 0 \\
0 & 0 & k
\end{bmatrix}, \quad
\bm{\mathcal{C}} = \begin{bmatrix}
c & 0 & 0 \\
0 & c & 0 \\
0 & 0 & c
\end{bmatrix}
\end{equation}
The parameters employed for the subsequent analysis are summarized in Table ref:tab:detail_control_decoupling_test_model_params, which includes values for geometric parameters ($l_a$, $h_a$), mechanical properties (actuator stiffness $k$ and damping $c$), and inertial characteristics (payload mass $m$ and rotational inertia $I$).
* Control in the frame of the struts
<<ssec:detail_control_decoupling_decentralized>>
The dynamics in the frame of the struts are first examined.
The equation of motion relating actuator forces $\bm{\mathcal{\tau}}$ to strut relative motion $\bm{\mathcal{L}}$ is derived from equation eqref:eq:detail_control_decoupling_plant_cartesian by mapping the Cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix $\bm{J}_{\{M\}}$ defined in eqref:eq:detail_control_decoupling_jacobian_CoM.
The obtained transfer function from $\bm{\mathcal{\tau}}$ to $\bm{\mathcal{L}}$ is shown in eqref:eq:detail_control_decoupling_plant_decentralized.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized}
\frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1}
\end{equation}
At low frequencies, the plant converges to a diagonal constant matrix whose diagonal elements are equal to the actuator stiffnesses eqref:eq:detail_control_decoupling_plant_decentralized_low_freq.
At high frequencies, the plant converges to the mass matrix mapped in the frame of the struts, which is generally highly non-diagonal.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized_low_freq}
\bm{G}_{\mathcal{L}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{\mathcal{K}^{-1}}
\end{equation}
#+begin_src matlab
%% Compute Equation of motion
l = 1; h=2;
la = 0.5; % Horizontal position of actuators [m]
ha = 0.2; % Vertical of actuators [m]
m = 40; % Payload mass [kg]
I = 5; % Payload rotational inertia [kg m^2]
c = 2e2; % Actuator Damping [N/(m/s)]
k = 1e6; % Actuator Stiffness [N/m]
% Unit vectors of the actuators
s1 = [1;0];
s2 = [0;1];
s3 = [0;1];
% Stiffnesss and Damping matrices of the struts
Kr = diag([k,k,k]);
Cr = diag([c,c,c]);
% Location of the joints with respect to the center of mass
Mb1 = [-l/2;-ha];
Mb2 = [-la; -h/2];
Mb3 = [ la; -h/2];
% Jacobian matrix (Center of Mass)
J_CoM = [s1', Mb1(1)*s1(2)-Mb1(2)*s1(1);
s2', Mb2(1)*s2(2)-Mb2(2)*s2(1);
s3', Mb3(1)*s3(2)-Mb3(2)*s3(1)];
% Mass Matrix in frame {M}
M = diag([m,m,I]);
% Stiffness Matrix in frame {M}
K = J_CoM'*Kr*J_CoM;
% Damping Matrix in frame {M}
C = J_CoM'*Cr*J_CoM;
% Plant in the frame of the struts
G_L = J_CoM*inv(M*s^2 + C*s + K)*J_CoM';
#+end_src
The magnitude of the coupled plant $\bm{G}_{\mathcal{L}}$ is illustrated in Figure ref:fig:detail_control_decoupling_coupled_plant_bode.
This representation confirms that at low frequencies (below the first suspension mode), the plant is well decoupled.
Depending on the symmetry present in the system, certain diagonal elements may exhibit identical values, as demonstrated for struts 2 and 3 in this example.
#+begin_src matlab :exports none
figure;
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
for out_i = 1:3
for in_i = 1:3
nexttile;
plot(freqs, abs(squeeze(freqresp(G_L(out_i,in_i), freqs, 'Hz'))), 'k-', ...
'DisplayName', sprintf('$\\mathcal{L}_%i/\\tau_%i$', out_i, in_i));
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlim([freqs(1), freqs(end)]); ylim([2e-8, 4e-5]);
xticks([1e0, 1e1, 1e2])
yticks([1e-7, 1e-6, 1e-5])
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
if in_i == 1
ylabel('Mag. [m/N]')
else
set(gca, 'YTickLabel',[]);
end
if out_i == 3
xlabel('Frequency [Hz]')
else
set(gca, 'XTickLabel',[]);
end
end
end
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_coupled_plant_bode.pdf', 'width', 'full', 'height', 600);
#+end_src
#+name: fig:detail_control_decoupling_coupled_plant_bode
#+caption: Model dynamics from actuator forces to relative displacement sensor of each strut.
#+RESULTS:
[[file:figs/detail_control_decoupling_coupled_plant_bode.png]]
* Jacobian Decoupling
<<ssec:detail_control_decoupling_jacobian>>
** Jacobian Matrix
The Jacobian matrix $\bm{J}_{\{O\}}$ serves a dual purpose in the decoupling process: it converts strut velocity $\dot{\mathcal{L}}$ to payload velocity and angular velocity $\dot{\bm{\mathcal{X}}}_{\{O\}}$, and it transforms actuator forces $\bm{\tau}$ to forces/torque applied on the payload $\bm{\mathcal{F}}_{\{O\}}$, as expressed in equation eqref:eq:detail_control_decoupling_jacobian.
\begin{subequations}\label{eq:detail_control_decoupling_jacobian}
\begin{align}
\dot{\bm{\mathcal{X}}}_{\{O\}} &= \bm{J}_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = \bm{J}_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\
\bm{\mathcal{F}}_{\{O\}} &= \bm{J}_{\{O\}}^{\intercal} \bm{\tau}, \quad \bm{\tau} = \bm{J}_{\{O\}}^{-\intercal} \bm{\mathcal{F}}_{\{O\}}
\end{align}
\end{subequations}
The resulting plant (Figure ref:fig:detail_control_jacobian_decoupling_arch) have inputs and outputs with clear physical interpretations:
- $\bm{\mathcal{F}}_{\{O\}}$ represents forces/torques applied on the payload at the origin of frame $\{O\}$
- $\bm{\mathcal{X}}_{\{O\}}$ represents translations/rotation of the payload expressed in frame $\{O\}$
#+name: fig:detail_control_jacobian_decoupling_arch
#+caption: Block diagram of the transfer function from $\bm{\mathcal{F}}_{\{O\}}$ to $\bm{\mathcal{X}}_{\{O\}}$
[[file:figs/detail_control_decoupling_control_jacobian.png]]
The transfer function from $\bm{\mathcal{F}}_{\{O\}$ to $\bm{\mathcal{X}}_{\{O\}}$, denoted $\bm{G}_{\{O\}}(s)$ can be computed using eqref:eq:detail_control_decoupling_plant_jacobian.
\begin{equation}\label{eq:detail_control_decoupling_plant_jacobian}
\frac{\bm{\mathcal{X}}_{\{O\}}}{\bm{\mathcal{F}}_{\{O\}}}(s) = \bm{G}_{\{O\}}(s) = \left( \bm{J}_{\{O\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{O\}} s^2 + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{O\}} s + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{O\}} \right)^{-1}
\end{equation}
The frame $\{O\}$ can be selected according to specific requirements, but the decoupling properties are significantly influenced by this choice.
Two natural reference frames are particularly relevant: the center of mass and the center of stiffness.
** Center Of Mass
When the decoupling frame is located at the center of mass (frame $\{M\}$ in Figure ref:fig:detail_control_decoupling_model_test), the Jacobian matrix and its inverse are expressed as in eqref:eq:detail_control_decoupling_jacobian_CoM_inverse.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM_inverse}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}, \quad \bm{J}_{\{M\}}^{-1} = \begin{bmatrix}
1 & \frac{h_a}{2 l_a} & \frac{-h_a}{2 l_a} \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} \\
\end{bmatrix}
\end{equation}
Analytical formula of the plant $\bm{G}_{\{M\}}(s)$ is derived eqref:eq:detail_control_decoupling_plant_CoM.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM}
\frac{\bm{\mathcal{X}}_{\{M\}}}{\bm{\mathcal{F}}_{\{M\}}}(s) = \bm{G}_{\{M\}}(s) = \left( \bm{M}_{\{M\}} s^2 + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} s + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \right)^{-1}
\end{equation}
At high frequencies, the plant converges to the inverse of the mass matrix, which is a diagonal matrix eqref:eq:detail_control_decoupling_plant_CoM_high_freq.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM_high_freq}
\bm{G}_{\{M\}}(j\omega) \xrightarrow[\omega \to \infty]{} -\omega^2 \bm{M}_{\{M\}}^{-1} = -\omega^2 \begin{bmatrix}
1/m & 0 & 0 \\
0 & 1/m & 0 \\
0 & 0 & 1/I
\end{bmatrix}
\end{equation}
Consequently, the plant exhibits effective decoupling at frequencies above the highest suspension mode as shown in Figure ref:fig:detail_control_decoupling_jacobian_plant_CoM.
This strategy is typically employed in systems with low-frequency suspension modes [[cite:&butler11_posit_contr_lithog_equip]], where the plant approximates decoupled mass lines.
The low-frequency coupling observed in this configuration has a clear physical interpretation.
When a static force is applied at the center of mass, the suspended mass rotates around the center of stiffness.
This rotation is due to torque induced by the stiffness of the first actuator (i.e. the one on the left side), which is not aligned with the force application point.
This phenomenon is illustrated in Figure ref:fig:detail_control_decoupling_model_test_CoM.
#+begin_src matlab
%% Jacobian Decoupling - Center of Mass
G_CoM = pinv(J_CoM)*G_L*pinv(J_CoM');
G_CoM.InputName = {'Fx', 'Fy', 'Mz'};
G_CoM.OutputName = {'Dx', 'Dy', 'Rz'};
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_CoM(1, 3), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$D_{x,\{M\}}/M_{z,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(3, 1), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$R_{z,\{M\}}/F_{x,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(1, 1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$D_{x,\{M\}}/F_{x,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(2, 2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$D_{y,\{M\}}/F_{y,\{M\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoM(3, 3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$R_{z,\{M\}}/M_{z,\{M\}}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 1e-3]);
leg = legend('location', 'southwest', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_jacobian_plant_CoM.pdf', 'width', 'half', 'height', 'normal');
#+end_src
#+name: fig:detail_control_jacobian_decoupling_plant_CoM_results
#+caption: Plant decoupled using the Jacobian matrix expresssed at the center of mass (\subref{fig:detail_control_decoupling_jacobian_plant_CoM}). The physical reason for low frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoM}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoM}Dynamics at the CoM}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_jacobian_plant_CoM.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_CoM}Static force applied at the CoM}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_CoM.png]]
#+end_subfigure
#+end_figure
** Center Of Stiffness
When the decoupling frame is located at the center of stiffness, the Jacobian matrix and its inverse are expressed as in eqref:eq:detail_control_decoupling_jacobian_CoK_inverse.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoK_inverse}
\bm{J}_{\{K\}} = \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & -l_a \\
0 & 1 & l_a
\end{bmatrix}, \quad \bm{J}_{\{K\}}^{-1} = \begin{bmatrix}
1 & 0 & 0 \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a}
\end{bmatrix}
\end{equation}
The frame $\{K\}$ was selected based on physical reasoning, positioned in line with the side strut and equidistant between the two vertical struts.
However, it could alternatively be determined through analytical methods to ensure that $\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}$ forms a diagonal matrix.
It should be noted that the existence of such a center of stiffness (i.e. a frame $\{K\}$ for which $\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}$ is diagonal) is not guaranteed for arbitrary systems.
This property is typically achievable only in systems exhibiting specific symmetrical characteristics, as is the case in the present example.
The analytical expression for the plant in this configuration was then computed eqref:eq:detail_control_decoupling_plant_CoK.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK}
\frac{\bm{\mathcal{X}}_{\{K\}}}{\bm{\mathcal{F}}_{\{K\}}}(s) = \bm{G}_{\{K\}}(s) = \left( \bm{J}_{\{K\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{K\}} s^2 + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{K\}} s + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}} \right)^{-1}
\end{equation}
Figure ref:fig:detail_control_decoupling_jacobian_plant_CoK_results presents the dynamics of the plant when decoupled using the Jacobian matrix expressed at the center of stiffness.
The plant is well decoupled below the suspension mode with the lowest frequency eqref:eq:detail_control_decoupling_plant_CoK_low_freq, making it particularly suitable for systems with high stiffness.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK_low_freq}
\bm{G}_{\{K\}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{J}_{\{K\}}^{-1} \bm{\mathcal{K}}^{-1} \bm{J}_{\{K\}}^{-\intercal}
\end{equation}
The physical reason for high-frequency coupling is illustrated in Figure ref:fig:detail_control_decoupling_model_test_CoK.
When a high-frequency force is applied at a point not aligned with the center of mass, it induces rotation around the center of mass.
#+begin_src matlab
%% Jacobian Decoupling - Center of Mass
% Location of the joints with respect to the center of stiffness
Mb1 = [-l/2; 0];
Mb2 = [-la; -h/2+ha];
Mb3 = [ la; -h/2+ha];
% Jacobian matrix (Center of Stiffness)
J_CoK = [s1', Mb1(1)*s1(2)-Mb1(2)*s1(1);
s2', Mb2(1)*s2(2)-Mb2(2)*s2(1);
s3', Mb3(1)*s3(2)-Mb3(2)*s3(1)];
G_CoK = pinv(J_CoK)*G_L*pinv(J_CoK');
G_CoK.InputName = {'Fx', 'Fy', 'Mz'};
G_CoK.OutputName = {'Dx', 'Dy', 'Rz'};
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_CoK(1, 1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$D_{x,\{K\}}/F_{x,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(2, 2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$D_{y,\{K\}}/F_{y,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(3, 3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$R_{z,\{K\}}/M_{z,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(1, 3), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$D_{x,\{K\}}/M_{z,\{K\}}$');
plot(freqs, abs(squeeze(freqresp(G_CoK(3, 1), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$R_{z,\{K\}}/F_{x,\{K\}}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 1e-3]);
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
leg.ItemTokenSize(1) = 18;
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_jacobian_plant_CoK.pdf', 'width', 'half', 'height', 'normal');
#+end_src
#+name: fig:detail_control_decoupling_jacobian_plant_CoK_results
#+caption: Plant decoupled using the Jacobian matrix expresssed at the center of stiffness (\subref{fig:detail_control_decoupling_jacobian_plant_CoK}). The physical reason for high frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoK}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoK}Dynamics at the CoK}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_jacobian_plant_CoK.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_CoK}High frequency force applied at the CoK}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_CoK.png]]
#+end_subfigure
#+end_figure
* Modal Decoupling
<<ssec:detail_control_decoupling_modal>>
** Theory :ignore:
Modal decoupling represents an approach based on the principle that a mechanical system's behavior can be understood as a combination of contributions from various modes [[cite:&rankers98_machin]].
To convert the dynamics in the modal space, the equation of motion are first written with respect to the center of mass eqref:eq:detail_control_decoupling_equation_motion_CoM.
\begin{equation}\label{eq:detail_control_decoupling_equation_motion_CoM}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{C}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{K}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
For modal decoupling, a change of variables is introduced eqref:eq:detail_control_decoupling_modal_coordinates where $\bm{\mathcal{X}}_{m}$ represents the modal amplitudes and $\bm{\Phi}$ is a $n \times n$[fn:detail_control_2] matrix whose columns correspond to the mode shapes of the system, computed from $\bm{M}_{\{M\}}$ and $\bm{K}_{\{M\}}$.
\begin{equation}\label{eq:detail_control_decoupling_modal_coordinates}
\bm{\mathcal{X}}_{\{M\}} = \bm{\Phi} \bm{\mathcal{X}}_{m}
\end{equation}
By pre-multiplying equation eqref:eq:detail_control_decoupling_equation_motion_CoM by $\bm{\Phi}^{\intercal}$ and applying the change of variable eqref:eq:detail_control_decoupling_modal_coordinates, a new set of equations of motion is obtained eqref:eq:detail_control_decoupling_equation_modal_coordinates where $\bm{\tau}_m$ represents the modal input, while $\bm{M}_m$, $\bm{C}_m$, and $\bm{K}_m$ denote the modal mass, damping, and stiffness matrices respectively.
\begin{equation}\label{eq:detail_control_decoupling_equation_modal_coordinates}
\underbrace{\bm{\Phi}^{\intercal} \bm{M} \bm{\Phi}}_{\bm{M}_m} \bm{\ddot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{C} \bm{\Phi}}_{\bm{C}_m} \bm{\dot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{K} \bm{\Phi}}_{\bm{K}_m} \bm{\mathcal{X}}_m(t) = \underbrace{\bm{\Phi}^{\intercal} \bm{J}^{\intercal} \bm{\tau}(t)}_{\bm{\tau}_m(t)}
\end{equation}
The inherent mathematical structure of the mass, damping, and stiffness matrices [[cite:&lang17_under, chapt. 8]] ensures that modal matrices are diagonal [[cite:&preumont18_vibrat_contr_activ_struc_fourt_edition, chapt. 2.3]].
This diagonalization transforms equation eqref:eq:detail_control_decoupling_equation_modal_coordinates into a set of $n$ decoupled equations, enabling independent control of each mode without cross-interaction.
To implement this approach from a decentralized plant, the architecture shown in Figure ref:fig:detail_control_decoupling_modal is employed.
Inputs of the decoupling plant are the modal modal inputs $\bm{\tau}_m$ and the outputs are the modal amplitudes $\bm{\mathcal{X}}_m$.
This implementation requires knowledge of the system's equations of motion, from which the mode shapes matrix $\bm{\Phi}$ is derived.
The resulting decoupled system features diagonal elements each representing second-order resonant systems that are straightforward to control individually.
#+name: fig:detail_control_decoupling_modal
#+caption: Modal Decoupling Architecture
[[file:figs/detail_control_decoupling_modal.png]]
** Example :ignore:
Modal decoupling was then applied to the test model.
First, the eigenvectors $\bm{\Phi}$ of $\bm{M}_{\{M\}}^{-1}\bm{K}_{\{M\}}$ were computed eqref:eq:detail_control_decoupling_modal_eigenvectors.
While analytical derivation of eigenvectors could be obtained for such a simple system, they are typically computed numerically for practical applications.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors}
\bm{\Phi} = \begin{bmatrix}
\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & 0 & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} \\
0 & 1 & 0 \\
1 & 0 & 1
\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2}
\end{equation}
The numerical values for the eigenvector matrix and its inverse are shown in eqref:eq:detail_control_decoupling_modal_eigenvectors_matrices.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors_matrices}
\bm{\Phi} = \begin{bmatrix}
-0.905 & 0 & -0.058 \\
0 & 1 & 0 \\
0.424 & 0 & -0.998
\end{bmatrix}, \quad
\bm{\Phi}^{-1} = \begin{bmatrix}
-1.075 & 0 & 0.063 \\
0 & 1 & 0 \\
-0.457 & 0 & -0.975
\end{bmatrix}
\end{equation}
The two computed matrices were implemented in the control architecture of Figure ref:fig:detail_control_decoupling_modal, resulting in three distinct second order plants as depicted in Figure ref:fig:detail_control_decoupling_modal_plant.
Each of these diagonal elements corresponds to a specific mode, as shown in Figure ref:fig:detail_control_decoupling_model_test_modal, resulting in a perfectly decoupled system.
#+begin_src matlab
%% Modal decoupling
% Compute the eigen vectors
[phi, wi] = eig(M\K);
% Sort the eigen vectors by increasing associated frequency
[~, i] = sort(diag(wi));
phi = phi(:, i);
% Plant in the modal space
Gm = inv(phi)*inv(J_CoM)*G_L*inv(J_CoM')*inv(phi');
#+end_src
#+begin_src matlab :exports none
%% Modal decoupled plant
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(Gm(1,1), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$\mathcal{X}_{m,1}/\tau_{m,1}$');
plot(freqs, abs(squeeze(freqresp(Gm(2,2), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$\mathcal{X}_{m,2}/\tau_{m,2}$');
plot(freqs, abs(squeeze(freqresp(Gm(3,3), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$\mathcal{X}_{m,3}/\tau_{m,3}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-8, 1e-4]);
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_modal_plant.pdf', 'width', 'half', 'height', 'normal');
#+end_src
#+name: fig:detail_control_decoupling_modal_plant_modes
#+caption: Plant using modal decoupling consists of second order plants (\subref{fig:detail_control_decoupling_modal_plant}) which can be used to invidiually address different modes illustrated in (\subref{fig:detail_control_decoupling_model_test_modal})
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_modal_plant}Decoupled plant in modal space}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_modal_plant.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_modal}Individually controlled modes}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_model_test_modal.png]]
#+end_subfigure
#+end_figure
* SVD Decoupling
<<ssec:detail_control_decoupling_svd>>
** Singular Value Decomposition
Singular Value Decomposition (SVD) represents a powerful mathematical tool with extensive applications in data analysis [[cite:&brunton22_data, chapt. 1]] and multivariable control systems where it is particularly valuable for analyzing directional properties in multivariable systems [[cite:&skogestad07_multiv_feedb_contr]].
The SVD constitutes a unique matrix decomposition applicable to any complex matrix $\bm{X} \in \mathbb{C}^{n \times m}$, expressed as:
\begin{equation}\label{eq:detail_control_svd}
\bm{X} = \bm{U} \bm{\Sigma} \bm{V}^H
\end{equation}
where $\bm{U} \in \mathbb{C}^{n \times n}$ and $\bm{V} \in \mathbb{C}^{m \times m}$ are unitary matrices with orthonormal columns, and $\bm{\Sigma} \in \mathbb{R}^{n \times n}$ is a diagonal matrix with real, non-negative entries.
For real matrices $\bm{X}$, the resulting $\bm{U}$ and $\bm{V}$ matrices are also real, making them suitable for decoupling applications.
** Decoupling using the SVD
The procedure for SVD-based decoupling begins with identifying the system dynamics from inputs to outputs, typically represented as a Frequency Response Function (FRF), which yields a complex matrix $\bm{G}(\omega_i)$ for multiple frequency points $\omega_i$.
A specific frequency is then selected for optimal decoupling, with the targeted crossover frequency $\omega_c$ often serving as an appropriate choice.
Since real matrices are required for the decoupling transformation, a real approximation of the complex measured response at the selected frequency must be computed.
In this work, the method proposed in [[cite:&kouvaritakis79_theor_pract_charac_locus_desig_method]] was used as it preserves maximal orthogonality in the directional properties of the input complex matrix.
Following this approximation, a real matrix $\tilde{\bm{G}}(\omega_c)$ is obtained, and SVD is performed on this matrix.
The resulting (real) unitary matrices $\bm{U}$ and $\bm{V}$ are structured such that $\bm{V}^{-\intercal} \tilde{\bm{G}}(\omega_c) \bm{U}^{-1}$ forms a diagonal matrix.
These singular input and output matrices are then applied to decouple the system as illustrated in Figure ref:fig:detail_control_decoupling_svd, and the decoupled plant is described by eqref:eq:detail_control_decoupling_plant_svd.
\begin{equation}\label{eq:detail_control_decoupling_plant_svd}
\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-\intercal}
\end{equation}
#+name: fig:detail_control_decoupling_svd
#+caption: Decoupled plant $\bm{G}_{\text{SVD}}$ using the Singular Value Decomposition
[[file:figs/detail_control_decoupling_svd.png]]
Implementation of SVD decoupling requires access to the system's FRF, at least in the vicinity of the desired decoupling frequency.
This information can be obtained either experimentally or derived from a model.
While this approach ensures effective decoupling near the chosen frequency, it provides no guarantees regarding decoupling performance away from this frequency.
Furthermore, the quality of decoupling depends significantly on the accuracy of the real approximation, potentially limiting its effectiveness for plants with high damping.
** Example
Plant decoupling using the Singular Value Decomposition was then applied on the test model.
A decoupling frequency of $\SI{100}{Hz}$ was used.
The plant response at that frequency, as well as its real approximation and the obtained $\bm{U}$ and $\bm{V}$ matrices are shown in eqref:eq:detail_control_decoupling_svd_example.
\begin{equation}\label{eq:detail_control_decoupling_svd_example}
\begin{align}
& \bm{G}_{\{\mathcal{L}\}}(\omega_c = 2\pi \cdot 100) = 10^{-9} \begin{bmatrix}
-99 - j 2.6 & 74 + j 4.2 & -74 - j 4.2 \\
74 + j 4.2 & -247 - j 9.7 & 102 + j 7.0 \\
-74 - j 4.2 & 102 + j 7.0 & -247 - j 9.7
\end{bmatrix} \\
& \xrightarrow[\text{approximation}]{\text{real}} \tilde{\bm{G}}_{\{\mathcal{L}\}}(\omega_c) = 10^{-9} \begin{bmatrix}
-99 & 74 & -74 \\
74 & -247 & 102 \\
-74 & 102 & -247
\end{bmatrix} \\
& \xrightarrow[\text{SVD}]{\phantom{\text{approximation}}} \bm{U} = \begin{bmatrix}
0.34 & 0 & 0.94 \\
-0.66 & 0.71 & 0.24 \\
0.66 & 0.71 & -0.24
\end{bmatrix}, \ \bm{V} = \begin{bmatrix}
-0.34 & 0 & -0.94 \\
0.66 & -0.71 & -0.24 \\
-0.66 & -0.71 & 0.24
\end{bmatrix}
\end{align}
\end{equation}
Using these $\bm{U}$ and $\bm{V}$ matrices, the decoupled plant is computed according to equation eqref:eq:detail_control_decoupling_plant_svd.
The resulting plant, depicted in Figure ref:fig:detail_control_decoupling_svd_plant, exhibits remarkable decoupling across a broad frequency range, extending well beyond the vicinity of $\omega_c$.
Additionally, the diagonal terms manifest as second-order dynamic systems, facilitating straightforward controller design.
#+begin_src matlab
%% SVD Decoupling
wc = 2*pi*100; % Decoupling frequency [rad/s]
% System's response at the decoupling frequency
H1 = evalfr(G_L, j*wc);
% Real approximation of G(j.wc)
D = pinv(real(H1'*H1));
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
[U,S,V] = svd(H1);
Gsvd = inv(U)*G_L*inv(V');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gsvd(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gsvd(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gsvd(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 2e-4]);
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_svd_plant.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:detail_control_decoupling_svd_plant
#+caption: Plant dynamics $\bm{G}_{\text{SVD}}(s)$ obtained after decoupling using Singular Value Decomposition
#+RESULTS:
[[file:figs/detail_control_decoupling_svd_plant.png]]
As it was surprising to obtain such a good decoupling at all frequencies, a variant system with identical dynamics but different sensor configurations was examined.
Instead of using relative motion sensors collocated with the struts, three relative motion sensors were positioned as shown in Figure ref:fig:detail_control_decoupling_model_test_alt.
Although Jacobian matrices could theoretically be used to map these sensors to the frame of the struts, application of the same SVD decoupling procedure yielded the plant response shown in Figure ref:fig:detail_control_decoupling_svd_alt_plant, which exhibits significantly greater coupling.
Notably, the coupling demonstrates local minima near the decoupling frequency, consistent with the fact that the decoupling matrices were derived specifically for that frequency point.
#+begin_src matlab
%% Simscape model with relative motion sensor at alternative positions
mdl = 'detail_control_decoupling_test_model';
open(mdl)
deq = 0.2; % Length of the actuators [m]
% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 2, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Payload'], 3, 'openoutput'); io_i = io_i + 1;
G_L_alt = linearize(mdl, io);
G_L_alt.InputName = {'F1', 'F2', 'F3'};
G_L_alt.OutputName = {'d1', 'd2', 'd32'};
% SVD Decoupling with the new plant
wc = 2*pi*100; % Decoupling frequency [rad/s]
% System's response at the decoupling frequency
H1 = evalfr(G_L_alt, j*wc);
% Real approximation of G(j.wc)
D = pinv(real(H1'*H1));
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
[U,S,V] = svd(H1);
Gsvd_alt = inv(U)*G_L_alt*inv(V');
#+end_src
#+begin_src matlab :exports none :results none
%% Obtained plant after SVD decoupling - Relative motion sensors are not collocated with the actuators
figure;
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([5e-11, 7e-5]);
leg = legend('location', 'southwest', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_decoupling_svd_alt_plant.pdf', 'width', 'half', 'height', 'normal');
#+end_src
#+name: fig:detail_control_svd_decoupling_not_symmetrical
#+caption: Application of SVD decoupling on a system schematically shown in (\subref{fig:detail_control_decoupling_model_test_alt}). The obtained decoupled plant is shown in (\subref{fig:detail_control_decoupling_svd_alt_plant}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_alt}Alternative location of sensors}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_alt.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_svd_alt_plant}Obtained decoupled plant}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_svd_alt_plant.png]]
#+end_subfigure
#+end_figure
The exceptional performance of SVD decoupling on the plant with collocated sensors warrants further investigation.
This effectiveness may be attributed to the symmetrical properties of the plant, as evidenced in the Bode plots of the decentralized plant shown in Figure ref:fig:detail_control_decoupling_coupled_plant_bode.
The phenomenon potentially relates to previous research on SVD controllers applied to systems with specific symmetrical characteristics [[cite:&hovd97_svd_contr_contr]].
* Comparison of decoupling strategies
<<ssec:detail_control_decoupling_comp>>
While the three proposed decoupling methods may appear similar in their mathematical implementation (each involving pre-multiplication and post-multiplication of the plant with constant matrices), they differ significantly in their underlying approaches and practical implications, as summarized in Table ref:tab:detail_control_decoupling_strategies_comp.
Each method employs a distinct conceptual framework: Jacobian decoupling is "topology-driven", relying on the geometric configuration of the system; modal decoupling is "physics-driven", based on the system's dynamical equations; and SVD decoupling is "data-driven", utilizing measured frequency response functions.
The physical interpretation of decoupled plant inputs and outputs varies considerably among these methods.
With Jacobian decoupling, inputs and outputs retain clear physical meaning, corresponding to forces/torques and translations/rotations in a specified reference frame.
Modal decoupling arranges inputs to excite individual modes, with outputs combined to measure these modes separately.
For SVD decoupling, inputs and outputs represent special directions ordered by decreasing controllability and observability at the chosen frequency, though physical interpretation becomes challenging for parallel manipulators.
This difference in interpretation relates directly to the "control space" in which the controllers operate.
When these "control spaces" meaningfully relate to the control objectives, controllers can be tuned to directly match specific requirements.
For Jacobian decoupling, the controller typically operates in a frame positioned at the point where motion needs to be controlled, for instance where the light is focused in the NASS application.
Modal decoupling provides a natural framework when specific vibrational modes require targeted control.
SVD decoupling generally results in a loss of physical meaning for the "control space", potentially complicating the process of relating controller design to practical system requirements.
The quality of decoupling achieved through these methods also exhibits distinct characteristics.
Jacobian decoupling performance depends on the chosen reference frame, with optimal decoupling at low frequencies when aligned at the center of stiffness, or at high frequencies when aligned with the center of mass.
Systems designed with coincident centers of mass and stiffness may achieve excellent decoupling using this approach.
Modal decoupling offers good decoupling across all frequencies, though its effectiveness relies on the model accuracy, with discrepancies potentially resulting in significant off-diagonal elements.
SVD decoupling can be implemented using measured data without requiring a model, with optimal performance near the chosen decoupling frequency, though its effectiveness may diminish at other frequencies and depends on the quality of the real approximation of the response at the selected frequency point.
#+name: tab:detail_control_decoupling_strategies_comp
#+caption: Comparison of decoupling strategies
#+attr_latex: :environment tabularx :width \linewidth :align lXXX
#+attr_latex: :center t :booktabs t :font \scriptsize
| | *Jacobian* | *Modal* | *SVD* |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Philosophy* | Topology Driven | Physics Driven | Data Driven |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Requirements* | Known geometry | Known equations of motion | Identified FRF |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Decoupling Matrices* | Jacobian matrix $\bm{J}_{\{O\}}$ | Eigenvectors $\bm{\Phi}$ | SVD matrices $\bm{U}$ and $\bm{V}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Decoupled Plant* | $\bm{G}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-1} \bm{G}_{\mathcal{L}}(s) \bm{J}_{\{O\}}^{-\intercal}$ | $\bm{G}_m(s) = \bm{\Phi}^{-1} \bm{G}_{\mathcal{X}}(s) \bm{\Phi}^{-\intercal}$ | $\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}(s) \bm{V}^{-\intercal}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Controller* | $\bm{K}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-\intercal} \bm{K}_{d}(s) \bm{J}_{\{O\}}^{-1}$ | $\bm{K}_m(s) = \bm{\Phi}^{-\intercal} \bm{K}_{d}(s) \bm{\Phi}^{-1}$ | $\bm{K}_{\text{SVD}}(s) = \bm{V}^{-\intercal} \bm{K}_{d}(s) \bm{U}^{-1}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Interpretation* | Forces/Torques to Displacement/Rotation in chosen frame | Inputs (resp. outputs) to excite (resp. sense) individual modes | Directions of max to min controllability/observability |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Effectiveness* | Decoupling at low or high frequency depending on the chosen frame | Good decoupling at all frequencies | Good decoupling near the chosen frequency |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Pros* | Retain physical meaning of inputs / outputs. Controller acts on a meaningfully "frame" | Ability to target specific modes. Simple $2^{nd}$ order diagonal plants | Good Decoupling near the crossover. Very General and requires no model |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Cons* | Good decoupling at all frequency can only be obtained for specific mechanical architecture | Relies on the accuracy of equation of motions. Robustness to unmodelled dynamics may be poor | Loss of physical meaning of inputs /outputs. Decoupling away from the chosen frequency may be poor |
* Helping Functions :noexport:
:PROPERTIES:
:HEADER-ARGS:matlab+: :tangle no
:END:
** Initialize Path
#+NAME: m-init-path-tangle
#+BEGIN_SRC matlab
%% Path for functions, data and scripts
addpath('./src/'); % Path for functions
#+END_SRC
** Initialize other elements
#+NAME: m-init-other
#+BEGIN_SRC matlab
%% Colors for the figures
colors = colororder;
#+END_SRC

111
paper/.latexmkrc Normal file
View File

@@ -0,0 +1,111 @@
#!/bin/env perl
# Shebang is only to get syntax highlighting right across GitLab, GitHub and IDEs.
# This file is not meant to be run, but read by `latexmk`.
# ======================================================================================
# Perl `latexmk` configuration file
# ======================================================================================
# ======================================================================================
# PDF Generation/Building/Compilation
# ======================================================================================
@default_files=('dehaeze26_decoupling.tex');
# PDF-generating modes are:
# 1: pdflatex, as specified by $pdflatex variable (still largely in use)
# 2: postscript conversion, as specified by the $ps2pdf variable (useless)
# 3: dvi conversion, as specified by the $dvipdf variable (useless)
# 4: lualatex, as specified by the $lualatex variable (best)
# 5: xelatex, as specified by the $xelatex variable (second best)
$pdf_mode = 1;
# Treat undefined references and citations as well as multiply defined references as
# ERRORS instead of WARNINGS.
# This is only checked in the *last* run, since naturally, there are undefined references
# in initial runs.
# This setting is potentially annoying when debugging/editing, but highly desirable
# in the CI pipeline, where such a warning should result in a failed pipeline, since the
# final document is incomplete/corrupted.
#
# However, I could not eradicate all warnings, so that `latexmk` currently fails with
# this option enabled.
# Specifically, `microtype` fails together with `fontawesome`/`fontawesome5`, see:
# https://tex.stackexchange.com/a/547514/120853
# The fix in that answer did not help.
# Setting `verbose=silent` to mute `microtype` warnings did not work.
# Switching between `fontawesome` and `fontawesome5` did not help.
$warnings_as_errors = 0;
# Show used CPU time. Looks like: https://tex.stackexchange.com/a/312224/120853
$show_time = 1;
# Default is 5; we seem to need more owed to the complexity of the document.
# Actual documents probably don't need this many since they won't use all features,
# plus won't be compiling from cold each time.
$max_repeat=7;
# --shell-escape option (execution of code outside of latex) is required for the
#'svg' package.
# It converts raw SVG files to the PDF+PDF_TEX combo using InkScape.
#
# SyncTeX allows to jump between source (code) and output (PDF) in IDEs with support
# (many have it). A value of `1` is enabled (gzipped), `-1` is enabled but uncompressed,
# `0` is off.
# Testing in VSCode w/ LaTeX Workshop only worked for the compressed version.
# Adjust this as needed. Of course, only relevant for local use, no effect on a remote
# CI pipeline (except for slower compilation, probably).
#
# %O and %S will forward Options and the Source file, respectively, given to latexmk.
#
# `set_tex_cmds` applies to all *latex commands (latex, xelatex, lualatex, ...), so
# no need to specify these each. This allows to simply change `$pdf_mode` to get a
# different engine. Check if this works with `latexmk --commands`.
set_tex_cmds("--shell-escape -interaction=nonstopmode --synctex=1 %O %S");
# Use default pdf viewer
$pdf_previewer = 'zathura';
# option 2 is same as 1 (run biber when necessary), but also deletes the
# regeneratable bbl-file in a clenaup (`latexmk -c`). Do not use if original
# bib file is not available!
$bibtex_use = 2; # default: 1
# Change default `biber` call, help catch errors faster/clearer. See
# https://web.archive.org/web/20200526101657/https://www.semipol.de/2018/06/12/latex-best-practices.html#database-entries
$biber = "biber --validate-datamodel %O %S";
# Glossaries
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
sub run_makeglossaries {
if ( $silent ) {
system "makeglossaries -q -s '$_[0].ist' '$_[0]'";
}
else {
system "makeglossaries -s '$_[0].ist' '$_[0]'";
};
}
# ======================================================================================
# Auxiliary Files
# ======================================================================================
# Let latexmk know about generated files, so they can be used to detect if a
# rerun is required, or be deleted in a cleanup.
# loe: List of Examples (KOMAScript)
# lol: List of Listings (`listings` and `minted` packages)
# run.xml: biber runs
# glg: glossaries log
# glstex: generated from glossaries-extra
push @generated_exts, 'loe', 'lol', 'run.xml', 'glstex', 'glo', 'gls', 'glg', 'acn', 'acr', 'alg';
# Also delete the *.glstex files from package glossaries-extra. Problem is,
# that that package generates files of the form "basename-digit.glstex" if
# multiple glossaries are present. Latexmk looks for "basename.glstex" and so
# does not find those. For that purpose, use wildcard.
# Also delete files generated by gnuplot/pgfplots contour plots
# (.dat, .script, .table).
$clean_ext = "%R-*.glstex %R_contourtmp*.*";

View File

@@ -0,0 +1,312 @@
@article{furutani04_nanom_cuttin_machin_using_stewar,
author = {Furutani, K. and Suzuki, M. and Kudoh, R.},
title = {Nanometre-Cutting Machine Using a Stewart-Platform Parallel
Mechanism},
journal = {Measurement Science and Technology},
volume = 15,
number = 2,
pages = {467--474},
year = 2004,
doi = {10.1088/0957-0233/15/2/022},
url = {https://doi.org/10.1088/0957-0233/15/2/022},
keywords = {parallel robot, cubic configuration},
}
@article{du14_piezo_actuat_high_precis_flexib,
author = {Du, Z. and Shi, R. and Dong, W.},
title = {A Piezo-Actuated High-Precision Flexible Parallel Pointing
Mechanism: Conceptual Design, Development, and Experiments},
journal = {IEEE Transactions on Robotics},
volume = 30,
number = 1,
pages = {131--137},
year = 2014,
doi = {10.1109/tro.2013.2288800},
url = {https://doi.org/10.1109/tro.2013.2288800},
keywords = {parallel robot},
}
@article{mcinroy00_desig_contr_flexur_joint_hexap,
author = {McInroy, J. E. and Hamann, J. C.},
title = {Design and Control of Flexure Jointed Hexapods},
journal = {IEEE Transactions on Robotics and Automation},
volume = 16,
number = 4,
pages = {372--381},
year = 2000,
doi = {10.1109/70.864229},
url = {https://doi.org/10.1109/70.864229},
keywords = {parallel robot},
}
@article{kim00_robus_track_contr_desig_dof_paral_manip,
author = {Kim, D. H. and Kang, J.-Y. and Lee, K.-I.},
title = {Robust Tracking Control Design for a 6 Dof Parallel
Manipulator},
journal = {Journal of Robotic Systems},
volume = 17,
number = 10,
pages = {527--547},
year = 2000,
doi = {10.1002/1097-4563(200010)17:10$<$527::AID-ROB2>3.0.CO;2-A},
url =
{https://doi.org/10.1002/1097-4563(200010)17:10$<$527::AID-ROB2>3.0.CO;2-A},
keywords = {parallel robot},
}
@inproceedings{li01_simul_vibrat_isolat_point_contr,
author = {Xiaochun Li and Jerry C. Hamann and John E. McInroy},
title = {Simultaneous Vibration Isolation and Pointing Control of
Flexure Jointed Hexapods},
booktitle = {Smart Structures and Materials 2001: Smart Structures and
Integrated Systems},
year = 2001,
doi = {10.1117/12.436521},
url = {https://doi.org/10.1117/12.436521},
keywords = {parallel robot},
month = 8,
}
@inproceedings{abbas14_vibrat_stewar_platf,
author = {Abbas, H. and Hai, H.},
title = {Vibration isolation concepts for non-cubic Stewart Platform
using modal control},
booktitle = {Proceedings of 11th International Bhurban Conference
on Applied Sciences \& Technology (IBCAST) Islamabad,
Pakistan},
year = 2014,
doi = {10.1109/ibcast.2014.6778139},
url = {https://doi.org/10.1109/ibcast.2014.6778139},
keywords = {parallel robot},
month = 1,
}
@article{holterman05_activ_dampin_based_decoup_colloc_contr,
author = {Holterman, J. and de Vries, T. J. A.},
title = {Active Damping Based on Decoupled Collocated Control},
journal = {IEEE/ASME Transactions on Mechatronics},
volume = 10,
number = 2,
pages = {135--145},
year = 2005,
doi = {10.1109/tmech.2005.844702},
url = {https://doi.org/10.1109/tmech.2005.844702},
keywords = {active damping},
}
@article{pu11_six_degree_of_freed_activ,
author = {Pu, H. and Chen, X. and Zhou, Z. and Luo, X.},
title = {Six-Degree-Of-Freedom Active Vibration Isolation System
With Decoupled Collocated Control},
journal = {Proceedings of the Institution of Mechanical Engineers,
Part B: Journal of Engineering Manufacture},
volume = 226,
number = 2,
pages = {313--325},
year = 2011,
doi = {10.1177/0954405411414336},
url = {https://doi.org/10.1177/0954405411414336},
keywords = {parallel robot},
}
@article{yang19_dynam_model_decoup_contr_flexib,
author = {Yang, X. and Wu, H. and Chen, B. and Kang, S. and Cheng, S.},
title = {Dynamic Modeling and Decoupled Control of a Flexible
Stewart Platform for Vibration Isolation},
journal = {Journal of Sound and Vibration},
volume = 439,
pages = {398--412},
year = 2019,
doi = {10.1016/j.jsv.2018.10.007},
url = {https://doi.org/10.1016/j.jsv.2018.10.007},
issn = {0022-460X},
keywords = {parallel robot, flexure, decoupled control},
month = 1,
publisher = {Elsevier BV},
}
@article{lei08_multi_objec_robus_activ_vibrat,
author = {Lei, L. and Benli, W.},
title = {Multi Objective Robust Active Vibration Control for Flexure
Jointed Struts of Stewart Platforms Via $H_\infty$ and $\mu$
Synthesis},
journal = {Chinese Journal of Aeronautics},
volume = 21,
number = 2,
pages = {125--133},
year = 2008,
doi = {10.1016/s1000-9361(08)60016-3},
url = {https://doi.org/10.1016/s1000-9361(08)60016-3},
keywords = {parallel robot},
}
@inproceedings{xie17_model_contr_hybrid_passiv_activ,
author = {Xie, X. and Wang, C. and Zhang, Z.},
title = {Modeling and Control of A Hybrid Passive/Active Stewart
Vibration Isolation Platform},
booktitle = {INTER-NOISE and NOISE-CON Congress and Conference
Proceedings},
year = 2017,
volume = 255,
number = 6,
pages = {1844--1853},
keywords = {parallel robot},
organization = {Institute of Noise Control Engineering},
}
@article{jiao18_dynam_model_exper_analy_stewar,
author = {Jiao, J. and Wu, Y. and Yu, K. and Zhao, R.},
title = {Dynamic Modeling and Experimental Analyses of Stewart
Platform With Flexible Hinges},
journal = {Journal of Vibration and Control},
volume = 25,
number = 1,
pages = {151--171},
year = 2018,
doi = {10.1177/1077546318772474},
url = {https://doi.org/10.1177/1077546318772474},
keywords = {parallel robot, flexure},
}
@article{thayer02_six_axis_vibrat_isolat_system,
author = {Thayer, D. and Campbell, M. and Vagners, J. and
von Flotow, A.},
title = {Six-Axis Vibration Isolation System Using Soft Actuators
and Multiple Sensors},
journal = {Journal of Spacecraft and Rockets},
volume = 39,
number = 2,
pages = {206--212},
year = 2002,
doi = {10.2514/2.3821},
url = {https://doi.org/10.2514/2.3821},
keywords = {parallel robot},
}
@article{butler11_posit_contr_lithog_equip,
author = {Butler, H.},
title = {Position Control in Lithographic Equipment},
journal = {IEEE Control Systems},
volume = 31,
number = 5,
pages = {28--47},
year = 2011,
doi = {10.1109/mcs.2011.941882},
url = {https://doi.org/10.1109/mcs.2011.941882},
}
@phdthesis{rankers98_machin,
author = {Rankers, A. M.},
isbn = {90-365-0957-2},
keywords = {favorite},
school = {University of Twente},
title = {Machine dynamics in mechatronic systems: An engineering
approach.},
year = 1998,
}
@inbook{lang17_under,
author = {Lang, G. F.},
booktitle = {Topics in Modal Analysis \& Testing, Volume 10},
chapter = 8,
pages = {55--68},
publisher = {Springer},
title = {Understanding modal vectors},
year = 2017,
}
@book{preumont18_vibrat_contr_activ_struc_fourt_edition,
author = {Preumont, A.},
title = {Vibration Control of Active Structures - Fourth Edition},
year = 2018,
publisher = {Springer International Publishing},
url = {https://doi.org/10.1007/978-3-319-72296-2},
doi = {10.1007/978-3-319-72296-2},
keywords = {favorite, parallel robot},
series = {Solid Mechanics and Its Applications},
}
@book{brunton22_data,
author = {Brunton, S. L. and Kutz, J. N.},
title = {Data-driven science and engineering: Machine learning,
dynamical systems, and control},
year = 2022,
publisher = {Cambridge University Press},
}
@book{skogestad07_multiv_feedb_contr,
author = {Skogestad, S. and Postlethwaite, I.},
title = {Multivariable Feedback Control: Analysis and Design -
Second Edition},
year = 2007,
publisher = {John Wiley},
isbn = {0470011688},
keywords = {favorite},
}
@article{kouvaritakis79_theor_pract_charac_locus_desig_method,
author = {Kouvaritakis, B. A.},
title = {Theory and Practice of the Characteristic Locus Design
Method},
journal = {Proceedings of the Institution of Electrical Engineers},
volume = 126,
number = 6,
pages = 542,
year = 1979,
doi = {10.1049/piee.1979.0131},
url = {https://doi.org/10.1049/piee.1979.0131},
}
@article{hovd97_svd_contr_contr,
author = {Hovd, M. and Braatz, R. D. and Skogestad, S.},
title = {{SVD} Controllers for $\mathcal{H}_2-$,
$\mathcal{H}_\infty-$ and $\mu\text{-optimal}$ Control},
journal = {Automatica},
volume = 33,
number = 3,
pages = {433--439},
year = 1997,
keywords = {mimo control},
publisher = {Elsevier},
}

View File

@@ -0,0 +1,626 @@
:DRAWER:
#+BIND: org-latex-image-default-option "scale=1"
#+BIND: org-latex-image-default-width ""
#+OPTIONS: toc:nil date:nil
#+AUTHOR:
#+LaTeX_CLASS: elsarticle
#+LaTeX_CLASS_OPTIONS: [preprint,12pt]
#+LATEX_HEADER: \input{preamble.tex}
#+LATEX_HEADER_EXTRA: \input{preamble_extra.tex}
#+LATEX_HEADER_EXTRA: \journal{Journal of Sound and Vibration}
#+LATEX_HEADER_EXTRA: \bibliographystyle{elsarticle-num}
#+LATEX_HEADER_EXTRA: \biboptions{sort&compress}
#+LATEX_HEADER_EXTRA: \bibliography{dehaeze26_decoupling}
#+BIND: org-latex-bib-compiler "biber"
:END:
* Build :noexport:
#+NAME: startblock
#+BEGIN_SRC emacs-lisp :results none :tangle no
(add-to-list 'org-latex-classes
'("elsarticle"
"\\documentclass{elsarticle}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
))
;; Remove automatic org heading labels
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
(add-to-list 'org-export-filter-headline-functions
'my-latex-filter-removeOrgAutoLabels)
;; Remove all org comments in the output LaTeX file
(defun delete-org-comments (backend)
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
'comment 'identity))
do
(setf (buffer-substring (org-element-property :begin comment)
(org-element-property :end comment))
"")))
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
;; Use no package by default
(setq org-latex-packages-alist nil)
(setq org-latex-default-packages-alist nil)
;; Do not include the subtitle inside the title
(setq org-latex-subtitle-separate t)
(setq org-latex-subtitle-format "\\subtitle{%s}")
(setq org-export-before-parsing-hook '(org-ref-glossary-before-parsing
org-ref-acronyms-before-parsing))
#+END_SRC
* Notes :noexport:
** TODO [#B] Find a journal
MSPP does not seem to be adequate
* Title Page :ignore:
#+begin_export latex
\begin{frontmatter}
\title{Decoupling Control of Parallel Manipulators}
\author[l1]{Thomas Dehaeze\corref{c1}}
\ead{thomas.dehaeze@esrf.fr}
\cortext[c1]{Corresponding author}
\author[l2]{Mohit Verma}
\author[l3]{Jennifer Watchi}
\author[l3]{Christophe Collette}
\address[l1]{ESRF, The European Synchrotron, Grenoble, France}
\address[l2]{CSIR, Structural Engineering Research Centre, Taramani, Chennai, India.}
\address[l3]{Precision Mechatronics Laboratory, University of Li\`{e}ge, Belgium.}
\begin{abstract}
abstract
\end{abstract}
\begin{keyword}
singular value decomposition \sep{} decoupling \sep{} vibration isolation \sep{} active control
\end{keyword}
\end{frontmatter}
#+end_export
* Introduction
The control of parallel manipulators (and any MIMO system in general) typically involves a two-step approach: first decoupling the plant dynamics (using various strategies discussed in this paper), followed by the application of SISO control for the decoupled plant.
When sensors are integrated within the struts, decentralized control may be applied, as the system is already well decoupled at low frequency.
For instance, [[cite:&furutani04_nanom_cuttin_machin_using_stewar]] implemented a system where each strut consists of piezoelectric stack actuators and eddy current displacement sensors, with separate PI controllers for each strut.
A similar control architecture was proposed in [[cite:&du14_piezo_actuat_high_precis_flexib]] using strain gauge sensors integrated in each strut.
An alternative strategy involves decoupling the system in the Cartesian frame using Jacobian matrices.
As demonstrated during the study of Stewart platform kinematics, Jacobian matrices can be utilized to map actuator forces to forces and torques applied on the top platform.
This approach enables the implementation of controllers in a defined frame.
It has been applied with various sensor types including force sensors [[cite:&mcinroy00_desig_contr_flexur_joint_hexap]], relative displacement sensors [[cite:&kim00_robus_track_contr_desig_dof_paral_manip]], and inertial sensors [[cite:&li01_simul_vibrat_isolat_point_contr;&abbas14_vibrat_stewar_platf]].
The Cartesian frame in which the system is decoupled is typically chosen at the point of interest (i.e., where the motion is of interest) or at the center of mass.
Modal decoupling represents another noteworthy decoupling strategy, wherein the "local" plant inputs and outputs are mapped to the modal space.
In this approach, multiple SISO plants, each corresponding to a single mode, can be controlled independently.
This decoupling strategy has been implemented for active damping applications [[cite:&holterman05_activ_dampin_based_decoup_colloc_contr]], which is logical as it is often desirable to dampen specific modes.
The strategy has also been employed in [[cite:&pu11_six_degree_of_freed_activ]] for vibration isolation purposes using geophones, and in [[cite:&yang19_dynam_model_decoup_contr_flexib]] using force sensors.
Another completely different strategy would be to implement a multivariable control directly on the coupled system.
$\mathcal{H}_\infty$ and $\mu\text{-synthesis}$ were applied to a Stewart platform model in [[cite:&lei08_multi_objec_robus_activ_vibrat]].
In [[cite:&xie17_model_contr_hybrid_passiv_activ]], decentralized force feedback was first applied, followed by $\mathcal{H}_2\text{-synthesis}$ for vibration isolation based on accelerometers.
$\mathcal{H}_\infty\text{-synthesis}$ was also employed in [[cite:&jiao18_dynam_model_exper_analy_stewar]] for active damping based on accelerometers.
A comparative study between $\mathcal{H}_\infty\text{-synthesis}$ and decentralized control in the frame of the struts was performed in [[cite:&thayer02_six_axis_vibrat_isolat_system]].
Their experimental closed-loop results indicated that the $\mathcal{H}_\infty$ controller did not outperform the decentralized controller in the frame of the struts.
These limitations were attributed to the model's poor ability to predict off-diagonal dynamics, which is crucial for $\mathcal{H}_\infty\text{-synthesis}$.
The purpose of this paper is to compare several methods for the decoupling of parallel manipulators, an analysis that appears to be lacking in the literature.
A simplified parallel manipulator model is introduced in Section ref:ssec:detail_control_decoupling_model as a test case for evaluating decoupling strategies.
The decentralized plant (transfer functions from actuators to sensors integrated in the struts) is examined in Section ref:ssec:detail_control_decoupling_decentralized.
Three approaches are investigated across subsequent sections: Jacobian matrix decoupling (Section ref:ssec:detail_control_decoupling_jacobian), modal decoupling (Section ref:ssec:detail_control_decoupling_modal), and Singular Value Decomposition (SVD) decoupling (Section ref:ssec:detail_control_decoupling_svd).
Finally, a comparative analysis with concluding observations is provided in Section ref:ssec:detail_control_decoupling_comp.
* Test Model
<<ssec:detail_control_decoupling_model>>
Instead of utilizing the Stewart platform for comparing decoupling strategies, a simplified parallel manipulator is employed to facilitate a more straightforward analysis.
The system illustrated in Figure ref:fig:detail_control_decoupling_model_test is used for this purpose.
It possesses three degrees of freedom (DoF) and incorporates three parallel struts.
Being a fully parallel manipulator, it is therefore quite similar to the Stewart platform.
Two reference frames are defined within this model: frame $\{M\}$ with origin $O_M$ at the center of mass of the solid body, and frame $\{K\}$ with origin $O_K$ at the center of stiffness of the parallel manipulator.
#+attr_latex: :options [b]{0.60\linewidth}
#+begin_minipage
#+name: fig:detail_control_decoupling_model_test
#+caption: Model used to compare decoupling strategies
#+attr_latex: :float nil :scale 1
[[file:figs/detail_control_decoupling_model_test.png]]
#+end_minipage
\hfill
#+attr_latex: :options [b]{0.36\linewidth}
#+begin_minipage
#+begin_scriptsize
#+latex: \centering
#+attr_latex: :environment tabularx :width \linewidth :placement [b] :align cXc
#+attr_latex: :booktabs t :float nil :center nil
| | *Description* | *Value* |
|-------+-----------------------+-------------------|
| $l_a$ | | $0.5\,m$ |
| $h_a$ | | $0.2\,m$ |
| $k$ | Actuator stiffness | $10\,N/\mu m$ |
| $c$ | Actuator damping | $200\,Ns/m$ |
| $m$ | Payload mass | $40\,\text{kg}$ |
| $I$ | Payload $R_z$ inertia | $5\,\text{kg}m^2$ |
#+latex: \captionof{table}{\label{tab:detail_control_decoupling_test_model_params}Model parameters}
#+end_scriptsize
#+end_minipage
The equations of motion are derived by applying Newton's second law to the suspended mass, expressed at its center of mass eqref:eq:detail_control_decoupling_model_eom, where $\bm{\mathcal{X}}_{\{M\}}$ represents the two translations and one rotation with respect to the center of mass, and $\bm{\mathcal{F}}_{\{M\}}$ denotes the forces and torque applied at the center of mass.
\begin{equation}\label{eq:detail_control_decoupling_model_eom}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t), \quad
\bm{\mathcal{X}}_{\{M\}} = \begin{bmatrix}
x \\
y \\
R_z
\end{bmatrix}, \quad \bm{\mathcal{F}}_{\{M\}} = \begin{bmatrix}
F_x \\
F_y \\
M_z
\end{bmatrix}
\end{equation}
The Jacobian matrix $\bm{J}_{\{M\}}$ is employed to map the spring, damping, and actuator forces to XY forces and Z torque expressed at the center of mass eqref:eq:detail_control_decoupling_jacobian_CoM.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}
\end{equation}
Subsequently, the equation of motion relating the actuator forces $\tau$ to the motion of the mass $\bm{\mathcal{X}}_{\{M\}}$ is derived eqref:eq:detail_control_decoupling_plant_cartesian.
\begin{equation}\label{eq:detail_control_decoupling_plant_cartesian}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
The matrices representing the payload inertia, actuator stiffness, and damping are shown in eqref:eq:detail_control_decoupling_system_matrices.
\begin{equation}\label{eq:detail_control_decoupling_system_matrices}
\bm{M}_{\{M\}} = \begin{bmatrix}
m & 0 & 0 \\
0 & m & 0 \\
0 & 0 & I
\end{bmatrix}, \quad
\bm{\mathcal{K}} = \begin{bmatrix}
k & 0 & 0 \\
0 & k & 0 \\
0 & 0 & k
\end{bmatrix}, \quad
\bm{\mathcal{C}} = \begin{bmatrix}
c & 0 & 0 \\
0 & c & 0 \\
0 & 0 & c
\end{bmatrix}
\end{equation}
The parameters employed for the subsequent analysis are summarized in Table ref:tab:detail_control_decoupling_test_model_params, which includes values for geometric parameters ($l_a$, $h_a$), mechanical properties (actuator stiffness $k$ and damping $c$), and inertial characteristics (payload mass $m$ and rotational inertia $I$).
* Control in the frame of the struts
<<ssec:detail_control_decoupling_decentralized>>
The dynamics in the frame of the struts are first examined.
The equation of motion relating actuator forces $\bm{\mathcal{\tau}}$ to strut relative motion $\bm{\mathcal{L}}$ is derived from equation eqref:eq:detail_control_decoupling_plant_cartesian by mapping the Cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix $\bm{J}_{\{M\}}$ defined in eqref:eq:detail_control_decoupling_jacobian_CoM.
The obtained transfer function from $\bm{\mathcal{\tau}}$ to $\bm{\mathcal{L}}$ is shown in eqref:eq:detail_control_decoupling_plant_decentralized.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized}
\frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1}
\end{equation}
At low frequencies, the plant converges to a diagonal constant matrix whose diagonal elements are equal to the actuator stiffnesses eqref:eq:detail_control_decoupling_plant_decentralized_low_freq.
At high frequencies, the plant converges to the mass matrix mapped in the frame of the struts, which is generally highly non-diagonal.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized_low_freq}
\bm{G}_{\mathcal{L}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{\mathcal{K}^{-1}}
\end{equation}
The magnitude of the coupled plant $\bm{G}_{\mathcal{L}}$ is illustrated in Figure ref:fig:detail_control_decoupling_coupled_plant_bode.
This representation confirms that at low frequencies (below the first suspension mode), the plant is well decoupled.
Depending on the symmetry present in the system, certain diagonal elements may exhibit identical values, as demonstrated for struts 2 and 3 in this example.
#+name: fig:detail_control_decoupling_coupled_plant_bode
#+caption: Model dynamics from actuator forces to relative displacement sensor of each strut.
[[file:figs/detail_control_decoupling_coupled_plant_bode.png]]
* Jacobian Decoupling
<<ssec:detail_control_decoupling_jacobian>>
** Jacobian Matrix
The Jacobian matrix $\bm{J}_{\{O\}}$ serves a dual purpose in the decoupling process: it converts strut velocity $\dot{\mathcal{L}}$ to payload velocity and angular velocity $\dot{\bm{\mathcal{X}}}_{\{O\}}$, and it transforms actuator forces $\bm{\tau}$ to forces/torque applied on the payload $\bm{\mathcal{F}}_{\{O\}}$, as expressed in equation eqref:eq:detail_control_decoupling_jacobian.
\begin{subequations}\label{eq:detail_control_decoupling_jacobian}
\begin{align}
\dot{\bm{\mathcal{X}}}_{\{O\}} &= \bm{J}_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = \bm{J}_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\
\bm{\mathcal{F}}_{\{O\}} &= \bm{J}_{\{O\}}^{\intercal} \bm{\tau}, \quad \bm{\tau} = \bm{J}_{\{O\}}^{-\intercal} \bm{\mathcal{F}}_{\{O\}}
\end{align}
\end{subequations}
The resulting plant (Figure ref:fig:detail_control_jacobian_decoupling_arch) have inputs and outputs with clear physical interpretations:
- $\bm{\mathcal{F}}_{\{O\}}$ represents forces/torques applied on the payload at the origin of frame $\{O\}$
- $\bm{\mathcal{X}}_{\{O\}}$ represents translations/rotation of the payload expressed in frame $\{O\}$
#+name: fig:detail_control_jacobian_decoupling_arch
#+caption: Block diagram of the transfer function from $\bm{\mathcal{F}}_{\{O\}}$ to $\bm{\mathcal{X}}_{\{O\}}$
[[file:figs/detail_control_decoupling_control_jacobian.png]]
The transfer function from $\bm{\mathcal{F}}_{\{O\}$ to $\bm{\mathcal{X}}_{\{O\}}$, denoted $\bm{G}_{\{O\}}(s)$ can be computed using eqref:eq:detail_control_decoupling_plant_jacobian.
\begin{equation}\label{eq:detail_control_decoupling_plant_jacobian}
\frac{\bm{\mathcal{X}}_{\{O\}}}{\bm{\mathcal{F}}_{\{O\}}}(s) = \bm{G}_{\{O\}}(s) = \left( \bm{J}_{\{O\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{O\}} s^2 + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{O\}} s + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{O\}} \right)^{-1}
\end{equation}
The frame $\{O\}$ can be selected according to specific requirements, but the decoupling properties are significantly influenced by this choice.
Two natural reference frames are particularly relevant: the center of mass and the center of stiffness.
** Center Of Mass
When the decoupling frame is located at the center of mass (frame $\{M\}$ in Figure ref:fig:detail_control_decoupling_model_test), the Jacobian matrix and its inverse are expressed as in eqref:eq:detail_control_decoupling_jacobian_CoM_inverse.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM_inverse}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}, \quad \bm{J}_{\{M\}}^{-1} = \begin{bmatrix}
1 & \frac{h_a}{2 l_a} & \frac{-h_a}{2 l_a} \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} \\
\end{bmatrix}
\end{equation}
Analytical formula of the plant $\bm{G}_{\{M\}}(s)$ is derived eqref:eq:detail_control_decoupling_plant_CoM.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM}
\frac{\bm{\mathcal{X}}_{\{M\}}}{\bm{\mathcal{F}}_{\{M\}}}(s) = \bm{G}_{\{M\}}(s) = \left( \bm{M}_{\{M\}} s^2 + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} s + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \right)^{-1}
\end{equation}
At high frequencies, the plant converges to the inverse of the mass matrix, which is a diagonal matrix eqref:eq:detail_control_decoupling_plant_CoM_high_freq.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM_high_freq}
\bm{G}_{\{M\}}(j\omega) \xrightarrow[\omega \to \infty]{} -\omega^2 \bm{M}_{\{M\}}^{-1} = -\omega^2 \begin{bmatrix}
1/m & 0 & 0 \\
0 & 1/m & 0 \\
0 & 0 & 1/I
\end{bmatrix}
\end{equation}
Consequently, the plant exhibits effective decoupling at frequencies above the highest suspension mode as shown in Figure ref:fig:detail_control_decoupling_jacobian_plant_CoM.
This strategy is typically employed in systems with low-frequency suspension modes [[cite:&butler11_posit_contr_lithog_equip]], where the plant approximates decoupled mass lines.
The low-frequency coupling observed in this configuration has a clear physical interpretation.
When a static force is applied at the center of mass, the suspended mass rotates around the center of stiffness.
This rotation is due to torque induced by the stiffness of the first actuator (i.e. the one on the left side), which is not aligned with the force application point.
This phenomenon is illustrated in Figure ref:fig:detail_control_decoupling_model_test_CoM.
#+name: fig:detail_control_jacobian_decoupling_plant_CoM_results
#+caption: Plant decoupled using the Jacobian matrix expresssed at the center of mass (\subref{fig:detail_control_decoupling_jacobian_plant_CoM}). The physical reason for low frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoM}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoM}Dynamics at the CoM}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_jacobian_plant_CoM.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_CoM}Static force applied at the CoM}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_CoM.png]]
#+end_subfigure
#+end_figure
** Center Of Stiffness
When the decoupling frame is located at the center of stiffness, the Jacobian matrix and its inverse are expressed as in eqref:eq:detail_control_decoupling_jacobian_CoK_inverse.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoK_inverse}
\bm{J}_{\{K\}} = \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & -l_a \\
0 & 1 & l_a
\end{bmatrix}, \quad \bm{J}_{\{K\}}^{-1} = \begin{bmatrix}
1 & 0 & 0 \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a}
\end{bmatrix}
\end{equation}
The frame $\{K\}$ was selected based on physical reasoning, positioned in line with the side strut and equidistant between the two vertical struts.
However, it could alternatively be determined through analytical methods to ensure that $\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}$ forms a diagonal matrix.
It should be noted that the existence of such a center of stiffness (i.e. a frame $\{K\}$ for which $\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}$ is diagonal) is not guaranteed for arbitrary systems.
This property is typically achievable only in systems exhibiting specific symmetrical characteristics, as is the case in the present example.
The analytical expression for the plant in this configuration was then computed eqref:eq:detail_control_decoupling_plant_CoK.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK}
\frac{\bm{\mathcal{X}}_{\{K\}}}{\bm{\mathcal{F}}_{\{K\}}}(s) = \bm{G}_{\{K\}}(s) = \left( \bm{J}_{\{K\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{K\}} s^2 + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{K\}} s + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}} \right)^{-1}
\end{equation}
Figure ref:fig:detail_control_decoupling_jacobian_plant_CoK_results presents the dynamics of the plant when decoupled using the Jacobian matrix expressed at the center of stiffness.
The plant is well decoupled below the suspension mode with the lowest frequency eqref:eq:detail_control_decoupling_plant_CoK_low_freq, making it particularly suitable for systems with high stiffness.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK_low_freq}
\bm{G}_{\{K\}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{J}_{\{K\}}^{-1} \bm{\mathcal{K}}^{-1} \bm{J}_{\{K\}}^{-\intercal}
\end{equation}
The physical reason for high-frequency coupling is illustrated in Figure ref:fig:detail_control_decoupling_model_test_CoK.
When a high-frequency force is applied at a point not aligned with the center of mass, it induces rotation around the center of mass.
#+name: fig:detail_control_decoupling_jacobian_plant_CoK_results
#+caption: Plant decoupled using the Jacobian matrix expresssed at the center of stiffness (\subref{fig:detail_control_decoupling_jacobian_plant_CoK}). The physical reason for high frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoK}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoK}Dynamics at the CoK}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_jacobian_plant_CoK.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_CoK}High frequency force applied at the CoK}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_CoK.png]]
#+end_subfigure
#+end_figure
* Modal Decoupling
<<ssec:detail_control_decoupling_modal>>
** Theory :ignore:
Modal decoupling represents an approach based on the principle that a mechanical system's behavior can be understood as a combination of contributions from various modes [[cite:&rankers98_machin]].
To convert the dynamics in the modal space, the equation of motion are first written with respect to the center of mass eqref:eq:detail_control_decoupling_equation_motion_CoM.
\begin{equation}\label{eq:detail_control_decoupling_equation_motion_CoM}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{C}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{K}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
For modal decoupling, a change of variables is introduced eqref:eq:detail_control_decoupling_modal_coordinates where $\bm{\mathcal{X}}_{m}$ represents the modal amplitudes and $\bm{\Phi}$ is a $n \times n$[fn:1] matrix whose columns correspond to the mode shapes of the system, computed from $\bm{M}_{\{M\}}$ and $\bm{K}_{\{M\}}$.
\begin{equation}\label{eq:detail_control_decoupling_modal_coordinates}
\bm{\mathcal{X}}_{\{M\}} = \bm{\Phi} \bm{\mathcal{X}}_{m}
\end{equation}
By pre-multiplying equation eqref:eq:detail_control_decoupling_equation_motion_CoM by $\bm{\Phi}^{\intercal}$ and applying the change of variable eqref:eq:detail_control_decoupling_modal_coordinates, a new set of equations of motion is obtained eqref:eq:detail_control_decoupling_equation_modal_coordinates where $\bm{\tau}_m$ represents the modal input, while $\bm{M}_m$, $\bm{C}_m$, and $\bm{K}_m$ denote the modal mass, damping, and stiffness matrices respectively.
\begin{equation}\label{eq:detail_control_decoupling_equation_modal_coordinates}
\underbrace{\bm{\Phi}^{\intercal} \bm{M} \bm{\Phi}}_{\bm{M}_m} \bm{\ddot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{C} \bm{\Phi}}_{\bm{C}_m} \bm{\dot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{K} \bm{\Phi}}_{\bm{K}_m} \bm{\mathcal{X}}_m(t) = \underbrace{\bm{\Phi}^{\intercal} \bm{J}^{\intercal} \bm{\tau}(t)}_{\bm{\tau}_m(t)}
\end{equation}
The inherent mathematical structure of the mass, damping, and stiffness matrices [[cite:&lang17_under, chapt. 8]] ensures that modal matrices are diagonal [[cite:&preumont18_vibrat_contr_activ_struc_fourt_edition, chapt. 2.3]].
This diagonalization transforms equation eqref:eq:detail_control_decoupling_equation_modal_coordinates into a set of $n$ decoupled equations, enabling independent control of each mode without cross-interaction.
To implement this approach from a decentralized plant, the architecture shown in Figure ref:fig:detail_control_decoupling_modal is employed.
Inputs of the decoupling plant are the modal modal inputs $\bm{\tau}_m$ and the outputs are the modal amplitudes $\bm{\mathcal{X}}_m$.
This implementation requires knowledge of the system's equations of motion, from which the mode shapes matrix $\bm{\Phi}$ is derived.
The resulting decoupled system features diagonal elements each representing second-order resonant systems that are straightforward to control individually.
#+name: fig:detail_control_decoupling_modal
#+caption: Modal Decoupling Architecture
[[file:figs/detail_control_decoupling_modal.png]]
** Example :ignore:
Modal decoupling was then applied to the test model.
First, the eigenvectors $\bm{\Phi}$ of $\bm{M}_{\{M\}}^{-1}\bm{K}_{\{M\}}$ were computed eqref:eq:detail_control_decoupling_modal_eigenvectors.
While analytical derivation of eigenvectors could be obtained for such a simple system, they are typically computed numerically for practical applications.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors}
\bm{\Phi} = \begin{bmatrix}
\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & 0 & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} \\
0 & 1 & 0 \\
1 & 0 & 1
\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2}
\end{equation}
The numerical values for the eigenvector matrix and its inverse are shown in eqref:eq:detail_control_decoupling_modal_eigenvectors_matrices.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors_matrices}
\bm{\Phi} = \begin{bmatrix}
-0.905 & 0 & -0.058 \\
0 & 1 & 0 \\
0.424 & 0 & -0.998
\end{bmatrix}, \quad
\bm{\Phi}^{-1} = \begin{bmatrix}
-1.075 & 0 & 0.063 \\
0 & 1 & 0 \\
-0.457 & 0 & -0.975
\end{bmatrix}
\end{equation}
The two computed matrices were implemented in the control architecture of Figure ref:fig:detail_control_decoupling_modal, resulting in three distinct second order plants as depicted in Figure ref:fig:detail_control_decoupling_modal_plant.
Each of these diagonal elements corresponds to a specific mode, as shown in Figure ref:fig:detail_control_decoupling_model_test_modal, resulting in a perfectly decoupled system.
#+name: fig:detail_control_decoupling_modal_plant_modes
#+caption: Plant using modal decoupling consists of second order plants (\subref{fig:detail_control_decoupling_modal_plant}) which can be used to invidiually address different modes illustrated in (\subref{fig:detail_control_decoupling_model_test_modal})
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_modal_plant}Decoupled plant in modal space}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_modal_plant.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_modal}Individually controlled modes}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_model_test_modal.png]]
#+end_subfigure
#+end_figure
* SVD Decoupling
<<ssec:detail_control_decoupling_svd>>
** Singular Value Decomposition
Singular Value Decomposition (SVD) represents a powerful mathematical tool with extensive applications in data analysis [[cite:&brunton22_data, chapt. 1]] and multivariable control systems where it is particularly valuable for analyzing directional properties in multivariable systems [[cite:&skogestad07_multiv_feedb_contr]].
The SVD constitutes a unique matrix decomposition applicable to any complex matrix $\bm{X} \in \mathbb{C}^{n \times m}$, expressed as:
\begin{equation}\label{eq:detail_control_svd}
\bm{X} = \bm{U} \bm{\Sigma} \bm{V}^H
\end{equation}
where $\bm{U} \in \mathbb{C}^{n \times n}$ and $\bm{V} \in \mathbb{C}^{m \times m}$ are unitary matrices with orthonormal columns, and $\bm{\Sigma} \in \mathbb{R}^{n \times n}$ is a diagonal matrix with real, non-negative entries.
For real matrices $\bm{X}$, the resulting $\bm{U}$ and $\bm{V}$ matrices are also real, making them suitable for decoupling applications.
** Decoupling using the SVD
The procedure for SVD-based decoupling begins with identifying the system dynamics from inputs to outputs, typically represented as a Frequency Response Function (FRF), which yields a complex matrix $\bm{G}(\omega_i)$ for multiple frequency points $\omega_i$.
A specific frequency is then selected for optimal decoupling, with the targeted crossover frequency $\omega_c$ often serving as an appropriate choice.
Since real matrices are required for the decoupling transformation, a real approximation of the complex measured response at the selected frequency must be computed.
In this work, the method proposed in [[cite:&kouvaritakis79_theor_pract_charac_locus_desig_method]] was used as it preserves maximal orthogonality in the directional properties of the input complex matrix.
Following this approximation, a real matrix $\tilde{\bm{G}}(\omega_c)$ is obtained, and SVD is performed on this matrix.
The resulting (real) unitary matrices $\bm{U}$ and $\bm{V}$ are structured such that $\bm{V}^{-\intercal} \tilde{\bm{G}}(\omega_c) \bm{U}^{-1}$ forms a diagonal matrix.
These singular input and output matrices are then applied to decouple the system as illustrated in Figure ref:fig:detail_control_decoupling_svd, and the decoupled plant is described by eqref:eq:detail_control_decoupling_plant_svd.
\begin{equation}\label{eq:detail_control_decoupling_plant_svd}
\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-\intercal}
\end{equation}
#+name: fig:detail_control_decoupling_svd
#+caption: Decoupled plant $\bm{G}_{\text{SVD}}$ using the Singular Value Decomposition
[[file:figs/detail_control_decoupling_svd.png]]
Implementation of SVD decoupling requires access to the system's FRF, at least in the vicinity of the desired decoupling frequency.
This information can be obtained either experimentally or derived from a model.
While this approach ensures effective decoupling near the chosen frequency, it provides no guarantees regarding decoupling performance away from this frequency.
Furthermore, the quality of decoupling depends significantly on the accuracy of the real approximation, potentially limiting its effectiveness for plants with high damping.
** Example
Plant decoupling using the Singular Value Decomposition was then applied on the test model.
A decoupling frequency of $100\,\text{Hz}$ was used.
The plant response at that frequency, as well as its real approximation and the obtained $\bm{U}$ and $\bm{V}$ matrices are shown in eqref:eq:detail_control_decoupling_svd_example.
\begin{equation}\label{eq:detail_control_decoupling_svd_example}
\begin{align}
& \bm{G}_{\{\mathcal{L}\}}(\omega_c = 2\pi \cdot 100) = 10^{-9} \begin{bmatrix}
-99 - j 2.6 & 74 + j 4.2 & -74 - j 4.2 \\
74 + j 4.2 & -247 - j 9.7 & 102 + j 7.0 \\
-74 - j 4.2 & 102 + j 7.0 & -247 - j 9.7
\end{bmatrix} \\
& \xrightarrow[\text{approximation}]{\text{real}} \tilde{\bm{G}}_{\{\mathcal{L}\}}(\omega_c) = 10^{-9} \begin{bmatrix}
-99 & 74 & -74 \\
74 & -247 & 102 \\
-74 & 102 & -247
\end{bmatrix} \\
& \xrightarrow[\text{SVD}]{\phantom{\text{approximation}}} \bm{U} = \begin{bmatrix}
0.34 & 0 & 0.94 \\
-0.66 & 0.71 & 0.24 \\
0.66 & 0.71 & -0.24
\end{bmatrix}, \ \bm{V} = \begin{bmatrix}
-0.34 & 0 & -0.94 \\
0.66 & -0.71 & -0.24 \\
-0.66 & -0.71 & 0.24
\end{bmatrix}
\end{align}
\end{equation}
Using these $\bm{U}$ and $\bm{V}$ matrices, the decoupled plant is computed according to equation eqref:eq:detail_control_decoupling_plant_svd.
The resulting plant, depicted in Figure ref:fig:detail_control_decoupling_svd_plant, exhibits remarkable decoupling across a broad frequency range, extending well beyond the vicinity of $\omega_c$.
Additionally, the diagonal terms manifest as second-order dynamic systems, facilitating straightforward controller design.
#+name: fig:detail_control_decoupling_svd_plant
#+caption: Plant dynamics $\bm{G}_{\text{SVD}}(s)$ obtained after decoupling using Singular Value Decomposition
[[file:figs/detail_control_decoupling_svd_plant.png]]
As it was surprising to obtain such a good decoupling at all frequencies, a variant system with identical dynamics but different sensor configurations was examined.
Instead of using relative motion sensors collocated with the struts, three relative motion sensors were positioned as shown in Figure ref:fig:detail_control_decoupling_model_test_alt.
Although Jacobian matrices could theoretically be used to map these sensors to the frame of the struts, application of the same SVD decoupling procedure yielded the plant response shown in Figure ref:fig:detail_control_decoupling_svd_alt_plant, which exhibits significantly greater coupling.
Notably, the coupling demonstrates local minima near the decoupling frequency, consistent with the fact that the decoupling matrices were derived specifically for that frequency point.
#+name: fig:detail_control_svd_decoupling_not_symmetrical
#+caption: Application of SVD decoupling on a system schematically shown in (\subref{fig:detail_control_decoupling_model_test_alt}). The obtained decoupled plant is shown in (\subref{fig:detail_control_decoupling_svd_alt_plant}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_model_test_alt}Alternative location of sensors}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :scale 1
[[file:figs/detail_control_decoupling_model_test_alt.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_decoupling_svd_alt_plant}Obtained decoupled plant}
#+attr_latex: :options {0.48\textwidth}
#+begin_subfigure
#+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_decoupling_svd_alt_plant.png]]
#+end_subfigure
#+end_figure
The exceptional performance of SVD decoupling on the plant with collocated sensors warrants further investigation.
This effectiveness may be attributed to the symmetrical properties of the plant, as evidenced in the Bode plots of the decentralized plant shown in Figure ref:fig:detail_control_decoupling_coupled_plant_bode.
The phenomenon potentially relates to previous research on SVD controllers applied to systems with specific symmetrical characteristics [[cite:&hovd97_svd_contr_contr]].
* Comparison of decoupling strategies
<<ssec:detail_control_decoupling_comp>>
While the three proposed decoupling methods may appear similar in their mathematical implementation (each involving pre-multiplication and post-multiplication of the plant with constant matrices), they differ significantly in their underlying approaches and practical implications, as summarized in Table ref:tab:detail_control_decoupling_strategies_comp.
Each method employs a distinct conceptual framework: Jacobian decoupling is "topology-driven", relying on the geometric configuration of the system; modal decoupling is "physics-driven", based on the system's dynamical equations; and SVD decoupling is "data-driven", utilizing measured frequency response functions.
The physical interpretation of decoupled plant inputs and outputs varies considerably among these methods.
With Jacobian decoupling, inputs and outputs retain clear physical meaning, corresponding to forces/torques and translations/rotations in a specified reference frame.
Modal decoupling arranges inputs to excite individual modes, with outputs combined to measure these modes separately.
For SVD decoupling, inputs and outputs represent special directions ordered by decreasing controllability and observability at the chosen frequency, though physical interpretation becomes challenging for parallel manipulators.
This difference in interpretation relates directly to the "control space" in which the controllers operate.
When these "control spaces" meaningfully relate to the control objectives, controllers can be tuned to directly match specific requirements.
For Jacobian decoupling, the controller typically operates in a frame positioned at the point where motion needs to be controlled, for instance where the light is focused in the NASS application.
Modal decoupling provides a natural framework when specific vibrational modes require targeted control.
SVD decoupling generally results in a loss of physical meaning for the "control space", potentially complicating the process of relating controller design to practical system requirements.
The quality of decoupling achieved through these methods also exhibits distinct characteristics.
Jacobian decoupling performance depends on the chosen reference frame, with optimal decoupling at low frequencies when aligned at the center of stiffness, or at high frequencies when aligned with the center of mass.
Systems designed with coincident centers of mass and stiffness may achieve excellent decoupling using this approach.
Modal decoupling offers good decoupling across all frequencies, though its effectiveness relies on the model accuracy, with discrepancies potentially resulting in significant off-diagonal elements.
SVD decoupling can be implemented using measured data without requiring a model, with optimal performance near the chosen decoupling frequency, though its effectiveness may diminish at other frequencies and depends on the quality of the real approximation of the response at the selected frequency point.
#+name: tab:detail_control_decoupling_strategies_comp
#+caption: Comparison of decoupling strategies
#+attr_latex: :environment tabularx :width \linewidth :align lXXX
#+attr_latex: :center t :booktabs t :font \scriptsize
| | *Jacobian* | *Modal* | *SVD* |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Philosophy* | Topology Driven | Physics Driven | Data Driven |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Requirements* | Known geometry | Known equations of motion | Identified FRF |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Decoupling Matrices* | Jacobian matrix $\bm{J}_{\{O\}}$ | Eigenvectors $\bm{\Phi}$ | SVD matrices $\bm{U}$ and $\bm{V}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Decoupled Plant* | $\bm{G}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-1} \bm{G}_{\mathcal{L}}(s) \bm{J}_{\{O\}}^{-\intercal}$ | $\bm{G}_m(s) = \bm{\Phi}^{-1} \bm{G}_{\mathcal{X}}(s) \bm{\Phi}^{-\intercal}$ | $\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}(s) \bm{V}^{-\intercal}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Controller* | $\bm{K}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-\intercal} \bm{K}_{d}(s) \bm{J}_{\{O\}}^{-1}$ | $\bm{K}_m(s) = \bm{\Phi}^{-\intercal} \bm{K}_{d}(s) \bm{\Phi}^{-1}$ | $\bm{K}_{\text{SVD}}(s) = \bm{V}^{-\intercal} \bm{K}_{d}(s) \bm{U}^{-1}$ |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Interpretation* | Forces/Torques to Displacement/Rotation in chosen frame | Inputs (resp. outputs) to excite (resp. sense) individual modes | Directions of max to min controllability/observability |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Effectiveness* | Decoupling at low or high frequency depending on the chosen frame | Good decoupling at all frequencies | Good decoupling near the chosen frequency |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Pros* | Retain physical meaning of inputs / outputs. Controller acts on a meaningfully "frame" | Ability to target specific modes. Simple $2^{nd}$ order diagonal plants | Good Decoupling near the crossover. Very General and requires no model |
|-----------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------|
| *Cons* | Good decoupling at all frequency can only be obtained for specific mechanical architecture | Relies on the accuracy of equation of motions. Robustness to unmodelled dynamics may be poor | Loss of physical meaning of inputs /outputs. Decoupling away from the chosen frequency may be poor |
* Acknowledgments
* Bibliography :ignore:
#+latex: \printbibliography
* Footnotes
[fn:1]$n$ corresponds to the number of degrees of freedom, here $n = 3$

Binary file not shown.

View File

@@ -0,0 +1,562 @@
% Created 2025-11-27 Thu 18:25
% Intended LaTeX compiler: pdflatex
\documentclass[preprint,12pt]{elsarticle}
\input{preamble.tex}
\input{preamble_extra.tex}
\journal{Journal of Sound and Vibration}
\bibliographystyle{elsarticle-num}
\biboptions{sort&compress}
\bibliography{dehaeze26_decoupling}
\begin{document}
\begin{frontmatter}
\title{Decoupling Control of Parallel Manipulators}
\author[l1]{Thomas Dehaeze\corref{c1}}
\ead{thomas.dehaeze@esrf.fr}
\cortext[c1]{Corresponding author}
\author[l2]{Mohit Verma}
\author[l3]{Jennifer Watchi}
\author[l3]{Christophe Collette}
\address[l1]{ESRF, The European Synchrotron, Grenoble, France}
\address[l2]{CSIR, Structural Engineering Research Centre, Taramani, Chennai, India.}
\address[l3]{Precision Mechatronics Laboratory, University of Li\`{e}ge, Belgium.}
\begin{abstract}
abstract
\end{abstract}
\begin{keyword}
singular value decomposition \sep{} decoupling \sep{} vibration isolation \sep{} active control
\end{keyword}
\end{frontmatter}
\section{Introduction}
The control of parallel manipulators (and any MIMO system in general) typically involves a two-step approach: first decoupling the plant dynamics (using various strategies discussed in this paper), followed by the application of SISO control for the decoupled plant.
When sensors are integrated within the struts, decentralized control may be applied, as the system is already well decoupled at low frequency.
For instance, \cite{furutani04_nanom_cuttin_machin_using_stewar} implemented a system where each strut consists of piezoelectric stack actuators and eddy current displacement sensors, with separate PI controllers for each strut.
A similar control architecture was proposed in \cite{du14_piezo_actuat_high_precis_flexib} using strain gauge sensors integrated in each strut.
An alternative strategy involves decoupling the system in the Cartesian frame using Jacobian matrices.
As demonstrated during the study of Stewart platform kinematics, Jacobian matrices can be utilized to map actuator forces to forces and torques applied on the top platform.
This approach enables the implementation of controllers in a defined frame.
It has been applied with various sensor types including force sensors \cite{mcinroy00_desig_contr_flexur_joint_hexap}, relative displacement sensors \cite{kim00_robus_track_contr_desig_dof_paral_manip}, and inertial sensors \cite{li01_simul_vibrat_isolat_point_contr,abbas14_vibrat_stewar_platf}.
The Cartesian frame in which the system is decoupled is typically chosen at the point of interest (i.e., where the motion is of interest) or at the center of mass.
Modal decoupling represents another noteworthy decoupling strategy, wherein the ``local'' plant inputs and outputs are mapped to the modal space.
In this approach, multiple SISO plants, each corresponding to a single mode, can be controlled independently.
This decoupling strategy has been implemented for active damping applications \cite{holterman05_activ_dampin_based_decoup_colloc_contr}, which is logical as it is often desirable to dampen specific modes.
The strategy has also been employed in \cite{pu11_six_degree_of_freed_activ} for vibration isolation purposes using geophones, and in \cite{yang19_dynam_model_decoup_contr_flexib} using force sensors.
Another completely different strategy would be to implement a multivariable control directly on the coupled system.
\(\mathcal{H}_\infty\) and \(\mu\text{-synthesis}\) were applied to a Stewart platform model in \cite{lei08_multi_objec_robus_activ_vibrat}.
In \cite{xie17_model_contr_hybrid_passiv_activ}, decentralized force feedback was first applied, followed by \(\mathcal{H}_2\text{-synthesis}\) for vibration isolation based on accelerometers.
\(\mathcal{H}_\infty\text{-synthesis}\) was also employed in \cite{jiao18_dynam_model_exper_analy_stewar} for active damping based on accelerometers.
A comparative study between \(\mathcal{H}_\infty\text{-synthesis}\) and decentralized control in the frame of the struts was performed in \cite{thayer02_six_axis_vibrat_isolat_system}.
Their experimental closed-loop results indicated that the \(\mathcal{H}_\infty\) controller did not outperform the decentralized controller in the frame of the struts.
These limitations were attributed to the model's poor ability to predict off-diagonal dynamics, which is crucial for \(\mathcal{H}_\infty\text{-synthesis}\).
The purpose of this paper is to compare several methods for the decoupling of parallel manipulators, an analysis that appears to be lacking in the literature.
A simplified parallel manipulator model is introduced in Section \ref{ssec:detail_control_decoupling_model} as a test case for evaluating decoupling strategies.
The decentralized plant (transfer functions from actuators to sensors integrated in the struts) is examined in Section \ref{ssec:detail_control_decoupling_decentralized}.
Three approaches are investigated across subsequent sections: Jacobian matrix decoupling (Section \ref{ssec:detail_control_decoupling_jacobian}), modal decoupling (Section \ref{ssec:detail_control_decoupling_modal}), and Singular Value Decomposition (SVD) decoupling (Section \ref{ssec:detail_control_decoupling_svd}).
Finally, a comparative analysis with concluding observations is provided in Section \ref{ssec:detail_control_decoupling_comp}.
\section{Test Model}
\label{ssec:detail_control_decoupling_model}
Instead of utilizing the Stewart platform for comparing decoupling strategies, a simplified parallel manipulator is employed to facilitate a more straightforward analysis.
The system illustrated in Figure \ref{fig:detail_control_decoupling_model_test} is used for this purpose.
It possesses three degrees of freedom (DoF) and incorporates three parallel struts.
Being a fully parallel manipulator, it is therefore quite similar to the Stewart platform.
Two reference frames are defined within this model: frame \(\{M\}\) with origin \(O_M\) at the center of mass of the solid body, and frame \(\{K\}\) with origin \(O_K\) at the center of stiffness of the parallel manipulator.
\begin{minipage}[b]{0.60\linewidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_decoupling_model_test.png}
\captionof{figure}{\label{fig:detail_control_decoupling_model_test}Model used to compare decoupling strategies}
\end{center}
\end{minipage}
\hfill
\begin{minipage}[b]{0.36\linewidth}
\begin{scriptsize}
\centering
\begin{tabularx}{\linewidth}{cXc}
\toprule
& \textbf{Description} & \textbf{Value}\\
\midrule
\(l_a\) & & \(0.5\,m\)\\
\(h_a\) & & \(0.2\,m\)\\
\(k\) & Actuator stiffness & \(10\,N/\mu m\)\\
\(c\) & Actuator damping & \(200\,Ns/m\)\\
\(m\) & Payload mass & \(40\,\text{kg}\)\\
\(I\) & Payload \(R_z\) inertia & \(5\,\text{kg}m^2\)\\
\bottomrule
\end{tabularx}
\captionof{table}{\label{tab:detail_control_decoupling_test_model_params}Model parameters}
\end{scriptsize}
\end{minipage}
The equations of motion are derived by applying Newton's second law to the suspended mass, expressed at its center of mass \eqref{eq:detail_control_decoupling_model_eom}, where \(\bm{\mathcal{X}}_{\{M\}}\) represents the two translations and one rotation with respect to the center of mass, and \(\bm{\mathcal{F}}_{\{M\}}\) denotes the forces and torque applied at the center of mass.
\begin{equation}\label{eq:detail_control_decoupling_model_eom}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) = \sum \bm{\mathcal{F}}_{\{M\}}(t), \quad
\bm{\mathcal{X}}_{\{M\}} = \begin{bmatrix}
x \\
y \\
R_z
\end{bmatrix}, \quad \bm{\mathcal{F}}_{\{M\}} = \begin{bmatrix}
F_x \\
F_y \\
M_z
\end{bmatrix}
\end{equation}
The Jacobian matrix \(\bm{J}_{\{M\}}\) is employed to map the spring, damping, and actuator forces to XY forces and Z torque expressed at the center of mass \eqref{eq:detail_control_decoupling_jacobian_CoM}.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}
\end{equation}
Subsequently, the equation of motion relating the actuator forces \(\tau\) to the motion of the mass \(\bm{\mathcal{X}}_{\{M\}}\) is derived \eqref{eq:detail_control_decoupling_plant_cartesian}.
\begin{equation}\label{eq:detail_control_decoupling_plant_cartesian}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
The matrices representing the payload inertia, actuator stiffness, and damping are shown in \eqref{eq:detail_control_decoupling_system_matrices}.
\begin{equation}\label{eq:detail_control_decoupling_system_matrices}
\bm{M}_{\{M\}} = \begin{bmatrix}
m & 0 & 0 \\
0 & m & 0 \\
0 & 0 & I
\end{bmatrix}, \quad
\bm{\mathcal{K}} = \begin{bmatrix}
k & 0 & 0 \\
0 & k & 0 \\
0 & 0 & k
\end{bmatrix}, \quad
\bm{\mathcal{C}} = \begin{bmatrix}
c & 0 & 0 \\
0 & c & 0 \\
0 & 0 & c
\end{bmatrix}
\end{equation}
The parameters employed for the subsequent analysis are summarized in Table \ref{tab:detail_control_decoupling_test_model_params}, which includes values for geometric parameters (\(l_a\), \(h_a\)), mechanical properties (actuator stiffness \(k\) and damping \(c\)), and inertial characteristics (payload mass \(m\) and rotational inertia \(I\)).
\section{Control in the frame of the struts}
\label{ssec:detail_control_decoupling_decentralized}
The dynamics in the frame of the struts are first examined.
The equation of motion relating actuator forces \(\bm{\mathcal{\tau}}\) to strut relative motion \(\bm{\mathcal{L}}\) is derived from equation \eqref{eq:detail_control_decoupling_plant_cartesian} by mapping the Cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix \(\bm{J}_{\{M\}}\) defined in \eqref{eq:detail_control_decoupling_jacobian_CoM}.
The obtained transfer function from \(\bm{\mathcal{\tau}}\) to \(\bm{\mathcal{L}}\) is shown in \eqref{eq:detail_control_decoupling_plant_decentralized}.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized}
\frac{\bm{\mathcal{L}}}{\bm{\mathcal{\tau}}}(s) = \bm{G}_{\mathcal{L}}(s) = \left( \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} s^2 + \bm{\mathcal{C}} s + \bm{\mathcal{K}} \right)^{-1}
\end{equation}
At low frequencies, the plant converges to a diagonal constant matrix whose diagonal elements are equal to the actuator stiffnesses \eqref{eq:detail_control_decoupling_plant_decentralized_low_freq}.
At high frequencies, the plant converges to the mass matrix mapped in the frame of the struts, which is generally highly non-diagonal.
\begin{equation}\label{eq:detail_control_decoupling_plant_decentralized_low_freq}
\bm{G}_{\mathcal{L}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{\mathcal{K}^{-1}}
\end{equation}
The magnitude of the coupled plant \(\bm{G}_{\mathcal{L}}\) is illustrated in Figure \ref{fig:detail_control_decoupling_coupled_plant_bode}.
This representation confirms that at low frequencies (below the first suspension mode), the plant is well decoupled.
Depending on the symmetry present in the system, certain diagonal elements may exhibit identical values, as demonstrated for struts 2 and 3 in this example.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/detail_control_decoupling_coupled_plant_bode.png}
\caption{\label{fig:detail_control_decoupling_coupled_plant_bode}Model dynamics from actuator forces to relative displacement sensor of each strut.}
\end{figure}
\section{Jacobian Decoupling}
\label{ssec:detail_control_decoupling_jacobian}
\subsection{Jacobian Matrix}
The Jacobian matrix \(\bm{J}_{\{O\}}\) serves a dual purpose in the decoupling process: it converts strut velocity \(\dot{\mathcal{L}}\) to payload velocity and angular velocity \(\dot{\bm{\mathcal{X}}}_{\{O\}}\), and it transforms actuator forces \(\bm{\tau}\) to forces/torque applied on the payload \(\bm{\mathcal{F}}_{\{O\}}\), as expressed in equation \eqref{eq:detail_control_decoupling_jacobian}.
\begin{subequations}\label{eq:detail_control_decoupling_jacobian}
\begin{align}
\dot{\bm{\mathcal{X}}}_{\{O\}} &= \bm{J}_{\{O\}} \dot{\bm{\mathcal{L}}}, \quad \dot{\bm{\mathcal{L}}} = \bm{J}_{\{O\}}^{-1} \dot{\bm{\mathcal{X}}}_{\{O\}} \\
\bm{\mathcal{F}}_{\{O\}} &= \bm{J}_{\{O\}}^{\intercal} \bm{\tau}, \quad \bm{\tau} = \bm{J}_{\{O\}}^{-\intercal} \bm{\mathcal{F}}_{\{O\}}
\end{align}
\end{subequations}
The resulting plant (Figure \ref{fig:detail_control_jacobian_decoupling_arch}) have inputs and outputs with clear physical interpretations:
\begin{itemize}
\item \(\bm{\mathcal{F}}_{\{O\}}\) represents forces/torques applied on the payload at the origin of frame \(\{O\}\)
\item \(\bm{\mathcal{X}}_{\{O\}}\) represents translations/rotation of the payload expressed in frame \(\{O\}\)
\end{itemize}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/detail_control_decoupling_control_jacobian.png}
\caption{\label{fig:detail_control_jacobian_decoupling_arch}Block diagram of the transfer function from \(\bm{\mathcal{F}}_{\{O\}}\) to \(\bm{\mathcal{X}}_{\{O\}}\)}
\end{figure}
The transfer function from \(\bm{\mathcal{F}}_{\{O\}\) to \(\bm{\mathcal{X}}_{\{O\}}\), denoted \(\bm{G}_{\{O\}}(s)\) can be computed using \eqref{eq:detail_control_decoupling_plant_jacobian}.
\begin{equation}\label{eq:detail_control_decoupling_plant_jacobian}
\frac{\bm{\mathcal{X}}_{\{O\}}}{\bm{\mathcal{F}}_{\{O\}}}(s) = \bm{G}_{\{O\}}(s) = \left( \bm{J}_{\{O\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{O\}} s^2 + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{O\}} s + \bm{J}_{\{O\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{O\}} \right)^{-1}
\end{equation}
The frame \(\{O\}\) can be selected according to specific requirements, but the decoupling properties are significantly influenced by this choice.
Two natural reference frames are particularly relevant: the center of mass and the center of stiffness.
\subsection{Center Of Mass}
When the decoupling frame is located at the center of mass (frame \(\{M\}\) in Figure \ref{fig:detail_control_decoupling_model_test}), the Jacobian matrix and its inverse are expressed as in \eqref{eq:detail_control_decoupling_jacobian_CoM_inverse}.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoM_inverse}
\bm{J}_{\{M\}} = \begin{bmatrix}
1 & 0 & h_a \\
0 & 1 & -l_a \\
0 & 1 & l_a \\
\end{bmatrix}, \quad \bm{J}_{\{M\}}^{-1} = \begin{bmatrix}
1 & \frac{h_a}{2 l_a} & \frac{-h_a}{2 l_a} \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a} \\
\end{bmatrix}
\end{equation}
Analytical formula of the plant \(\bm{G}_{\{M\}}(s)\) is derived \eqref{eq:detail_control_decoupling_plant_CoM}.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM}
\frac{\bm{\mathcal{X}}_{\{M\}}}{\bm{\mathcal{F}}_{\{M\}}}(s) = \bm{G}_{\{M\}}(s) = \left( \bm{M}_{\{M\}} s^2 + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{M\}} s + \bm{J}_{\{M\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{M\}} \right)^{-1}
\end{equation}
At high frequencies, the plant converges to the inverse of the mass matrix, which is a diagonal matrix \eqref{eq:detail_control_decoupling_plant_CoM_high_freq}.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoM_high_freq}
\bm{G}_{\{M\}}(j\omega) \xrightarrow[\omega \to \infty]{} -\omega^2 \bm{M}_{\{M\}}^{-1} = -\omega^2 \begin{bmatrix}
1/m & 0 & 0 \\
0 & 1/m & 0 \\
0 & 0 & 1/I
\end{bmatrix}
\end{equation}
Consequently, the plant exhibits effective decoupling at frequencies above the highest suspension mode as shown in Figure \ref{fig:detail_control_decoupling_jacobian_plant_CoM}.
This strategy is typically employed in systems with low-frequency suspension modes \cite{butler11_posit_contr_lithog_equip}, where the plant approximates decoupled mass lines.
The low-frequency coupling observed in this configuration has a clear physical interpretation.
When a static force is applied at the center of mass, the suspended mass rotates around the center of stiffness.
This rotation is due to torque induced by the stiffness of the first actuator (i.e. the one on the left side), which is not aligned with the force application point.
This phenomenon is illustrated in Figure \ref{fig:detail_control_decoupling_model_test_CoM}.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_decoupling_jacobian_plant_CoM.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoM}Dynamics at the CoM}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_decoupling_model_test_CoM.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_model_test_CoM}Static force applied at the CoM}
\end{subfigure}
\caption{\label{fig:detail_control_jacobian_decoupling_plant_CoM_results}Plant decoupled using the Jacobian matrix expresssed at the center of mass (\subref{fig:detail_control_decoupling_jacobian_plant_CoM}). The physical reason for low frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoM}).}
\end{figure}
\subsection{Center Of Stiffness}
When the decoupling frame is located at the center of stiffness, the Jacobian matrix and its inverse are expressed as in \eqref{eq:detail_control_decoupling_jacobian_CoK_inverse}.
\begin{equation}\label{eq:detail_control_decoupling_jacobian_CoK_inverse}
\bm{J}_{\{K\}} = \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & -l_a \\
0 & 1 & l_a
\end{bmatrix}, \quad \bm{J}_{\{K\}}^{-1} = \begin{bmatrix}
1 & 0 & 0 \\
0 & \frac{1}{2} & \frac{1}{2} \\
0 & \frac{-1}{2 l_a} & \frac{1}{2 l_a}
\end{bmatrix}
\end{equation}
The frame \(\{K\}\) was selected based on physical reasoning, positioned in line with the side strut and equidistant between the two vertical struts.
However, it could alternatively be determined through analytical methods to ensure that \(\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}\) forms a diagonal matrix.
It should be noted that the existence of such a center of stiffness (i.e. a frame \(\{K\}\) for which \(\bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}}\) is diagonal) is not guaranteed for arbitrary systems.
This property is typically achievable only in systems exhibiting specific symmetrical characteristics, as is the case in the present example.
The analytical expression for the plant in this configuration was then computed \eqref{eq:detail_control_decoupling_plant_CoK}.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK}
\frac{\bm{\mathcal{X}}_{\{K\}}}{\bm{\mathcal{F}}_{\{K\}}}(s) = \bm{G}_{\{K\}}(s) = \left( \bm{J}_{\{K\}}^{\intercal} \bm{J}_{\{M\}}^{-\intercal} \bm{M}_{\{M\}} \bm{J}_{\{M\}}^{-1} \bm{J}_{\{K\}} s^2 + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{C}} \bm{J}_{\{K\}} s + \bm{J}_{\{K\}}^{\intercal} \bm{\mathcal{K}} \bm{J}_{\{K\}} \right)^{-1}
\end{equation}
Figure \ref{fig:detail_control_decoupling_jacobian_plant_CoK_results} presents the dynamics of the plant when decoupled using the Jacobian matrix expressed at the center of stiffness.
The plant is well decoupled below the suspension mode with the lowest frequency \eqref{eq:detail_control_decoupling_plant_CoK_low_freq}, making it particularly suitable for systems with high stiffness.
\begin{equation}\label{eq:detail_control_decoupling_plant_CoK_low_freq}
\bm{G}_{\{K\}}(j\omega) \xrightarrow[\omega \to 0]{} \bm{J}_{\{K\}}^{-1} \bm{\mathcal{K}}^{-1} \bm{J}_{\{K\}}^{-\intercal}
\end{equation}
The physical reason for high-frequency coupling is illustrated in Figure \ref{fig:detail_control_decoupling_model_test_CoK}.
When a high-frequency force is applied at a point not aligned with the center of mass, it induces rotation around the center of mass.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_decoupling_jacobian_plant_CoK.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_jacobian_plant_CoK}Dynamics at the CoK}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_decoupling_model_test_CoK.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_model_test_CoK}High frequency force applied at the CoK}
\end{subfigure}
\caption{\label{fig:detail_control_decoupling_jacobian_plant_CoK_results}Plant decoupled using the Jacobian matrix expresssed at the center of stiffness (\subref{fig:detail_control_decoupling_jacobian_plant_CoK}). The physical reason for high frequency coupling is illustrated in (\subref{fig:detail_control_decoupling_model_test_CoK}).}
\end{figure}
\section{Modal Decoupling}
\label{ssec:detail_control_decoupling_modal}
Modal decoupling represents an approach based on the principle that a mechanical system's behavior can be understood as a combination of contributions from various modes \cite{rankers98_machin}.
To convert the dynamics in the modal space, the equation of motion are first written with respect to the center of mass \eqref{eq:detail_control_decoupling_equation_motion_CoM}.
\begin{equation}\label{eq:detail_control_decoupling_equation_motion_CoM}
\bm{M}_{\{M\}} \ddot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{C}_{\{M\}} \dot{\bm{\mathcal{X}}}_{\{M\}}(t) + \bm{K}_{\{M\}} \bm{\mathcal{X}}_{\{M\}}(t) = \bm{J}_{\{M\}}^{\intercal} \bm{\tau}(t)
\end{equation}
For modal decoupling, a change of variables is introduced \eqref{eq:detail_control_decoupling_modal_coordinates} where \(\bm{\mathcal{X}}_{m}\) represents the modal amplitudes and \(\bm{\Phi}\) is a \(n \times n\)\footnote{\(n\) corresponds to the number of degrees of freedom, here \(n = 3\)} matrix whose columns correspond to the mode shapes of the system, computed from \(\bm{M}_{\{M\}}\) and \(\bm{K}_{\{M\}}\).
\begin{equation}\label{eq:detail_control_decoupling_modal_coordinates}
\bm{\mathcal{X}}_{\{M\}} = \bm{\Phi} \bm{\mathcal{X}}_{m}
\end{equation}
By pre-multiplying equation \eqref{eq:detail_control_decoupling_equation_motion_CoM} by \(\bm{\Phi}^{\intercal}\) and applying the change of variable \eqref{eq:detail_control_decoupling_modal_coordinates}, a new set of equations of motion is obtained \eqref{eq:detail_control_decoupling_equation_modal_coordinates} where \(\bm{\tau}_m\) represents the modal input, while \(\bm{M}_m\), \(\bm{C}_m\), and \(\bm{K}_m\) denote the modal mass, damping, and stiffness matrices respectively.
\begin{equation}\label{eq:detail_control_decoupling_equation_modal_coordinates}
\underbrace{\bm{\Phi}^{\intercal} \bm{M} \bm{\Phi}}_{\bm{M}_m} \bm{\ddot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{C} \bm{\Phi}}_{\bm{C}_m} \bm{\dot{\mathcal{X}}}_m(t) + \underbrace{\bm{\Phi}^{\intercal} \bm{K} \bm{\Phi}}_{\bm{K}_m} \bm{\mathcal{X}}_m(t) = \underbrace{\bm{\Phi}^{\intercal} \bm{J}^{\intercal} \bm{\tau}(t)}_{\bm{\tau}_m(t)}
\end{equation}
The inherent mathematical structure of the mass, damping, and stiffness matrices \cite[, chapt. 8]{lang17_under} ensures that modal matrices are diagonal \cite[, chapt. 2.3]{preumont18_vibrat_contr_activ_struc_fourt_edition}.
This diagonalization transforms equation \eqref{eq:detail_control_decoupling_equation_modal_coordinates} into a set of \(n\) decoupled equations, enabling independent control of each mode without cross-interaction.
To implement this approach from a decentralized plant, the architecture shown in Figure \ref{fig:detail_control_decoupling_modal} is employed.
Inputs of the decoupling plant are the modal modal inputs \(\bm{\tau}_m\) and the outputs are the modal amplitudes \(\bm{\mathcal{X}}_m\).
This implementation requires knowledge of the system's equations of motion, from which the mode shapes matrix \(\bm{\Phi}\) is derived.
The resulting decoupled system features diagonal elements each representing second-order resonant systems that are straightforward to control individually.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/detail_control_decoupling_modal.png}
\caption{\label{fig:detail_control_decoupling_modal}Modal Decoupling Architecture}
\end{figure}
Modal decoupling was then applied to the test model.
First, the eigenvectors \(\bm{\Phi}\) of \(\bm{M}_{\{M\}}^{-1}\bm{K}_{\{M\}}\) were computed \eqref{eq:detail_control_decoupling_modal_eigenvectors}.
While analytical derivation of eigenvectors could be obtained for such a simple system, they are typically computed numerically for practical applications.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors}
\bm{\Phi} = \begin{bmatrix}
\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & 0 & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} \\
0 & 1 & 0 \\
1 & 0 & 1
\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2}
\end{equation}
The numerical values for the eigenvector matrix and its inverse are shown in \eqref{eq:detail_control_decoupling_modal_eigenvectors_matrices}.
\begin{equation}\label{eq:detail_control_decoupling_modal_eigenvectors_matrices}
\bm{\Phi} = \begin{bmatrix}
-0.905 & 0 & -0.058 \\
0 & 1 & 0 \\
0.424 & 0 & -0.998
\end{bmatrix}, \quad
\bm{\Phi}^{-1} = \begin{bmatrix}
-1.075 & 0 & 0.063 \\
0 & 1 & 0 \\
-0.457 & 0 & -0.975
\end{bmatrix}
\end{equation}
The two computed matrices were implemented in the control architecture of Figure \ref{fig:detail_control_decoupling_modal}, resulting in three distinct second order plants as depicted in Figure \ref{fig:detail_control_decoupling_modal_plant}.
Each of these diagonal elements corresponds to a specific mode, as shown in Figure \ref{fig:detail_control_decoupling_model_test_modal}, resulting in a perfectly decoupled system.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_decoupling_modal_plant.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_modal_plant}Decoupled plant in modal space}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_decoupling_model_test_modal.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_model_test_modal}Individually controlled modes}
\end{subfigure}
\caption{\label{fig:detail_control_decoupling_modal_plant_modes}Plant using modal decoupling consists of second order plants (\subref{fig:detail_control_decoupling_modal_plant}) which can be used to invidiually address different modes illustrated in (\subref{fig:detail_control_decoupling_model_test_modal})}
\end{figure}
\section{SVD Decoupling}
\label{ssec:detail_control_decoupling_svd}
\subsection{Singular Value Decomposition}
Singular Value Decomposition (SVD) represents a powerful mathematical tool with extensive applications in data analysis \cite[, chapt. 1]{brunton22_data} and multivariable control systems where it is particularly valuable for analyzing directional properties in multivariable systems \cite{skogestad07_multiv_feedb_contr}.
The SVD constitutes a unique matrix decomposition applicable to any complex matrix \(\bm{X} \in \mathbb{C}^{n \times m}\), expressed as:
\begin{equation}\label{eq:detail_control_svd}
\bm{X} = \bm{U} \bm{\Sigma} \bm{V}^H
\end{equation}
where \(\bm{U} \in \mathbb{C}^{n \times n}\) and \(\bm{V} \in \mathbb{C}^{m \times m}\) are unitary matrices with orthonormal columns, and \(\bm{\Sigma} \in \mathbb{R}^{n \times n}\) is a diagonal matrix with real, non-negative entries.
For real matrices \(\bm{X}\), the resulting \(\bm{U}\) and \(\bm{V}\) matrices are also real, making them suitable for decoupling applications.
\subsection{Decoupling using the SVD}
The procedure for SVD-based decoupling begins with identifying the system dynamics from inputs to outputs, typically represented as a Frequency Response Function (FRF), which yields a complex matrix \(\bm{G}(\omega_i)\) for multiple frequency points \(\omega_i\).
A specific frequency is then selected for optimal decoupling, with the targeted crossover frequency \(\omega_c\) often serving as an appropriate choice.
Since real matrices are required for the decoupling transformation, a real approximation of the complex measured response at the selected frequency must be computed.
In this work, the method proposed in \cite{kouvaritakis79_theor_pract_charac_locus_desig_method} was used as it preserves maximal orthogonality in the directional properties of the input complex matrix.
Following this approximation, a real matrix \(\tilde{\bm{G}}(\omega_c)\) is obtained, and SVD is performed on this matrix.
The resulting (real) unitary matrices \(\bm{U}\) and \(\bm{V}\) are structured such that \(\bm{V}^{-\intercal} \tilde{\bm{G}}(\omega_c) \bm{U}^{-1}\) forms a diagonal matrix.
These singular input and output matrices are then applied to decouple the system as illustrated in Figure \ref{fig:detail_control_decoupling_svd}, and the decoupled plant is described by \eqref{eq:detail_control_decoupling_plant_svd}.
\begin{equation}\label{eq:detail_control_decoupling_plant_svd}
\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-\intercal}
\end{equation}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/detail_control_decoupling_svd.png}
\caption{\label{fig:detail_control_decoupling_svd}Decoupled plant \(\bm{G}_{\text{SVD}}\) using the Singular Value Decomposition}
\end{figure}
Implementation of SVD decoupling requires access to the system's FRF, at least in the vicinity of the desired decoupling frequency.
This information can be obtained either experimentally or derived from a model.
While this approach ensures effective decoupling near the chosen frequency, it provides no guarantees regarding decoupling performance away from this frequency.
Furthermore, the quality of decoupling depends significantly on the accuracy of the real approximation, potentially limiting its effectiveness for plants with high damping.
\subsection{Example}
Plant decoupling using the Singular Value Decomposition was then applied on the test model.
A decoupling frequency of \(100\,\text{Hz}\) was used.
The plant response at that frequency, as well as its real approximation and the obtained \(\bm{U}\) and \(\bm{V}\) matrices are shown in \eqref{eq:detail_control_decoupling_svd_example}.
\begin{equation}\label{eq:detail_control_decoupling_svd_example}
\begin{align}
& \bm{G}_{\{\mathcal{L}\}}(\omega_c = 2\pi \cdot 100) = 10^{-9} \begin{bmatrix}
-99 - j 2.6 & 74 + j 4.2 & -74 - j 4.2 \\
74 + j 4.2 & -247 - j 9.7 & 102 + j 7.0 \\
-74 - j 4.2 & 102 + j 7.0 & -247 - j 9.7
\end{bmatrix} \\
& \xrightarrow[\text{approximation}]{\text{real}} \tilde{\bm{G}}_{\{\mathcal{L}\}}(\omega_c) = 10^{-9} \begin{bmatrix}
-99 & 74 & -74 \\
74 & -247 & 102 \\
-74 & 102 & -247
\end{bmatrix} \\
& \xrightarrow[\text{SVD}]{\phantom{\text{approximation}}} \bm{U} = \begin{bmatrix}
0.34 & 0 & 0.94 \\
-0.66 & 0.71 & 0.24 \\
0.66 & 0.71 & -0.24
\end{bmatrix}, \ \bm{V} = \begin{bmatrix}
-0.34 & 0 & -0.94 \\
0.66 & -0.71 & -0.24 \\
-0.66 & -0.71 & 0.24
\end{bmatrix}
\end{align}
\end{equation}
Using these \(\bm{U}\) and \(\bm{V}\) matrices, the decoupled plant is computed according to equation \eqref{eq:detail_control_decoupling_plant_svd}.
The resulting plant, depicted in Figure \ref{fig:detail_control_decoupling_svd_plant}, exhibits remarkable decoupling across a broad frequency range, extending well beyond the vicinity of \(\omega_c\).
Additionally, the diagonal terms manifest as second-order dynamic systems, facilitating straightforward controller design.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/detail_control_decoupling_svd_plant.png}
\caption{\label{fig:detail_control_decoupling_svd_plant}Plant dynamics \(\bm{G}_{\text{SVD}}(s)\) obtained after decoupling using Singular Value Decomposition}
\end{figure}
As it was surprising to obtain such a good decoupling at all frequencies, a variant system with identical dynamics but different sensor configurations was examined.
Instead of using relative motion sensors collocated with the struts, three relative motion sensors were positioned as shown in Figure \ref{fig:detail_control_decoupling_model_test_alt}.
Although Jacobian matrices could theoretically be used to map these sensors to the frame of the struts, application of the same SVD decoupling procedure yielded the plant response shown in Figure \ref{fig:detail_control_decoupling_svd_alt_plant}, which exhibits significantly greater coupling.
Notably, the coupling demonstrates local minima near the decoupling frequency, consistent with the fact that the decoupling matrices were derived specifically for that frequency point.
\begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_decoupling_model_test_alt.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_model_test_alt}Alternative location of sensors}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_decoupling_svd_alt_plant.png}
\end{center}
\subcaption{\label{fig:detail_control_decoupling_svd_alt_plant}Obtained decoupled plant}
\end{subfigure}
\caption{\label{fig:detail_control_svd_decoupling_not_symmetrical}Application of SVD decoupling on a system schematically shown in (\subref{fig:detail_control_decoupling_model_test_alt}). The obtained decoupled plant is shown in (\subref{fig:detail_control_decoupling_svd_alt_plant}).}
\end{figure}
The exceptional performance of SVD decoupling on the plant with collocated sensors warrants further investigation.
This effectiveness may be attributed to the symmetrical properties of the plant, as evidenced in the Bode plots of the decentralized plant shown in Figure \ref{fig:detail_control_decoupling_coupled_plant_bode}.
The phenomenon potentially relates to previous research on SVD controllers applied to systems with specific symmetrical characteristics \cite{hovd97_svd_contr_contr}.
\section{Comparison of decoupling strategies}
\label{ssec:detail_control_decoupling_comp}
While the three proposed decoupling methods may appear similar in their mathematical implementation (each involving pre-multiplication and post-multiplication of the plant with constant matrices), they differ significantly in their underlying approaches and practical implications, as summarized in Table \ref{tab:detail_control_decoupling_strategies_comp}.
Each method employs a distinct conceptual framework: Jacobian decoupling is ``topology-driven'', relying on the geometric configuration of the system; modal decoupling is ``physics-driven'', based on the system's dynamical equations; and SVD decoupling is ``data-driven'', utilizing measured frequency response functions.
The physical interpretation of decoupled plant inputs and outputs varies considerably among these methods.
With Jacobian decoupling, inputs and outputs retain clear physical meaning, corresponding to forces/torques and translations/rotations in a specified reference frame.
Modal decoupling arranges inputs to excite individual modes, with outputs combined to measure these modes separately.
For SVD decoupling, inputs and outputs represent special directions ordered by decreasing controllability and observability at the chosen frequency, though physical interpretation becomes challenging for parallel manipulators.
This difference in interpretation relates directly to the ``control space'' in which the controllers operate.
When these ``control spaces'' meaningfully relate to the control objectives, controllers can be tuned to directly match specific requirements.
For Jacobian decoupling, the controller typically operates in a frame positioned at the point where motion needs to be controlled, for instance where the light is focused in the NASS application.
Modal decoupling provides a natural framework when specific vibrational modes require targeted control.
SVD decoupling generally results in a loss of physical meaning for the ``control space'', potentially complicating the process of relating controller design to practical system requirements.
The quality of decoupling achieved through these methods also exhibits distinct characteristics.
Jacobian decoupling performance depends on the chosen reference frame, with optimal decoupling at low frequencies when aligned at the center of stiffness, or at high frequencies when aligned with the center of mass.
Systems designed with coincident centers of mass and stiffness may achieve excellent decoupling using this approach.
Modal decoupling offers good decoupling across all frequencies, though its effectiveness relies on the model accuracy, with discrepancies potentially resulting in significant off-diagonal elements.
SVD decoupling can be implemented using measured data without requiring a model, with optimal performance near the chosen decoupling frequency, though its effectiveness may diminish at other frequencies and depends on the quality of the real approximation of the response at the selected frequency point.
\begin{table}[htbp]
\caption{\label{tab:detail_control_decoupling_strategies_comp}Comparison of decoupling strategies}
\centering
\scriptsize
\begin{tabularx}{\linewidth}{lXXX}
\toprule
& \textbf{Jacobian} & \textbf{Modal} & \textbf{SVD}\\
\midrule
\textbf{Philosophy} & Topology Driven & Physics Driven & Data Driven\\
\midrule
\textbf{Requirements} & Known geometry & Known equations of motion & Identified FRF\\
\midrule
\textbf{Decoupling Matrices} & Jacobian matrix \(\bm{J}_{\{O\}}\) & Eigenvectors \(\bm{\Phi}\) & SVD matrices \(\bm{U}\) and \(\bm{V}\)\\
\midrule
\textbf{Decoupled Plant} & \(\bm{G}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-1} \bm{G}_{\mathcal{L}}(s) \bm{J}_{\{O\}}^{-\intercal}\) & \(\bm{G}_m(s) = \bm{\Phi}^{-1} \bm{G}_{\mathcal{X}}(s) \bm{\Phi}^{-\intercal}\) & \(\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}(s) \bm{V}^{-\intercal}\)\\
\midrule
\textbf{Controller} & \(\bm{K}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-\intercal} \bm{K}_{d}(s) \bm{J}_{\{O\}}^{-1}\) & \(\bm{K}_m(s) = \bm{\Phi}^{-\intercal} \bm{K}_{d}(s) \bm{\Phi}^{-1}\) & \(\bm{K}_{\text{SVD}}(s) = \bm{V}^{-\intercal} \bm{K}_{d}(s) \bm{U}^{-1}\)\\
\midrule
\textbf{Interpretation} & Forces/Torques to Displacement/Rotation in chosen frame & Inputs (resp. outputs) to excite (resp. sense) individual modes & Directions of max to min controllability/observability\\
\midrule
\textbf{Effectiveness} & Decoupling at low or high frequency depending on the chosen frame & Good decoupling at all frequencies & Good decoupling near the chosen frequency\\
\midrule
\textbf{Pros} & Retain physical meaning of inputs / outputs. Controller acts on a meaningfully ``frame'' & Ability to target specific modes. Simple \(2^{nd}\) order diagonal plants & Good Decoupling near the crossover. Very General and requires no model\\
\midrule
\textbf{Cons} & Good decoupling at all frequency can only be obtained for specific mechanical architecture & Relies on the accuracy of equation of motions. Robustness to unmodelled dynamics may be poor & Loss of physical meaning of inputs /outputs. Decoupling away from the chosen frequency may be poor\\
\bottomrule
\end{tabularx}
\end{table}
\section{Acknowledgments}
\printbibliography
\end{document}

1509
paper/elsarticle-num.bst Normal file

File diff suppressed because it is too large Load Diff

1537
paper/elsarticle.dtx Normal file

File diff suppressed because it is too large Load Diff

67
paper/elsarticle.ins Normal file
View File

@@ -0,0 +1,67 @@
%%
%% This file will generate fast loadable files and documentation
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
%% Copyright 2007-2025 Elsevier Ltd
%%
%% This file is part of the 'Elsarticle Bundle'.
%% ---------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
%% License, either version 1.3 of this license or (at your option) any
%% later version. The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'Elsarticle Bundle' is
%% given in the file 'manifest.txt'.
%%
%% $Id: elsarticle.ins 273 2025-01-09 17:38:38Z rishi $
%%
%%
\input docstrip.tex
%%\keepsilent
\preamble
Copyright 2007-2025 Elsevier Ltd
This file is part of the 'Elsarticle Bundle'.
-------------------------------------------
It may be distributed under the conditions of the LaTeX Project Public
License, either version 1.3 of this license or (at your option) any
later version. The latest version of this license is in
http://www.latex-project.org/lppl.txt
and version 1.3 or later is part of all distributions of LaTeX
version 1999/12/01 or later.
The list of all files belonging to the 'Elsarticle Bundle' is
given in the file `manifest.txt'.
\endpreamble
\askforoverwritefalse
\generate{\file{elsarticle.cls}{\from{elsarticle.dtx}{class}}}
\obeyspaces
\Msg{*************************************************************}
\Msg{* *}
\Msg{* To finish the installation you have to move the following *}
\Msg{* file into a directory searched by TeX: *}
\Msg{* *}
\Msg{* elsarticle.cls *}
\Msg{* and *}
\Msg{* elsarticle-*.bst *}
\Msg{* *}
\Msg{* To produce the documentation go to the ../contrib folder *}
\Msg{* and run the file elsdoc.tex through pdfLaTeX *}
\Msg{* or use the Makefile which is far more easier. *}
\Msg{* *}
\Msg{* Happy TeXing! *}
\Msg{* *}
\Msg{*************************************************************}
\endbatchfile

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="220.418pt" height="56.826pt" viewBox="0 0 220.418 56.826">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 7.296875 -2.09375 C 7.34375 -2.234375 7.359375 -2.25 7.421875 -2.25 C 7.546875 -2.28125 7.6875 -2.28125 7.796875 -2.28125 C 8.046875 -2.28125 8.203125 -2.28125 8.203125 -2.5625 C 8.203125 -2.609375 8.171875 -2.75 8 -2.75 C 7.78125 -2.75 7.546875 -2.71875 7.328125 -2.71875 C 7.109375 -2.71875 6.875 -2.71875 6.65625 -2.71875 C 6.265625 -2.71875 5.28125 -2.75 4.890625 -2.75 C 4.765625 -2.75 4.578125 -2.75 4.578125 -2.453125 C 4.578125 -2.28125 4.765625 -2.28125 4.921875 -2.28125 L 5.28125 -2.28125 C 5.390625 -2.28125 5.9375 -2.28125 5.9375 -2.21875 C 5.9375 -2.203125 5.9375 -2.1875 5.875 -1.953125 C 5.859375 -1.875 5.703125 -1.25 5.6875 -1.234375 C 5.53125 -0.5625 4.734375 -0.296875 4.109375 -0.296875 C 3.53125 -0.296875 2.9375 -0.421875 2.46875 -0.796875 C 1.9375 -1.234375 1.9375 -1.921875 1.9375 -2.140625 C 1.9375 -2.59375 2.140625 -4.375 3.109375 -5.453125 C 3.6875 -6.109375 4.640625 -6.515625 5.65625 -6.515625 C 6.90625 -6.515625 7.375 -5.5625 7.375 -4.734375 C 7.375 -4.625 7.34375 -4.484375 7.34375 -4.375 C 7.34375 -4.234375 7.46875 -4.234375 7.609375 -4.234375 C 7.828125 -4.234375 7.84375 -4.25 7.890625 -4.453125 L 8.453125 -6.6875 C 8.46875 -6.734375 8.484375 -6.78125 8.484375 -6.84375 C 8.484375 -6.984375 8.34375 -6.984375 8.234375 -6.984375 L 7.3125 -6.265625 C 7.109375 -6.46875 6.59375 -6.984375 5.5 -6.984375 C 2.3125 -6.984375 0.546875 -4.546875 0.546875 -2.515625 C 0.546875 -0.703125 1.953125 0.171875 3.796875 0.171875 C 4.84375 0.171875 5.53125 -0.171875 5.859375 -0.515625 C 6.109375 -0.265625 6.609375 0 6.671875 0 C 6.78125 0 6.796875 -0.078125 6.84375 -0.234375 Z M 7.296875 -2.09375 "/>
</g>
<g id="glyph-0-1">
<path d="M 5.984375 -6.15625 C 6.015625 -6.3125 6.03125 -6.3125 6.109375 -6.328125 C 6.21875 -6.34375 6.359375 -6.34375 6.484375 -6.34375 C 6.734375 -6.34375 6.890625 -6.34375 6.890625 -6.640625 C 6.890625 -6.65625 6.890625 -6.8125 6.6875 -6.8125 C 6.484375 -6.8125 6.265625 -6.796875 6.0625 -6.796875 C 5.84375 -6.796875 5.609375 -6.78125 5.375 -6.78125 C 4.984375 -6.78125 4.03125 -6.8125 3.640625 -6.8125 C 3.53125 -6.8125 3.34375 -6.8125 3.34375 -6.53125 C 3.34375 -6.34375 3.515625 -6.34375 3.6875 -6.34375 L 4.03125 -6.34375 C 4.421875 -6.34375 4.4375 -6.34375 4.6875 -6.3125 L 3.484375 -1.5 C 3.234375 -0.484375 2.609375 -0.1875 2.140625 -0.1875 C 2.0625 -0.1875 1.625 -0.203125 1.328125 -0.421875 C 1.875 -0.5625 2.046875 -1.03125 2.046875 -1.296875 C 2.046875 -1.625 1.78125 -1.859375 1.4375 -1.859375 C 1.046875 -1.859375 0.5625 -1.546875 0.5625 -0.921875 C 0.5625 -0.234375 1.25 0.171875 2.203125 0.171875 C 3.3125 0.171875 4.515625 -0.28125 4.796875 -1.453125 Z M 5.984375 -6.15625 "/>
</g>
<g id="glyph-0-2">
<path d="M 3.46875 -3.453125 L 5.3125 -3.453125 C 5.515625 -3.453125 5.640625 -3.453125 5.796875 -3.609375 C 6 -3.78125 6 -4 6 -4.03125 C 6 -4.40625 5.640625 -4.40625 5.46875 -4.40625 L 2.203125 -4.40625 C 2 -4.40625 1.5625 -4.40625 1.046875 -3.9375 C 0.703125 -3.625 0.3125 -3.109375 0.3125 -3.015625 C 0.3125 -2.875 0.421875 -2.875 0.53125 -2.875 C 0.6875 -2.875 0.703125 -2.875 0.78125 -2.984375 C 1.15625 -3.453125 1.8125 -3.453125 2 -3.453125 L 2.90625 -3.453125 L 2.546875 -2.40625 C 2.453125 -2.15625 2.234375 -1.515625 2.15625 -1.265625 C 2.046875 -0.953125 1.859375 -0.421875 1.859375 -0.3125 C 1.859375 -0.046875 2.078125 0.125 2.328125 0.125 C 2.390625 0.125 2.90625 0.125 3 -0.53125 Z M 3.46875 -3.453125 "/>
</g>
<g id="glyph-1-0">
<path d="M 3.40625 1.640625 C 3.40625 1.546875 3.34375 1.546875 3.296875 1.546875 C 2.46875 1.5 2.3125 1.03125 2.296875 0.859375 L 2.296875 -0.9375 C 2.296875 -1.25 2.046875 -1.578125 1.484375 -1.734375 C 2.296875 -1.984375 2.296875 -2.421875 2.296875 -2.75 L 2.296875 -4 C 2.296875 -4.421875 2.296875 -4.59375 2.5625 -4.78125 C 2.75 -4.9375 3 -5 3.265625 -5.015625 C 3.34375 -5.03125 3.40625 -5.03125 3.40625 -5.125 C 3.40625 -5.21875 3.34375 -5.21875 3.234375 -5.21875 C 2.453125 -5.21875 1.765625 -4.875 1.765625 -4.34375 L 1.765625 -2.71875 C 1.765625 -2.546875 1.765625 -2.3125 1.578125 -2.140625 C 1.296875 -1.90625 1.03125 -1.84375 0.796875 -1.828125 C 0.703125 -1.828125 0.65625 -1.828125 0.65625 -1.734375 C 0.65625 -1.640625 0.71875 -1.640625 0.765625 -1.640625 C 1.515625 -1.59375 1.703125 -1.1875 1.75 -1.046875 C 1.765625 -0.96875 1.765625 -0.953125 1.765625 -0.703125 L 1.765625 0.703125 C 1.765625 0.953125 1.765625 1.21875 2.171875 1.484375 C 2.46875 1.671875 2.953125 1.734375 3.234375 1.734375 C 3.34375 1.734375 3.40625 1.734375 3.40625 1.640625 Z M 3.40625 1.640625 "/>
</g>
<g id="glyph-1-1">
<path d="M 3.40625 -1.734375 C 3.40625 -1.828125 3.34375 -1.828125 3.296875 -1.828125 C 2.484375 -1.875 2.3125 -2.359375 2.296875 -2.546875 L 2.296875 -4.09375 C 2.296875 -4.453125 2.296875 -4.703125 1.890625 -4.96875 C 1.59375 -5.15625 1.09375 -5.21875 0.828125 -5.21875 C 0.71875 -5.21875 0.65625 -5.21875 0.65625 -5.125 C 0.65625 -5.03125 0.71875 -5.015625 0.765625 -5.015625 C 1.625 -4.984375 1.765625 -4.484375 1.765625 -4.328125 L 1.765625 -2.546875 C 1.765625 -2.21875 2.046875 -1.890625 2.59375 -1.734375 C 1.765625 -1.5 1.765625 -1.046875 1.765625 -0.71875 L 1.765625 0.53125 C 1.765625 0.96875 1.765625 1.09375 1.515625 1.296875 C 1.390625 1.40625 1.140625 1.515625 0.796875 1.546875 C 0.703125 1.546875 0.65625 1.546875 0.65625 1.640625 C 0.65625 1.734375 0.71875 1.734375 0.828125 1.734375 C 1.59375 1.734375 2.296875 1.421875 2.296875 0.859375 L 2.296875 -0.765625 C 2.296875 -0.984375 2.296875 -1.578125 3.328125 -1.640625 C 3.328125 -1.640625 3.40625 -1.640625 3.40625 -1.734375 Z M 3.40625 -1.734375 "/>
</g>
<g id="glyph-1-2">
<path d="M 5.125 -0.984375 C 5.125 -1.015625 5.109375 -1.046875 5.0625 -1.046875 C 4.953125 -1.046875 4.5 -0.890625 4.421875 -0.609375 C 4.3125 -0.3125 4.234375 -0.3125 4.0625 -0.3125 C 3.6875 -0.3125 3.1875 -0.4375 2.84375 -0.53125 C 2.484375 -0.625 2.109375 -0.703125 1.75 -0.703125 C 1.71875 -0.703125 1.578125 -0.703125 1.484375 -0.6875 C 1.859375 -1.234375 1.953125 -1.578125 2.0625 -2.015625 C 2.203125 -2.53125 2.40625 -3.25 2.75 -3.828125 C 3.09375 -4.390625 3.265625 -4.421875 3.5 -4.421875 C 3.828125 -4.421875 4.046875 -4.1875 4.046875 -3.84375 C 4.046875 -3.734375 4.03125 -3.65625 4.03125 -3.625 C 4.03125 -3.59375 4.046875 -3.5625 4.109375 -3.5625 C 4.125 -3.5625 4.296875 -3.59375 4.546875 -3.765625 C 4.6875 -3.859375 4.765625 -3.9375 4.765625 -4.203125 C 4.765625 -4.46875 4.609375 -4.890625 4.0625 -4.890625 C 3.453125 -4.890625 2.78125 -4.484375 2.421875 -4.046875 C 1.953125 -3.515625 1.640625 -2.8125 1.359375 -1.671875 C 1.1875 -1.03125 0.9375 -0.5 0.609375 -0.234375 C 0.546875 -0.171875 0.359375 0 0.359375 0.09375 C 0.359375 0.140625 0.421875 0.140625 0.4375 0.140625 C 0.6875 0.140625 1 -0.15625 1.09375 -0.25 C 1.296875 -0.25 1.578125 -0.234375 2.203125 -0.078125 C 2.734375 0.0625 3.109375 0.140625 3.5 0.140625 C 4.375 0.140625 5.125 -0.65625 5.125 -0.984375 Z M 5.125 -0.984375 "/>
</g>
<g id="glyph-1-3">
<path d="M 5.453125 -1.734375 C 5.453125 -1.90625 5.296875 -1.90625 5.1875 -1.90625 L 1.015625 -1.90625 C 0.90625 -1.90625 0.75 -1.90625 0.75 -1.734375 C 0.75 -1.578125 0.921875 -1.578125 1.015625 -1.578125 L 5.1875 -1.578125 C 5.28125 -1.578125 5.453125 -1.578125 5.453125 -1.734375 Z M 5.453125 -1.734375 "/>
</g>
<g id="glyph-2-0">
<path d="M 5.765625 -2.953125 C 5.765625 -4.046875 4.984375 -4.890625 3.75 -4.890625 C 2.09375 -4.890625 0.484375 -3.328125 0.484375 -1.765625 C 0.484375 -0.640625 1.3125 0.140625 2.5 0.140625 C 4.15625 0.140625 5.765625 -1.375 5.765625 -2.953125 Z M 5.078125 -3.203125 C 5.078125 -2.6875 4.875 -1.671875 4.21875 -0.9375 C 3.734375 -0.375 3.09375 -0.09375 2.5625 -0.09375 C 1.828125 -0.09375 1.203125 -0.59375 1.203125 -1.625 C 1.203125 -1.96875 1.296875 -2.96875 1.9375 -3.75 C 2.40625 -4.328125 3.078125 -4.671875 3.6875 -4.671875 C 4.421875 -4.671875 5.078125 -4.203125 5.078125 -3.203125 Z M 5.078125 -3.203125 "/>
</g>
<g id="glyph-3-0">
<path d="M 2.59375 -2.3125 L 3.515625 -2.3125 C 3.609375 -2.3125 3.953125 -2.3125 3.953125 -2.65625 C 3.953125 -3 3.609375 -3 3.515625 -3 L 0.96875 -3 C 0.875 -3 0.546875 -3 0.546875 -2.65625 C 0.546875 -2.3125 0.890625 -2.3125 0.96875 -2.3125 L 1.90625 -2.3125 L 1.90625 1.046875 C 1.90625 1.140625 1.90625 1.484375 2.25 1.484375 C 2.59375 1.484375 2.59375 1.140625 2.59375 1.046875 Z M 2.59375 -2.3125 "/>
</g>
<g id="glyph-4-0">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-5-0">
<path d="M 9.234375 -6.40625 C 9.34375 -6.828125 8.625 -6.828125 8.046875 -6.828125 L 4.21875 -6.828125 L 3.5625 -6.8125 C 3.09375 -6.78125 2.625 -6.640625 2.203125 -6.34375 C 2 -6.1875 1.8125 -6 1.75 -5.78125 C 1.75 -5.671875 1.8125 -5.625 1.921875 -5.625 C 2.078125 -5.625 2.3125 -5.703125 2.53125 -5.828125 C 2.59375 -5.859375 2.65625 -5.90625 2.71875 -5.953125 C 2.890625 -5.96875 3.09375 -5.96875 3.28125 -5.96875 L 4.34375 -5.96875 L 4.171875 -5.203125 C 4 -4.484375 3.78125 -3.78125 3.515625 -3.078125 C 3.1875 -2.265625 2.796875 -1.453125 2.359375 -0.65625 C 2.34375 -0.625 2.328125 -0.59375 2.296875 -0.5625 C 1.921875 -0.578125 1.625 -0.765625 1.4375 -1.046875 C 1.40625 -1.09375 1.34375 -1.109375 1.265625 -1.109375 C 1.109375 -1.109375 0.890625 -1.03125 0.671875 -0.90625 C 0.375 -0.734375 0.15625 -0.5 0.15625 -0.375 C 0.15625 -0.375 0.15625 -0.328125 0.171875 -0.3125 C 0.453125 0.109375 0.9375 0.328125 1.515625 0.3125 C 1.59375 0.3125 1.65625 0.296875 1.734375 0.28125 C 2.296875 0.1875 2.84375 -0.140625 3.265625 -0.59375 C 3.390625 -0.734375 3.5 -0.890625 3.59375 -1.046875 C 3.921875 -1.65625 4.21875 -2.28125 4.484375 -2.890625 L 6.453125 -2.890625 C 6.453125 -2.796875 6.515625 -2.75 6.625 -2.75 C 6.78125 -2.75 7 -2.828125 7.21875 -2.953125 C 7.5 -3.109375 7.703125 -3.3125 7.734375 -3.453125 L 7.765625 -3.59375 C 7.78125 -3.71875 7.71875 -3.75 7.609375 -3.75 L 4.84375 -3.75 C 5.09375 -4.40625 5.296875 -5.078125 5.46875 -5.75 L 5.515625 -5.96875 L 7.09375 -5.96875 C 7.46875 -5.96875 7.984375 -5.96875 7.953125 -5.859375 C 7.953125 -5.75 8.015625 -5.703125 8.125 -5.703125 C 8.28125 -5.703125 8.5 -5.78125 8.71875 -5.90625 C 9 -6.0625 9.203125 -6.265625 9.234375 -6.40625 Z M 9.234375 -6.40625 "/>
</g>
<g id="glyph-5-1">
<path d="M 7.46875 -1.546875 C 7.46875 -1.65625 7.328125 -1.65625 7.296875 -1.65625 C 6.984375 -1.65625 6.125 -1.265625 6.015625 -0.75 C 5.53125 -0.75 5.171875 -0.8125 4.375 -0.953125 C 4.015625 -1.03125 3.234375 -1.171875 2.65625 -1.171875 C 2.578125 -1.171875 2.46875 -1.171875 2.390625 -1.15625 C 2.71875 -1.71875 2.859375 -2.1875 3.015625 -2.84375 C 3.21875 -3.625 3.625 -5.03125 4.375 -5.875 C 4.5 -6.015625 4.546875 -6.0625 4.796875 -6.0625 C 5.25 -6.0625 5.4375 -5.703125 5.4375 -5.375 C 5.4375 -5.265625 5.40625 -5.15625 5.40625 -5.125 C 5.40625 -5.015625 5.53125 -4.984375 5.578125 -4.984375 C 5.71875 -4.984375 6.015625 -5.0625 6.40625 -5.328125 C 6.796875 -5.59375 6.84375 -5.78125 6.84375 -6.0625 C 6.84375 -6.5625 6.546875 -6.984375 5.890625 -6.984375 C 5.25 -6.984375 4.359375 -6.671875 3.53125 -5.96875 C 2.390625 -4.953125 1.890625 -3.3125 1.609375 -2.1875 C 1.453125 -1.59375 1.25 -0.78125 0.828125 -0.453125 C 0.71875 -0.375 0.390625 -0.109375 0.390625 0.046875 C 0.390625 0.15625 0.5 0.171875 0.5625 0.171875 C 0.640625 0.171875 0.9375 0.15625 1.5 -0.25 C 1.875 -0.25 2.203125 -0.234375 3.109375 -0.0625 C 3.5625 0.03125 4.28125 0.171875 4.84375 0.171875 C 6.1875 0.171875 7.46875 -1 7.46875 -1.546875 Z M 7.46875 -1.546875 "/>
</g>
<g id="glyph-5-2">
<path d="M 7.734375 -1.0625 C 7.734375 -1.171875 7.625 -1.1875 7.546875 -1.1875 C 7.390625 -1.1875 7.0625 -1.078125 6.78125 -0.859375 C 6.375 -0.859375 6.0625 -0.859375 5.90625 -2.09375 L 5.734375 -3.625 C 8.359375 -5.0625 9.015625 -5.71875 9.015625 -6.234375 C 9.015625 -6.640625 8.640625 -6.8125 8.34375 -6.8125 C 7.90625 -6.8125 7.21875 -6.328125 7.21875 -6.078125 C 7.21875 -6.03125 7.234375 -5.96875 7.390625 -5.953125 C 7.703125 -5.921875 7.71875 -5.671875 7.71875 -5.609375 C 7.71875 -5.5 7.6875 -5.453125 7.453125 -5.265625 C 7.03125 -4.953125 6.328125 -4.5625 5.671875 -4.1875 C 5.53125 -5.109375 5.53125 -5.578125 5.421875 -6.03125 C 5.1875 -6.8125 4.671875 -6.8125 4.359375 -6.8125 C 3.015625 -6.8125 2.421875 -6 2.421875 -5.75 C 2.421875 -5.640625 2.53125 -5.625 2.59375 -5.625 C 2.59375 -5.625 2.9375 -5.625 3.375 -5.953125 C 3.6875 -5.953125 4.0625 -5.953125 4.203125 -4.984375 L 4.375 -3.484375 C 3.703125 -3.125 2.796875 -2.625 2.0625 -2.140625 C 1.609375 -1.859375 0.5625 -1.1875 0.5625 -0.578125 C 0.5625 -0.171875 0.90625 0 1.21875 0 C 1.65625 0 2.34375 -0.484375 2.34375 -0.734375 C 2.34375 -0.84375 2.234375 -0.859375 2.15625 -0.859375 C 1.984375 -0.890625 1.84375 -1.03125 1.84375 -1.203125 C 1.84375 -1.328125 1.890625 -1.375 2.15625 -1.5625 C 2.640625 -1.921875 3.375 -2.328125 4.4375 -2.921875 C 4.65625 -1.125 4.671875 -1 4.703125 -0.890625 C 4.921875 0 5.453125 0 5.78125 0 C 7.15625 0 7.734375 -0.828125 7.734375 -1.0625 Z M 7.734375 -1.0625 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 36 17 L 184 17 L 184 56.652344 L 36 56.652344 Z M 36 17 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 0.046875 36 L 37 36 L 37 38 L 0.046875 38 Z M 0.046875 36 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 198 21 L 219.792969 21 L 219.792969 53 L 198 53 Z M 198 21 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" d="M 36.632812 55.65625 L 183.207031 55.65625 L 183.207031 18.457031 L 36.632812 18.457031 Z M 36.632812 55.65625 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -73.510476 -18.655668 L 73.51255 -18.655668 L 73.51255 18.657454 L -73.510476 18.657454 Z M -73.510476 -18.655668 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="98.070169" y="10.623471"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="106.877202" y="12.416979"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="110.946507" y="12.416979"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="117.203072" y="12.416979"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -17.009876 -14.173235 L 17.008031 -14.173235 L 17.008031 14.17502 L -17.009876 14.17502 Z M -17.009876 -14.173235 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="98.445021" y="38.699503"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="107.252054" y="40.493011"/>
<use xlink:href="#glyph-1-2" x="111.321359" y="40.493011"/>
<use xlink:href="#glyph-1-1" x="116.825663" y="40.493011"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -69.028043 -14.173235 L -35.014055 -14.173235 L -35.014055 14.17502 L -69.028043 14.17502 Z M -69.028043 -14.173235 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="47.477084" y="39.02052"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-3" x="54.746824" y="34.279038"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="60.954722" y="34.279038"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="53.746886" y="42.403162"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="57.816191" y="42.403162"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="64.072756" y="42.403162"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 35.01221 -14.173235 L 69.030116 -14.173235 L 69.030116 14.17502 L 35.01221 14.17502 Z M 35.01221 -14.173235 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="151.199488" y="38.862005"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-3" x="158.469228" y="34.613016"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="164.677126" y="34.613016"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="157.46929" y="42.244648"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="161.538595" y="42.244648"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="167.79516" y="42.244648"/>
</g>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -74.160899 -0.00106637 L -109.213214 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054842 -0.00106637 L 1.607673 1.683764 L 3.088756 -0.00106637 L 1.607673 -1.681979 Z M 6.054842 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 33.155048, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="4.848611" y="29.719001"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="13.944759" y="31.512509"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="18.014064" y="31.512509"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="24.270629" y="31.512509"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -34.512524 -0.00106637 L -22.138814 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052379 -0.00106637 L 1.609128 1.683764 L 3.086294 -0.00106637 L 1.609128 -1.681979 Z M 6.052379 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 85.016878, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="82.147922" y="33.251186"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 17.505644 -0.00106637 L 29.879354 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053845 -0.00106637 L 1.610594 1.683764 L 3.087759 -0.00106637 L 1.610594 -1.681979 Z M 6.053845 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 136.878698, 37.057531)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-1" x="132.692157" y="33.251186"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 69.527729 -0.00106637 L 104.580044 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 109.918888, 37.057531)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 217.382812 37.058594 L 212.953125 35.378906 L 214.425781 37.058594 L 212.953125 38.734375 Z M 217.382812 37.058594 "/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052896 -0.00106637 L 1.609645 1.683764 L 3.086811 -0.00106637 L 1.609645 -1.681979 Z M 6.052896 -0.00106637 " transform="matrix(0.996947, 0, 0, -0.996947, 211.348393, 37.057531)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-2" x="190.526071" y="29.719001"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="200.098759" y="31.512509"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="204.168064" y="31.512509"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="210.42463" y="31.512509"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="82.363" height="30.343" viewBox="0 0 82.363 30.343">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 7.171875 -2.046875 C 7.203125 -2.1875 7.21875 -2.203125 7.28125 -2.21875 C 7.40625 -2.234375 7.53125 -2.234375 7.65625 -2.234375 C 7.890625 -2.234375 8.046875 -2.234375 8.046875 -2.515625 C 8.046875 -2.5625 8.03125 -2.6875 7.84375 -2.6875 C 7.640625 -2.6875 7.40625 -2.671875 7.1875 -2.671875 C 6.96875 -2.671875 6.75 -2.65625 6.53125 -2.65625 C 6.140625 -2.65625 5.1875 -2.6875 4.796875 -2.6875 C 4.6875 -2.6875 4.5 -2.6875 4.5 -2.40625 C 4.5 -2.234375 4.671875 -2.234375 4.828125 -2.234375 L 5.1875 -2.234375 C 5.296875 -2.234375 5.828125 -2.234375 5.828125 -2.171875 C 5.828125 -2.171875 5.828125 -2.140625 5.765625 -1.90625 C 5.75 -1.84375 5.59375 -1.21875 5.59375 -1.203125 C 5.421875 -0.546875 4.640625 -0.296875 4.03125 -0.296875 C 3.46875 -0.296875 2.875 -0.40625 2.421875 -0.78125 C 1.90625 -1.203125 1.90625 -1.875 1.90625 -2.09375 C 1.90625 -2.546875 2.109375 -4.296875 3.046875 -5.359375 C 3.625 -5.984375 4.546875 -6.390625 5.546875 -6.390625 C 6.78125 -6.390625 7.234375 -5.453125 7.234375 -4.65625 C 7.234375 -4.546875 7.203125 -4.390625 7.203125 -4.296875 C 7.203125 -4.15625 7.328125 -4.15625 7.46875 -4.15625 C 7.6875 -4.15625 7.6875 -4.15625 7.734375 -4.375 L 8.296875 -6.5625 C 8.3125 -6.609375 8.328125 -6.65625 8.328125 -6.71875 C 8.328125 -6.859375 8.1875 -6.859375 8.078125 -6.859375 L 7.171875 -6.15625 C 6.984375 -6.34375 6.46875 -6.859375 5.390625 -6.859375 C 2.265625 -6.859375 0.53125 -4.46875 0.53125 -2.46875 C 0.53125 -0.6875 1.90625 0.171875 3.71875 0.171875 C 4.75 0.171875 5.4375 -0.171875 5.75 -0.5 C 5.984375 -0.25 6.484375 0 6.546875 0 C 6.65625 0 6.671875 -0.078125 6.703125 -0.21875 Z M 7.171875 -2.046875 "/>
</g>
<g id="glyph-0-1">
<path d="M 3.40625 -3.390625 L 5.203125 -3.390625 C 5.40625 -3.390625 5.53125 -3.390625 5.6875 -3.546875 C 5.890625 -3.703125 5.890625 -3.921875 5.890625 -3.953125 C 5.890625 -4.328125 5.53125 -4.328125 5.375 -4.328125 L 2.171875 -4.328125 C 1.953125 -4.328125 1.546875 -4.328125 1.03125 -3.859375 C 0.6875 -3.546875 0.296875 -3.046875 0.296875 -2.953125 C 0.296875 -2.8125 0.421875 -2.8125 0.53125 -2.8125 C 0.671875 -2.8125 0.6875 -2.828125 0.765625 -2.9375 C 1.140625 -3.390625 1.78125 -3.390625 1.96875 -3.390625 L 2.84375 -3.390625 L 2.5 -2.359375 C 2.40625 -2.109375 2.1875 -1.484375 2.109375 -1.234375 C 2.015625 -0.9375 1.828125 -0.421875 1.828125 -0.3125 C 1.828125 -0.03125 2.03125 0.109375 2.28125 0.109375 C 2.34375 0.109375 2.84375 0.109375 2.9375 -0.53125 Z M 3.40625 -3.390625 "/>
</g>
<g id="glyph-1-0">
<path d="M 3.34375 1.609375 C 3.34375 1.515625 3.28125 1.515625 3.25 1.515625 C 2.421875 1.46875 2.265625 1.015625 2.265625 0.84375 L 2.265625 -0.921875 C 2.25 -1.234375 2.015625 -1.546875 1.453125 -1.703125 C 2.265625 -1.953125 2.265625 -2.375 2.265625 -2.703125 L 2.265625 -3.9375 C 2.265625 -4.328125 2.265625 -4.5 2.515625 -4.703125 C 2.703125 -4.84375 2.9375 -4.921875 3.203125 -4.9375 C 3.296875 -4.9375 3.34375 -4.9375 3.34375 -5.03125 C 3.34375 -5.125 3.28125 -5.125 3.1875 -5.125 C 2.40625 -5.125 1.734375 -4.796875 1.734375 -4.265625 L 1.734375 -2.65625 C 1.734375 -2.5 1.734375 -2.265625 1.546875 -2.09375 C 1.28125 -1.875 1.015625 -1.8125 0.78125 -1.796875 C 0.703125 -1.796875 0.640625 -1.796875 0.640625 -1.703125 C 0.640625 -1.625 0.703125 -1.609375 0.75 -1.609375 C 1.5 -1.578125 1.6875 -1.171875 1.71875 -1.03125 C 1.734375 -0.953125 1.734375 -0.9375 1.734375 -0.703125 L 1.734375 0.703125 C 1.734375 0.9375 1.734375 1.203125 2.140625 1.46875 C 2.421875 1.640625 2.90625 1.703125 3.1875 1.703125 C 3.28125 1.703125 3.34375 1.703125 3.34375 1.609375 Z M 3.34375 1.609375 "/>
</g>
<g id="glyph-1-1">
<path d="M 5.046875 -0.96875 C 5.046875 -1 5.015625 -1.03125 4.96875 -1.03125 C 4.859375 -1.03125 4.421875 -0.859375 4.328125 -0.59375 C 4.234375 -0.3125 4.15625 -0.3125 4 -0.3125 C 3.625 -0.3125 3.140625 -0.4375 2.78125 -0.53125 C 2.4375 -0.609375 2.0625 -0.6875 1.71875 -0.6875 C 1.6875 -0.6875 1.546875 -0.6875 1.46875 -0.671875 C 1.828125 -1.21875 1.921875 -1.546875 2.03125 -1.96875 C 2.171875 -2.484375 2.375 -3.203125 2.703125 -3.765625 C 3.03125 -4.3125 3.203125 -4.34375 3.4375 -4.34375 C 3.75 -4.34375 3.96875 -4.109375 3.96875 -3.765625 C 3.96875 -3.65625 3.953125 -3.578125 3.953125 -3.5625 C 3.953125 -3.515625 3.96875 -3.5 4.03125 -3.5 C 4.0625 -3.5 4.21875 -3.515625 4.453125 -3.6875 C 4.609375 -3.796875 4.671875 -3.859375 4.671875 -4.125 C 4.671875 -4.390625 4.53125 -4.796875 3.984375 -4.796875 C 3.390625 -4.796875 2.734375 -4.390625 2.375 -3.96875 C 1.921875 -3.453125 1.625 -2.765625 1.328125 -1.640625 C 1.171875 -1.015625 0.921875 -0.484375 0.59375 -0.21875 C 0.546875 -0.171875 0.34375 0 0.34375 0.09375 C 0.34375 0.140625 0.40625 0.140625 0.4375 0.140625 C 0.671875 0.140625 0.984375 -0.15625 1.078125 -0.234375 C 1.265625 -0.234375 1.546875 -0.234375 2.171875 -0.078125 C 2.6875 0.046875 3.0625 0.140625 3.4375 0.140625 C 4.296875 0.140625 5.046875 -0.640625 5.046875 -0.96875 Z M 5.046875 -0.96875 "/>
</g>
<g id="glyph-1-2">
<path d="M 3.34375 -1.703125 C 3.34375 -1.796875 3.28125 -1.796875 3.25 -1.796875 C 2.4375 -1.84375 2.265625 -2.328125 2.265625 -2.5 L 2.265625 -4.015625 C 2.265625 -4.375 2.265625 -4.609375 1.859375 -4.875 C 1.578125 -5.0625 1.078125 -5.125 0.8125 -5.125 C 0.703125 -5.125 0.640625 -5.125 0.640625 -5.03125 C 0.640625 -4.9375 0.703125 -4.9375 0.75 -4.9375 C 1.59375 -4.890625 1.734375 -4.40625 1.734375 -4.25 L 1.734375 -2.5 C 1.734375 -2.171875 2 -1.859375 2.546875 -1.703125 C 1.734375 -1.46875 1.734375 -1.03125 1.734375 -0.703125 L 1.734375 0.515625 C 1.734375 0.953125 1.734375 1.078125 1.484375 1.28125 C 1.359375 1.390625 1.109375 1.5 0.78125 1.515625 C 0.703125 1.515625 0.640625 1.515625 0.640625 1.609375 C 0.640625 1.703125 0.703125 1.703125 0.8125 1.703125 C 1.578125 1.703125 2.25 1.390625 2.265625 0.84375 L 2.265625 -0.75 C 2.265625 -0.96875 2.265625 -1.5625 3.265625 -1.609375 C 3.265625 -1.609375 3.34375 -1.625 3.34375 -1.703125 Z M 3.34375 -1.703125 "/>
</g>
<g id="glyph-2-0">
<path d="M 7.328125 -1.515625 C 7.328125 -1.625 7.203125 -1.625 7.15625 -1.625 C 6.859375 -1.625 6 -1.234375 5.90625 -0.734375 C 5.421875 -0.734375 5.078125 -0.796875 4.296875 -0.9375 C 3.9375 -1 3.171875 -1.15625 2.609375 -1.15625 C 2.53125 -1.15625 2.421875 -1.15625 2.34375 -1.140625 C 2.671875 -1.6875 2.796875 -2.140625 2.96875 -2.78125 C 3.15625 -3.5625 3.546875 -4.9375 4.296875 -5.765625 C 4.421875 -5.90625 4.453125 -5.953125 4.703125 -5.953125 C 5.15625 -5.953125 5.328125 -5.59375 5.328125 -5.28125 C 5.328125 -5.171875 5.296875 -5.0625 5.296875 -5.015625 C 5.296875 -4.90625 5.421875 -4.890625 5.46875 -4.890625 C 5.609375 -4.890625 5.90625 -4.96875 6.28125 -5.21875 C 6.671875 -5.484375 6.71875 -5.671875 6.71875 -5.953125 C 6.71875 -6.4375 6.421875 -6.859375 5.765625 -6.859375 C 5.15625 -6.859375 4.265625 -6.546875 3.46875 -5.84375 C 2.34375 -4.859375 1.859375 -3.25 1.578125 -2.140625 C 1.4375 -1.5625 1.234375 -0.765625 0.8125 -0.453125 C 0.71875 -0.359375 0.390625 -0.109375 0.390625 0.046875 C 0.390625 0.140625 0.484375 0.171875 0.5625 0.171875 C 0.625 0.171875 0.921875 0.15625 1.46875 -0.25 C 1.828125 -0.25 2.171875 -0.21875 3.046875 -0.0625 C 3.484375 0.03125 4.203125 0.171875 4.765625 0.171875 C 6.0625 0.171875 7.328125 -0.984375 7.328125 -1.515625 Z M 7.328125 -1.515625 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 23 0 L 59 0 L 59 29.699219 L 23 29.699219 Z M 23 0 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 4 0 L 37 0 L 37 29.699219 L 4 29.699219 Z M 4 0 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 60 0 L 81.179688 0 L 81.179688 29.699219 L 60 29.699219 Z M 60 0 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 24.222656 28.722656 L 57.515625 28.722656 L 57.515625 0.976562 L 24.222656 0.976562 Z M 24.222656 28.722656 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -17.007044 -14.172572 L 17.006799 -14.172572 L 17.006799 14.174293 L -17.007044 14.174293 Z M -17.007044 -14.172572 " transform="matrix(0.978806, 0, 0, -0.978806, 40.869261, 14.850451)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="29.605156" y="16.461567"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="38.251932" y="18.22244"/>
<use xlink:href="#glyph-1-1" x="42.24719" y="18.22244"/>
<use xlink:href="#glyph-1-2" x="47.651335" y="18.22244"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -22.139251 -0.00113507 L -40.181793 -0.00113507 " transform="matrix(0.978806, 0, 0, -0.978806, 40.869261, 14.850451)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 22.34375 14.851562 L 17.996094 13.203125 L 19.441406 14.851562 L 17.996094 16.496094 Z M 22.34375 14.851562 "/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051627 -0.00113507 L 1.609833 1.682995 L 3.08644 -0.00113507 L 1.609833 -1.681274 Z M 6.051627 -0.00113507 " transform="matrix(0.978806, 0, 0, -0.978806, 16.420379, 14.850451)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="5.275943" y="11.11239"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 17.505652 -0.00113507 L 35.548194 -0.00113507 " transform="matrix(0.978806, 0, 0, -0.978806, 40.869261, 14.850451)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 78.8125 14.851562 L 74.460938 13.203125 L 75.910156 14.851562 L 74.460938 16.496094 Z M 78.8125 14.851562 "/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053183 -0.00113507 L 1.607399 1.682995 L 3.087996 -0.00113507 L 1.607399 -1.681274 Z M 6.053183 -0.00113507 " transform="matrix(0.978806, 0, 0, -0.978806, 72.887605, 14.850451)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="68.77699" y="11.11239"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="335.796pt" height="54.778pt" viewBox="0 0 335.796 54.778">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 7.296875 -2.078125 C 7.328125 -2.234375 7.34375 -2.25 7.40625 -2.25 C 7.53125 -2.265625 7.671875 -2.265625 7.78125 -2.265625 C 8.03125 -2.265625 8.203125 -2.265625 8.203125 -2.5625 C 8.203125 -2.609375 8.171875 -2.734375 7.984375 -2.734375 C 7.765625 -2.734375 7.546875 -2.71875 7.3125 -2.71875 C 7.09375 -2.71875 6.859375 -2.703125 6.640625 -2.703125 C 6.25 -2.703125 5.28125 -2.734375 4.875 -2.734375 C 4.765625 -2.734375 4.578125 -2.734375 4.578125 -2.453125 C 4.578125 -2.265625 4.75 -2.265625 4.90625 -2.265625 L 5.28125 -2.265625 C 5.390625 -2.265625 5.9375 -2.265625 5.9375 -2.21875 C 5.9375 -2.203125 5.9375 -2.1875 5.859375 -1.9375 C 5.859375 -1.875 5.6875 -1.234375 5.6875 -1.234375 C 5.515625 -0.5625 4.71875 -0.296875 4.09375 -0.296875 C 3.515625 -0.296875 2.921875 -0.421875 2.453125 -0.796875 C 1.9375 -1.234375 1.9375 -1.921875 1.9375 -2.140625 C 1.9375 -2.59375 2.140625 -4.359375 3.109375 -5.453125 C 3.6875 -6.09375 4.640625 -6.515625 5.640625 -6.515625 C 6.890625 -6.515625 7.359375 -5.546875 7.359375 -4.734375 C 7.359375 -4.625 7.328125 -4.46875 7.328125 -4.375 C 7.328125 -4.234375 7.46875 -4.234375 7.59375 -4.234375 C 7.8125 -4.234375 7.828125 -4.234375 7.875 -4.4375 L 8.4375 -6.671875 C 8.453125 -6.734375 8.46875 -6.78125 8.46875 -6.84375 C 8.46875 -6.96875 8.328125 -6.96875 8.21875 -6.96875 L 7.296875 -6.265625 C 7.109375 -6.453125 6.59375 -6.96875 5.484375 -6.96875 C 2.3125 -6.96875 0.546875 -4.546875 0.546875 -2.515625 C 0.546875 -0.6875 1.9375 0.171875 3.796875 0.171875 C 4.828125 0.171875 5.53125 -0.171875 5.84375 -0.515625 C 6.09375 -0.265625 6.59375 0 6.671875 0 C 6.765625 0 6.78125 -0.078125 6.828125 -0.234375 Z M 7.296875 -2.078125 "/>
</g>
<g id="glyph-0-1">
<path d="M 5.96875 -6.15625 C 6.015625 -6.296875 6.015625 -6.3125 6.09375 -6.3125 C 6.21875 -6.34375 6.34375 -6.34375 6.46875 -6.34375 C 6.734375 -6.34375 6.890625 -6.34375 6.890625 -6.625 C 6.890625 -6.640625 6.875 -6.8125 6.671875 -6.8125 C 6.484375 -6.8125 6.265625 -6.78125 6.046875 -6.78125 C 5.828125 -6.78125 5.59375 -6.78125 5.375 -6.78125 C 4.984375 -6.78125 4.03125 -6.8125 3.640625 -6.8125 C 3.515625 -6.8125 3.34375 -6.8125 3.34375 -6.515625 C 3.34375 -6.34375 3.5 -6.34375 3.6875 -6.34375 L 4.03125 -6.34375 C 4.421875 -6.34375 4.4375 -6.34375 4.671875 -6.3125 L 3.46875 -1.5 C 3.21875 -0.484375 2.59375 -0.1875 2.140625 -0.1875 C 2.046875 -0.1875 1.625 -0.203125 1.328125 -0.421875 C 1.859375 -0.5625 2.046875 -1.015625 2.046875 -1.296875 C 2.046875 -1.625 1.78125 -1.859375 1.4375 -1.859375 C 1.046875 -1.859375 0.5625 -1.53125 0.5625 -0.90625 C 0.5625 -0.234375 1.234375 0.171875 2.1875 0.171875 C 3.296875 0.171875 4.5 -0.28125 4.796875 -1.453125 Z M 5.96875 -6.15625 "/>
</g>
<g id="glyph-0-2">
<path d="M 3.46875 -3.453125 L 5.296875 -3.453125 C 5.5 -3.453125 5.640625 -3.453125 5.796875 -3.609375 C 6 -3.765625 6 -4 6 -4.015625 C 6 -4.40625 5.640625 -4.40625 5.46875 -4.40625 L 2.203125 -4.40625 C 2 -4.40625 1.5625 -4.40625 1.046875 -3.921875 C 0.6875 -3.609375 0.3125 -3.109375 0.3125 -3 C 0.3125 -2.875 0.421875 -2.875 0.53125 -2.875 C 0.6875 -2.875 0.6875 -2.875 0.78125 -2.984375 C 1.15625 -3.453125 1.8125 -3.453125 2 -3.453125 L 2.890625 -3.453125 L 2.546875 -2.40625 C 2.453125 -2.15625 2.234375 -1.515625 2.15625 -1.265625 C 2.046875 -0.953125 1.859375 -0.421875 1.859375 -0.3125 C 1.859375 -0.046875 2.078125 0.125 2.328125 0.125 C 2.390625 0.125 2.890625 0.125 3 -0.53125 Z M 3.46875 -3.453125 "/>
</g>
<g id="glyph-1-0">
<path d="M 6.703125 -1 C 6.703125 -1.078125 6.625 -1.078125 6.59375 -1.078125 C 6.5 -1.078125 6.5 -1.046875 6.46875 -0.96875 C 6.3125 -0.40625 6 -0.125 5.734375 -0.125 C 5.578125 -0.125 5.5625 -0.21875 5.5625 -0.375 C 5.5625 -0.53125 5.59375 -0.625 5.71875 -0.9375 C 5.796875 -1.140625 6.078125 -1.890625 6.078125 -2.28125 C 6.078125 -2.390625 6.078125 -2.671875 5.828125 -2.875 C 5.703125 -2.96875 5.5 -3.0625 5.1875 -3.0625 C 4.546875 -3.0625 4.171875 -2.65625 3.953125 -2.359375 C 3.890625 -2.953125 3.40625 -3.0625 3.046875 -3.0625 C 2.46875 -3.0625 2.078125 -2.71875 1.875 -2.4375 C 1.828125 -2.90625 1.40625 -3.0625 1.125 -3.0625 C 0.828125 -3.0625 0.671875 -2.84375 0.578125 -2.6875 C 0.421875 -2.4375 0.328125 -2.03125 0.328125 -2 C 0.328125 -1.90625 0.421875 -1.90625 0.4375 -1.90625 C 0.546875 -1.90625 0.546875 -1.9375 0.59375 -2.125 C 0.703125 -2.53125 0.828125 -2.875 1.109375 -2.875 C 1.28125 -2.875 1.328125 -2.71875 1.328125 -2.53125 C 1.328125 -2.40625 1.265625 -2.140625 1.21875 -1.953125 L 1.078125 -1.328125 L 0.84375 -0.4375 C 0.828125 -0.34375 0.78125 -0.171875 0.78125 -0.15625 C 0.78125 0 0.90625 0.0625 1.015625 0.0625 C 1.140625 0.0625 1.25 -0.015625 1.28125 -0.078125 C 1.328125 -0.140625 1.375 -0.375 1.40625 -0.515625 L 1.5625 -1.140625 C 1.609375 -1.296875 1.640625 -1.453125 1.6875 -1.609375 C 1.765625 -1.890625 1.765625 -1.953125 1.96875 -2.234375 C 2.171875 -2.515625 2.5 -2.875 3.015625 -2.875 C 3.421875 -2.875 3.421875 -2.515625 3.421875 -2.390625 C 3.421875 -2.21875 3.40625 -2.125 3.3125 -1.734375 L 3.015625 -0.5625 C 2.984375 -0.421875 2.921875 -0.1875 2.921875 -0.15625 C 2.921875 0 3.046875 0.0625 3.15625 0.0625 C 3.28125 0.0625 3.390625 -0.015625 3.421875 -0.078125 C 3.46875 -0.140625 3.515625 -0.375 3.546875 -0.515625 L 3.703125 -1.140625 C 3.75 -1.296875 3.796875 -1.453125 3.828125 -1.609375 C 3.90625 -1.90625 3.90625 -1.921875 4.046875 -2.140625 C 4.265625 -2.46875 4.609375 -2.875 5.15625 -2.875 C 5.546875 -2.875 5.5625 -2.546875 5.5625 -2.390625 C 5.5625 -1.96875 5.265625 -1.203125 5.15625 -0.90625 C 5.078125 -0.703125 5.046875 -0.640625 5.046875 -0.53125 C 5.046875 -0.15625 5.359375 0.0625 5.703125 0.0625 C 6.40625 0.0625 6.703125 -0.890625 6.703125 -1 Z M 6.703125 -1 "/>
</g>
<g id="glyph-1-1">
<path d="M 7.921875 -4.640625 C 7.921875 -4.75 7.84375 -4.75 7.71875 -4.75 L 6.765625 -4.75 C 6.578125 -4.75 6.5625 -4.734375 6.46875 -4.609375 L 3.796875 -0.640625 L 3.09375 -4.5625 C 3.0625 -4.734375 3.0625 -4.75 2.859375 -4.75 L 1.859375 -4.75 C 1.71875 -4.75 1.640625 -4.75 1.640625 -4.59375 C 1.640625 -4.5 1.71875 -4.5 1.875 -4.5 C 1.984375 -4.5 2.015625 -4.5 2.140625 -4.484375 C 2.28125 -4.46875 2.28125 -4.453125 2.28125 -4.390625 C 2.28125 -4.390625 2.28125 -4.34375 2.265625 -4.234375 L 1.390625 -0.75 C 1.328125 -0.5 1.21875 -0.265625 0.65625 -0.25 C 0.609375 -0.25 0.515625 -0.25 0.515625 -0.09375 C 0.515625 -0.09375 0.515625 0 0.625 0 C 0.828125 0 1.125 -0.03125 1.34375 -0.03125 C 1.515625 -0.03125 1.90625 0 2.078125 0 C 2.109375 0 2.21875 0 2.21875 -0.15625 C 2.21875 -0.25 2.125 -0.25 2.0625 -0.25 C 1.625 -0.265625 1.625 -0.4375 1.625 -0.546875 C 1.625 -0.5625 1.625 -0.609375 1.640625 -0.71875 L 2.578125 -4.421875 L 3.328125 -0.1875 C 3.34375 -0.0625 3.359375 0 3.46875 0 C 3.5625 0 3.609375 -0.078125 3.671875 -0.15625 L 6.578125 -4.484375 L 6.59375 -4.484375 L 5.609375 -0.546875 C 5.5625 -0.3125 5.546875 -0.25 5 -0.25 C 4.875 -0.25 4.796875 -0.25 4.796875 -0.09375 C 4.796875 -0.09375 4.796875 0 4.90625 0 C 5.03125 0 5.1875 -0.015625 5.328125 -0.015625 L 5.765625 -0.03125 C 5.96875 -0.03125 6.453125 0 6.65625 0 C 6.703125 0 6.796875 0 6.796875 -0.15625 C 6.796875 -0.25 6.71875 -0.25 6.578125 -0.25 C 6.578125 -0.25 6.4375 -0.25 6.3125 -0.265625 C 6.15625 -0.28125 6.15625 -0.296875 6.15625 -0.375 C 6.15625 -0.40625 6.171875 -0.484375 6.1875 -0.515625 L 7.09375 -4.1875 C 7.15625 -4.4375 7.171875 -4.5 7.6875 -4.5 C 7.84375 -4.5 7.921875 -4.5 7.921875 -4.640625 Z M 7.921875 -4.640625 "/>
</g>
<g id="glyph-2-0">
<path d="M 3.40625 1.640625 C 3.40625 1.546875 3.34375 1.546875 3.296875 1.546875 C 2.46875 1.5 2.3125 1.03125 2.296875 0.859375 L 2.296875 -0.9375 C 2.296875 -1.25 2.046875 -1.578125 1.484375 -1.734375 C 2.296875 -1.984375 2.296875 -2.421875 2.296875 -2.75 L 2.296875 -4 C 2.296875 -4.421875 2.296875 -4.59375 2.5625 -4.78125 C 2.75 -4.9375 3 -5 3.265625 -5.015625 C 3.34375 -5.03125 3.40625 -5.03125 3.40625 -5.125 C 3.40625 -5.21875 3.34375 -5.21875 3.234375 -5.21875 C 2.453125 -5.21875 1.765625 -4.875 1.765625 -4.34375 L 1.765625 -2.71875 C 1.765625 -2.546875 1.765625 -2.3125 1.578125 -2.140625 C 1.296875 -1.90625 1.03125 -1.84375 0.796875 -1.828125 C 0.703125 -1.828125 0.65625 -1.828125 0.65625 -1.734375 C 0.65625 -1.640625 0.71875 -1.640625 0.765625 -1.640625 C 1.515625 -1.59375 1.703125 -1.1875 1.75 -1.046875 C 1.765625 -0.96875 1.765625 -0.953125 1.765625 -0.703125 L 1.765625 0.703125 C 1.765625 0.953125 1.765625 1.21875 2.171875 1.484375 C 2.46875 1.671875 2.953125 1.734375 3.234375 1.734375 C 3.34375 1.734375 3.40625 1.734375 3.40625 1.640625 Z M 3.40625 1.640625 "/>
</g>
<g id="glyph-2-1">
<path d="M 5.125 -0.984375 C 5.125 -1.015625 5.109375 -1.046875 5.0625 -1.046875 C 4.953125 -1.046875 4.5 -0.890625 4.421875 -0.609375 C 4.3125 -0.3125 4.234375 -0.3125 4.0625 -0.3125 C 3.6875 -0.3125 3.1875 -0.4375 2.84375 -0.53125 C 2.484375 -0.625 2.109375 -0.703125 1.75 -0.703125 C 1.71875 -0.703125 1.578125 -0.703125 1.484375 -0.6875 C 1.859375 -1.234375 1.953125 -1.578125 2.0625 -2.015625 C 2.203125 -2.53125 2.40625 -3.25 2.75 -3.828125 C 3.09375 -4.390625 3.265625 -4.421875 3.5 -4.421875 C 3.828125 -4.421875 4.046875 -4.1875 4.046875 -3.84375 C 4.046875 -3.734375 4.03125 -3.65625 4.03125 -3.625 C 4.03125 -3.59375 4.046875 -3.5625 4.109375 -3.5625 C 4.125 -3.5625 4.296875 -3.59375 4.546875 -3.765625 C 4.6875 -3.859375 4.765625 -3.9375 4.765625 -4.203125 C 4.765625 -4.46875 4.609375 -4.890625 4.0625 -4.890625 C 3.453125 -4.890625 2.78125 -4.484375 2.421875 -4.046875 C 1.953125 -3.515625 1.640625 -2.8125 1.359375 -1.671875 C 1.1875 -1.03125 0.9375 -0.5 0.609375 -0.234375 C 0.546875 -0.171875 0.359375 0 0.359375 0.09375 C 0.359375 0.140625 0.421875 0.140625 0.4375 0.140625 C 0.6875 0.140625 1 -0.15625 1.09375 -0.25 C 1.296875 -0.25 1.578125 -0.234375 2.203125 -0.078125 C 2.734375 0.0625 3.109375 0.140625 3.5 0.140625 C 4.375 0.140625 5.125 -0.65625 5.125 -0.984375 Z M 5.125 -0.984375 "/>
</g>
<g id="glyph-2-2">
<path d="M 3.40625 -1.734375 C 3.40625 -1.828125 3.34375 -1.828125 3.296875 -1.828125 C 2.484375 -1.875 2.3125 -2.359375 2.296875 -2.546875 L 2.296875 -4.09375 C 2.296875 -4.453125 2.296875 -4.703125 1.890625 -4.96875 C 1.59375 -5.15625 1.09375 -5.21875 0.828125 -5.21875 C 0.71875 -5.21875 0.65625 -5.21875 0.65625 -5.125 C 0.65625 -5.03125 0.71875 -5.015625 0.765625 -5.015625 C 1.625 -4.984375 1.765625 -4.484375 1.765625 -4.328125 L 1.765625 -2.546875 C 1.765625 -2.21875 2.046875 -1.890625 2.59375 -1.734375 C 1.765625 -1.5 1.765625 -1.046875 1.765625 -0.71875 L 1.765625 0.53125 C 1.765625 0.96875 1.765625 1.09375 1.515625 1.296875 C 1.390625 1.40625 1.140625 1.515625 0.796875 1.546875 C 0.703125 1.546875 0.65625 1.546875 0.65625 1.640625 C 0.65625 1.734375 0.71875 1.734375 0.828125 1.734375 C 1.59375 1.734375 2.296875 1.421875 2.296875 0.859375 L 2.296875 -0.765625 C 2.296875 -0.984375 2.296875 -1.578125 3.328125 -1.640625 C 3.328125 -1.640625 3.40625 -1.640625 3.40625 -1.734375 Z M 3.40625 -1.734375 "/>
</g>
<g id="glyph-2-3">
<path d="M 5.453125 -1.734375 C 5.453125 -1.90625 5.296875 -1.90625 5.1875 -1.90625 L 1.015625 -1.90625 C 0.90625 -1.90625 0.75 -1.90625 0.75 -1.734375 C 0.75 -1.578125 0.921875 -1.578125 1.015625 -1.578125 L 5.1875 -1.578125 C 5.28125 -1.578125 5.453125 -1.578125 5.453125 -1.734375 Z M 5.453125 -1.734375 "/>
</g>
<g id="glyph-3-0">
<path d="M 2.59375 -2.3125 L 3.515625 -2.3125 C 3.609375 -2.3125 3.953125 -2.3125 3.953125 -2.65625 C 3.953125 -3 3.609375 -3 3.515625 -3 L 0.96875 -3 C 0.875 -3 0.546875 -3 0.546875 -2.65625 C 0.546875 -2.3125 0.890625 -2.3125 0.96875 -2.3125 L 1.90625 -2.3125 L 1.90625 1.046875 C 1.90625 1.140625 1.90625 1.484375 2.25 1.484375 C 2.59375 1.484375 2.59375 1.140625 2.59375 1.046875 Z M 2.59375 -2.3125 "/>
</g>
<g id="glyph-4-0">
<path d="M 6.046875 -6.34375 L 6.046875 -6.8125 C 5.609375 -6.78125 4.546875 -6.78125 4.0625 -6.78125 C 3.578125 -6.78125 2.515625 -6.78125 2.078125 -6.8125 L 2.078125 -6.34375 L 3.40625 -6.34375 L 3.40625 -5.28125 C 1.859375 -5.1875 0.640625 -4.46875 0.640625 -3.40625 C 0.640625 -2.34375 1.859375 -1.625 3.40625 -1.515625 L 3.40625 -0.46875 L 2.078125 -0.46875 L 2.078125 0 C 2.515625 -0.03125 3.578125 -0.03125 4.0625 -0.03125 C 4.546875 -0.03125 5.609375 -0.03125 6.046875 0 L 6.046875 -0.46875 L 4.71875 -0.46875 L 4.71875 -1.515625 C 7.28125 -1.703125 7.59375 -2.9375 7.59375 -3.40625 C 7.59375 -3.890625 7.265625 -5.09375 4.71875 -5.296875 L 4.71875 -6.34375 Z M 3.40625 -1.890625 C 2.171875 -2.0625 2.09375 -2.84375 2.09375 -3.40625 C 2.09375 -3.984375 2.171875 -4.75 3.40625 -4.921875 Z M 4.71875 -4.9375 C 5.96875 -4.78125 6.140625 -4.125 6.140625 -3.40625 C 6.140625 -2.671875 5.96875 -2.03125 4.71875 -1.875 Z M 4.71875 -4.9375 "/>
</g>
<g id="glyph-5-0">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-6-0">
<path d="M 9.21875 -6.40625 C 9.328125 -6.8125 8.609375 -6.8125 8.03125 -6.8125 L 3.5625 -6.8125 C 3.09375 -6.765625 2.625 -6.625 2.203125 -6.328125 C 2 -6.1875 1.8125 -6 1.75 -5.78125 C 1.75 -5.65625 1.8125 -5.609375 1.921875 -5.609375 C 2.078125 -5.609375 2.296875 -5.6875 2.515625 -5.8125 C 2.59375 -5.859375 2.65625 -5.90625 2.71875 -5.9375 C 2.890625 -5.96875 3.09375 -5.96875 3.28125 -5.96875 L 4.328125 -5.96875 L 4.171875 -5.203125 C 4 -4.484375 3.765625 -3.78125 3.5 -3.078125 C 3.1875 -2.265625 2.796875 -1.453125 2.359375 -0.65625 C 2.34375 -0.625 2.328125 -0.578125 2.296875 -0.5625 C 1.921875 -0.578125 1.625 -0.765625 1.421875 -1.046875 C 1.40625 -1.09375 1.34375 -1.109375 1.265625 -1.109375 C 1.109375 -1.109375 0.890625 -1.03125 0.671875 -0.90625 C 0.359375 -0.734375 0.15625 -0.5 0.15625 -0.359375 C 0.15625 -0.359375 0.15625 -0.328125 0.171875 -0.3125 C 0.453125 0.109375 0.9375 0.328125 1.515625 0.3125 C 1.59375 0.3125 1.65625 0.296875 1.734375 0.28125 C 2.296875 0.1875 2.84375 -0.140625 3.25 -0.59375 C 3.390625 -0.734375 3.5 -0.890625 3.578125 -1.046875 C 3.921875 -1.65625 4.21875 -2.265625 4.484375 -2.890625 L 6.4375 -2.890625 C 6.4375 -2.78125 6.515625 -2.75 6.625 -2.75 C 6.765625 -2.75 7 -2.8125 7.21875 -2.953125 C 7.484375 -3.109375 7.6875 -3.296875 7.734375 -3.4375 L 7.765625 -3.59375 C 7.765625 -3.703125 7.703125 -3.75 7.59375 -3.75 L 4.828125 -3.75 C 5.078125 -4.40625 5.28125 -5.0625 5.453125 -5.734375 L 5.5 -5.96875 L 7.078125 -5.96875 C 7.453125 -5.96875 7.96875 -5.96875 7.9375 -5.859375 C 7.9375 -5.734375 8 -5.6875 8.109375 -5.6875 C 8.265625 -5.6875 8.5 -5.78125 8.71875 -5.90625 C 8.984375 -6.046875 9.1875 -6.265625 9.21875 -6.40625 Z M 9.21875 -6.40625 "/>
</g>
<g id="glyph-6-1">
<path d="M 7.453125 -1.53125 C 7.453125 -1.640625 7.328125 -1.65625 7.28125 -1.65625 C 6.96875 -1.65625 6.109375 -1.265625 6 -0.75 C 5.515625 -0.75 5.171875 -0.796875 4.375 -0.953125 C 4.015625 -1.015625 3.21875 -1.171875 2.65625 -1.171875 C 2.578125 -1.171875 2.46875 -1.171875 2.390625 -1.15625 C 2.71875 -1.71875 2.84375 -2.1875 3.015625 -2.84375 C 3.21875 -3.625 3.609375 -5.015625 4.359375 -5.859375 C 4.5 -6 4.53125 -6.046875 4.796875 -6.046875 C 5.25 -6.046875 5.421875 -5.6875 5.421875 -5.375 C 5.421875 -5.265625 5.390625 -5.15625 5.390625 -5.109375 C 5.390625 -5 5.515625 -4.984375 5.5625 -4.984375 C 5.703125 -4.984375 6 -5.0625 6.390625 -5.3125 C 6.78125 -5.59375 6.84375 -5.765625 6.84375 -6.046875 C 6.84375 -6.5625 6.53125 -6.96875 5.875 -6.96875 C 5.25 -6.96875 4.34375 -6.671875 3.53125 -5.953125 C 2.390625 -4.953125 1.890625 -3.3125 1.609375 -2.1875 C 1.453125 -1.59375 1.25 -0.78125 0.828125 -0.453125 C 0.71875 -0.359375 0.390625 -0.109375 0.390625 0.046875 C 0.390625 0.15625 0.5 0.171875 0.5625 0.171875 C 0.640625 0.171875 0.9375 0.15625 1.5 -0.25 C 1.859375 -0.25 2.203125 -0.234375 3.109375 -0.0625 C 3.546875 0.03125 4.28125 0.171875 4.84375 0.171875 C 6.171875 0.171875 7.453125 -1 7.453125 -1.53125 Z M 7.453125 -1.53125 "/>
</g>
<g id="glyph-6-2">
<path d="M 7.71875 -1.0625 C 7.71875 -1.171875 7.609375 -1.1875 7.546875 -1.1875 C 7.375 -1.1875 7.046875 -1.078125 6.765625 -0.859375 C 6.375 -0.859375 6.046875 -0.859375 5.890625 -2.09375 L 5.71875 -3.625 C 8.34375 -5.046875 9 -5.703125 9 -6.234375 C 9 -6.640625 8.625 -6.8125 8.328125 -6.8125 C 7.890625 -6.8125 7.203125 -6.3125 7.203125 -6.078125 C 7.203125 -6.015625 7.21875 -5.953125 7.375 -5.9375 C 7.6875 -5.90625 7.703125 -5.671875 7.703125 -5.609375 C 7.703125 -5.5 7.671875 -5.4375 7.4375 -5.265625 C 7.03125 -4.953125 6.3125 -4.546875 5.671875 -4.1875 C 5.53125 -5.09375 5.53125 -5.578125 5.40625 -6.015625 C 5.171875 -6.8125 4.65625 -6.8125 4.359375 -6.8125 C 3 -6.8125 2.40625 -6 2.40625 -5.75 C 2.40625 -5.640625 2.53125 -5.609375 2.59375 -5.609375 C 2.59375 -5.609375 2.921875 -5.609375 3.359375 -5.9375 C 3.6875 -5.9375 4.0625 -5.9375 4.203125 -4.96875 L 4.375 -3.484375 C 3.703125 -3.109375 2.78125 -2.625 2.046875 -2.140625 C 1.609375 -1.859375 0.5625 -1.1875 0.5625 -0.578125 C 0.5625 -0.171875 0.90625 0 1.21875 0 C 1.65625 0 2.34375 -0.484375 2.34375 -0.734375 C 2.34375 -0.84375 2.234375 -0.859375 2.15625 -0.859375 C 1.96875 -0.890625 1.84375 -1.015625 1.84375 -1.203125 C 1.84375 -1.3125 1.890625 -1.375 2.15625 -1.5625 C 2.625 -1.921875 3.375 -2.328125 4.4375 -2.921875 C 4.640625 -1.125 4.65625 -1 4.6875 -0.890625 C 4.921875 0 5.453125 0 5.78125 0 C 7.140625 0 7.71875 -0.828125 7.71875 -1.0625 Z M 7.71875 -1.0625 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 25 15 L 311 15 L 311 54.558594 L 25 54.558594 Z M 25 15 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 314 19 L 335.015625 19 L 335.015625 51 L 314 51 Z M 314 19 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" d="M 25.832031 53.5625 L 309.761719 53.5625 L 309.761719 16.398438 L 25.832031 16.398438 Z M 25.832031 53.5625 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -142.539723 -18.656574 L 142.540653 -18.656574 L 142.540653 18.658104 L -142.539723 18.658104 Z M -142.539723 -18.656574 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="159.628514" y="10.612989"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="168.426857" y="12.100958"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -17.0096 -14.173635 L 17.006608 -14.173635 L 17.006608 14.175166 L -17.0096 14.175166 Z M -17.0096 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="156.333866" y="36.621583"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="165.133205" y="38.413321"/>
<use xlink:href="#glyph-2-1" x="169.198495" y="38.413321"/>
<use xlink:href="#glyph-2-2" x="174.697367" y="38.413321"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -69.028159 -14.173635 L -35.011951 -14.173635 L -35.011951 14.175166 L -69.028159 14.175166 Z M -69.028159 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="104.385399" y="36.942283"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="111.647966" y="32.20548"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="117.849738" y="32.20548"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="110.649014" y="40.321588"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="114.714304" y="40.321588"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="123.024081" y="40.321588"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -138.056784 -14.173635 L -104.040576 -14.173635 L -104.040576 14.175166 L -138.056784 14.175166 Z M -138.056784 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="37.52138" y="38.932219"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="45.762979" y="35.330814"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="51.964751" y="35.330814"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 35.012882 -14.173635 L 69.02909 -14.173635 L 69.02909 14.175166 L 35.012882 14.175166 Z M 35.012882 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="208.005456" y="36.783925"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="215.268022" y="32.539128"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="221.469794" y="32.539128"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="214.269071" y="40.16323"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="218.334361" y="40.16323"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="226.644138" y="40.16323"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.041506 -14.173635 L 138.057714 -14.173635 L 138.057714 14.175166 L 104.041506 14.175166 Z M 104.041506 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="278.908107" y="39.019863"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="287.149706" y="35.419455"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="293.351478" y="35.419455"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -143.190788 0.000765138 L -166.903689 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052658 0.000765138 L 1.608941 1.683338 L 3.087565 0.000765138 L 1.608941 -1.681808 Z M 6.052658 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 22.358491, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="5.373666" y="29.689676"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="10.541721" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -103.542472 0.000765138 L -74.162163 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052833 0.000765138 L 1.609115 1.683338 L 3.08774 0.000765138 L 1.609115 -1.681808 Z M 6.052833 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 91.108317, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-0" x="68.721933" y="27.649942"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="77.809105" y="29.441681"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="81.874395" y="29.441681"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="90.184172" y="29.441681"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -34.513847 0.000765138 L -22.139682 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054685 0.000765138 L 1.607045 1.683338 L 3.085669 0.000765138 L 1.607045 -1.681808 Z M 6.054685 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 142.918973, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="140.052849" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 17.504712 0.000765138 L 29.878878 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052624 0.000765138 L 1.608906 1.683338 L 3.087531 0.000765138 L 1.608906 -1.681808 Z M 6.052624 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 194.729619, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-1" x="190.547209" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 69.527194 0.000765138 L 98.907502 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052789 0.000765138 L 1.609071 1.683338 L 3.087696 0.000765138 L 1.609071 -1.681808 Z M 6.052789 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 263.479455, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-2" x="240.615297" y="27.649942"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="250.17854" y="29.441681"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="254.24383" y="29.441681"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="262.553607" y="29.441681"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 138.555819 0.000765138 L 162.26872 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 167.796412, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 332.613281 34.980469 L 328.183594 33.304688 L 329.65625 34.980469 L 328.183594 36.65625 Z M 332.613281 34.980469 "/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054826 0.000765138 L 1.607187 1.683338 L 3.085811 0.000765138 L 1.607187 -1.681808 Z M 6.054826 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 326.582894, 34.981231)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-2" x="313.119458" y="29.689676"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="322.682701" y="31.178642"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186.403pt" height="54.778pt" viewBox="0 0 186.403 54.778">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 7.296875 -2.078125 C 7.328125 -2.234375 7.34375 -2.25 7.40625 -2.25 C 7.53125 -2.265625 7.671875 -2.265625 7.78125 -2.265625 C 8.03125 -2.265625 8.203125 -2.265625 8.203125 -2.5625 C 8.203125 -2.609375 8.171875 -2.734375 7.984375 -2.734375 C 7.765625 -2.734375 7.546875 -2.71875 7.3125 -2.71875 C 7.09375 -2.71875 6.859375 -2.703125 6.640625 -2.703125 C 6.25 -2.703125 5.28125 -2.734375 4.875 -2.734375 C 4.765625 -2.734375 4.578125 -2.734375 4.578125 -2.453125 C 4.578125 -2.265625 4.75 -2.265625 4.90625 -2.265625 L 5.28125 -2.265625 C 5.390625 -2.265625 5.9375 -2.265625 5.9375 -2.21875 C 5.9375 -2.203125 5.9375 -2.1875 5.859375 -1.9375 C 5.859375 -1.875 5.6875 -1.234375 5.6875 -1.234375 C 5.515625 -0.5625 4.71875 -0.296875 4.09375 -0.296875 C 3.515625 -0.296875 2.921875 -0.421875 2.453125 -0.796875 C 1.9375 -1.234375 1.9375 -1.921875 1.9375 -2.140625 C 1.9375 -2.59375 2.140625 -4.359375 3.109375 -5.453125 C 3.6875 -6.09375 4.640625 -6.515625 5.640625 -6.515625 C 6.890625 -6.515625 7.359375 -5.546875 7.359375 -4.734375 C 7.359375 -4.625 7.328125 -4.46875 7.328125 -4.375 C 7.328125 -4.234375 7.46875 -4.234375 7.59375 -4.234375 C 7.8125 -4.234375 7.828125 -4.234375 7.875 -4.4375 L 8.4375 -6.671875 C 8.453125 -6.734375 8.46875 -6.78125 8.46875 -6.84375 C 8.46875 -6.96875 8.328125 -6.96875 8.21875 -6.96875 L 7.296875 -6.265625 C 7.109375 -6.453125 6.59375 -6.96875 5.484375 -6.96875 C 2.3125 -6.96875 0.546875 -4.546875 0.546875 -2.515625 C 0.546875 -0.6875 1.9375 0.171875 3.796875 0.171875 C 4.828125 0.171875 5.53125 -0.171875 5.84375 -0.515625 C 6.09375 -0.265625 6.59375 0 6.671875 0 C 6.765625 0 6.78125 -0.078125 6.828125 -0.234375 Z M 7.296875 -2.078125 "/>
</g>
<g id="glyph-0-1">
<path d="M 7.53125 -5.9375 C 7.671875 -6.15625 7.796875 -6.328125 8.484375 -6.34375 C 8.609375 -6.34375 8.78125 -6.34375 8.78125 -6.625 C 8.78125 -6.6875 8.734375 -6.8125 8.609375 -6.8125 C 8.3125 -6.8125 8 -6.78125 7.703125 -6.78125 C 7.34375 -6.78125 6.953125 -6.8125 6.609375 -6.8125 C 6.53125 -6.8125 6.34375 -6.8125 6.34375 -6.515625 C 6.34375 -6.34375 6.515625 -6.34375 6.59375 -6.34375 C 6.640625 -6.34375 6.9375 -6.34375 7.15625 -6.234375 L 3.875 -1.484375 L 3 -6.125 C 3 -6.15625 2.984375 -6.234375 2.984375 -6.265625 C 2.984375 -6.34375 3.515625 -6.34375 3.59375 -6.34375 C 3.8125 -6.34375 3.96875 -6.34375 3.96875 -6.625 C 3.96875 -6.75 3.875 -6.8125 3.75 -6.8125 C 3.5 -6.8125 3.25 -6.78125 3 -6.78125 C 2.765625 -6.78125 2.515625 -6.78125 2.265625 -6.78125 C 2.046875 -6.78125 1.8125 -6.78125 1.59375 -6.78125 C 1.375 -6.78125 1.140625 -6.8125 0.9375 -6.8125 C 0.84375 -6.8125 0.65625 -6.8125 0.65625 -6.515625 C 0.65625 -6.34375 0.8125 -6.34375 1.015625 -6.34375 C 1.15625 -6.34375 1.265625 -6.34375 1.40625 -6.328125 C 1.515625 -6.3125 1.53125 -6.3125 1.5625 -6.140625 L 2.6875 -0.109375 C 2.734375 0.171875 2.84375 0.171875 3.03125 0.171875 C 3.3125 0.171875 3.359375 0.09375 3.5 -0.09375 Z M 7.53125 -5.9375 "/>
</g>
<g id="glyph-0-2">
<path d="M 7.484375 -6.03125 C 7.546875 -6.21875 7.546875 -6.234375 7.78125 -6.296875 C 7.953125 -6.3125 8.203125 -6.34375 8.359375 -6.34375 C 8.546875 -6.34375 8.703125 -6.34375 8.703125 -6.625 C 8.703125 -6.734375 8.625 -6.8125 8.5 -6.8125 C 8.140625 -6.8125 7.765625 -6.78125 7.40625 -6.78125 C 7.15625 -6.78125 6.515625 -6.8125 6.265625 -6.8125 C 6.203125 -6.8125 6 -6.8125 6 -6.515625 C 6 -6.34375 6.171875 -6.34375 6.3125 -6.34375 C 6.40625 -6.34375 6.765625 -6.34375 7 -6.234375 L 6.015625 -2.328125 C 5.671875 -0.890625 4.5 -0.296875 3.296875 -0.296875 C 2.375 -0.296875 1.9375 -0.6875 1.9375 -1.40625 C 1.9375 -1.640625 1.96875 -1.890625 2.03125 -2.140625 L 3.078125 -6.296875 C 3.296875 -6.34375 3.640625 -6.34375 3.75 -6.34375 C 4.09375 -6.34375 4.234375 -6.34375 4.234375 -6.625 C 4.234375 -6.75 4.125 -6.8125 4.015625 -6.8125 C 3.765625 -6.8125 3.5 -6.78125 3.25 -6.78125 C 3 -6.78125 2.765625 -6.78125 2.515625 -6.78125 C 2.25 -6.78125 2 -6.78125 1.75 -6.78125 C 1.484375 -6.78125 1.21875 -6.8125 0.96875 -6.8125 C 0.859375 -6.8125 0.671875 -6.8125 0.671875 -6.515625 C 0.671875 -6.34375 0.796875 -6.34375 1.125 -6.34375 C 1.375 -6.34375 1.6875 -6.34375 1.6875 -6.296875 C 1.6875 -6.265625 1.59375 -5.90625 1.53125 -5.71875 L 1.3125 -4.84375 L 0.71875 -2.390625 C 0.625 -2.03125 0.625 -1.953125 0.625 -1.765625 C 0.625 -0.46875 1.734375 0.171875 3.234375 0.171875 C 5.015625 0.171875 6.203125 -0.890625 6.53125 -2.25 Z M 7.484375 -6.03125 "/>
</g>
<g id="glyph-0-3">
<path d="M 5.59375 -3.140625 C 5.65625 -3.421875 5.78125 -3.90625 5.78125 -3.96875 C 5.78125 -4.171875 5.609375 -4.40625 5.3125 -4.40625 C 5.15625 -4.40625 4.78125 -4.3125 4.65625 -3.875 C 4.609375 -3.734375 4.171875 -1.9375 4.09375 -1.625 C 4.03125 -1.390625 3.953125 -1.09375 3.9375 -0.921875 C 3.765625 -0.6875 3.375 -0.28125 2.875 -0.28125 C 2.28125 -0.28125 2.265625 -0.78125 2.265625 -1 C 2.265625 -1.609375 2.578125 -2.375 2.859375 -3.09375 C 2.953125 -3.359375 2.984375 -3.421875 2.984375 -3.59375 C 2.984375 -4.171875 2.40625 -4.484375 1.859375 -4.484375 C 0.8125 -4.484375 0.3125 -3.140625 0.3125 -2.9375 C 0.3125 -2.796875 0.46875 -2.796875 0.5625 -2.796875 C 0.671875 -2.796875 0.75 -2.796875 0.78125 -2.921875 C 1.109375 -4.03125 1.640625 -4.125 1.8125 -4.125 C 1.875 -4.125 1.96875 -4.125 1.96875 -3.921875 C 1.96875 -3.6875 1.859375 -3.40625 1.8125 -3.296875 C 1.40625 -2.25 1.203125 -1.703125 1.203125 -1.203125 C 1.203125 -0.078125 2.203125 0.078125 2.78125 0.078125 C 3.078125 0.078125 3.515625 0.046875 4.046875 -0.46875 C 4.359375 0.015625 4.9375 0.078125 5.171875 0.078125 C 5.546875 0.078125 5.828125 -0.125 6.046875 -0.484375 C 6.296875 -0.890625 6.421875 -1.421875 6.421875 -1.46875 C 6.421875 -1.609375 6.265625 -1.609375 6.1875 -1.609375 C 6.078125 -1.609375 6.03125 -1.609375 5.984375 -1.5625 C 5.96875 -1.53125 5.96875 -1.515625 5.90625 -1.265625 C 5.703125 -0.5 5.484375 -0.28125 5.234375 -0.28125 C 5.078125 -0.28125 5 -0.375 5 -0.640625 C 5 -0.8125 5.046875 -0.96875 5.140625 -1.375 C 5.203125 -1.640625 5.3125 -2.046875 5.359375 -2.265625 Z M 5.59375 -3.140625 "/>
</g>
<g id="glyph-0-4">
<path d="M 3.46875 -3.453125 L 5.296875 -3.453125 C 5.5 -3.453125 5.640625 -3.453125 5.796875 -3.609375 C 6 -3.765625 6 -4 6 -4.015625 C 6 -4.40625 5.640625 -4.40625 5.46875 -4.40625 L 2.203125 -4.40625 C 2 -4.40625 1.5625 -4.40625 1.046875 -3.921875 C 0.6875 -3.609375 0.3125 -3.109375 0.3125 -3 C 0.3125 -2.875 0.421875 -2.875 0.53125 -2.875 C 0.6875 -2.875 0.6875 -2.875 0.78125 -2.984375 C 1.15625 -3.453125 1.8125 -3.453125 2 -3.453125 L 2.890625 -3.453125 L 2.546875 -2.40625 C 2.453125 -2.15625 2.234375 -1.515625 2.15625 -1.265625 C 2.046875 -0.953125 1.859375 -0.421875 1.859375 -0.3125 C 1.859375 -0.046875 2.078125 0.125 2.328125 0.125 C 2.390625 0.125 2.890625 0.125 3 -0.53125 Z M 3.46875 -3.453125 "/>
</g>
<g id="glyph-0-5">
<path d="M 5.71875 -3.734375 C 5.78125 -3.921875 5.78125 -3.9375 5.78125 -3.96875 C 5.78125 -4.1875 5.609375 -4.40625 5.3125 -4.40625 C 4.796875 -4.40625 4.671875 -3.9375 4.609375 -3.671875 L 4.34375 -2.640625 C 4.234375 -2.15625 4.03125 -1.40625 3.921875 -0.984375 C 3.875 -0.78125 3.578125 -0.53125 3.546875 -0.515625 C 3.4375 -0.453125 3.1875 -0.28125 2.875 -0.28125 C 2.28125 -0.28125 2.265625 -0.78125 2.265625 -1 C 2.265625 -1.609375 2.578125 -2.375 2.859375 -3.09375 C 2.953125 -3.359375 2.984375 -3.421875 2.984375 -3.59375 C 2.984375 -4.171875 2.40625 -4.484375 1.859375 -4.484375 C 0.8125 -4.484375 0.3125 -3.140625 0.3125 -2.9375 C 0.3125 -2.796875 0.46875 -2.796875 0.5625 -2.796875 C 0.671875 -2.796875 0.75 -2.796875 0.78125 -2.921875 C 1.109375 -4.03125 1.65625 -4.125 1.8125 -4.125 C 1.875 -4.125 1.96875 -4.125 1.96875 -3.921875 C 1.96875 -3.6875 1.859375 -3.4375 1.8125 -3.28125 C 1.421875 -2.28125 1.203125 -1.71875 1.203125 -1.203125 C 1.203125 -0.078125 2.203125 0.078125 2.78125 0.078125 C 3.03125 0.078125 3.375 0.046875 3.734375 -0.21875 C 3.46875 1 2.71875 1.640625 2.03125 1.640625 C 1.90625 1.640625 1.625 1.625 1.421875 1.515625 C 1.75 1.375 1.90625 1.109375 1.90625 0.84375 C 1.90625 0.484375 1.625 0.390625 1.421875 0.390625 C 1.046875 0.390625 0.703125 0.703125 0.703125 1.140625 C 0.703125 1.640625 1.234375 2 2.03125 2 C 3.171875 2 4.484375 1.234375 4.796875 0.015625 Z M 5.71875 -3.734375 "/>
</g>
<g id="glyph-1-0">
<path d="M 3.890625 -1.28125 C 3.890625 -1.90625 3.453125 -2.5 2.765625 -2.65625 L 1.734375 -2.90625 C 1.125 -3.03125 0.9375 -3.484375 0.9375 -3.765625 C 0.9375 -4.234375 1.359375 -4.671875 1.984375 -4.671875 C 2.921875 -4.671875 3.328125 -4.046875 3.4375 -3.3125 C 3.453125 -3.203125 3.46875 -3.171875 3.5625 -3.171875 C 3.6875 -3.171875 3.6875 -3.21875 3.6875 -3.34375 L 3.6875 -4.703125 C 3.6875 -4.828125 3.6875 -4.890625 3.59375 -4.890625 C 3.53125 -4.890625 3.515625 -4.875 3.46875 -4.796875 L 3.21875 -4.40625 C 2.765625 -4.875 2.1875 -4.890625 1.984375 -4.890625 C 1.109375 -4.890625 0.484375 -4.265625 0.484375 -3.5625 C 0.484375 -3.171875 0.65625 -2.875 0.90625 -2.640625 C 1.1875 -2.359375 1.421875 -2.3125 2.171875 -2.15625 C 2.796875 -2.015625 2.9375 -1.984375 3.140625 -1.78125 C 3.296875 -1.625 3.453125 -1.40625 3.453125 -1.09375 C 3.453125 -0.609375 3.046875 -0.109375 2.375 -0.109375 C 1.703125 -0.109375 0.765625 -0.375 0.71875 -1.421875 C 0.71875 -1.53125 0.71875 -1.578125 0.609375 -1.578125 C 0.484375 -1.578125 0.484375 -1.53125 0.484375 -1.390625 L 0.484375 -0.046875 C 0.484375 0.078125 0.484375 0.140625 0.578125 0.140625 C 0.640625 0.140625 0.65625 0.125 0.703125 0.0625 C 0.765625 -0.03125 0.890625 -0.25 0.953125 -0.34375 C 1.390625 0.046875 1.921875 0.140625 2.375 0.140625 C 3.296875 0.140625 3.890625 -0.546875 3.890625 -1.28125 Z M 3.890625 -1.28125 "/>
</g>
<g id="glyph-1-1">
<path d="M 5.640625 -4.5 L 5.640625 -4.75 C 5.4375 -4.734375 5.171875 -4.71875 4.96875 -4.71875 C 4.6875 -4.71875 4.171875 -4.75 4.125 -4.75 L 4.125 -4.5 C 4.390625 -4.5 4.609375 -4.390625 4.609375 -4.171875 C 4.609375 -4.125 4.59375 -4.078125 4.578125 -4.03125 L 3.140625 -0.671875 L 1.640625 -4.1875 C 1.59375 -4.28125 1.59375 -4.296875 1.59375 -4.3125 C 1.59375 -4.5 1.953125 -4.5 2.140625 -4.5 L 2.140625 -4.75 L 1.109375 -4.71875 C 0.765625 -4.71875 0.234375 -4.75 0.21875 -4.75 L 0.21875 -4.5 L 0.328125 -4.5 C 0.703125 -4.5 0.828125 -4.46875 0.921875 -4.25 L 2.71875 -0.015625 C 2.78125 0.09375 2.796875 0.140625 2.921875 0.140625 C 3 0.140625 3.0625 0.140625 3.125 0 L 4.859375 -4.046875 C 4.9375 -4.25 5.109375 -4.484375 5.640625 -4.5 Z M 5.640625 -4.5 "/>
</g>
<g id="glyph-1-2">
<path d="M 5.484375 -2.34375 C 5.484375 -3.65625 4.4375 -4.75 3.140625 -4.75 L 0.40625 -4.75 L 0.40625 -4.5 L 0.5625 -4.5 C 1.109375 -4.5 1.125 -4.421875 1.125 -4.1875 L 1.125 -0.5625 C 1.125 -0.328125 1.109375 -0.25 0.5625 -0.25 L 0.40625 -0.25 L 0.40625 0 L 3.140625 0 C 4.421875 0 5.484375 -1.03125 5.484375 -2.34375 Z M 4.765625 -2.34375 C 4.765625 -1.53125 4.5625 -1.109375 4.328125 -0.828125 C 4.015625 -0.46875 3.515625 -0.25 2.953125 -0.25 L 2.09375 -0.25 C 1.765625 -0.25 1.75 -0.3125 1.75 -0.515625 L 1.75 -4.234375 C 1.75 -4.4375 1.765625 -4.5 2.09375 -4.5 L 2.953125 -4.5 C 3.546875 -4.5 4.046875 -4.25 4.375 -3.84375 C 4.65625 -3.46875 4.765625 -2.9375 4.765625 -2.34375 Z M 4.765625 -2.34375 "/>
</g>
<g id="glyph-2-0">
<path d="M 3.40625 1.640625 C 3.40625 1.546875 3.34375 1.546875 3.296875 1.546875 C 2.46875 1.5 2.3125 1.03125 2.296875 0.859375 L 2.296875 -0.9375 C 2.296875 -1.25 2.046875 -1.578125 1.484375 -1.734375 C 2.296875 -1.984375 2.296875 -2.421875 2.296875 -2.75 L 2.296875 -4 C 2.296875 -4.421875 2.296875 -4.59375 2.5625 -4.78125 C 2.75 -4.9375 3 -5 3.265625 -5.015625 C 3.34375 -5.03125 3.40625 -5.03125 3.40625 -5.125 C 3.40625 -5.21875 3.34375 -5.21875 3.234375 -5.21875 C 2.453125 -5.21875 1.765625 -4.875 1.765625 -4.34375 L 1.765625 -2.71875 C 1.765625 -2.546875 1.765625 -2.3125 1.578125 -2.140625 C 1.296875 -1.90625 1.03125 -1.84375 0.796875 -1.828125 C 0.703125 -1.828125 0.65625 -1.828125 0.65625 -1.734375 C 0.65625 -1.640625 0.71875 -1.640625 0.765625 -1.640625 C 1.515625 -1.59375 1.703125 -1.1875 1.75 -1.046875 C 1.765625 -0.96875 1.765625 -0.953125 1.765625 -0.703125 L 1.765625 0.703125 C 1.765625 0.953125 1.765625 1.21875 2.171875 1.484375 C 2.46875 1.671875 2.953125 1.734375 3.234375 1.734375 C 3.34375 1.734375 3.40625 1.734375 3.40625 1.640625 Z M 3.40625 1.640625 "/>
</g>
<g id="glyph-2-1">
<path d="M 5.125 -0.984375 C 5.125 -1.015625 5.109375 -1.046875 5.0625 -1.046875 C 4.953125 -1.046875 4.5 -0.890625 4.421875 -0.609375 C 4.3125 -0.3125 4.234375 -0.3125 4.0625 -0.3125 C 3.6875 -0.3125 3.1875 -0.4375 2.84375 -0.53125 C 2.484375 -0.625 2.109375 -0.703125 1.75 -0.703125 C 1.71875 -0.703125 1.578125 -0.703125 1.484375 -0.6875 C 1.859375 -1.234375 1.953125 -1.578125 2.0625 -2.015625 C 2.203125 -2.53125 2.40625 -3.25 2.75 -3.828125 C 3.09375 -4.390625 3.265625 -4.421875 3.5 -4.421875 C 3.828125 -4.421875 4.046875 -4.1875 4.046875 -3.84375 C 4.046875 -3.734375 4.03125 -3.65625 4.03125 -3.625 C 4.03125 -3.59375 4.046875 -3.5625 4.109375 -3.5625 C 4.125 -3.5625 4.296875 -3.59375 4.546875 -3.765625 C 4.6875 -3.859375 4.765625 -3.9375 4.765625 -4.203125 C 4.765625 -4.46875 4.609375 -4.890625 4.0625 -4.890625 C 3.453125 -4.890625 2.78125 -4.484375 2.421875 -4.046875 C 1.953125 -3.515625 1.640625 -2.8125 1.359375 -1.671875 C 1.1875 -1.03125 0.9375 -0.5 0.609375 -0.234375 C 0.546875 -0.171875 0.359375 0 0.359375 0.09375 C 0.359375 0.140625 0.421875 0.140625 0.4375 0.140625 C 0.6875 0.140625 1 -0.15625 1.09375 -0.25 C 1.296875 -0.25 1.578125 -0.234375 2.203125 -0.078125 C 2.734375 0.0625 3.109375 0.140625 3.5 0.140625 C 4.375 0.140625 5.125 -0.65625 5.125 -0.984375 Z M 5.125 -0.984375 "/>
</g>
<g id="glyph-2-2">
<path d="M 3.40625 -1.734375 C 3.40625 -1.828125 3.34375 -1.828125 3.296875 -1.828125 C 2.484375 -1.875 2.3125 -2.359375 2.296875 -2.546875 L 2.296875 -4.09375 C 2.296875 -4.453125 2.296875 -4.703125 1.890625 -4.96875 C 1.59375 -5.15625 1.09375 -5.21875 0.828125 -5.21875 C 0.71875 -5.21875 0.65625 -5.21875 0.65625 -5.125 C 0.65625 -5.03125 0.71875 -5.015625 0.765625 -5.015625 C 1.625 -4.984375 1.765625 -4.484375 1.765625 -4.328125 L 1.765625 -2.546875 C 1.765625 -2.21875 2.046875 -1.890625 2.59375 -1.734375 C 1.765625 -1.5 1.765625 -1.046875 1.765625 -0.71875 L 1.765625 0.53125 C 1.765625 0.96875 1.765625 1.09375 1.515625 1.296875 C 1.390625 1.40625 1.140625 1.515625 0.796875 1.546875 C 0.703125 1.546875 0.65625 1.546875 0.65625 1.640625 C 0.65625 1.734375 0.71875 1.734375 0.828125 1.734375 C 1.59375 1.734375 2.296875 1.421875 2.296875 0.859375 L 2.296875 -0.765625 C 2.296875 -0.984375 2.296875 -1.578125 3.328125 -1.640625 C 3.328125 -1.640625 3.40625 -1.640625 3.40625 -1.734375 Z M 3.40625 -1.734375 "/>
</g>
<g id="glyph-2-3">
<path d="M 5.453125 -1.734375 C 5.453125 -1.90625 5.296875 -1.90625 5.1875 -1.90625 L 1.015625 -1.90625 C 0.90625 -1.90625 0.75 -1.90625 0.75 -1.734375 C 0.75 -1.578125 0.921875 -1.578125 1.015625 -1.578125 L 5.1875 -1.578125 C 5.28125 -1.578125 5.453125 -1.578125 5.453125 -1.734375 Z M 5.453125 -1.734375 "/>
</g>
<g id="glyph-3-0">
<path d="M 2.59375 -2.3125 L 3.515625 -2.3125 C 3.609375 -2.3125 3.953125 -2.3125 3.953125 -2.65625 C 3.953125 -3 3.609375 -3 3.515625 -3 L 0.96875 -3 C 0.875 -3 0.546875 -3 0.546875 -2.65625 C 0.546875 -2.3125 0.890625 -2.3125 0.96875 -2.3125 L 1.90625 -2.3125 L 1.90625 1.046875 C 1.90625 1.140625 1.90625 1.484375 2.25 1.484375 C 2.59375 1.484375 2.59375 1.140625 2.59375 1.046875 Z M 2.59375 -2.3125 "/>
</g>
<g id="glyph-4-0">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-5-0">
<path d="M 7.453125 -1.53125 C 7.453125 -1.640625 7.328125 -1.65625 7.28125 -1.65625 C 6.96875 -1.65625 6.109375 -1.265625 6 -0.75 C 5.515625 -0.75 5.171875 -0.796875 4.375 -0.953125 C 4.015625 -1.015625 3.21875 -1.171875 2.65625 -1.171875 C 2.578125 -1.171875 2.46875 -1.171875 2.390625 -1.15625 C 2.71875 -1.71875 2.84375 -2.1875 3.015625 -2.84375 C 3.21875 -3.625 3.609375 -5.015625 4.359375 -5.859375 C 4.5 -6 4.53125 -6.046875 4.796875 -6.046875 C 5.25 -6.046875 5.421875 -5.6875 5.421875 -5.375 C 5.421875 -5.265625 5.390625 -5.15625 5.390625 -5.109375 C 5.390625 -5 5.515625 -4.984375 5.5625 -4.984375 C 5.703125 -4.984375 6 -5.0625 6.390625 -5.3125 C 6.78125 -5.59375 6.84375 -5.765625 6.84375 -6.046875 C 6.84375 -6.5625 6.53125 -6.96875 5.875 -6.96875 C 5.25 -6.96875 4.34375 -6.671875 3.53125 -5.953125 C 2.390625 -4.953125 1.890625 -3.3125 1.609375 -2.1875 C 1.453125 -1.59375 1.25 -0.78125 0.828125 -0.453125 C 0.71875 -0.359375 0.390625 -0.109375 0.390625 0.046875 C 0.390625 0.15625 0.5 0.171875 0.5625 0.171875 C 0.640625 0.171875 0.9375 0.15625 1.5 -0.25 C 1.859375 -0.25 2.203125 -0.234375 3.109375 -0.0625 C 3.546875 0.03125 4.28125 0.171875 4.84375 0.171875 C 6.171875 0.171875 7.453125 -1 7.453125 -1.53125 Z M 7.453125 -1.53125 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 19 15 L 167 15 L 167 54.558594 L 19 54.558594 Z M 19 15 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 0.078125 34 L 20 34 L 20 36 L 0.078125 36 Z M 0.078125 34 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 164 19 L 185.730469 19 L 185.730469 51 L 164 51 Z M 164 19 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" d="M 19.6875 53.5625 L 166.117188 53.5625 L 166.117188 16.398438 L 19.6875 16.398438 Z M 19.6875 53.5625 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -73.512932 -18.656574 L 73.510195 -18.656574 L 73.510195 18.658104 L -73.512932 18.658104 Z M -73.512932 -18.656574 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="80.149397" y="10.612989"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="88.947739" y="12.100958"/>
<use xlink:href="#glyph-1-1" x="93.330445" y="12.100958"/>
<use xlink:href="#glyph-1-2" x="99.187713" y="12.100958"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -17.007512 -14.173635 L 17.008696 -14.173635 L 17.008696 14.175166 L -17.007512 14.175166 Z M -17.007512 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="81.442157" y="36.621583"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="90.2405" y="38.413321"/>
<use xlink:href="#glyph-2-1" x="94.30579" y="38.413321"/>
<use xlink:href="#glyph-2-2" x="99.804662" y="38.413321"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -69.029993 -14.173635 L -35.013785 -14.173635 L -35.013785 14.175166 L -69.029993 14.175166 Z M -69.029993 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="30.86812" y="38.932219"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="40.129586" y="35.330814"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="46.331358" y="35.330814"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 35.011048 -14.173635 L 69.027256 -14.173635 L 69.027256 14.175166 L 35.011048 14.175166 Z M 35.011048 -14.173635 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="134.850707" y="39.019863"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="143.924932" y="35.419455"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="150.126704" y="35.419455"/>
</g>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -74.160075 0.000765138 L -92.20557 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054921 0.000765138 L 1.607281 1.683338 L 3.085906 0.000765138 L 1.607281 -1.681808 Z M 6.054921 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 16.215612, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="4.876457" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -34.515681 0.000765138 L -22.141516 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052851 0.000765138 L 1.609133 1.683338 L 3.087758 0.000765138 L 1.609133 -1.681808 Z M 6.052851 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 68.026268, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-4" x="65.16114" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 17.506801 0.000765138 L 29.880966 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054712 0.000765138 L 1.607073 1.683338 L 3.085697 0.000765138 L 1.607073 -1.681808 Z M 6.054712 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 119.836914, 34.981231)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="115.654504" y="31.178642"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 69.52536 0.000765138 L 87.570855 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 92.903707, 34.981231)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 183.324219 34.980469 L 178.894531 33.304688 L 180.367188 34.980469 L 178.894531 36.65625 Z M 183.324219 34.980469 "/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054711 0.000765138 L 1.607071 1.683338 L 3.085696 0.000765138 L 1.607071 -1.681808 Z M 6.054711 0.000765138 " transform="matrix(0.995964, 0, 0, -0.995964, 177.293947, 34.981231)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-5" x="174.70718" y="29.24946"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

4
paper/preamble.tex Normal file
View File

@@ -0,0 +1,4 @@
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{cases}
\usepackage{empheq}

71
paper/preamble_extra.tex Normal file
View File

@@ -0,0 +1,71 @@
\usepackage{float}
\usepackage{enumitem}
\usepackage{tabularx,booktabs}
\usepackage{bm}
\usepackage{xpatch} % Recommanded for biblatex
\usepackage[ % use biblatex for bibliography
backend=biber, % use biber backend (bibtex replacement) or bibtex
style=ieee, % bib style
hyperref=true, % activate hyperref support
backref=true, % activate backrefs
isbn=false, % don't show isbn tags
url=false, % don't show url tags
doi=false, % don't show doi tags
urldate=long, % display type for dates
maxnames=3, %
minnames=1, %
maxbibnames=5, %
minbibnames=3, %
maxcitenames=2, %
mincitenames=1 %
]{biblatex}
\setlength\bibitemsep{1.1\itemsep}
\usepackage{caption}
\usepackage{subcaption}
\captionsetup[figure]{labelfont=bf}
\captionsetup[subfigure]{labelfont=bf}
\captionsetup[listing]{labelfont=bf}
\captionsetup[table]{labelfont=bf}
\usepackage{xcolor}
\definecolor{my-blue}{HTML}{6b7adb}
\definecolor{my-pale-blue}{HTML}{e6e9f9}
\definecolor{my-red}{HTML}{db6b6b}
\definecolor{my-pale-red}{HTML}{f9e6e6}
\definecolor{my-green}{HTML}{6bdbb6}
\definecolor{my-pale-green}{HTML}{e6f9f3}
\definecolor{my-yellow}{HTML}{dbd26b}
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
\definecolor{my-orange}{HTML}{dba76b}
\definecolor{my-pale-orange}{HTML}{f9f0e6}
\definecolor{my-grey}{HTML}{a3a3a3}
\definecolor{my-pale-grey}{HTML}{f0f0f0}
\definecolor{my-turq}{HTML}{6bc7db}
\definecolor{my-pale-turq}{HTML}{e6f6f9}
\usepackage{inconsolata}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
\makeatletter
\preto\Gin@extensions{png,}
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
\preto\Gin@extensions{gif,}
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
\makeatother
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
allcolors = my-blue
}
\usepackage{hypcap}