Update study: cubic configuration, renew the function for generation

This commit is contained in:
Thomas Dehaeze 2019-03-25 18:12:43 +01:00
parent 2914d01e8f
commit 7fb03f7b90
29 changed files with 3773 additions and 817 deletions

263
.gitignore vendored
View File

@ -1,2 +1,261 @@
Figures/ mat/
slprj/ figures/
ltximg/
slprj/
*.autosave
*.original
old/
# ============================================================
# ============================================================
# 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

1349
cubic-configuration.html Normal file

File diff suppressed because it is too large Load Diff

607
cubic-configuration.org Normal file
View File

@ -0,0 +1,607 @@
#+TITLE: Cubic configuration for the Stewart Platform
:DRAWER:
#+STARTUP: overview
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
#+HTML_HEAD: <script src="js/jquery.min.js"></script>
#+HTML_HEAD: <script src="js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/readtheorg.js"></script>
#+LATEX_CLASS: cleanreport
#+LaTeX_CLASS_OPTIONS: [tocnp, secbreak, minted]
#+LaTeX_HEADER: \usepackage{svg}
#+LaTeX_HEADER: \newcommand{\authorFirstName}{Thomas}
#+LaTeX_HEADER: \newcommand{\authorLastName}{Dehaeze}
#+LaTeX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :mkdirp yes
:END:
#+begin_src matlab :results none :exports none :noweb yes
<<matlab-init>>
addpath('src');
addpath('library');
#+end_src
The discovery of the Cubic configuration is done in citenum:geng94_six_degree_of_freed_activ.
The specificity of the Cubic configuration is that each actuator is orthogonal with the others.
To generate and study the Cubic configuration, =initializeCubicConfiguration= is used (description in section [[sec:initializeCubicConfiguration]]).
* Questions we wish to answer with this analysis
The goal is to study the benefits of using a cubic configuration:
- Equal stiffness in all the degrees of freedom?
- No coupling between the actuators?
- Is the center of the cube an important point?
* Configuration Analysis - Stiffness Matrix
** Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center
We create a cubic Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot).
The Jacobian matrix is estimated at the location of the center of the cube.
#+name: fig:3d-cubic-stewart-aligned
#+caption: Centered cubic configuration
[[file:./figs/3d-cubic-stewart-aligned.png]]
#+begin_src matlab :results silent
opts = struct(...
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 200/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -50], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -50] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
save('./mat/stewart.mat', 'stewart');
#+end_src
#+begin_src matlab :results none :exports code
K = stewart.Jd'*stewart.Jd;
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 1.9e-18 | -2.3e-17 | 1.8e-18 | 5.5e-17 | -1.5e-17 |
| 1.9e-18 | 2 | 6.8e-18 | -6.1e-17 | -1.6e-18 | 4.8e-18 |
| -2.3e-17 | 6.8e-18 | 2 | -6.7e-18 | 4.9e-18 | 5.3e-19 |
| 1.8e-18 | -6.1e-17 | -6.7e-18 | 0.0067 | -2.3e-20 | -6.1e-20 |
| 5.5e-17 | -1.6e-18 | 4.9e-18 | -2.3e-20 | 0.0067 | 1e-18 |
| -1.5e-17 | 4.8e-18 | 5.3e-19 | -6.1e-20 | 1e-18 | 0.027 |
** Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]).
The Jacobian matrix is not estimated at the location of the center of the cube.
#+begin_src matlab :results silent
opts = struct(...
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 200/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, 0], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, 0] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src
#+begin_src matlab :results none :exports code
K = stewart.Jd'*stewart.Jd;
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 1.9e-18 | -2.3e-17 | 1.5e-18 | -0.1 | -1.5e-17 |
| 1.9e-18 | 2 | 6.8e-18 | 0.1 | -1.6e-18 | 4.8e-18 |
| -2.3e-17 | 6.8e-18 | 2 | -5.1e-19 | -5.5e-18 | 5.3e-19 |
| 1.5e-18 | 0.1 | -5.1e-19 | 0.012 | -3e-19 | 3.1e-19 |
| -0.1 | -1.6e-18 | -5.5e-18 | -3e-19 | 0.012 | 1.9e-18 |
| -1.5e-17 | 4.8e-18 | 5.3e-19 | 3.1e-19 | 1.9e-18 | 0.027 |
** Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center
Here, the "center" of the Stewart platform is not at the cube center (figure [[fig:3d-cubic-stewart-misaligned]]).
The Jacobian is estimated at the cube center.
#+name: fig:3d-cubic-stewart-misaligned
#+caption: Not centered cubic configuration
[[file:./figs/3d-cubic-stewart-misaligned.png]]
The center of the cube is at $z = 110$.
The Stewart platform is from $z = H_0 = 75$ to $z = H_0 + H_{tot} = 175$.
The center height of the Stewart platform is then at $z = \frac{175-75}{2} = 50$.
The center of the cube from the top platform is at $z = 110 - 175 = -65$.
#+begin_src matlab :results silent
opts = struct(...
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 220/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -65], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -65] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src
#+begin_src matlab :results none :exports code
K = stewart.Jd'*stewart.Jd;
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | -1.8e-17 | 2.6e-17 | 3.3e-18 | 0.04 | 1.7e-19 |
| -1.8e-17 | 2 | 1.9e-16 | -0.04 | 2.2e-19 | -5.3e-19 |
| 2.6e-17 | 1.9e-16 | 2 | -8.9e-18 | 6.5e-19 | -5.8e-19 |
| 3.3e-18 | -0.04 | -8.9e-18 | 0.0089 | -9.3e-20 | 9.8e-20 |
| 0.04 | 2.2e-19 | 6.5e-19 | -9.3e-20 | 0.0089 | -2.4e-18 |
| 1.7e-19 | -5.3e-19 | -5.8e-19 | 9.8e-20 | -2.4e-18 | 0.032 |
We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
** Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center
Here, the "center" of the Stewart platform is not at the cube center.
The Jacobian is estimated at the center of the Stewart platform.
The center of the cube is at $z = 110$.
The Stewart platform is from $z = H_0 = 75$ to $z = H_0 + H_{tot} = 175$.
The center height of the Stewart platform is then at $z = \frac{175-75}{2} = 50$.
The center of the cube from the top platform is at $z = 110 - 175 = -65$.
#+begin_src matlab :results silent
opts = struct(...
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 220/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -60], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -60] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src
#+begin_src matlab :results none :exports code
K = stewart.Jd'*stewart.Jd;
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | -1.8e-17 | 2.6e-17 | -5.7e-19 | 0.03 | 1.7e-19 |
| -1.8e-17 | 2 | 1.9e-16 | -0.03 | 2.2e-19 | -5.3e-19 |
| 2.6e-17 | 1.9e-16 | 2 | -1.5e-17 | 6.5e-19 | -5.8e-19 |
| -5.7e-19 | -0.03 | -1.5e-17 | 0.0085 | 4.9e-20 | 1.7e-19 |
| 0.03 | 2.2e-19 | 6.5e-19 | 4.9e-20 | 0.0085 | -1.1e-18 |
| 1.7e-19 | -5.3e-19 | -5.8e-19 | 1.7e-19 | -1.1e-18 | 0.032 |
We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
** Conclusion
#+begin_important
- The cubic configuration permits to have $k_x = k_y = k_z$ and $k_{\theta\x} = k_{\theta_y}$
- The stiffness matrix $K$ is diagonal for the cubic configuration if the Stewart platform and the cube are centered *and* the Jacobian is estimated at the cube center
#+end_important
* Cubic size analysis
We here study the effect of the size of the cube used for the Stewart configuration.
We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform.
We only vary the size of the cube.
#+begin_src matlab :results silent
H_cubes = 250:20:350;
stewarts = {zeros(length(H_cubes), 1)};
#+end_src
#+begin_src matlab :results silent
for i = 1:length(H_cubes)
H_cube = H_cubes(i);
H_tot = 100;
H = 80;
opts = struct(...
'H_tot', H_tot, ... % Total height of the Hexapod [mm]
'L', H_cube/sqrt(3), ... % Size of the Cube [mm]
'H', H, ... % Height between base joints and platform joints [mm]
'H0', H_cube/2-H/2 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, H_cube/2-opts.H0-opts.H_tot], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, H_cube/2-opts.H0-opts.H_tot] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
stewarts(i) = {stewart};
end
#+end_src
The Stiffness matrix is computed for all generated Stewart platforms.
#+begin_src matlab :results none :exports code
Ks = zeros(6, 6, length(H_cube));
for i = 1:length(H_cubes)
Ks(:, :, i) = stewarts{i}.Jd'*stewarts{i}.Jd;
end
#+end_src
The only elements of $K$ that vary are $k_{\theta_x} = k_{\theta_y}$ and $k_{\theta_z}$.
Finally, we plot $k_{\theta_x} = k_{\theta_y}$ and $k_{\theta_z}$
#+begin_src matlab :results none :exports code
figure;
hold on;
plot(H_cubes, squeeze(Ks(4, 4, :)), 'DisplayName', '$k_{\theta_x}$');
plot(H_cubes, squeeze(Ks(6, 6, :)), 'DisplayName', '$k_{\theta_z}$');
hold off;
legend('location', 'northwest');
xlabel('Cube Size [mm]'); ylabel('Rotational stiffnes [normalized]');
#+end_src
#+NAME: fig:stiffness_cube_size
#+HEADER: :tangle no :exports results :results raw :noweb yes
#+begin_src matlab :var filepath="figs/stiffness_cube_size.pdf" :var figsize="normal-normal" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:stiffness_cube_size
#+CAPTION: $k_{\theta_x} = k_{\theta_y}$ and $k_{\theta_z}$ function of the size of the cube
#+RESULTS: fig:stiffness_cube_size
[[file:figs/stiffness_cube_size.png]]
We observe that $k_{\theta_x} = k_{\theta_y}$ and $k_{\theta_z}$ increase linearly with the cube size.
#+begin_important
In order to maximize the rotational stiffness of the Stewart platform, the size of the cube should be the highest possible.
In that case, the legs will the further separated. Size of the cube is then limited by allowed space.
#+end_important
* initializeCubicConfiguration
:PROPERTIES:
:HEADER-ARGS:matlab+: :exports code
:HEADER-ARGS:matlab+: :comments no
:HEADER-ARGS:matlab+: :eval no
:HEADER-ARGS:matlab+: :tangle src/initializeCubicConfiguration.m
:END:
<<sec:initializeCubicConfiguration>>
** Function description
#+begin_src matlab
function [stewart] = initializeCubicConfiguration(opts_param)
#+end_src
** Optional Parameters
Default values for opts.
#+begin_src matlab
opts = struct(...
'H_tot', 90, ... % Total height of the Hexapod [mm]
'L', 110, ... % Size of the Cube [mm]
'H', 40, ... % Height between base joints and platform joints [mm]
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
#+end_src
Populate opts with input parameters
#+begin_src matlab
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
#+end_src
** Cube Creation
#+begin_src matlab :results none
points = [0, 0, 0; ...
0, 0, 1; ...
0, 1, 0; ...
0, 1, 1; ...
1, 0, 0; ...
1, 0, 1; ...
1, 1, 0; ...
1, 1, 1];
points = opts.L*points;
#+end_src
We create the rotation matrix to rotate the cube
#+begin_src matlab :results none
sx = cross([1, 1, 1], [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, [1, 1, 1]);
sy = sy/norm(sy);
sz = [1, 1, 1];
sz = sz/norm(sz);
R = [sx', sy', sz']';
#+end_src
We use to rotation matrix to rotate the cube
#+begin_src matlab :results none
cube = zeros(size(points));
for i = 1:size(points, 1)
cube(i, :) = R * points(i, :)';
end
#+end_src
** Vectors of each leg
#+begin_src matlab :results none
leg_indices = [3, 4; ...
2, 4; ...
2, 6; ...
5, 6; ...
5, 7; ...
3, 7];
#+end_src
Vectors are:
#+begin_src matlab :results none
legs = zeros(6, 3);
legs_start = zeros(6, 3);
for i = 1:6
legs(i, :) = cube(leg_indices(i, 2), :) - cube(leg_indices(i, 1), :);
legs_start(i, :) = cube(leg_indices(i, 1), :);
end
#+end_src
** Verification of Height of the Stewart Platform
If the Stewart platform is not contained in the cube, throw an error.
#+begin_src matlab :results none
Hmax = cube(4, 3) - cube(2, 3);
if opts.H0 < cube(2, 3)
error(sprintf('H0 is not high enought. Minimum H0 = %.1f', cube(2, 3)));
else if opts.H0 + opts.H > cube(4, 3)
error(sprintf('H0+H is too high. Maximum H0+H = %.1f', cube(4, 3)));
error('H0+H is too high');
end
#+end_src
** Determinate the location of the joints
We now determine the location of the joints on the fixed platform w.r.t the fixed frame $\{A\}$.
$\{A\}$ is fixed to the bottom of the base.
#+begin_src matlab :results none
Aa = zeros(6, 3);
for i = 1:6
t = (opts.H0-legs_start(i, 3))/(legs(i, 3));
Aa(i, :) = legs_start(i, :) + t*legs(i, :);
end
#+end_src
And the location of the joints on the mobile platform with respect to $\{A\}$.
#+begin_src matlab :results none
Ab = zeros(6, 3);
for i = 1:6
t = (opts.H0+opts.H-legs_start(i, 3))/(legs(i, 3));
Ab(i, :) = legs_start(i, :) + t*legs(i, :);
end
#+end_src
And the location of the joints on the mobile platform with respect to $\{B\}$.
#+begin_src matlab :results none
Bb = zeros(6, 3);
Bb = Ab - (opts.H0 + opts.H_tot/2 + opts.H/2)*[0, 0, 1];
#+end_src
#+begin_src matlab :results none
h = opts.H0 + opts.H/2 - opts.H_tot/2;
Aa = Aa - h*[0, 0, 1];
Ab = Ab - h*[0, 0, 1];
#+end_src
** Returns Stewart Structure
#+begin_src matlab :results none
stewart = struct();
stewart.Aa = Aa;
stewart.Ab = Ab;
stewart.Bb = Bb;
stewart.H_tot = opts.H_tot;
end
#+end_src
* Tests
** First attempt to parametrisation
#+name: fig:stewart_bottom_plate
#+caption: Schematic of the bottom plates with all the parameters
[[file:./figs/stewart_bottom_plate.png]]
The goal is to choose $\alpha$, $\beta$, $R_\text{leg, t}$ and $R_\text{leg, b}$ in such a way that the configuration is cubic.
The configuration is cubic if:
\[ \overrightarrow{a_i b_i} \cdot \overrightarrow{a_j b_j} = 0, \ \forall i, j = [1, \hdots, 6], i \ne j \]
Lets express $a_i$, $b_i$ and $a_j$:
\begin{equation*}
a_1 = \begin{bmatrix}R_{\text{leg,b}} \cos(120 - \alpha) \\ R_{\text{leg,b}} \cos(120 - \alpha) \\ 0\end{bmatrix} ; \quad
a_2 = \begin{bmatrix}R_{\text{leg,b}} \cos(120 + \alpha) \\ R_{\text{leg,b}} \cos(120 + \alpha) \\ 0\end{bmatrix} ; \quad
\end{equation*}
\begin{equation*}
b_1 = \begin{bmatrix}R_{\text{leg,t}} \cos(120 - \beta) \\ R_{\text{leg,t}} \cos(120 - \beta\\ H\end{bmatrix} ; \quad
b_2 = \begin{bmatrix}R_{\text{leg,t}} \cos(120 + \beta) \\ R_{\text{leg,t}} \cos(120 + \beta\\ H\end{bmatrix} ; \quad
\end{equation*}
\[ \overrightarrow{a_1 b_1} = b_1 - a_1 = \begin{bmatrix}R_{\text{leg}} \cos(120 - \alpha) \\ R_{\text{leg}} \cos(120 - \alpha) \\ 0\end{bmatrix}\]
** Second attempt
We start with the point of a cube in space:
\begin{align*}
[0, 0, 0] ; \ [0, 0, 1]; \ ...
\end{align*}
We also want the cube to point upward:
\[ [1, 1, 1] \Rightarrow [0, 0, 1] \]
Then we have the direction of all the vectors expressed in the frame of the hexapod.
#+begin_src matlab :results none
points = [0, 0, 0; ...
0, 0, 1; ...
0, 1, 0; ...
0, 1, 1; ...
1, 0, 0; ...
1, 0, 1; ...
1, 1, 0; ...
1, 1, 1];
#+end_src
#+begin_src matlab :results none
figure;
plot3(points(:,1), points(:,2), points(:,3), 'ko')
#+end_src
#+begin_src matlab :results none
sx = cross([1, 1, 1], [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, [1, 1, 1]);
sy = sy/norm(sy);
sz = [1, 1, 1];
sz = sz/norm(sz);
R = [sx', sy', sz']';
#+end_src
#+begin_src matlab :results none
cube = zeros(size(points));
for i = 1:size(points, 1)
cube(i, :) = R * points(i, :)';
end
#+end_src
#+begin_src matlab :results none
figure;
hold on;
plot3(points(:,1), points(:,2), points(:,3), 'ko');
plot3(cube(:,1), cube(:,2), cube(:,3), 'ro');
hold off;
#+end_src
Now we plot the legs of the hexapod.
#+begin_src matlab :results none
leg_indices = [3, 4; ...
2, 4; ...
2, 6; ...
5, 6; ...
5, 7; ...
3, 7]
figure;
hold on;
for i = 1:6
plot3(cube(leg_indices(i, :),1), cube(leg_indices(i, :),2), cube(leg_indices(i, :),3), '-');
end
hold off;
#+end_src
Vectors are:
#+begin_src matlab :results none
legs = zeros(6, 3);
legs_start = zeros(6, 3);
for i = 1:6
legs(i, :) = cube(leg_indices(i, 2), :) - cube(leg_indices(i, 1), :);
legs_start(i, :) = cube(leg_indices(i, 1), :)
end
#+end_src
We now have the orientation of each leg.
We here want to see if the position of the "slice" changes something.
Let's first estimate the maximum height of the Stewart platform.
#+begin_src matlab :results none
Hmax = cube(4, 3) - cube(2, 3);
#+end_src
Let's then estimate the middle position of the platform
#+begin_src matlab :results none
Hmid = cube(8, 3)/2;
#+end_src
** Generate the Stewart platform for a Cubic configuration
First we defined the height of the Hexapod.
#+begin_src matlab :results none
H = Hmax/2;
#+end_src
#+begin_src matlab :results none
Zs = 1.2*cube(2, 3); % Height of the fixed platform
Ze = Zs + H; % Height of the mobile platform
#+end_src
We now determine the location of the joints on the fixed platform.
#+begin_src matlab :results none
Aa = zeros(6, 3);
for i = 1:6
t = (Zs-legs_start(i, 3))/(legs(i, 3));
Aa(i, :) = legs_start(i, :) + t*legs(i, :);
end
#+end_src
And the location of the joints on the mobile platform
#+begin_src matlab :results none
Ab = zeros(6, 3);
for i = 1:6
t = (Ze-legs_start(i, 3))/(legs(i, 3));
Ab(i, :) = legs_start(i, :) + t*legs(i, :);
end
#+end_src
And we plot the legs.
#+begin_src matlab :results none
figure;
hold on;
for i = 1:6
plot3([Ab(i, 1),Aa(i, 1)], [Ab(i, 2),Aa(i, 2)], [Ab(i, 3),Aa(i, 3)], 'k-');
end
hold off;
xlim([-1, 1]);
ylim([-1, 1]);
zlim([0, 2]);
#+end_src
* Bibliography :ignore:
bibliographystyle:unsrt
bibliography:references.bib

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="281pt" height="179pt" viewBox="0 0 281 179" version="1.2">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 38.890625 147.613281 L 271.476562 147.613281 L 271.476562 4.308594 L 38.890625 4.308594 Z M 38.890625 147.613281 "/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 313.867188 L 388.90625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 1551.835938 313.867188 L 1551.835938 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 313.867188 L 2714.765625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 313.867188 L 388.90625 313.867188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 664.804688 L 388.90625 664.804688 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1015.742188 L 388.90625 1015.742188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1366.71875 L 388.90625 1366.71875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,85.15625%,85.15625%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1717.65625 L 388.90625 1717.65625 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 313.867188 L 2714.765625 313.867188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1746.875 L 2714.765625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 313.867188 L 388.90625 337.109375 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 1551.835938 313.867188 L 1551.835938 337.109375 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 313.867188 L 2714.765625 337.109375 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1746.875 L 388.90625 1723.632812 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 1551.835938 1746.875 L 1551.835938 1723.632812 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1746.875 L 2714.765625 1723.632812 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 31.890625 160.019531 L 31.890625 159.75 C 31.890625 159.730469 31.894531 159.710938 31.90625 159.691406 L 33.484375 157.949219 C 33.722656 157.691406 33.914062 157.476562 34.0625 157.300781 C 34.207031 157.128906 34.355469 156.925781 34.503906 156.699219 C 34.648438 156.472656 34.765625 156.242188 34.847656 156.007812 C 34.929688 155.769531 34.972656 155.519531 34.972656 155.253906 C 34.972656 154.980469 34.921875 154.714844 34.816406 154.460938 C 34.714844 154.207031 34.5625 154.003906 34.359375 153.855469 C 34.160156 153.703125 33.914062 153.628906 33.625 153.628906 C 33.332031 153.628906 33.070312 153.71875 32.835938 153.894531 C 32.597656 154.070312 32.433594 154.296875 32.34375 154.578125 C 32.367188 154.570312 32.402344 154.566406 32.449219 154.566406 C 32.597656 154.566406 32.730469 154.617188 32.835938 154.71875 C 32.945312 154.820312 32.996094 154.953125 32.996094 155.117188 C 32.996094 155.269531 32.945312 155.402344 32.835938 155.507812 C 32.730469 155.613281 32.597656 155.667969 32.449219 155.667969 C 32.289062 155.667969 32.160156 155.613281 32.050781 155.503906 C 31.945312 155.394531 31.890625 155.265625 31.890625 155.117188 C 31.890625 154.863281 31.9375 154.625 32.035156 154.402344 C 32.128906 154.179688 32.265625 153.980469 32.449219 153.808594 C 32.628906 153.632812 32.832031 153.5 33.054688 153.410156 C 33.28125 153.316406 33.523438 153.273438 33.777344 153.273438 C 34.160156 153.273438 34.519531 153.355469 34.851562 153.519531 C 35.1875 153.683594 35.453125 153.914062 35.644531 154.210938 C 35.839844 154.507812 35.933594 154.855469 35.933594 155.253906 C 35.933594 155.550781 35.871094 155.832031 35.742188 156.09375 C 35.613281 156.359375 35.449219 156.597656 35.25 156.8125 C 35.050781 157.027344 34.792969 157.269531 34.476562 157.542969 C 34.164062 157.820312 33.957031 158.003906 33.859375 158.09375 L 32.710938 159.199219 L 33.683594 159.199219 C 34.164062 159.199219 34.566406 159.195312 34.886719 159.1875 C 35.207031 159.179688 35.375 159.164062 35.394531 159.144531 C 35.476562 159.0625 35.558594 158.753906 35.640625 158.214844 L 35.933594 158.214844 L 35.648438 160.019531 L 31.890625 160.019531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 37.265625 158.863281 C 37.335938 159.0625 37.445312 159.242188 37.585938 159.40625 C 37.730469 159.566406 37.898438 159.695312 38.097656 159.785156 C 38.292969 159.875 38.5 159.917969 38.710938 159.917969 C 39.199219 159.917969 39.535156 159.730469 39.71875 159.351562 C 39.902344 158.972656 39.992188 158.511719 39.992188 157.972656 C 39.992188 157.738281 39.988281 157.539062 39.980469 157.382812 C 39.972656 157.21875 39.953125 157.066406 39.917969 156.917969 C 39.855469 156.679688 39.742188 156.472656 39.585938 156.292969 C 39.425781 156.117188 39.234375 156.027344 39.007812 156.027344 C 38.78125 156.027344 38.585938 156.0625 38.421875 156.132812 C 38.257812 156.203125 38.125 156.285156 38.023438 156.375 C 37.921875 156.46875 37.832031 156.5625 37.753906 156.664062 C 37.675781 156.765625 37.625 156.820312 37.605469 156.828125 L 37.488281 156.828125 C 37.472656 156.828125 37.453125 156.820312 37.429688 156.796875 C 37.402344 156.777344 37.390625 156.753906 37.390625 156.734375 L 37.390625 153.351562 C 37.390625 153.335938 37.402344 153.316406 37.421875 153.296875 C 37.445312 153.28125 37.46875 153.273438 37.488281 153.273438 L 37.519531 153.273438 C 37.976562 153.492188 38.460938 153.601562 38.96875 153.601562 C 39.472656 153.601562 39.957031 153.492188 40.421875 153.273438 L 40.449219 153.273438 C 40.472656 153.273438 40.496094 153.28125 40.515625 153.296875 C 40.535156 153.316406 40.542969 153.335938 40.542969 153.351562 L 40.542969 153.449219 C 40.542969 153.476562 40.535156 153.496094 40.519531 153.496094 C 40.289062 153.804688 40 154.042969 39.652344 154.210938 C 39.304688 154.382812 38.945312 154.46875 38.574219 154.46875 C 38.304688 154.46875 38.027344 154.429688 37.742188 154.355469 L 37.742188 156.265625 C 37.96875 156.085938 38.167969 155.957031 38.34375 155.878906 C 38.523438 155.800781 38.746094 155.761719 39.019531 155.761719 C 39.390625 155.761719 39.722656 155.871094 40.019531 156.085938 C 40.316406 156.300781 40.539062 156.578125 40.699219 156.921875 C 40.855469 157.265625 40.9375 157.617188 40.9375 157.976562 C 40.9375 158.386719 40.835938 158.761719 40.636719 159.105469 C 40.4375 159.453125 40.167969 159.726562 39.824219 159.933594 C 39.484375 160.140625 39.113281 160.242188 38.710938 160.242188 C 38.378906 160.242188 38.070312 160.15625 37.792969 159.984375 C 37.511719 159.8125 37.292969 159.582031 37.132812 159.292969 C 36.972656 159.003906 36.890625 158.695312 36.890625 158.367188 C 36.890625 158.214844 36.941406 158.089844 37.042969 157.992188 C 37.140625 157.898438 37.265625 157.847656 37.414062 157.847656 C 37.5625 157.847656 37.6875 157.898438 37.785156 157.996094 C 37.886719 158.09375 37.933594 158.21875 37.933594 158.367188 C 37.933594 158.511719 37.886719 158.632812 37.785156 158.734375 C 37.6875 158.835938 37.5625 158.886719 37.414062 158.886719 C 37.390625 158.886719 37.363281 158.882812 37.335938 158.878906 C 37.304688 158.871094 37.28125 158.867188 37.265625 158.863281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 43.921875 160.242188 C 43.09375 160.242188 42.53125 159.902344 42.234375 159.21875 C 41.9375 158.535156 41.789062 157.726562 41.789062 156.789062 C 41.789062 156.203125 41.839844 155.652344 41.945312 155.132812 C 42.050781 154.613281 42.265625 154.175781 42.582031 153.8125 C 42.902344 153.453125 43.347656 153.273438 43.921875 153.273438 C 44.367188 153.273438 44.730469 153.378906 45.015625 153.597656 C 45.296875 153.8125 45.515625 154.09375 45.664062 154.441406 C 45.8125 154.785156 45.914062 155.15625 45.96875 155.546875 C 46.023438 155.941406 46.050781 156.355469 46.050781 156.789062 C 46.050781 157.371094 45.996094 157.914062 45.890625 158.421875 C 45.78125 158.925781 45.570312 159.355469 45.257812 159.710938 C 44.945312 160.066406 44.5 160.242188 43.921875 160.242188 Z M 43.921875 159.976562 C 44.296875 159.976562 44.578125 159.785156 44.761719 159.398438 C 44.949219 159.015625 45.0625 158.589844 45.105469 158.117188 C 45.148438 157.648438 45.171875 157.152344 45.171875 156.625 C 45.171875 156.117188 45.148438 155.648438 45.105469 155.21875 C 45.0625 154.792969 44.949219 154.40625 44.765625 154.058594 C 44.582031 153.710938 44.300781 153.535156 43.921875 153.535156 C 43.539062 153.535156 43.257812 153.710938 43.074219 154.058594 C 42.890625 154.410156 42.777344 154.796875 42.730469 155.222656 C 42.691406 155.648438 42.667969 156.117188 42.667969 156.625 C 42.667969 157 42.675781 157.355469 42.695312 157.6875 C 42.710938 158.023438 42.761719 158.367188 42.839844 158.71875 C 42.914062 159.074219 43.042969 159.371094 43.222656 159.613281 C 43.398438 159.855469 43.632812 159.976562 43.921875 159.976562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 148.644531 159.238281 C 148.804688 159.46875 149.015625 159.640625 149.28125 159.75 C 149.550781 159.863281 149.835938 159.917969 150.140625 159.917969 C 150.535156 159.917969 150.816406 159.75 150.980469 159.417969 C 151.144531 159.082031 151.226562 158.703125 151.226562 158.277344 C 151.226562 158.085938 151.207031 157.894531 151.171875 157.703125 C 151.136719 157.511719 151.078125 157.332031 150.996094 157.167969 C 150.914062 157.003906 150.800781 156.875 150.660156 156.773438 C 150.515625 156.675781 150.34375 156.625 150.136719 156.625 L 149.460938 156.625 C 149.402344 156.625 149.371094 156.59375 149.371094 156.53125 L 149.371094 156.441406 C 149.371094 156.386719 149.402344 156.359375 149.460938 156.359375 L 150.019531 156.320312 C 150.257812 156.320312 150.453125 156.230469 150.609375 156.054688 C 150.765625 155.875 150.878906 155.65625 150.953125 155.402344 C 151.023438 155.148438 151.0625 154.902344 151.0625 154.671875 C 151.0625 154.347656 150.984375 154.082031 150.835938 153.875 C 150.683594 153.667969 150.453125 153.566406 150.140625 153.566406 C 149.882812 153.566406 149.636719 153.613281 149.40625 153.710938 C 149.171875 153.808594 148.984375 153.957031 148.847656 154.152344 C 148.859375 154.148438 148.875 154.144531 148.882812 154.144531 C 148.894531 154.144531 148.902344 154.144531 148.914062 154.144531 C 149.066406 154.144531 149.195312 154.199219 149.296875 154.304688 C 149.398438 154.410156 149.449219 154.535156 149.449219 154.683594 C 149.449219 154.828125 149.398438 154.953125 149.296875 155.058594 C 149.195312 155.164062 149.066406 155.21875 148.914062 155.21875 C 148.769531 155.21875 148.640625 155.164062 148.535156 155.058594 C 148.429688 154.953125 148.378906 154.828125 148.378906 154.683594 C 148.378906 154.390625 148.464844 154.136719 148.636719 153.925781 C 148.8125 153.710938 149.035156 153.550781 149.3125 153.4375 C 149.585938 153.328125 149.863281 153.273438 150.140625 153.273438 C 150.347656 153.273438 150.566406 153.300781 150.792969 153.363281 C 151.019531 153.421875 151.222656 153.511719 151.40625 153.625 C 151.589844 153.742188 151.742188 153.886719 151.859375 154.066406 C 151.976562 154.242188 152.035156 154.445312 152.035156 154.671875 C 152.035156 154.953125 151.972656 155.214844 151.84375 155.457031 C 151.71875 155.699219 151.542969 155.90625 151.320312 156.082031 C 151.101562 156.257812 150.859375 156.386719 150.597656 156.472656 C 150.890625 156.527344 151.171875 156.636719 151.433594 156.804688 C 151.695312 156.96875 151.910156 157.179688 152.070312 157.4375 C 152.230469 157.691406 152.308594 157.96875 152.308594 158.265625 C 152.308594 158.640625 152.207031 158.980469 152.003906 159.28125 C 151.796875 159.582031 151.527344 159.816406 151.195312 159.984375 C 150.863281 160.15625 150.511719 160.242188 150.140625 160.242188 C 149.824219 160.242188 149.507812 160.179688 149.1875 160.058594 C 148.871094 159.9375 148.609375 159.757812 148.410156 159.515625 C 148.207031 159.277344 148.105469 158.988281 148.105469 158.652344 C 148.105469 158.484375 148.164062 158.34375 148.273438 158.234375 C 148.386719 158.121094 148.523438 158.066406 148.691406 158.066406 C 148.804688 158.066406 148.902344 158.09375 148.992188 158.144531 C 149.082031 158.195312 149.152344 158.265625 149.203125 158.355469 C 149.253906 158.449219 149.28125 158.546875 149.28125 158.652344 C 149.28125 158.816406 149.222656 158.957031 149.105469 159.070312 C 148.992188 159.183594 148.855469 159.238281 148.691406 159.238281 L 148.644531 159.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 155.214844 160.242188 C 154.386719 160.242188 153.820312 159.902344 153.523438 159.21875 C 153.226562 158.535156 153.078125 157.726562 153.078125 156.789062 C 153.078125 156.203125 153.132812 155.652344 153.238281 155.132812 C 153.34375 154.613281 153.554688 154.175781 153.875 153.8125 C 154.191406 153.453125 154.640625 153.273438 155.214844 153.273438 C 155.660156 153.273438 156.023438 153.378906 156.304688 153.597656 C 156.589844 153.8125 156.804688 154.09375 156.953125 154.441406 C 157.101562 154.785156 157.203125 155.15625 157.257812 155.546875 C 157.3125 155.941406 157.339844 156.355469 157.339844 156.789062 C 157.339844 157.371094 157.289062 157.914062 157.179688 158.421875 C 157.074219 158.925781 156.863281 159.355469 156.550781 159.710938 C 156.238281 160.066406 155.792969 160.242188 155.214844 160.242188 Z M 155.214844 159.976562 C 155.589844 159.976562 155.867188 159.785156 156.054688 159.398438 C 156.238281 159.015625 156.355469 158.589844 156.398438 158.117188 C 156.441406 157.648438 156.460938 157.152344 156.460938 156.625 C 156.460938 156.117188 156.441406 155.648438 156.398438 155.21875 C 156.355469 154.792969 156.242188 154.40625 156.058594 154.058594 C 155.875 153.710938 155.59375 153.535156 155.214844 153.535156 C 154.828125 153.535156 154.546875 153.710938 154.363281 154.058594 C 154.179688 154.410156 154.066406 154.796875 154.023438 155.222656 C 153.980469 155.648438 153.960938 156.117188 153.960938 156.625 C 153.960938 157 153.96875 157.355469 153.984375 157.6875 C 154.003906 158.023438 154.050781 158.367188 154.128906 158.71875 C 154.207031 159.074219 154.335938 159.371094 154.511719 159.613281 C 154.691406 159.855469 154.925781 159.976562 155.214844 159.976562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 160.214844 160.242188 C 159.386719 160.242188 158.824219 159.902344 158.527344 159.21875 C 158.230469 158.535156 158.082031 157.726562 158.082031 156.789062 C 158.082031 156.203125 158.132812 155.652344 158.238281 155.132812 C 158.34375 154.613281 158.558594 154.175781 158.875 153.8125 C 159.195312 153.453125 159.640625 153.273438 160.214844 153.273438 C 160.660156 153.273438 161.023438 153.378906 161.308594 153.597656 C 161.59375 153.8125 161.808594 154.09375 161.957031 154.441406 C 162.105469 154.785156 162.207031 155.15625 162.261719 155.546875 C 162.316406 155.941406 162.34375 156.355469 162.34375 156.789062 C 162.34375 157.371094 162.289062 157.914062 162.183594 158.421875 C 162.074219 158.925781 161.863281 159.355469 161.550781 159.710938 C 161.238281 160.066406 160.792969 160.242188 160.214844 160.242188 Z M 160.214844 159.976562 C 160.589844 159.976562 160.871094 159.785156 161.054688 159.398438 C 161.242188 159.015625 161.355469 158.589844 161.398438 158.117188 C 161.441406 157.648438 161.464844 157.152344 161.464844 156.625 C 161.464844 156.117188 161.441406 155.648438 161.398438 155.21875 C 161.355469 154.792969 161.242188 154.40625 161.058594 154.058594 C 160.875 153.710938 160.59375 153.535156 160.214844 153.535156 C 159.832031 153.535156 159.550781 153.710938 159.363281 154.058594 C 159.183594 154.410156 159.066406 154.796875 159.023438 155.222656 C 158.980469 155.648438 158.960938 156.117188 158.960938 156.625 C 158.960938 157 158.96875 157.355469 158.988281 157.6875 C 159.003906 158.023438 159.054688 158.367188 159.132812 158.71875 C 159.210938 159.074219 159.335938 159.371094 159.515625 159.613281 C 159.691406 159.855469 159.925781 159.976562 160.214844 159.976562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 264.9375 159.238281 C 265.097656 159.46875 265.308594 159.640625 265.574219 159.75 C 265.84375 159.863281 266.128906 159.917969 266.433594 159.917969 C 266.828125 159.917969 267.109375 159.75 267.273438 159.417969 C 267.4375 159.082031 267.519531 158.703125 267.519531 158.277344 C 267.519531 158.085938 267.5 157.894531 267.464844 157.703125 C 267.429688 157.511719 267.371094 157.332031 267.289062 157.167969 C 267.207031 157.003906 267.097656 156.875 266.953125 156.773438 C 266.808594 156.675781 266.636719 156.625 266.429688 156.625 L 265.753906 156.625 C 265.695312 156.625 265.664062 156.59375 265.664062 156.53125 L 265.664062 156.441406 C 265.664062 156.386719 265.695312 156.359375 265.753906 156.359375 L 266.3125 156.320312 C 266.550781 156.320312 266.746094 156.230469 266.902344 156.054688 C 267.058594 155.875 267.171875 155.65625 267.246094 155.402344 C 267.316406 155.148438 267.355469 154.902344 267.355469 154.671875 C 267.355469 154.347656 267.277344 154.082031 267.128906 153.875 C 266.976562 153.667969 266.746094 153.566406 266.433594 153.566406 C 266.175781 153.566406 265.929688 153.613281 265.699219 153.710938 C 265.464844 153.808594 265.277344 153.957031 265.140625 154.152344 C 265.152344 154.148438 265.167969 154.144531 265.175781 154.144531 C 265.1875 154.144531 265.195312 154.144531 265.210938 154.144531 C 265.359375 154.144531 265.488281 154.199219 265.589844 154.304688 C 265.691406 154.410156 265.742188 154.535156 265.742188 154.683594 C 265.742188 154.828125 265.691406 154.953125 265.589844 155.058594 C 265.488281 155.164062 265.359375 155.21875 265.210938 155.21875 C 265.0625 155.21875 264.933594 155.164062 264.828125 155.058594 C 264.722656 154.953125 264.671875 154.828125 264.671875 154.683594 C 264.671875 154.390625 264.757812 154.136719 264.929688 153.925781 C 265.105469 153.710938 265.328125 153.550781 265.605469 153.4375 C 265.878906 153.328125 266.15625 153.273438 266.433594 153.273438 C 266.640625 153.273438 266.859375 153.300781 267.085938 153.363281 C 267.3125 153.421875 267.515625 153.511719 267.699219 153.625 C 267.882812 153.742188 268.035156 153.886719 268.152344 154.066406 C 268.269531 154.242188 268.328125 154.445312 268.328125 154.671875 C 268.328125 154.953125 268.265625 155.214844 268.136719 155.457031 C 268.011719 155.699219 267.835938 155.90625 267.613281 156.082031 C 267.394531 156.257812 267.152344 156.386719 266.890625 156.472656 C 267.183594 156.527344 267.464844 156.636719 267.726562 156.804688 C 267.988281 156.96875 268.203125 157.179688 268.363281 157.4375 C 268.523438 157.691406 268.601562 157.96875 268.601562 158.265625 C 268.601562 158.640625 268.5 158.980469 268.296875 159.28125 C 268.089844 159.582031 267.820312 159.816406 267.488281 159.984375 C 267.15625 160.15625 266.804688 160.242188 266.433594 160.242188 C 266.117188 160.242188 265.800781 160.179688 265.480469 160.058594 C 265.164062 159.9375 264.902344 159.757812 264.703125 159.515625 C 264.5 159.277344 264.398438 158.988281 264.398438 158.652344 C 264.398438 158.484375 264.457031 158.34375 264.566406 158.234375 C 264.679688 158.121094 264.816406 158.066406 264.984375 158.066406 C 265.097656 158.066406 265.195312 158.09375 265.285156 158.144531 C 265.375 158.195312 265.445312 158.265625 265.496094 158.355469 C 265.546875 158.449219 265.574219 158.546875 265.574219 158.652344 C 265.574219 158.816406 265.515625 158.957031 265.398438 159.070312 C 265.285156 159.183594 265.144531 159.238281 264.984375 159.238281 L 264.9375 159.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 269.855469 158.863281 C 269.921875 159.0625 270.03125 159.242188 270.171875 159.40625 C 270.316406 159.566406 270.484375 159.695312 270.683594 159.785156 C 270.878906 159.875 271.085938 159.917969 271.296875 159.917969 C 271.785156 159.917969 272.121094 159.730469 272.304688 159.351562 C 272.488281 158.972656 272.578125 158.511719 272.578125 157.972656 C 272.578125 157.738281 272.574219 157.539062 272.566406 157.382812 C 272.558594 157.21875 272.539062 157.066406 272.503906 156.917969 C 272.441406 156.679688 272.328125 156.472656 272.171875 156.292969 C 272.011719 156.117188 271.820312 156.027344 271.59375 156.027344 C 271.367188 156.027344 271.171875 156.0625 271.007812 156.132812 C 270.84375 156.203125 270.710938 156.285156 270.609375 156.375 C 270.507812 156.46875 270.417969 156.5625 270.339844 156.664062 C 270.261719 156.765625 270.214844 156.820312 270.191406 156.828125 L 270.074219 156.828125 C 270.0625 156.828125 270.039062 156.820312 270.015625 156.796875 C 269.988281 156.777344 269.976562 156.753906 269.976562 156.734375 L 269.976562 153.351562 C 269.976562 153.335938 269.988281 153.316406 270.007812 153.296875 C 270.03125 153.28125 270.054688 153.273438 270.074219 153.273438 L 270.105469 153.273438 C 270.5625 153.492188 271.046875 153.601562 271.554688 153.601562 C 272.058594 153.601562 272.542969 153.492188 273.007812 153.273438 L 273.035156 153.273438 C 273.058594 153.273438 273.082031 153.28125 273.101562 153.296875 C 273.121094 153.316406 273.128906 153.335938 273.128906 153.351562 L 273.128906 153.449219 C 273.128906 153.476562 273.121094 153.496094 273.105469 153.496094 C 272.875 153.804688 272.585938 154.042969 272.238281 154.210938 C 271.890625 154.382812 271.53125 154.46875 271.160156 154.46875 C 270.890625 154.46875 270.613281 154.429688 270.328125 154.355469 L 270.328125 156.265625 C 270.554688 156.085938 270.757812 155.957031 270.933594 155.878906 C 271.109375 155.800781 271.332031 155.761719 271.605469 155.761719 C 271.976562 155.761719 272.308594 155.871094 272.605469 156.085938 C 272.898438 156.300781 273.128906 156.578125 273.285156 156.921875 C 273.445312 157.265625 273.523438 157.617188 273.523438 157.976562 C 273.523438 158.386719 273.421875 158.761719 273.222656 159.105469 C 273.023438 159.453125 272.753906 159.726562 272.410156 159.933594 C 272.070312 160.140625 271.699219 160.242188 271.296875 160.242188 C 270.964844 160.242188 270.65625 160.15625 270.378906 159.984375 C 270.097656 159.8125 269.878906 159.582031 269.71875 159.292969 C 269.558594 159.003906 269.476562 158.695312 269.476562 158.367188 C 269.476562 158.214844 269.527344 158.089844 269.628906 157.992188 C 269.726562 157.898438 269.851562 157.847656 270 157.847656 C 270.148438 157.847656 270.273438 157.898438 270.371094 157.996094 C 270.472656 158.09375 270.519531 158.21875 270.519531 158.367188 C 270.519531 158.511719 270.472656 158.632812 270.371094 158.734375 C 270.273438 158.835938 270.148438 158.886719 270 158.886719 C 269.976562 158.886719 269.949219 158.882812 269.921875 158.878906 C 269.890625 158.871094 269.867188 158.867188 269.855469 158.863281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 276.507812 160.242188 C 275.679688 160.242188 275.117188 159.902344 274.820312 159.21875 C 274.523438 158.535156 274.375 157.726562 274.375 156.789062 C 274.375 156.203125 274.425781 155.652344 274.53125 155.132812 C 274.636719 154.613281 274.851562 154.175781 275.167969 153.8125 C 275.488281 153.453125 275.933594 153.273438 276.507812 153.273438 C 276.953125 153.273438 277.316406 153.378906 277.601562 153.597656 C 277.886719 153.8125 278.101562 154.09375 278.25 154.441406 C 278.398438 154.785156 278.5 155.15625 278.554688 155.546875 C 278.609375 155.941406 278.636719 156.355469 278.636719 156.789062 C 278.636719 157.371094 278.582031 157.914062 278.476562 158.421875 C 278.367188 158.925781 278.15625 159.355469 277.84375 159.710938 C 277.53125 160.066406 277.085938 160.242188 276.507812 160.242188 Z M 276.507812 159.976562 C 276.882812 159.976562 277.164062 159.785156 277.347656 159.398438 C 277.535156 159.015625 277.648438 158.589844 277.691406 158.117188 C 277.734375 157.648438 277.757812 157.152344 277.757812 156.625 C 277.757812 156.117188 277.734375 155.648438 277.691406 155.21875 C 277.648438 154.792969 277.535156 154.40625 277.351562 154.058594 C 277.167969 153.710938 276.886719 153.535156 276.507812 153.535156 C 276.125 153.535156 275.84375 153.710938 275.65625 154.058594 C 275.476562 154.410156 275.359375 154.796875 275.316406 155.222656 C 275.273438 155.648438 275.253906 156.117188 275.253906 156.625 C 275.253906 157 275.261719 157.355469 275.28125 157.6875 C 275.296875 158.023438 275.347656 158.367188 275.425781 158.71875 C 275.503906 159.074219 275.628906 159.371094 275.808594 159.613281 C 275.984375 159.855469 276.21875 159.976562 276.507812 159.976562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 119.605469 172.703125 C 119.855469 173.015625 120.164062 173.261719 120.539062 173.449219 C 120.910156 173.632812 121.292969 173.722656 121.691406 173.722656 C 122.027344 173.722656 122.339844 173.65625 122.628906 173.523438 C 122.914062 173.390625 123.164062 173.207031 123.378906 172.964844 C 123.597656 172.726562 123.761719 172.457031 123.875 172.15625 C 123.992188 171.855469 124.050781 171.539062 124.050781 171.207031 C 124.050781 171.148438 124.078125 171.121094 124.144531 171.121094 L 124.277344 171.121094 C 124.332031 171.121094 124.359375 171.15625 124.359375 171.226562 C 124.359375 171.605469 124.285156 171.972656 124.144531 172.324219 C 123.996094 172.679688 123.792969 172.988281 123.527344 173.257812 C 123.261719 173.523438 122.953125 173.730469 122.609375 173.882812 C 122.265625 174.03125 121.902344 174.105469 121.527344 174.105469 C 121.007812 174.105469 120.515625 174 120.050781 173.789062 C 119.585938 173.574219 119.179688 173.289062 118.835938 172.917969 C 118.488281 172.550781 118.21875 172.128906 118.027344 171.648438 C 117.832031 171.167969 117.734375 170.667969 117.734375 170.148438 C 117.734375 169.625 117.832031 169.121094 118.027344 168.640625 C 118.21875 168.160156 118.488281 167.734375 118.835938 167.367188 C 119.179688 166.996094 119.585938 166.707031 120.050781 166.5 C 120.515625 166.292969 121.007812 166.191406 121.527344 166.191406 C 121.898438 166.191406 122.253906 166.273438 122.59375 166.433594 C 122.933594 166.597656 123.234375 166.824219 123.492188 167.117188 L 124.125 166.226562 C 124.164062 166.203125 124.1875 166.191406 124.195312 166.191406 L 124.277344 166.191406 C 124.296875 166.191406 124.316406 166.199219 124.332031 166.21875 C 124.351562 166.234375 124.359375 166.257812 124.359375 166.285156 L 124.359375 169.222656 C 124.359375 169.285156 124.332031 169.316406 124.277344 169.316406 L 124.078125 169.316406 C 124.011719 169.316406 123.980469 169.285156 123.980469 169.222656 C 123.980469 169.011719 123.9375 168.777344 123.851562 168.519531 C 123.769531 168.261719 123.660156 168.015625 123.53125 167.78125 C 123.402344 167.550781 123.253906 167.34375 123.089844 167.167969 C 122.679688 166.773438 122.214844 166.578125 121.6875 166.578125 C 121.285156 166.578125 120.898438 166.667969 120.535156 166.847656 C 120.167969 167.027344 119.859375 167.277344 119.605469 167.597656 C 119.339844 167.9375 119.15625 168.324219 119.054688 168.757812 C 118.953125 169.191406 118.902344 169.65625 118.902344 170.148438 C 118.902344 170.640625 118.953125 171.105469 119.054688 171.539062 C 119.15625 171.976562 119.339844 172.363281 119.605469 172.703125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 126.246094 172.566406 L 126.246094 170.164062 C 126.246094 169.96875 126.21875 169.828125 126.15625 169.742188 C 126.101562 169.65625 126.015625 169.605469 125.90625 169.585938 C 125.796875 169.566406 125.628906 169.554688 125.394531 169.554688 L 125.394531 169.175781 L 127.042969 169.058594 L 127.042969 172.566406 C 127.042969 172.851562 127.0625 173.070312 127.105469 173.226562 C 127.144531 173.386719 127.234375 173.503906 127.367188 173.582031 C 127.496094 173.660156 127.710938 173.699219 127.996094 173.699219 C 128.390625 173.699219 128.699219 173.535156 128.929688 173.210938 C 129.160156 172.882812 129.277344 172.511719 129.277344 172.097656 L 129.277344 170.164062 C 129.277344 169.96875 129.246094 169.828125 129.1875 169.742188 C 129.125 169.65625 129.039062 169.605469 128.933594 169.585938 C 128.824219 169.566406 128.65625 169.554688 128.425781 169.554688 L 128.425781 169.175781 L 130.066406 169.058594 L 130.066406 172.871094 C 130.066406 173.0625 130.097656 173.203125 130.15625 173.292969 C 130.214844 173.378906 130.296875 173.433594 130.40625 173.453125 C 130.515625 173.472656 130.6875 173.480469 130.917969 173.480469 L 130.917969 173.863281 L 129.304688 173.988281 L 129.304688 173.066406 C 129.171875 173.339844 128.984375 173.5625 128.746094 173.730469 C 128.507812 173.902344 128.238281 173.988281 127.945312 173.988281 C 127.425781 173.988281 127.011719 173.875 126.707031 173.65625 C 126.398438 173.433594 126.246094 173.074219 126.246094 172.566406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 132.316406 173.863281 L 132.316406 167.425781 C 132.316406 167.230469 132.289062 167.089844 132.230469 167.003906 C 132.171875 166.914062 132.089844 166.859375 131.976562 166.839844 C 131.867188 166.820312 131.699219 166.8125 131.46875 166.8125 L 131.46875 166.429688 L 133.078125 166.3125 L 133.078125 169.71875 C 133.199219 169.585938 133.339844 169.46875 133.5 169.367188 C 133.660156 169.265625 133.835938 169.1875 134.019531 169.136719 C 134.203125 169.082031 134.390625 169.058594 134.582031 169.058594 C 134.90625 169.058594 135.207031 169.121094 135.488281 169.253906 C 135.765625 169.382812 136.007812 169.566406 136.214844 169.796875 C 136.417969 170.027344 136.578125 170.289062 136.695312 170.589844 C 136.808594 170.886719 136.867188 171.195312 136.867188 171.511719 C 136.867188 171.953125 136.757812 172.363281 136.546875 172.742188 C 136.328125 173.125 136.039062 173.425781 135.667969 173.648438 C 135.300781 173.875 134.890625 173.988281 134.445312 173.988281 C 134.171875 173.988281 133.90625 173.914062 133.644531 173.773438 C 133.386719 173.628906 133.171875 173.445312 133.003906 173.210938 L 132.636719 173.863281 Z M 133.109375 172.796875 C 133.230469 173.0625 133.40625 173.28125 133.632812 173.449219 C 133.859375 173.613281 134.109375 173.699219 134.386719 173.699219 C 134.761719 173.699219 135.066406 173.589844 135.296875 173.375 C 135.527344 173.15625 135.6875 172.886719 135.78125 172.554688 C 135.871094 172.226562 135.917969 171.878906 135.917969 171.511719 C 135.917969 170.902344 135.839844 170.4375 135.683594 170.117188 C 135.613281 169.976562 135.515625 169.847656 135.394531 169.726562 C 135.269531 169.605469 135.132812 169.507812 134.980469 169.441406 C 134.832031 169.371094 134.671875 169.339844 134.503906 169.339844 C 134.214844 169.339844 133.945312 169.414062 133.699219 169.570312 C 133.449219 169.722656 133.253906 169.929688 133.109375 170.1875 L 133.109375 172.796875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 140.3125 173.988281 C 139.871094 173.988281 139.46875 173.871094 139.097656 173.636719 C 138.730469 173.40625 138.4375 173.09375 138.226562 172.707031 C 138.015625 172.320312 137.910156 171.910156 137.910156 171.476562 C 137.910156 171.050781 138.007812 170.648438 138.199219 170.269531 C 138.390625 169.886719 138.65625 169.578125 139.003906 169.339844 C 139.351562 169.105469 139.734375 168.988281 140.160156 168.988281 C 140.492188 168.988281 140.78125 169.042969 141.027344 169.152344 C 141.277344 169.265625 141.480469 169.421875 141.640625 169.621094 C 141.800781 169.820312 141.921875 170.050781 142 170.320312 C 142.078125 170.585938 142.121094 170.882812 142.121094 171.207031 C 142.121094 171.300781 142.082031 171.347656 142.007812 171.347656 L 138.859375 171.347656 L 138.859375 171.464844 C 138.859375 172.066406 138.980469 172.585938 139.222656 173.015625 C 139.464844 173.449219 139.863281 173.664062 140.414062 173.664062 C 140.636719 173.664062 140.84375 173.613281 141.03125 173.519531 C 141.222656 173.417969 141.386719 173.28125 141.523438 173.105469 C 141.664062 172.925781 141.757812 172.738281 141.808594 172.53125 C 141.816406 172.507812 141.828125 172.488281 141.851562 172.46875 C 141.871094 172.449219 141.890625 172.4375 141.914062 172.4375 L 142.007812 172.4375 C 142.082031 172.4375 142.121094 172.484375 142.121094 172.578125 C 142.019531 172.988281 141.796875 173.328125 141.457031 173.589844 C 141.117188 173.855469 140.734375 173.988281 140.3125 173.988281 Z M 138.871094 171.078125 L 141.351562 171.078125 C 141.351562 170.804688 141.3125 170.53125 141.238281 170.25 C 141.160156 169.96875 141.035156 169.738281 140.855469 169.550781 C 140.679688 169.367188 140.445312 169.273438 140.160156 169.273438 C 139.753906 169.273438 139.433594 169.464844 139.210938 169.851562 C 138.984375 170.238281 138.871094 170.644531 138.871094 171.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 146.773438 174.015625 L 146.773438 171.476562 C 146.773438 171.421875 146.808594 171.394531 146.875 171.394531 L 147.003906 171.394531 C 147.027344 171.394531 147.046875 171.40625 147.0625 171.421875 C 147.082031 171.4375 147.089844 171.457031 147.089844 171.476562 C 147.089844 172.1875 147.3125 172.742188 147.75 173.132812 C 148.191406 173.527344 148.769531 173.722656 149.484375 173.722656 C 149.738281 173.722656 149.96875 173.648438 150.183594 173.503906 C 150.394531 173.355469 150.5625 173.167969 150.679688 172.929688 C 150.796875 172.699219 150.855469 172.453125 150.855469 172.199219 C 150.855469 171.980469 150.808594 171.765625 150.722656 171.558594 C 150.632812 171.351562 150.507812 171.171875 150.339844 171.019531 C 150.175781 170.867188 149.988281 170.765625 149.777344 170.714844 L 148.363281 170.375 C 147.898438 170.25 147.515625 169.996094 147.21875 169.609375 C 146.921875 169.226562 146.773438 168.796875 146.773438 168.320312 C 146.773438 167.945312 146.871094 167.589844 147.0625 167.261719 C 147.253906 166.929688 147.511719 166.667969 147.835938 166.476562 C 148.160156 166.285156 148.507812 166.191406 148.886719 166.191406 C 149.609375 166.191406 150.1875 166.4375 150.613281 166.929688 L 151.066406 166.226562 C 151.085938 166.203125 151.109375 166.191406 151.136719 166.191406 L 151.210938 166.191406 C 151.230469 166.191406 151.25 166.199219 151.269531 166.21875 C 151.289062 166.234375 151.300781 166.257812 151.300781 166.285156 L 151.300781 168.804688 C 151.300781 168.871094 151.269531 168.90625 151.210938 168.90625 L 151.082031 168.90625 C 151.015625 168.90625 150.984375 168.871094 150.984375 168.804688 C 150.984375 168.621094 150.953125 168.417969 150.890625 168.203125 C 150.828125 167.980469 150.742188 167.773438 150.632812 167.570312 C 150.523438 167.363281 150.402344 167.199219 150.273438 167.074219 C 149.925781 166.71875 149.464844 166.542969 148.886719 166.542969 C 148.640625 166.542969 148.410156 166.605469 148.203125 166.734375 C 147.992188 166.859375 147.824219 167.03125 147.699219 167.246094 C 147.574219 167.460938 147.511719 167.6875 147.511719 167.925781 C 147.511719 168.238281 147.609375 168.519531 147.804688 168.773438 C 147.996094 169.023438 148.25 169.191406 148.5625 169.273438 L 149.976562 169.621094 C 150.210938 169.675781 150.429688 169.777344 150.636719 169.925781 C 150.84375 170.074219 151.015625 170.242188 151.152344 170.4375 C 151.289062 170.632812 151.398438 170.847656 151.476562 171.085938 C 151.554688 171.328125 151.59375 171.574219 151.59375 171.828125 C 151.59375 172.21875 151.503906 172.589844 151.324219 172.941406 C 151.144531 173.289062 150.890625 173.570312 150.5625 173.785156 C 150.234375 173.996094 149.871094 174.105469 149.484375 174.105469 C 149.246094 174.105469 149 174.078125 148.746094 174.023438 C 148.496094 173.972656 148.261719 173.890625 148.050781 173.777344 C 147.835938 173.667969 147.644531 173.523438 147.472656 173.355469 L 147.015625 174.070312 C 146.996094 174.09375 146.96875 174.105469 146.933594 174.105469 L 146.875 174.105469 C 146.808594 174.105469 146.773438 174.074219 146.773438 174.015625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 152.613281 173.863281 L 152.613281 173.480469 C 152.863281 173.480469 153.066406 173.460938 153.226562 173.425781 C 153.382812 173.386719 153.464844 173.289062 153.464844 173.136719 L 153.464844 170.164062 C 153.464844 169.886719 153.410156 169.714844 153.300781 169.652344 C 153.195312 169.585938 152.980469 169.554688 152.660156 169.554688 L 152.660156 169.175781 L 154.230469 169.058594 L 154.230469 173.136719 C 154.230469 173.289062 154.296875 173.386719 154.433594 173.425781 C 154.570312 173.460938 154.757812 173.480469 154.984375 173.480469 L 154.984375 173.863281 Z M 153.074219 167.1875 C 153.074219 167.027344 153.136719 166.886719 153.257812 166.765625 C 153.378906 166.644531 153.515625 166.582031 153.667969 166.582031 C 153.773438 166.582031 153.871094 166.609375 153.96875 166.664062 C 154.066406 166.71875 154.140625 166.796875 154.191406 166.890625 C 154.246094 166.988281 154.269531 167.085938 154.269531 167.1875 C 154.269531 167.34375 154.210938 167.480469 154.089844 167.601562 C 153.96875 167.71875 153.828125 167.78125 153.667969 167.78125 C 153.515625 167.78125 153.378906 167.71875 153.257812 167.601562 C 153.136719 167.480469 153.074219 167.34375 153.074219 167.1875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 155.761719 173.863281 C 155.679688 173.863281 155.640625 173.824219 155.640625 173.742188 L 155.640625 173.65625 C 155.640625 173.625 155.648438 173.601562 155.667969 173.582031 L 158.703125 169.460938 L 157.730469 169.460938 C 157.425781 169.460938 157.167969 169.480469 156.96875 169.519531 C 156.765625 169.558594 156.601562 169.632812 156.472656 169.738281 C 156.34375 169.847656 156.25 169.996094 156.191406 170.183594 C 156.132812 170.375 156.101562 170.636719 156.101562 170.96875 L 155.792969 170.96875 L 155.914062 169.175781 L 159.554688 169.175781 C 159.589844 169.175781 159.617188 169.1875 159.640625 169.210938 C 159.660156 169.234375 159.671875 169.261719 159.671875 169.296875 L 159.671875 169.355469 C 159.671875 169.378906 159.667969 169.40625 159.65625 169.433594 L 156.613281 173.550781 L 157.648438 173.550781 C 157.96875 173.550781 158.230469 173.53125 158.441406 173.496094 C 158.652344 173.457031 158.832031 173.363281 158.980469 173.210938 C 159.117188 173.074219 159.210938 172.886719 159.261719 172.652344 C 159.3125 172.421875 159.355469 172.132812 159.386719 171.789062 L 159.695312 171.789062 L 159.507812 173.863281 L 155.761719 173.863281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 162.933594 173.988281 C 162.492188 173.988281 162.085938 173.871094 161.71875 173.636719 C 161.347656 173.40625 161.058594 173.09375 160.847656 172.707031 C 160.636719 172.320312 160.53125 171.910156 160.53125 171.476562 C 160.53125 171.050781 160.625 170.648438 160.816406 170.269531 C 161.007812 169.886719 161.277344 169.578125 161.625 169.339844 C 161.96875 169.105469 162.355469 168.988281 162.78125 168.988281 C 163.113281 168.988281 163.402344 169.042969 163.648438 169.152344 C 163.894531 169.265625 164.097656 169.421875 164.257812 169.621094 C 164.417969 169.820312 164.539062 170.050781 164.617188 170.320312 C 164.699219 170.585938 164.738281 170.882812 164.738281 171.207031 C 164.738281 171.300781 164.703125 171.347656 164.628906 171.347656 L 161.480469 171.347656 L 161.480469 171.464844 C 161.480469 172.066406 161.601562 172.585938 161.84375 173.015625 C 162.085938 173.449219 162.480469 173.664062 163.035156 173.664062 C 163.257812 173.664062 163.460938 173.613281 163.652344 173.519531 C 163.839844 173.417969 164.003906 173.28125 164.144531 173.105469 C 164.28125 172.925781 164.378906 172.738281 164.429688 172.53125 C 164.4375 172.507812 164.449219 172.488281 164.46875 172.46875 C 164.488281 172.449219 164.511719 172.4375 164.535156 172.4375 L 164.628906 172.4375 C 164.703125 172.4375 164.738281 172.484375 164.738281 172.578125 C 164.636719 172.988281 164.417969 173.328125 164.078125 173.589844 C 163.738281 173.855469 163.355469 173.988281 162.933594 173.988281 Z M 161.492188 171.078125 L 163.972656 171.078125 C 163.972656 170.804688 163.933594 170.53125 163.855469 170.25 C 163.78125 169.96875 163.652344 169.738281 163.476562 169.550781 C 163.296875 169.367188 163.066406 169.273438 162.78125 169.273438 C 162.371094 169.273438 162.054688 169.464844 161.828125 169.851562 C 161.605469 170.238281 161.492188 170.644531 161.492188 171.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 170.066406 176.582031 L 170.066406 165.703125 L 171.558594 165.703125 L 171.558594 166.136719 L 170.507812 166.136719 L 170.507812 176.148438 L 171.558594 176.148438 L 171.558594 176.582031 L 170.066406 176.582031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 172.164062 173.863281 L 172.164062 173.480469 C 172.414062 173.480469 172.617188 173.460938 172.777344 173.425781 C 172.933594 173.386719 173.011719 173.289062 173.011719 173.136719 L 173.011719 170.164062 C 173.011719 169.96875 172.984375 169.828125 172.925781 169.742188 C 172.867188 169.65625 172.78125 169.605469 172.671875 169.585938 C 172.5625 169.566406 172.394531 169.554688 172.164062 169.554688 L 172.164062 169.175781 L 173.738281 169.058594 L 173.738281 170.117188 C 173.890625 169.804688 174.105469 169.550781 174.390625 169.351562 C 174.675781 169.15625 174.988281 169.058594 175.324219 169.058594 C 176.15625 169.058594 176.644531 169.398438 176.796875 170.078125 C 176.9375 169.773438 177.152344 169.527344 177.429688 169.339844 C 177.710938 169.152344 178.015625 169.058594 178.347656 169.058594 C 178.675781 169.058594 178.953125 169.109375 179.179688 169.214844 C 179.40625 169.320312 179.578125 169.484375 179.691406 169.703125 C 179.804688 169.921875 179.859375 170.195312 179.859375 170.523438 L 179.859375 173.136719 C 179.859375 173.289062 179.941406 173.386719 180.101562 173.425781 C 180.261719 173.460938 180.464844 173.480469 180.710938 173.480469 L 180.710938 173.863281 L 178.21875 173.863281 L 178.21875 173.480469 C 178.464844 173.480469 178.667969 173.460938 178.828125 173.425781 C 178.988281 173.386719 179.066406 173.289062 179.066406 173.136719 L 179.066406 170.550781 C 179.066406 170.1875 179.015625 169.894531 178.914062 169.671875 C 178.808594 169.449219 178.597656 169.339844 178.277344 169.339844 C 177.859375 169.339844 177.515625 169.507812 177.242188 169.84375 C 176.972656 170.179688 176.835938 170.5625 176.835938 170.992188 L 176.835938 173.136719 C 176.835938 173.289062 176.914062 173.386719 177.074219 173.425781 C 177.230469 173.460938 177.433594 173.480469 177.683594 173.480469 L 177.683594 173.863281 L 175.195312 173.863281 L 175.195312 173.480469 C 175.441406 173.480469 175.644531 173.460938 175.804688 173.425781 C 175.964844 173.386719 176.042969 173.289062 176.042969 173.136719 L 176.042969 170.550781 C 176.042969 170.199219 175.992188 169.910156 175.890625 169.679688 C 175.785156 169.453125 175.574219 169.339844 175.257812 169.339844 C 174.835938 169.339844 174.488281 169.507812 174.21875 169.84375 C 173.945312 170.179688 173.8125 170.5625 173.8125 170.992188 L 173.8125 173.136719 C 173.8125 173.289062 173.890625 173.386719 174.050781 173.425781 C 174.210938 173.460938 174.414062 173.480469 174.65625 173.480469 L 174.65625 173.863281 L 172.164062 173.863281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 181.335938 173.863281 L 181.335938 173.480469 C 181.585938 173.480469 181.789062 173.460938 181.945312 173.425781 C 182.105469 173.386719 182.183594 173.289062 182.183594 173.136719 L 182.183594 170.164062 C 182.183594 169.96875 182.152344 169.828125 182.097656 169.742188 C 182.035156 169.65625 181.953125 169.605469 181.84375 169.585938 C 181.734375 169.566406 181.5625 169.554688 181.335938 169.554688 L 181.335938 169.175781 L 182.910156 169.058594 L 182.910156 170.117188 C 183.058594 169.804688 183.277344 169.550781 183.5625 169.351562 C 183.847656 169.15625 184.15625 169.058594 184.492188 169.058594 C 185.324219 169.058594 185.816406 169.398438 185.964844 170.078125 C 186.109375 169.773438 186.320312 169.527344 186.601562 169.339844 C 186.878906 169.152344 187.1875 169.058594 187.519531 169.058594 C 187.847656 169.058594 188.121094 169.109375 188.351562 169.214844 C 188.578125 169.320312 188.746094 169.484375 188.859375 169.703125 C 188.972656 169.921875 189.03125 170.195312 189.03125 170.523438 L 189.03125 173.136719 C 189.03125 173.289062 189.109375 173.386719 189.269531 173.425781 C 189.429688 173.460938 189.632812 173.480469 189.878906 173.480469 L 189.878906 173.863281 L 187.390625 173.863281 L 187.390625 173.480469 C 187.636719 173.480469 187.839844 173.460938 187.996094 173.425781 C 188.160156 173.386719 188.238281 173.289062 188.238281 173.136719 L 188.238281 170.550781 C 188.238281 170.1875 188.1875 169.894531 188.085938 169.671875 C 187.980469 169.449219 187.769531 169.339844 187.445312 169.339844 C 187.027344 169.339844 186.683594 169.507812 186.414062 169.84375 C 186.140625 170.179688 186.003906 170.5625 186.003906 170.992188 L 186.003906 173.136719 C 186.003906 173.289062 186.085938 173.386719 186.242188 173.425781 C 186.402344 173.460938 186.605469 173.480469 186.855469 173.480469 L 186.855469 173.863281 L 184.363281 173.863281 L 184.363281 173.480469 C 184.609375 173.480469 184.8125 173.460938 184.972656 173.425781 C 185.132812 173.386719 185.214844 173.289062 185.214844 173.136719 L 185.214844 170.550781 C 185.214844 170.199219 185.160156 169.910156 185.058594 169.679688 C 184.953125 169.453125 184.746094 169.339844 184.429688 169.339844 C 184.007812 169.339844 183.660156 169.507812 183.386719 169.84375 C 183.117188 170.179688 182.980469 170.5625 182.980469 170.992188 L 182.980469 173.136719 C 182.980469 173.289062 183.0625 173.386719 183.222656 173.425781 C 183.382812 173.460938 183.582031 173.480469 183.824219 173.480469 L 183.824219 173.863281 L 181.335938 173.863281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 190.421875 176.582031 L 190.421875 176.148438 L 191.476562 176.148438 L 191.476562 166.136719 L 190.421875 166.136719 L 190.421875 165.703125 L 191.910156 165.703125 L 191.910156 176.582031 L 190.421875 176.582031 "/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 313.867188 L 388.90625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 313.867188 L 2714.765625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 313.867188 L 412.148438 313.867188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 664.804688 L 412.148438 664.804688 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1015.742188 L 412.148438 1015.742188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1366.71875 L 412.148438 1366.71875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1717.65625 L 412.148438 1717.65625 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 313.867188 L 2691.484375 313.867188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 664.804688 L 2691.484375 664.804688 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1015.742188 L 2691.484375 1015.742188 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1366.71875 L 2691.484375 1366.71875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:square;stroke-linejoin:round;stroke:rgb(0%,0%,1.197815%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2714.765625 1717.65625 L 2691.484375 1717.65625 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 32.417969 150.238281 C 31.589844 150.238281 31.027344 149.898438 30.730469 149.214844 C 30.433594 148.53125 30.285156 147.722656 30.285156 146.785156 C 30.285156 146.199219 30.335938 145.648438 30.441406 145.128906 C 30.546875 144.609375 30.761719 144.171875 31.078125 143.808594 C 31.398438 143.449219 31.84375 143.269531 32.417969 143.269531 C 32.863281 143.269531 33.226562 143.375 33.511719 143.59375 C 33.792969 143.808594 34.011719 144.089844 34.160156 144.4375 C 34.308594 144.78125 34.410156 145.152344 34.464844 145.546875 C 34.519531 145.9375 34.546875 146.351562 34.546875 146.785156 C 34.546875 147.367188 34.492188 147.910156 34.382812 148.417969 C 34.277344 148.921875 34.066406 149.351562 33.753906 149.707031 C 33.441406 150.058594 32.996094 150.238281 32.417969 150.238281 Z M 32.417969 149.972656 C 32.792969 149.972656 33.074219 149.78125 33.257812 149.394531 C 33.445312 149.011719 33.558594 148.585938 33.601562 148.113281 C 33.644531 147.648438 33.667969 147.148438 33.667969 146.621094 C 33.667969 146.113281 33.644531 145.644531 33.601562 145.21875 C 33.558594 144.789062 33.445312 144.402344 33.261719 144.054688 C 33.078125 143.707031 32.796875 143.53125 32.417969 143.53125 C 32.035156 143.53125 31.75 143.707031 31.566406 144.054688 C 31.382812 144.40625 31.269531 144.792969 31.226562 145.21875 C 31.183594 145.644531 31.164062 146.113281 31.164062 146.621094 C 31.164062 146.996094 31.171875 147.351562 31.191406 147.683594 C 31.207031 148.019531 31.253906 148.363281 31.332031 148.714844 C 31.410156 149.070312 31.539062 149.367188 31.71875 149.609375 C 31.894531 149.851562 32.128906 149.972656 32.417969 149.972656 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 19.636719 115.144531 C 18.804688 115.144531 18.242188 114.800781 17.945312 114.121094 C 17.648438 113.4375 17.5 112.628906 17.5 111.691406 C 17.5 111.105469 17.554688 110.550781 17.660156 110.035156 C 17.765625 109.515625 17.976562 109.078125 18.296875 108.714844 C 18.613281 108.355469 19.0625 108.171875 19.636719 108.171875 C 20.082031 108.171875 20.445312 108.28125 20.726562 108.5 C 21.011719 108.714844 21.226562 108.996094 21.375 109.34375 C 21.523438 109.6875 21.625 110.058594 21.679688 110.449219 C 21.734375 110.84375 21.761719 111.257812 21.761719 111.691406 C 21.761719 112.273438 21.710938 112.816406 21.601562 113.324219 C 21.496094 113.828125 21.285156 114.257812 20.972656 114.613281 C 20.660156 114.964844 20.214844 115.144531 19.636719 115.144531 Z M 19.636719 114.878906 C 20.011719 114.878906 20.289062 114.6875 20.476562 114.300781 C 20.660156 113.917969 20.777344 113.488281 20.820312 113.019531 C 20.863281 112.550781 20.882812 112.054688 20.882812 111.527344 C 20.882812 111.019531 20.863281 110.550781 20.820312 110.121094 C 20.777344 109.695312 20.664062 109.304688 20.480469 108.957031 C 20.296875 108.609375 20.015625 108.4375 19.636719 108.4375 C 19.253906 108.4375 18.96875 108.613281 18.785156 108.960938 C 18.601562 109.3125 18.488281 109.699219 18.445312 110.125 C 18.402344 110.550781 18.382812 111.019531 18.382812 111.527344 C 18.382812 111.902344 18.390625 112.257812 18.40625 112.589844 C 18.425781 112.925781 18.472656 113.269531 18.550781 113.621094 C 18.628906 113.976562 18.757812 114.273438 18.933594 114.515625 C 19.113281 114.757812 19.347656 114.878906 19.636719 114.878906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 22.953125 114.363281 C 22.953125 114.210938 23.011719 114.082031 23.125 113.96875 C 23.238281 113.859375 23.367188 113.804688 23.511719 113.804688 C 23.605469 113.804688 23.699219 113.832031 23.785156 113.878906 C 23.878906 113.929688 23.945312 113.996094 23.996094 114.085938 C 24.042969 114.175781 24.070312 114.269531 24.070312 114.363281 C 24.070312 114.511719 24.015625 114.640625 23.90625 114.753906 C 23.792969 114.863281 23.664062 114.917969 23.511719 114.917969 C 23.367188 114.917969 23.238281 114.863281 23.125 114.753906 C 23.011719 114.640625 22.953125 114.511719 22.953125 114.363281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 27.414062 115.144531 C 26.585938 115.144531 26.023438 114.800781 25.726562 114.121094 C 25.429688 113.4375 25.28125 112.628906 25.28125 111.691406 C 25.28125 111.105469 25.335938 110.550781 25.441406 110.035156 C 25.546875 109.515625 25.757812 109.078125 26.078125 108.714844 C 26.394531 108.355469 26.839844 108.171875 27.414062 108.171875 C 27.863281 108.171875 28.226562 108.28125 28.507812 108.5 C 28.792969 108.714844 29.007812 108.996094 29.15625 109.34375 C 29.304688 109.6875 29.40625 110.058594 29.460938 110.449219 C 29.515625 110.84375 29.542969 111.257812 29.542969 111.691406 C 29.542969 112.273438 29.488281 112.816406 29.382812 113.324219 C 29.273438 113.828125 29.066406 114.257812 28.753906 114.613281 C 28.441406 114.964844 27.996094 115.144531 27.414062 115.144531 Z M 27.414062 114.878906 C 27.789062 114.878906 28.070312 114.6875 28.257812 114.300781 C 28.441406 113.917969 28.558594 113.488281 28.601562 113.019531 C 28.644531 112.550781 28.664062 112.054688 28.664062 111.527344 C 28.664062 111.019531 28.644531 110.550781 28.601562 110.121094 C 28.558594 109.695312 28.445312 109.304688 28.261719 108.957031 C 28.078125 108.609375 27.792969 108.4375 27.414062 108.4375 C 27.03125 108.4375 26.75 108.613281 26.566406 108.960938 C 26.382812 109.3125 26.269531 109.699219 26.226562 110.125 C 26.183594 110.550781 26.160156 111.019531 26.160156 111.527344 C 26.160156 111.902344 26.171875 112.257812 26.1875 112.589844 C 26.207031 112.925781 26.253906 113.269531 26.332031 113.621094 C 26.410156 113.976562 26.539062 114.273438 26.714844 114.515625 C 26.894531 114.757812 27.128906 114.878906 27.414062 114.878906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 30.390625 114.917969 L 30.390625 114.652344 C 30.390625 114.632812 30.394531 114.609375 30.40625 114.59375 L 31.984375 112.851562 C 32.222656 112.59375 32.414062 112.378906 32.5625 112.203125 C 32.707031 112.03125 32.855469 111.828125 33 111.601562 C 33.148438 111.375 33.261719 111.144531 33.347656 110.90625 C 33.429688 110.671875 33.472656 110.421875 33.472656 110.15625 C 33.472656 109.882812 33.421875 109.617188 33.316406 109.363281 C 33.214844 109.109375 33.0625 108.90625 32.859375 108.757812 C 32.660156 108.605469 32.414062 108.53125 32.125 108.53125 C 31.832031 108.53125 31.566406 108.617188 31.332031 108.792969 C 31.097656 108.96875 30.933594 109.199219 30.839844 109.480469 C 30.867188 109.472656 30.902344 109.46875 30.945312 109.46875 C 31.097656 109.46875 31.230469 109.519531 31.335938 109.621094 C 31.445312 109.722656 31.496094 109.855469 31.496094 110.019531 C 31.496094 110.171875 31.445312 110.300781 31.335938 110.410156 C 31.230469 110.515625 31.097656 110.570312 30.945312 110.570312 C 30.789062 110.570312 30.660156 110.515625 30.550781 110.40625 C 30.445312 110.296875 30.390625 110.167969 30.390625 110.019531 C 30.390625 109.765625 30.4375 109.527344 30.53125 109.304688 C 30.628906 109.082031 30.765625 108.882812 30.945312 108.710938 C 31.125 108.535156 31.328125 108.402344 31.554688 108.3125 C 31.78125 108.21875 32.023438 108.171875 32.277344 108.171875 C 32.660156 108.171875 33.019531 108.253906 33.351562 108.417969 C 33.6875 108.582031 33.949219 108.816406 34.144531 109.109375 C 34.335938 109.40625 34.433594 109.757812 34.433594 110.15625 C 34.433594 110.453125 34.371094 110.730469 34.242188 110.996094 C 34.113281 111.261719 33.949219 111.5 33.75 111.714844 C 33.550781 111.929688 33.292969 112.171875 32.976562 112.445312 C 32.664062 112.71875 32.457031 112.902344 32.359375 112.996094 L 31.210938 114.097656 L 32.183594 114.097656 C 32.664062 114.097656 33.066406 114.09375 33.386719 114.085938 C 33.707031 114.082031 33.875 114.066406 33.894531 114.046875 C 33.976562 113.964844 34.058594 113.652344 34.140625 113.113281 L 34.433594 113.113281 L 34.148438 114.917969 L 30.390625 114.917969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 19.636719 80.046875 C 18.804688 80.046875 18.242188 79.707031 17.945312 79.027344 C 17.648438 78.34375 17.5 77.535156 17.5 76.597656 C 17.5 76.011719 17.554688 75.457031 17.660156 74.941406 C 17.765625 74.421875 17.976562 73.980469 18.296875 73.621094 C 18.613281 73.261719 19.0625 73.078125 19.636719 73.078125 C 20.082031 73.078125 20.445312 73.1875 20.726562 73.402344 C 21.011719 73.621094 21.226562 73.902344 21.375 74.246094 C 21.523438 74.59375 21.625 74.964844 21.679688 75.355469 C 21.734375 75.75 21.761719 76.160156 21.761719 76.597656 C 21.761719 77.179688 21.710938 77.722656 21.601562 78.226562 C 21.496094 78.734375 21.285156 79.164062 20.972656 79.519531 C 20.660156 79.871094 20.214844 80.046875 19.636719 80.046875 Z M 19.636719 79.785156 C 20.011719 79.785156 20.289062 79.59375 20.476562 79.207031 C 20.660156 78.820312 20.777344 78.394531 20.820312 77.925781 C 20.863281 77.457031 20.882812 76.960938 20.882812 76.433594 C 20.882812 75.925781 20.863281 75.457031 20.820312 75.027344 C 20.777344 74.601562 20.664062 74.210938 20.480469 73.863281 C 20.296875 73.515625 20.015625 73.34375 19.636719 73.34375 C 19.253906 73.34375 18.96875 73.519531 18.785156 73.867188 C 18.601562 74.21875 18.488281 74.605469 18.445312 75.03125 C 18.402344 75.457031 18.382812 75.925781 18.382812 76.433594 C 18.382812 76.808594 18.390625 77.160156 18.40625 77.496094 C 18.425781 77.828125 18.472656 78.171875 18.550781 78.527344 C 18.628906 78.882812 18.757812 79.179688 18.933594 79.421875 C 19.113281 79.664062 19.347656 79.785156 19.636719 79.785156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 22.953125 79.269531 C 22.953125 79.117188 23.011719 78.984375 23.125 78.875 C 23.238281 78.765625 23.367188 78.710938 23.511719 78.710938 C 23.605469 78.710938 23.699219 78.734375 23.785156 78.785156 C 23.878906 78.835938 23.945312 78.902344 23.996094 78.992188 C 24.042969 79.082031 24.070312 79.175781 24.070312 79.269531 C 24.070312 79.417969 24.015625 79.546875 23.90625 79.660156 C 23.792969 79.769531 23.664062 79.824219 23.511719 79.824219 C 23.367188 79.824219 23.238281 79.769531 23.125 79.660156 C 23.011719 79.546875 22.953125 79.417969 22.953125 79.269531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 27.414062 80.046875 C 26.585938 80.046875 26.023438 79.707031 25.726562 79.027344 C 25.429688 78.34375 25.28125 77.535156 25.28125 76.597656 C 25.28125 76.011719 25.335938 75.457031 25.441406 74.941406 C 25.546875 74.421875 25.757812 73.980469 26.078125 73.621094 C 26.394531 73.261719 26.839844 73.078125 27.414062 73.078125 C 27.863281 73.078125 28.226562 73.1875 28.507812 73.402344 C 28.792969 73.621094 29.007812 73.902344 29.15625 74.246094 C 29.304688 74.59375 29.40625 74.964844 29.460938 75.355469 C 29.515625 75.75 29.542969 76.160156 29.542969 76.597656 C 29.542969 77.179688 29.488281 77.722656 29.382812 78.226562 C 29.273438 78.734375 29.066406 79.164062 28.753906 79.519531 C 28.441406 79.871094 27.996094 80.046875 27.414062 80.046875 Z M 27.414062 79.785156 C 27.789062 79.785156 28.070312 79.59375 28.257812 79.207031 C 28.441406 78.820312 28.558594 78.394531 28.601562 77.925781 C 28.644531 77.457031 28.664062 76.960938 28.664062 76.433594 C 28.664062 75.925781 28.644531 75.457031 28.601562 75.027344 C 28.558594 74.601562 28.445312 74.210938 28.261719 73.863281 C 28.078125 73.515625 27.792969 73.34375 27.414062 73.34375 C 27.03125 73.34375 26.75 73.519531 26.566406 73.867188 C 26.382812 74.21875 26.269531 74.605469 26.226562 75.03125 C 26.183594 75.457031 26.160156 75.925781 26.160156 76.433594 C 26.160156 76.808594 26.171875 77.160156 26.1875 77.496094 C 26.207031 77.828125 26.253906 78.171875 26.332031 78.527344 C 26.410156 78.882812 26.539062 79.179688 26.714844 79.421875 C 26.894531 79.664062 27.128906 79.785156 27.414062 79.785156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 30.167969 78.15625 L 30.167969 77.796875 L 33.296875 73.132812 C 33.320312 73.097656 33.355469 73.078125 33.402344 73.078125 L 33.550781 73.078125 C 33.628906 73.078125 33.667969 73.117188 33.667969 73.195312 L 33.667969 77.796875 L 34.65625 77.796875 L 34.65625 78.15625 L 33.667969 78.15625 L 33.667969 79.144531 C 33.667969 79.285156 33.765625 79.375 33.960938 79.410156 C 34.160156 79.449219 34.390625 79.46875 34.652344 79.46875 L 34.652344 79.824219 L 31.859375 79.824219 L 31.859375 79.46875 C 32.117188 79.46875 32.347656 79.449219 32.546875 79.410156 C 32.746094 79.375 32.84375 79.285156 32.84375 79.144531 L 32.84375 78.15625 Z M 30.5 77.796875 L 32.90625 77.796875 L 32.90625 74.210938 Z M 30.5 77.796875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 19.636719 44.953125 C 18.804688 44.953125 18.242188 44.613281 17.945312 43.929688 C 17.648438 43.25 17.5 42.4375 17.5 41.5 C 17.5 40.914062 17.554688 40.363281 17.660156 39.84375 C 17.765625 39.328125 17.976562 38.886719 18.296875 38.527344 C 18.613281 38.164062 19.0625 37.984375 19.636719 37.984375 C 20.082031 37.984375 20.445312 38.09375 20.726562 38.308594 C 21.011719 38.527344 21.226562 38.808594 21.375 39.152344 C 21.523438 39.5 21.625 39.867188 21.679688 40.261719 C 21.734375 40.652344 21.761719 41.066406 21.761719 41.5 C 21.761719 42.085938 21.710938 42.628906 21.601562 43.132812 C 21.496094 43.640625 21.285156 44.070312 20.972656 44.421875 C 20.660156 44.777344 20.214844 44.953125 19.636719 44.953125 Z M 19.636719 44.691406 C 20.011719 44.691406 20.289062 44.496094 20.476562 44.113281 C 20.660156 43.726562 20.777344 43.300781 20.820312 42.832031 C 20.863281 42.363281 20.882812 41.863281 20.882812 41.335938 C 20.882812 40.828125 20.863281 40.359375 20.820312 39.933594 C 20.777344 39.503906 20.664062 39.117188 20.480469 38.769531 C 20.296875 38.421875 20.015625 38.246094 19.636719 38.246094 C 19.253906 38.246094 18.96875 38.421875 18.785156 38.773438 C 18.601562 39.121094 18.488281 39.511719 18.445312 39.9375 C 18.402344 40.363281 18.382812 40.828125 18.382812 41.335938 C 18.382812 41.710938 18.390625 42.066406 18.40625 42.402344 C 18.425781 42.734375 18.472656 43.078125 18.550781 43.433594 C 18.628906 43.785156 18.757812 44.085938 18.933594 44.328125 C 19.113281 44.570312 19.347656 44.691406 19.636719 44.691406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 22.953125 44.175781 C 22.953125 44.019531 23.011719 43.890625 23.125 43.78125 C 23.238281 43.671875 23.367188 43.617188 23.511719 43.617188 C 23.605469 43.617188 23.699219 43.640625 23.785156 43.691406 C 23.878906 43.738281 23.945312 43.808594 23.996094 43.898438 C 24.042969 43.988281 24.070312 44.078125 24.070312 44.175781 C 24.070312 44.324219 24.015625 44.453125 23.90625 44.5625 C 23.792969 44.675781 23.664062 44.730469 23.511719 44.730469 C 23.367188 44.730469 23.238281 44.675781 23.125 44.5625 C 23.011719 44.453125 22.953125 44.324219 22.953125 44.175781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 27.414062 44.953125 C 26.585938 44.953125 26.023438 44.613281 25.726562 43.929688 C 25.429688 43.25 25.28125 42.4375 25.28125 41.5 C 25.28125 40.914062 25.335938 40.363281 25.441406 39.84375 C 25.546875 39.328125 25.757812 38.886719 26.078125 38.527344 C 26.394531 38.164062 26.839844 37.984375 27.414062 37.984375 C 27.863281 37.984375 28.226562 38.09375 28.507812 38.308594 C 28.792969 38.527344 29.007812 38.808594 29.15625 39.152344 C 29.304688 39.5 29.40625 39.867188 29.460938 40.261719 C 29.515625 40.652344 29.542969 41.066406 29.542969 41.5 C 29.542969 42.085938 29.488281 42.628906 29.382812 43.132812 C 29.273438 43.640625 29.066406 44.070312 28.753906 44.421875 C 28.441406 44.777344 27.996094 44.953125 27.414062 44.953125 Z M 27.414062 44.691406 C 27.789062 44.691406 28.070312 44.496094 28.257812 44.113281 C 28.441406 43.726562 28.558594 43.300781 28.601562 42.832031 C 28.644531 42.363281 28.664062 41.863281 28.664062 41.335938 C 28.664062 40.828125 28.644531 40.359375 28.601562 39.933594 C 28.558594 39.503906 28.445312 39.117188 28.261719 38.769531 C 28.078125 38.421875 27.792969 38.246094 27.414062 38.246094 C 27.03125 38.246094 26.75 38.421875 26.566406 38.773438 C 26.382812 39.121094 26.269531 39.511719 26.226562 39.9375 C 26.183594 40.363281 26.160156 40.828125 26.160156 41.335938 C 26.160156 41.710938 26.171875 42.066406 26.1875 42.402344 C 26.207031 42.734375 26.253906 43.078125 26.332031 43.433594 C 26.410156 43.785156 26.539062 44.085938 26.714844 44.328125 C 26.894531 44.570312 27.128906 44.691406 27.414062 44.691406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 32.417969 44.953125 C 32 44.953125 31.648438 44.84375 31.367188 44.621094 C 31.085938 44.398438 30.871094 44.109375 30.71875 43.753906 C 30.566406 43.402344 30.460938 43.03125 30.402344 42.640625 C 30.34375 42.253906 30.3125 41.855469 30.3125 41.453125 C 30.3125 40.921875 30.417969 40.390625 30.625 39.851562 C 30.832031 39.3125 31.136719 38.867188 31.542969 38.515625 C 31.945312 38.160156 32.421875 37.984375 32.972656 37.984375 C 33.207031 37.984375 33.421875 38.027344 33.621094 38.117188 C 33.824219 38.203125 33.980469 38.332031 34.09375 38.503906 C 34.207031 38.671875 34.265625 38.878906 34.265625 39.117188 C 34.265625 39.257812 34.21875 39.371094 34.125 39.46875 C 34.03125 39.5625 33.914062 39.609375 33.773438 39.609375 C 33.640625 39.609375 33.527344 39.558594 33.433594 39.464844 C 33.339844 39.367188 33.292969 39.253906 33.292969 39.117188 C 33.292969 38.988281 33.339844 38.875 33.433594 38.777344 C 33.527344 38.683594 33.640625 38.636719 33.773438 38.636719 L 33.824219 38.636719 C 33.742188 38.511719 33.621094 38.417969 33.464844 38.363281 C 33.304688 38.304688 33.144531 38.277344 32.972656 38.277344 C 32.773438 38.277344 32.582031 38.320312 32.410156 38.410156 C 32.234375 38.496094 32.078125 38.617188 31.941406 38.769531 C 31.804688 38.921875 31.691406 39.089844 31.597656 39.273438 C 31.503906 39.457031 31.429688 39.664062 31.378906 39.902344 C 31.328125 40.136719 31.296875 40.355469 31.285156 40.558594 C 31.269531 40.761719 31.261719 41.015625 31.261719 41.324219 C 31.382812 41.050781 31.554688 40.824219 31.769531 40.648438 C 31.988281 40.46875 32.230469 40.382812 32.507812 40.382812 C 32.804688 40.382812 33.082031 40.441406 33.328125 40.566406 C 33.578125 40.6875 33.789062 40.859375 33.96875 41.074219 C 34.144531 41.289062 34.28125 41.535156 34.375 41.8125 C 34.46875 42.089844 34.515625 42.371094 34.515625 42.65625 C 34.515625 43.050781 34.425781 43.425781 34.25 43.785156 C 34.070312 44.140625 33.824219 44.425781 33.503906 44.636719 C 33.1875 44.847656 32.824219 44.953125 32.417969 44.953125 Z M 32.417969 44.632812 C 32.679688 44.632812 32.890625 44.570312 33.046875 44.453125 C 33.207031 44.332031 33.324219 44.175781 33.398438 43.980469 C 33.472656 43.785156 33.515625 43.589844 33.535156 43.390625 C 33.550781 43.1875 33.5625 42.945312 33.5625 42.65625 C 33.5625 42.273438 33.542969 41.945312 33.503906 41.675781 C 33.46875 41.402344 33.371094 41.164062 33.210938 40.960938 C 33.046875 40.753906 32.800781 40.652344 32.464844 40.652344 C 32.191406 40.652344 31.964844 40.742188 31.789062 40.925781 C 31.613281 41.109375 31.488281 41.34375 31.40625 41.628906 C 31.328125 41.910156 31.285156 42.179688 31.285156 42.4375 C 31.285156 42.527344 31.289062 42.597656 31.292969 42.644531 C 31.292969 42.652344 31.292969 42.660156 31.292969 42.667969 C 31.292969 42.675781 31.289062 42.683594 31.285156 42.691406 C 31.285156 42.984375 31.316406 43.277344 31.375 43.574219 C 31.433594 43.867188 31.546875 44.117188 31.714844 44.324219 C 31.882812 44.527344 32.117188 44.632812 32.417969 44.632812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 19.636719 9.859375 C 18.804688 9.859375 18.242188 9.519531 17.945312 8.835938 C 17.648438 8.152344 17.5 7.34375 17.5 6.40625 C 17.5 5.820312 17.554688 5.269531 17.660156 4.75 C 17.765625 4.234375 17.976562 3.792969 18.296875 3.433594 C 18.613281 3.070312 19.0625 2.890625 19.636719 2.890625 C 20.082031 2.890625 20.445312 2.996094 20.726562 3.214844 C 21.011719 3.433594 21.226562 3.714844 21.375 4.058594 C 21.523438 4.40625 21.625 4.773438 21.679688 5.167969 C 21.734375 5.558594 21.761719 5.972656 21.761719 6.40625 C 21.761719 6.988281 21.710938 7.53125 21.601562 8.039062 C 21.496094 8.546875 21.285156 8.976562 20.972656 9.328125 C 20.660156 9.683594 20.214844 9.859375 19.636719 9.859375 Z M 19.636719 9.59375 C 20.011719 9.59375 20.289062 9.402344 20.476562 9.019531 C 20.660156 8.632812 20.777344 8.207031 20.820312 7.738281 C 20.863281 7.269531 20.882812 6.769531 20.882812 6.242188 C 20.882812 5.734375 20.863281 5.265625 20.820312 4.839844 C 20.777344 4.410156 20.664062 4.023438 20.480469 3.675781 C 20.296875 3.328125 20.015625 3.152344 19.636719 3.152344 C 19.253906 3.152344 18.96875 3.328125 18.785156 3.679688 C 18.601562 4.027344 18.488281 4.414062 18.445312 4.84375 C 18.402344 5.269531 18.382812 5.734375 18.382812 6.242188 C 18.382812 6.617188 18.390625 6.972656 18.40625 7.304688 C 18.425781 7.640625 18.472656 7.984375 18.550781 8.339844 C 18.628906 8.691406 18.757812 8.988281 18.933594 9.230469 C 19.113281 9.472656 19.347656 9.59375 19.636719 9.59375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 22.953125 9.078125 C 22.953125 8.925781 23.011719 8.796875 23.125 8.6875 C 23.238281 8.578125 23.367188 8.523438 23.511719 8.523438 C 23.605469 8.523438 23.699219 8.546875 23.785156 8.597656 C 23.878906 8.644531 23.945312 8.714844 23.996094 8.804688 C 24.042969 8.894531 24.070312 8.984375 24.070312 9.078125 C 24.070312 9.226562 24.015625 9.359375 23.90625 9.46875 C 23.792969 9.582031 23.664062 9.636719 23.511719 9.636719 C 23.367188 9.636719 23.238281 9.582031 23.125 9.46875 C 23.011719 9.359375 22.953125 9.226562 22.953125 9.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 27.414062 9.859375 C 26.585938 9.859375 26.023438 9.519531 25.726562 8.835938 C 25.429688 8.152344 25.28125 7.34375 25.28125 6.40625 C 25.28125 5.820312 25.335938 5.269531 25.441406 4.75 C 25.546875 4.234375 25.757812 3.792969 26.078125 3.433594 C 26.394531 3.070312 26.839844 2.890625 27.414062 2.890625 C 27.863281 2.890625 28.226562 2.996094 28.507812 3.214844 C 28.792969 3.433594 29.007812 3.714844 29.15625 4.058594 C 29.304688 4.40625 29.40625 4.773438 29.460938 5.167969 C 29.515625 5.558594 29.542969 5.972656 29.542969 6.40625 C 29.542969 6.988281 29.488281 7.53125 29.382812 8.039062 C 29.273438 8.546875 29.066406 8.976562 28.753906 9.328125 C 28.441406 9.683594 27.996094 9.859375 27.414062 9.859375 Z M 27.414062 9.59375 C 27.789062 9.59375 28.070312 9.402344 28.257812 9.019531 C 28.441406 8.632812 28.558594 8.207031 28.601562 7.738281 C 28.644531 7.269531 28.664062 6.769531 28.664062 6.242188 C 28.664062 5.734375 28.644531 5.265625 28.601562 4.839844 C 28.558594 4.410156 28.445312 4.023438 28.261719 3.675781 C 28.078125 3.328125 27.792969 3.152344 27.414062 3.152344 C 27.03125 3.152344 26.75 3.328125 26.566406 3.679688 C 26.382812 4.027344 26.269531 4.414062 26.226562 4.84375 C 26.183594 5.269531 26.160156 5.734375 26.160156 6.242188 C 26.160156 6.617188 26.171875 6.972656 26.1875 7.304688 C 26.207031 7.640625 26.253906 7.984375 26.332031 8.339844 C 26.410156 8.691406 26.539062 8.988281 26.714844 9.230469 C 26.894531 9.472656 27.128906 9.59375 27.414062 9.59375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 30.3125 8.101562 C 30.3125 7.695312 30.445312 7.335938 30.710938 7.023438 C 30.976562 6.710938 31.320312 6.449219 31.738281 6.242188 L 31.363281 6.003906 C 31.132812 5.851562 30.945312 5.648438 30.800781 5.394531 C 30.65625 5.144531 30.582031 4.878906 30.582031 4.601562 C 30.582031 4.277344 30.667969 3.984375 30.839844 3.726562 C 31.007812 3.464844 31.234375 3.261719 31.515625 3.113281 C 31.796875 2.964844 32.097656 2.890625 32.417969 2.890625 C 32.71875 2.890625 33.007812 2.953125 33.285156 3.074219 C 33.5625 3.199219 33.792969 3.371094 33.972656 3.597656 C 34.152344 3.824219 34.242188 4.09375 34.242188 4.40625 C 34.242188 4.632812 34.1875 4.847656 34.082031 5.039062 C 33.976562 5.234375 33.832031 5.410156 33.644531 5.566406 C 33.457031 5.71875 33.257812 5.851562 33.046875 5.960938 L 33.625 6.328125 C 33.890625 6.507812 34.105469 6.734375 34.269531 7.019531 C 34.433594 7.300781 34.515625 7.601562 34.515625 7.914062 C 34.515625 8.28125 34.417969 8.613281 34.21875 8.914062 C 34.023438 9.214844 33.761719 9.449219 33.441406 9.613281 C 33.117188 9.777344 32.777344 9.859375 32.417969 9.859375 C 32.070312 9.859375 31.734375 9.789062 31.40625 9.644531 C 31.082031 9.503906 30.816406 9.296875 30.617188 9.03125 C 30.414062 8.761719 30.3125 8.453125 30.3125 8.101562 Z M 30.859375 8.101562 C 30.859375 8.367188 30.929688 8.609375 31.078125 8.828125 C 31.226562 9.050781 31.417969 9.222656 31.660156 9.347656 C 31.902344 9.472656 32.15625 9.535156 32.417969 9.535156 C 32.808594 9.535156 33.164062 9.421875 33.484375 9.195312 C 33.804688 8.964844 33.964844 8.660156 33.964844 8.28125 C 33.964844 8.152344 33.941406 8.023438 33.890625 7.898438 C 33.839844 7.769531 33.769531 7.65625 33.679688 7.550781 C 33.589844 7.449219 33.488281 7.363281 33.375 7.296875 L 32.015625 6.417969 C 31.800781 6.527344 31.609375 6.667969 31.433594 6.839844 C 31.257812 7.011719 31.117188 7.207031 31.015625 7.421875 C 30.910156 7.636719 30.859375 7.863281 30.859375 8.101562 Z M 31.554688 5.003906 L 32.78125 5.796875 C 33.066406 5.632812 33.300781 5.433594 33.480469 5.199219 C 33.664062 4.964844 33.753906 4.699219 33.753906 4.40625 C 33.753906 4.179688 33.691406 3.972656 33.5625 3.785156 C 33.4375 3.59375 33.269531 3.445312 33.066406 3.339844 C 32.859375 3.234375 32.640625 3.183594 32.40625 3.183594 C 32.203125 3.183594 31.996094 3.222656 31.789062 3.300781 C 31.582031 3.378906 31.414062 3.496094 31.277344 3.65625 C 31.144531 3.8125 31.074219 3.996094 31.074219 4.210938 C 31.074219 4.523438 31.234375 4.789062 31.554688 5.003906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 150.792969 L 9.757812 150.792969 C 9.757812 150.046875 9.644531 149.675781 9.414062 149.675781 L 3.433594 149.675781 C 3.203125 149.675781 3.089844 150.046875 3.089844 150.792969 L 2.707031 150.792969 L 2.707031 147.382812 C 2.707031 146.972656 2.78125 146.542969 2.925781 146.09375 C 3.074219 145.648438 3.296875 145.273438 3.597656 144.972656 C 3.898438 144.671875 4.257812 144.523438 4.675781 144.523438 C 4.980469 144.523438 5.253906 144.613281 5.496094 144.792969 C 5.734375 144.976562 5.9375 145.210938 6.097656 145.496094 C 6.257812 145.78125 6.371094 146.070312 6.441406 146.367188 C 6.554688 146.042969 6.734375 145.761719 6.984375 145.515625 C 7.230469 145.269531 7.515625 145.125 7.835938 145.074219 L 8.804688 144.921875 C 9.238281 144.851562 9.5625 144.777344 9.777344 144.699219 C 9.992188 144.621094 10.097656 144.449219 10.097656 144.183594 C 10.097656 143.957031 9.992188 143.785156 9.78125 143.675781 C 9.570312 143.5625 9.339844 143.507812 9.089844 143.507812 C 9.066406 143.507812 9.046875 143.496094 9.027344 143.472656 C 9.007812 143.449219 8.996094 143.425781 8.996094 143.402344 L 8.996094 143.300781 C 8.996094 143.230469 9.046875 143.199219 9.144531 143.199219 C 9.339844 143.199219 9.53125 143.234375 9.722656 143.3125 C 9.910156 143.386719 10.070312 143.5 10.195312 143.648438 C 10.320312 143.796875 10.382812 143.972656 10.382812 144.171875 C 10.382812 144.695312 10.25 145.144531 9.992188 145.519531 C 9.730469 145.898438 9.347656 146.085938 8.84375 146.085938 L 7.878906 146.085938 C 7.515625 146.085938 7.203125 146.214844 6.945312 146.464844 C 6.6875 146.71875 6.558594 147.023438 6.558594 147.386719 L 6.558594 148.695312 L 9.414062 148.695312 C 9.644531 148.695312 9.757812 148.320312 9.757812 147.574219 L 10.140625 147.574219 Z M 6.277344 148.695312 L 6.277344 147.535156 C 6.277344 146.933594 6.15625 146.472656 5.914062 146.160156 C 5.671875 145.84375 5.261719 145.6875 4.675781 145.6875 C 4.101562 145.6875 3.695312 145.84375 3.453125 146.15625 C 3.210938 146.464844 3.089844 146.925781 3.089844 147.535156 L 3.089844 148.144531 C 3.089844 148.277344 3.09375 148.378906 3.105469 148.453125 C 3.117188 148.523438 3.148438 148.582031 3.199219 148.628906 C 3.25 148.671875 3.328125 148.695312 3.433594 148.695312 L 6.277344 148.695312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 140.335938 C 10.265625 140.769531 10.152344 141.175781 9.933594 141.546875 C 9.710938 141.921875 9.414062 142.214844 9.042969 142.429688 C 8.667969 142.644531 8.261719 142.753906 7.824219 142.753906 C 7.492188 142.753906 7.171875 142.695312 6.863281 142.578125 C 6.554688 142.460938 6.28125 142.289062 6.039062 142.066406 C 5.796875 141.84375 5.605469 141.585938 5.46875 141.292969 C 5.332031 141 5.261719 140.679688 5.261719 140.335938 C 5.261719 139.890625 5.382812 139.484375 5.617188 139.117188 C 5.855469 138.75 6.171875 138.460938 6.566406 138.246094 C 6.960938 138.035156 7.378906 137.925781 7.824219 137.925781 C 8.257812 137.925781 8.664062 138.035156 9.039062 138.253906 C 9.414062 138.46875 9.710938 138.761719 9.933594 139.132812 C 10.152344 139.503906 10.265625 139.902344 10.265625 140.335938 Z M 9.941406 140.335938 C 9.941406 139.753906 9.730469 139.367188 9.3125 139.171875 C 8.890625 138.980469 8.355469 138.882812 7.703125 138.882812 C 7.339844 138.882812 7.035156 138.902344 6.796875 138.941406 C 6.554688 138.980469 6.339844 139.066406 6.144531 139.195312 C 6.027344 139.277344 5.921875 139.378906 5.828125 139.503906 C 5.738281 139.628906 5.667969 139.761719 5.621094 139.902344 C 5.574219 140.042969 5.550781 140.1875 5.550781 140.335938 C 5.550781 140.5625 5.601562 140.777344 5.707031 140.980469 C 5.808594 141.183594 5.957031 141.355469 6.144531 141.492188 C 6.351562 141.625 6.578125 141.710938 6.824219 141.746094 C 7.070312 141.785156 7.363281 141.800781 7.703125 141.800781 C 8.109375 141.800781 8.472656 141.769531 8.796875 141.695312 C 9.121094 141.625 9.394531 141.484375 9.613281 141.269531 C 9.832031 141.054688 9.941406 140.742188 9.941406 140.335938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 8.832031 136.445312 L 5.832031 136.445312 L 5.832031 137.351562 L 5.550781 137.351562 C 5.550781 136.871094 5.328125 136.523438 4.886719 136.300781 C 4.441406 136.078125 3.960938 135.964844 3.445312 135.964844 L 3.445312 135.65625 L 5.449219 135.65625 L 5.449219 134.121094 L 5.832031 134.121094 L 5.832031 135.65625 L 8.808594 135.65625 C 9.109375 135.65625 9.375 135.605469 9.601562 135.503906 C 9.828125 135.402344 9.941406 135.21875 9.941406 134.957031 C 9.941406 134.707031 9.824219 134.527344 9.582031 134.417969 C 9.34375 134.308594 9.085938 134.253906 8.808594 134.253906 L 8.171875 134.253906 L 8.171875 133.945312 L 8.832031 133.945312 C 9.058594 133.945312 9.285156 133.984375 9.503906 134.066406 C 9.726562 134.148438 9.90625 134.273438 10.050781 134.4375 C 10.191406 134.601562 10.265625 134.800781 10.265625 135.035156 C 10.265625 135.46875 10.132812 135.8125 9.875 136.066406 C 9.613281 136.320312 9.265625 136.445312 8.832031 136.445312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 9.074219 132.84375 C 8.640625 132.84375 8.289062 132.671875 8.019531 132.332031 C 7.75 131.992188 7.558594 131.582031 7.445312 131.105469 C 7.335938 130.628906 7.28125 130.175781 7.28125 129.746094 L 6.828125 129.746094 C 6.621094 129.746094 6.417969 129.792969 6.222656 129.882812 C 6.023438 129.976562 5.863281 130.109375 5.738281 130.28125 C 5.613281 130.457031 5.550781 130.648438 5.550781 130.859375 C 5.550781 131.339844 5.660156 131.707031 5.875 131.957031 C 5.875 131.820312 5.925781 131.707031 6.03125 131.617188 C 6.136719 131.527344 6.257812 131.480469 6.394531 131.480469 C 6.539062 131.480469 6.664062 131.53125 6.765625 131.632812 C 6.871094 131.734375 6.921875 131.855469 6.921875 131.996094 C 6.921875 132.144531 6.871094 132.273438 6.765625 132.371094 C 6.664062 132.472656 6.539062 132.523438 6.394531 132.523438 C 6.011719 132.523438 5.726562 132.351562 5.542969 132.007812 C 5.355469 131.660156 5.261719 131.277344 5.261719 130.859375 C 5.261719 130.5625 5.324219 130.265625 5.449219 129.96875 C 5.574219 129.671875 5.757812 129.429688 5.988281 129.238281 C 6.226562 129.050781 6.5 128.957031 6.8125 128.957031 L 9.261719 128.957031 C 9.402344 128.957031 9.53125 128.925781 9.652344 128.863281 C 9.769531 128.804688 9.832031 128.710938 9.832031 128.585938 C 9.832031 128.464844 9.769531 128.375 9.648438 128.316406 C 9.527344 128.257812 9.398438 128.226562 9.261719 128.226562 L 8.5625 128.226562 L 8.5625 127.910156 L 9.261719 127.910156 C 9.421875 127.910156 9.574219 127.953125 9.722656 128.039062 C 9.867188 128.121094 9.984375 128.234375 10.074219 128.382812 C 10.160156 128.527344 10.207031 128.679688 10.207031 128.84375 C 10.207031 129.058594 10.121094 129.242188 9.957031 129.394531 C 9.792969 129.546875 9.597656 129.632812 9.371094 129.652344 C 9.640625 129.785156 9.859375 129.984375 10.019531 130.246094 C 10.183594 130.507812 10.265625 130.789062 10.265625 131.089844 C 10.265625 131.363281 10.222656 131.632812 10.140625 131.902344 C 10.058594 132.167969 9.929688 132.390625 9.753906 132.570312 C 9.578125 132.753906 9.351562 132.84375 9.074219 132.84375 Z M 9.074219 131.957031 C 9.328125 131.957031 9.542969 131.863281 9.714844 131.675781 C 9.890625 131.488281 9.976562 131.265625 9.976562 131.011719 C 9.976562 130.777344 9.917969 130.566406 9.800781 130.375 C 9.683594 130.183594 9.523438 130.03125 9.324219 129.917969 C 9.121094 129.804688 8.910156 129.746094 8.6875 129.746094 L 7.554688 129.746094 C 7.554688 130.078125 7.609375 130.417969 7.71875 130.761719 C 7.824219 131.105469 7.992188 131.390625 8.222656 131.617188 C 8.453125 131.84375 8.738281 131.957031 9.074219 131.957031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 8.832031 126.664062 L 5.832031 126.664062 L 5.832031 127.570312 L 5.550781 127.570312 C 5.550781 127.089844 5.328125 126.742188 4.886719 126.519531 C 4.441406 126.296875 3.960938 126.183594 3.445312 126.183594 L 3.445312 125.875 L 5.449219 125.875 L 5.449219 124.339844 L 5.832031 124.339844 L 5.832031 125.875 L 8.808594 125.875 C 9.109375 125.875 9.375 125.824219 9.601562 125.722656 C 9.828125 125.621094 9.941406 125.4375 9.941406 125.175781 C 9.941406 124.925781 9.824219 124.746094 9.582031 124.636719 C 9.34375 124.527344 9.085938 124.472656 8.808594 124.472656 L 8.171875 124.472656 L 8.171875 124.164062 L 8.832031 124.164062 C 9.058594 124.164062 9.285156 124.203125 9.503906 124.285156 C 9.726562 124.367188 9.90625 124.492188 10.050781 124.65625 C 10.191406 124.820312 10.265625 125.019531 10.265625 125.253906 C 10.265625 125.6875 10.132812 126.03125 9.875 126.285156 C 9.613281 126.539062 9.265625 126.664062 8.832031 126.664062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 123.160156 L 9.757812 123.160156 C 9.757812 122.910156 9.738281 122.707031 9.699219 122.546875 C 9.660156 122.390625 9.566406 122.308594 9.414062 122.308594 L 6.441406 122.308594 C 6.164062 122.308594 5.992188 122.363281 5.929688 122.472656 C 5.863281 122.578125 5.832031 122.792969 5.832031 123.113281 L 5.449219 123.113281 L 5.332031 121.542969 L 9.414062 121.542969 C 9.566406 121.542969 9.660156 121.472656 9.699219 121.335938 C 9.738281 121.199219 9.757812 121.015625 9.757812 120.785156 L 10.140625 120.785156 Z M 3.464844 122.695312 C 3.304688 122.695312 3.164062 122.636719 3.042969 122.515625 C 2.921875 122.394531 2.859375 122.257812 2.859375 122.105469 C 2.859375 122 2.886719 121.898438 2.941406 121.800781 C 2.996094 121.707031 3.074219 121.632812 3.167969 121.582031 C 3.265625 121.527344 3.363281 121.5 3.464844 121.5 C 3.621094 121.5 3.757812 121.5625 3.878906 121.683594 C 3.996094 121.804688 4.054688 121.945312 4.054688 122.105469 C 4.054688 122.257812 3.996094 122.394531 3.878906 122.515625 C 3.757812 122.636719 3.621094 122.695312 3.464844 122.695312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 117.71875 C 10.265625 118.152344 10.152344 118.554688 9.933594 118.925781 C 9.710938 119.300781 9.414062 119.59375 9.042969 119.808594 C 8.667969 120.023438 8.261719 120.132812 7.824219 120.132812 C 7.492188 120.132812 7.171875 120.074219 6.863281 119.957031 C 6.554688 119.839844 6.28125 119.667969 6.039062 119.445312 C 5.796875 119.222656 5.605469 118.964844 5.46875 118.671875 C 5.332031 118.378906 5.261719 118.0625 5.261719 117.71875 C 5.261719 117.273438 5.382812 116.867188 5.617188 116.5 C 5.855469 116.132812 6.171875 115.839844 6.566406 115.628906 C 6.960938 115.414062 7.378906 115.308594 7.824219 115.308594 C 8.257812 115.308594 8.664062 115.417969 9.039062 115.632812 C 9.414062 115.851562 9.710938 116.144531 9.933594 116.511719 C 10.152344 116.882812 10.265625 117.285156 10.265625 117.71875 Z M 9.941406 117.71875 C 9.941406 117.136719 9.730469 116.746094 9.3125 116.554688 C 8.890625 116.359375 8.355469 116.265625 7.703125 116.265625 C 7.339844 116.265625 7.035156 116.285156 6.796875 116.324219 C 6.554688 116.359375 6.339844 116.445312 6.144531 116.574219 C 6.027344 116.65625 5.921875 116.761719 5.828125 116.886719 C 5.738281 117.011719 5.667969 117.144531 5.621094 117.285156 C 5.574219 117.425781 5.550781 117.570312 5.550781 117.71875 C 5.550781 117.945312 5.601562 118.160156 5.707031 118.363281 C 5.808594 118.566406 5.957031 118.734375 6.144531 118.871094 C 6.351562 119.003906 6.578125 119.089844 6.824219 119.128906 C 7.070312 119.164062 7.363281 119.183594 7.703125 119.183594 C 8.109375 119.183594 8.472656 119.148438 8.796875 119.078125 C 9.121094 119.007812 9.394531 118.863281 9.613281 118.648438 C 9.832031 118.433594 9.941406 118.125 9.941406 117.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 114.613281 L 9.757812 114.613281 C 9.757812 114.363281 9.738281 114.160156 9.699219 114 C 9.660156 113.84375 9.566406 113.761719 9.414062 113.761719 L 6.441406 113.761719 C 6.246094 113.761719 6.105469 113.792969 6.019531 113.851562 C 5.933594 113.910156 5.882812 113.992188 5.863281 114.101562 C 5.84375 114.210938 5.832031 114.382812 5.832031 114.613281 L 5.449219 114.613281 L 5.332031 113.035156 L 6.394531 113.035156 C 6.082031 112.886719 5.828125 112.671875 5.628906 112.386719 C 5.433594 112.101562 5.332031 111.789062 5.332031 111.453125 C 5.332031 110.953125 5.453125 110.578125 5.695312 110.324219 C 5.933594 110.070312 6.304688 109.941406 6.800781 109.941406 L 9.414062 109.941406 C 9.566406 109.941406 9.660156 109.863281 9.699219 109.703125 C 9.738281 109.546875 9.757812 109.339844 9.757812 109.089844 L 10.140625 109.089844 L 10.140625 111.582031 L 9.757812 111.582031 C 9.757812 111.335938 9.738281 111.132812 9.699219 110.972656 C 9.660156 110.8125 9.566406 110.730469 9.414062 110.730469 L 6.828125 110.730469 C 6.476562 110.730469 6.1875 110.785156 5.957031 110.886719 C 5.730469 110.992188 5.613281 111.203125 5.613281 111.519531 C 5.613281 111.941406 5.78125 112.285156 6.121094 112.558594 C 6.457031 112.832031 6.839844 112.964844 7.269531 112.964844 L 9.414062 112.964844 C 9.566406 112.964844 9.660156 112.886719 9.699219 112.726562 C 9.738281 112.566406 9.757812 112.363281 9.757812 112.121094 L 10.140625 112.121094 L 10.140625 114.613281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 9.074219 108.386719 C 8.640625 108.386719 8.289062 108.21875 8.019531 107.878906 C 7.75 107.539062 7.558594 107.128906 7.445312 106.652344 C 7.335938 106.175781 7.28125 105.722656 7.28125 105.292969 L 6.828125 105.292969 C 6.621094 105.292969 6.417969 105.339844 6.222656 105.429688 C 6.023438 105.523438 5.863281 105.65625 5.738281 105.828125 C 5.613281 106.003906 5.550781 106.195312 5.550781 106.40625 C 5.550781 106.886719 5.660156 107.253906 5.875 107.503906 C 5.875 107.367188 5.925781 107.253906 6.03125 107.164062 C 6.136719 107.074219 6.257812 107.027344 6.394531 107.027344 C 6.539062 107.027344 6.664062 107.078125 6.765625 107.179688 C 6.871094 107.28125 6.921875 107.402344 6.921875 107.542969 C 6.921875 107.691406 6.871094 107.816406 6.765625 107.917969 C 6.664062 108.019531 6.539062 108.070312 6.394531 108.070312 C 6.011719 108.070312 5.726562 107.898438 5.542969 107.550781 C 5.355469 107.207031 5.261719 106.824219 5.261719 106.40625 C 5.261719 106.109375 5.324219 105.8125 5.449219 105.515625 C 5.574219 105.21875 5.757812 104.976562 5.988281 104.785156 C 6.226562 104.597656 6.5 104.503906 6.8125 104.503906 L 9.261719 104.503906 C 9.402344 104.503906 9.53125 104.472656 9.652344 104.410156 C 9.769531 104.351562 9.832031 104.257812 9.832031 104.132812 C 9.832031 104.011719 9.769531 103.921875 9.648438 103.863281 C 9.527344 103.804688 9.398438 103.773438 9.261719 103.773438 L 8.5625 103.773438 L 8.5625 103.457031 L 9.261719 103.457031 C 9.421875 103.457031 9.574219 103.5 9.722656 103.585938 C 9.867188 103.667969 9.984375 103.78125 10.074219 103.925781 C 10.160156 104.070312 10.207031 104.226562 10.207031 104.390625 C 10.207031 104.605469 10.121094 104.789062 9.957031 104.941406 C 9.792969 105.09375 9.597656 105.179688 9.371094 105.199219 C 9.640625 105.332031 9.859375 105.53125 10.019531 105.792969 C 10.183594 106.054688 10.265625 106.335938 10.265625 106.636719 C 10.265625 106.910156 10.222656 107.179688 10.140625 107.449219 C 10.058594 107.714844 9.929688 107.9375 9.753906 108.117188 C 9.578125 108.296875 9.351562 108.386719 9.074219 108.386719 Z M 9.074219 107.503906 C 9.328125 107.503906 9.542969 107.410156 9.714844 107.222656 C 9.890625 107.035156 9.976562 106.8125 9.976562 106.558594 C 9.976562 106.324219 9.917969 106.113281 9.800781 105.921875 C 9.683594 105.730469 9.523438 105.578125 9.324219 105.464844 C 9.121094 105.347656 8.910156 105.292969 8.6875 105.292969 L 7.554688 105.292969 C 7.554688 105.625 7.609375 105.964844 7.71875 106.308594 C 7.824219 106.652344 7.992188 106.9375 8.222656 107.164062 C 8.453125 107.390625 8.738281 107.503906 9.074219 107.503906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 102.984375 L 9.757812 102.984375 C 9.757812 102.734375 9.738281 102.53125 9.699219 102.375 C 9.660156 102.214844 9.566406 102.136719 9.414062 102.136719 L 3.703125 102.136719 C 3.507812 102.136719 3.367188 102.164062 3.28125 102.222656 C 3.191406 102.28125 3.136719 102.367188 3.117188 102.476562 C 3.097656 102.585938 3.089844 102.753906 3.089844 102.984375 L 2.707031 102.984375 L 2.589844 101.367188 L 9.414062 101.367188 C 9.566406 101.367188 9.660156 101.289062 9.699219 101.128906 C 9.738281 100.972656 9.757812 100.769531 9.757812 100.523438 L 10.140625 100.523438 L 10.140625 102.984375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.167969 96.230469 L 8.398438 96.230469 C 8.339844 96.230469 8.3125 96.199219 8.3125 96.136719 L 8.3125 96.003906 C 8.3125 95.964844 8.339844 95.9375 8.398438 95.921875 C 9.449219 95.71875 9.976562 95.230469 9.976562 94.457031 C 9.976562 94.113281 9.898438 93.824219 9.742188 93.589844 C 9.585938 93.359375 9.34375 93.242188 9.019531 93.242188 C 8.785156 93.242188 8.585938 93.332031 8.421875 93.515625 C 8.257812 93.695312 8.144531 93.910156 8.082031 94.15625 L 7.941406 94.882812 C 7.886719 95.128906 7.804688 95.351562 7.695312 95.550781 C 7.585938 95.75 7.441406 95.914062 7.257812 96.042969 C 7.078125 96.167969 6.867188 96.230469 6.625 96.230469 C 6.304688 96.230469 6.042969 96.148438 5.835938 95.980469 C 5.636719 95.8125 5.488281 95.59375 5.398438 95.324219 C 5.308594 95.058594 5.261719 94.769531 5.261719 94.457031 C 5.261719 94.085938 5.363281 93.761719 5.5625 93.480469 L 5.292969 93.164062 C 5.273438 93.164062 5.261719 93.148438 5.261719 93.113281 L 5.261719 93.035156 C 5.261719 93.015625 5.273438 92.992188 5.292969 92.976562 C 5.3125 92.957031 5.332031 92.949219 5.351562 92.949219 L 6.777344 92.949219 C 6.847656 92.949219 6.882812 92.976562 6.882812 93.035156 L 6.882812 93.164062 C 6.882812 93.230469 6.847656 93.265625 6.777344 93.265625 C 6.398438 93.265625 6.09375 93.371094 5.863281 93.582031 C 5.636719 93.792969 5.519531 94.089844 5.519531 94.46875 C 5.519531 94.792969 5.582031 95.074219 5.699219 95.3125 C 5.820312 95.550781 6.027344 95.667969 6.320312 95.667969 C 6.523438 95.667969 6.6875 95.582031 6.816406 95.410156 C 6.945312 95.238281 7.039062 95.039062 7.097656 94.808594 L 7.234375 94.074219 C 7.292969 93.824219 7.386719 93.59375 7.523438 93.378906 C 7.65625 93.160156 7.828125 92.992188 8.03125 92.867188 C 8.238281 92.742188 8.46875 92.679688 8.726562 92.679688 C 8.988281 92.679688 9.21875 92.722656 9.410156 92.816406 C 9.605469 92.90625 9.765625 93.03125 9.890625 93.191406 C 10.019531 93.355469 10.113281 93.542969 10.171875 93.765625 C 10.234375 93.984375 10.265625 94.214844 10.265625 94.457031 C 10.265625 94.910156 10.109375 95.296875 9.804688 95.617188 L 10.234375 96.015625 C 10.253906 96.015625 10.265625 96.035156 10.265625 96.074219 L 10.265625 96.136719 C 10.265625 96.199219 10.230469 96.230469 10.167969 96.230469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 8.832031 91.148438 L 5.832031 91.148438 L 5.832031 92.050781 L 5.550781 92.050781 C 5.550781 91.574219 5.328125 91.222656 4.886719 91 C 4.441406 90.777344 3.960938 90.664062 3.445312 90.664062 L 3.445312 90.355469 L 5.449219 90.355469 L 5.449219 88.820312 L 5.832031 88.820312 L 5.832031 90.355469 L 8.808594 90.355469 C 9.109375 90.355469 9.375 90.304688 9.601562 90.203125 C 9.828125 90.101562 9.941406 89.917969 9.941406 89.65625 C 9.941406 89.40625 9.824219 89.226562 9.582031 89.117188 C 9.34375 89.007812 9.085938 88.953125 8.808594 88.953125 L 8.171875 88.953125 L 8.171875 88.644531 L 8.832031 88.644531 C 9.058594 88.644531 9.285156 88.683594 9.503906 88.765625 C 9.726562 88.847656 9.90625 88.972656 10.050781 89.136719 C 10.191406 89.300781 10.265625 89.5 10.265625 89.734375 C 10.265625 90.167969 10.132812 90.511719 9.875 90.765625 C 9.613281 91.019531 9.265625 91.148438 8.832031 91.148438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 87.640625 L 9.757812 87.640625 C 9.757812 87.390625 9.738281 87.1875 9.699219 87.027344 C 9.660156 86.871094 9.566406 86.789062 9.414062 86.789062 L 6.441406 86.789062 C 6.164062 86.789062 5.992188 86.84375 5.929688 86.953125 C 5.863281 87.058594 5.832031 87.273438 5.832031 87.59375 L 5.449219 87.59375 L 5.332031 86.023438 L 9.414062 86.023438 C 9.566406 86.023438 9.660156 85.953125 9.699219 85.816406 C 9.738281 85.679688 9.757812 85.496094 9.757812 85.265625 L 10.140625 85.265625 Z M 3.464844 87.175781 C 3.304688 87.175781 3.164062 87.117188 3.042969 86.996094 C 2.921875 86.875 2.859375 86.738281 2.859375 86.585938 C 2.859375 86.480469 2.886719 86.378906 2.941406 86.285156 C 2.996094 86.1875 3.074219 86.113281 3.167969 86.0625 C 3.265625 86.007812 3.363281 85.980469 3.464844 85.980469 C 3.621094 85.980469 3.757812 86.042969 3.878906 86.164062 C 3.996094 86.285156 4.054688 86.425781 4.054688 86.585938 C 4.054688 86.738281 3.996094 86.875 3.878906 86.996094 C 3.757812 87.117188 3.621094 87.175781 3.464844 87.175781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 84.636719 L 9.757812 84.636719 C 9.757812 84.390625 9.738281 84.1875 9.699219 84.027344 C 9.660156 83.867188 9.566406 83.785156 9.414062 83.785156 L 5.832031 83.785156 L 5.832031 84.625 L 5.449219 84.625 L 5.449219 83.785156 L 4.148438 83.785156 C 3.875 83.785156 3.632812 83.710938 3.417969 83.554688 C 3.203125 83.402344 3.027344 83.203125 2.890625 82.964844 C 2.753906 82.726562 2.648438 82.46875 2.574219 82.191406 C 2.503906 81.910156 2.46875 81.640625 2.46875 81.378906 C 2.46875 81.152344 2.503906 80.933594 2.578125 80.722656 C 2.652344 80.515625 2.773438 80.351562 2.9375 80.230469 C 2.625 79.886719 2.46875 79.476562 2.46875 78.996094 C 2.46875 78.757812 2.542969 78.535156 2.6875 78.339844 C 2.835938 78.140625 3.027344 78.042969 3.265625 78.042969 C 3.40625 78.042969 3.523438 78.089844 3.617188 78.183594 C 3.710938 78.277344 3.757812 78.394531 3.757812 78.535156 C 3.757812 78.671875 3.710938 78.789062 3.617188 78.886719 C 3.523438 78.984375 3.40625 79.035156 3.265625 79.035156 C 3.039062 79.035156 2.886719 78.9375 2.808594 78.738281 C 2.769531 78.855469 2.75 78.960938 2.75 79.050781 C 2.75 79.265625 2.824219 79.449219 2.976562 79.601562 C 3.125 79.753906 3.308594 79.867188 3.527344 79.945312 C 3.742188 80.019531 3.957031 80.058594 4.167969 80.058594 L 5.449219 80.058594 L 5.449219 78.792969 L 5.832031 78.792969 L 5.832031 80.019531 L 9.414062 80.019531 C 9.5625 80.019531 9.65625 79.914062 9.699219 79.703125 C 9.738281 79.492188 9.757812 79.246094 9.757812 78.96875 L 10.140625 78.96875 L 10.140625 81.636719 L 9.757812 81.636719 C 9.757812 81.386719 9.738281 81.179688 9.699219 81.023438 C 9.660156 80.863281 9.566406 80.785156 9.414062 80.785156 L 5.832031 80.785156 L 5.832031 83.023438 L 9.414062 83.023438 C 9.566406 83.023438 9.660156 82.945312 9.699219 82.785156 C 9.738281 82.625 9.757812 82.421875 9.757812 82.175781 L 10.140625 82.175781 Z M 5.449219 83.058594 L 5.449219 80.785156 L 4.148438 80.785156 C 4.082031 80.785156 3.992188 80.777344 3.875 80.761719 C 3.78125 80.957031 3.628906 81.054688 3.417969 81.054688 C 3.300781 81.054688 3.199219 81.023438 3.109375 80.957031 C 3.019531 80.890625 2.964844 80.800781 2.9375 80.6875 C 2.8125 80.890625 2.75 81.152344 2.75 81.472656 C 2.75 81.738281 2.8125 81.992188 2.933594 82.238281 C 3.054688 82.484375 3.226562 82.683594 3.445312 82.835938 C 3.660156 82.984375 3.902344 83.058594 4.167969 83.058594 L 5.449219 83.058594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 78.175781 L 9.757812 78.175781 C 9.757812 77.925781 9.738281 77.722656 9.699219 77.5625 C 9.660156 77.40625 9.566406 77.328125 9.414062 77.328125 L 6.441406 77.328125 C 6.246094 77.328125 6.105469 77.355469 6.019531 77.414062 C 5.933594 77.472656 5.882812 77.558594 5.863281 77.667969 C 5.84375 77.777344 5.832031 77.945312 5.832031 78.175781 L 5.449219 78.175781 L 5.332031 76.601562 L 6.394531 76.601562 C 6.082031 76.453125 5.828125 76.234375 5.628906 75.949219 C 5.433594 75.664062 5.332031 75.355469 5.332031 75.019531 C 5.332031 74.519531 5.453125 74.140625 5.695312 73.886719 C 5.933594 73.632812 6.304688 73.503906 6.800781 73.503906 L 9.414062 73.503906 C 9.566406 73.503906 9.660156 73.425781 9.699219 73.269531 C 9.738281 73.109375 9.757812 72.90625 9.757812 72.65625 L 10.140625 72.65625 L 10.140625 75.144531 L 9.757812 75.144531 C 9.757812 74.898438 9.738281 74.695312 9.699219 74.535156 C 9.660156 74.378906 9.566406 74.296875 9.414062 74.296875 L 6.828125 74.296875 C 6.476562 74.296875 6.1875 74.347656 5.957031 74.453125 C 5.730469 74.554688 5.613281 74.765625 5.613281 75.082031 C 5.613281 75.503906 5.78125 75.851562 6.121094 76.121094 C 6.457031 76.394531 6.839844 76.53125 7.269531 76.53125 L 9.414062 76.53125 C 9.566406 76.53125 9.660156 76.449219 9.699219 76.289062 C 9.738281 76.128906 9.757812 75.929688 9.757812 75.6875 L 10.140625 75.6875 L 10.140625 78.175781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 69.679688 C 10.265625 70.121094 10.148438 70.523438 9.914062 70.894531 C 9.683594 71.265625 9.371094 71.554688 8.984375 71.765625 C 8.597656 71.976562 8.1875 72.082031 7.753906 72.082031 C 7.328125 72.082031 6.925781 71.984375 6.542969 71.792969 C 6.164062 71.601562 5.855469 71.335938 5.617188 70.988281 C 5.382812 70.640625 5.261719 70.257812 5.261719 69.828125 C 5.261719 69.496094 5.320312 69.210938 5.429688 68.964844 C 5.542969 68.714844 5.699219 68.511719 5.894531 68.355469 C 6.09375 68.191406 6.328125 68.074219 6.597656 67.992188 C 6.863281 67.910156 7.160156 67.871094 7.484375 67.871094 C 7.578125 67.871094 7.625 67.910156 7.625 67.984375 L 7.625 71.132812 L 7.742188 71.132812 C 8.34375 71.132812 8.863281 71.011719 9.292969 70.769531 C 9.726562 70.527344 9.941406 70.128906 9.941406 69.578125 C 9.941406 69.355469 9.894531 69.148438 9.792969 68.960938 C 9.695312 68.769531 9.558594 68.605469 9.382812 68.46875 C 9.203125 68.328125 9.011719 68.234375 8.808594 68.183594 C 8.785156 68.175781 8.765625 68.160156 8.746094 68.140625 C 8.726562 68.121094 8.714844 68.101562 8.714844 68.078125 L 8.714844 67.984375 C 8.714844 67.910156 8.761719 67.871094 8.855469 67.871094 C 9.265625 67.972656 9.605469 68.195312 9.867188 68.535156 C 10.132812 68.875 10.265625 69.257812 10.265625 69.679688 Z M 7.355469 71.121094 L 7.355469 68.640625 C 7.082031 68.640625 6.804688 68.679688 6.527344 68.753906 C 6.246094 68.832031 6.015625 68.957031 5.828125 69.136719 C 5.644531 69.3125 5.550781 69.546875 5.550781 69.828125 C 5.550781 70.242188 5.742188 70.558594 6.128906 70.78125 C 6.511719 71.007812 6.921875 71.121094 7.355469 71.121094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.167969 67.132812 L 8.398438 67.132812 C 8.339844 67.132812 8.3125 67.101562 8.3125 67.039062 L 8.3125 66.902344 C 8.3125 66.863281 8.339844 66.835938 8.398438 66.820312 C 9.449219 66.617188 9.976562 66.128906 9.976562 65.355469 C 9.976562 65.011719 9.898438 64.722656 9.742188 64.492188 C 9.585938 64.257812 9.34375 64.140625 9.019531 64.140625 C 8.785156 64.140625 8.585938 64.234375 8.421875 64.414062 C 8.257812 64.597656 8.144531 64.8125 8.082031 65.058594 L 7.941406 65.785156 C 7.886719 66.03125 7.804688 66.253906 7.695312 66.453125 C 7.585938 66.652344 7.441406 66.8125 7.257812 66.941406 C 7.078125 67.066406 6.867188 67.132812 6.625 67.132812 C 6.304688 67.132812 6.042969 67.046875 5.835938 66.878906 C 5.636719 66.710938 5.488281 66.492188 5.398438 66.226562 C 5.308594 65.960938 5.261719 65.667969 5.261719 65.355469 C 5.261719 64.984375 5.363281 64.660156 5.5625 64.382812 L 5.292969 64.066406 C 5.273438 64.066406 5.261719 64.046875 5.261719 64.011719 L 5.261719 63.9375 C 5.261719 63.914062 5.273438 63.894531 5.292969 63.875 C 5.3125 63.859375 5.332031 63.847656 5.351562 63.847656 L 6.777344 63.847656 C 6.847656 63.847656 6.882812 63.878906 6.882812 63.9375 L 6.882812 64.066406 C 6.882812 64.132812 6.847656 64.164062 6.777344 64.164062 C 6.398438 64.164062 6.09375 64.269531 5.863281 64.480469 C 5.636719 64.691406 5.519531 64.988281 5.519531 65.367188 C 5.519531 65.691406 5.582031 65.972656 5.699219 66.210938 C 5.820312 66.449219 6.027344 66.570312 6.320312 66.570312 C 6.523438 66.570312 6.6875 66.484375 6.816406 66.3125 C 6.945312 66.140625 7.039062 65.9375 7.097656 65.707031 L 7.234375 64.976562 C 7.292969 64.726562 7.386719 64.492188 7.523438 64.277344 C 7.65625 64.0625 7.828125 63.890625 8.03125 63.765625 C 8.238281 63.640625 8.46875 63.578125 8.726562 63.578125 C 8.988281 63.578125 9.21875 63.625 9.410156 63.714844 C 9.605469 63.804688 9.765625 63.929688 9.890625 64.09375 C 10.019531 64.253906 10.113281 64.445312 10.171875 64.664062 C 10.234375 64.882812 10.265625 65.113281 10.265625 65.355469 C 10.265625 65.808594 10.109375 66.195312 9.804688 66.515625 L 10.234375 66.914062 C 10.253906 66.914062 10.265625 66.933594 10.265625 66.972656 L 10.265625 67.039062 C 10.265625 67.101562 10.230469 67.132812 10.167969 67.132812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 12.859375 58.203125 L 1.980469 58.203125 L 1.980469 56.714844 L 2.414062 56.714844 L 2.414062 57.765625 L 12.425781 57.765625 L 12.425781 56.714844 L 12.859375 56.714844 L 12.859375 58.203125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 56.109375 L 9.757812 56.109375 C 9.757812 55.855469 9.738281 55.652344 9.699219 55.496094 C 9.660156 55.335938 9.566406 55.257812 9.414062 55.257812 L 6.441406 55.257812 C 6.246094 55.257812 6.105469 55.285156 6.019531 55.347656 C 5.933594 55.402344 5.882812 55.488281 5.863281 55.597656 C 5.84375 55.707031 5.832031 55.878906 5.832031 56.109375 L 5.449219 56.109375 L 5.332031 54.53125 L 6.394531 54.53125 C 6.082031 54.382812 5.828125 54.164062 5.628906 53.878906 C 5.433594 53.59375 5.332031 53.285156 5.332031 52.949219 C 5.332031 52.449219 5.453125 52.070312 5.695312 51.816406 C 5.933594 51.5625 6.304688 51.4375 6.800781 51.4375 L 9.414062 51.4375 C 9.566406 51.4375 9.660156 51.355469 9.699219 51.199219 C 9.738281 51.039062 9.757812 50.835938 9.757812 50.585938 L 10.140625 50.585938 L 10.140625 53.078125 L 9.757812 53.078125 C 9.757812 52.832031 9.738281 52.628906 9.699219 52.46875 C 9.660156 52.308594 9.566406 52.226562 9.414062 52.226562 L 6.828125 52.226562 C 6.476562 52.226562 6.1875 52.277344 5.957031 52.382812 C 5.730469 52.484375 5.613281 52.695312 5.613281 53.011719 C 5.613281 53.433594 5.78125 53.78125 6.121094 54.054688 C 6.457031 54.324219 6.839844 54.460938 7.269531 54.460938 L 9.414062 54.460938 C 9.566406 54.460938 9.660156 54.378906 9.699219 54.21875 C 9.738281 54.058594 9.757812 53.859375 9.757812 53.617188 L 10.140625 53.617188 L 10.140625 56.109375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 47.597656 C 10.265625 48.03125 10.152344 48.433594 9.933594 48.808594 C 9.710938 49.179688 9.414062 49.476562 9.042969 49.6875 C 8.667969 49.902344 8.261719 50.011719 7.824219 50.011719 C 7.492188 50.011719 7.171875 49.953125 6.863281 49.835938 C 6.554688 49.71875 6.28125 49.550781 6.039062 49.324219 C 5.796875 49.101562 5.605469 48.84375 5.46875 48.550781 C 5.332031 48.257812 5.261719 47.941406 5.261719 47.597656 C 5.261719 47.152344 5.382812 46.746094 5.617188 46.378906 C 5.855469 46.011719 6.171875 45.71875 6.566406 45.507812 C 6.960938 45.292969 7.378906 45.1875 7.824219 45.1875 C 8.257812 45.1875 8.664062 45.296875 9.039062 45.511719 C 9.414062 45.730469 9.710938 46.023438 9.933594 46.390625 C 10.152344 46.761719 10.265625 47.164062 10.265625 47.597656 Z M 9.941406 47.597656 C 9.941406 47.015625 9.730469 46.628906 9.3125 46.433594 C 8.890625 46.238281 8.355469 46.144531 7.703125 46.144531 C 7.339844 46.144531 7.035156 46.160156 6.796875 46.203125 C 6.554688 46.242188 6.339844 46.324219 6.144531 46.453125 C 6.027344 46.535156 5.921875 46.640625 5.828125 46.765625 C 5.738281 46.890625 5.667969 47.023438 5.621094 47.164062 C 5.574219 47.304688 5.550781 47.449219 5.550781 47.597656 C 5.550781 47.824219 5.601562 48.039062 5.707031 48.242188 C 5.808594 48.445312 5.957031 48.613281 6.144531 48.753906 C 6.351562 48.882812 6.578125 48.96875 6.824219 49.007812 C 7.070312 49.042969 7.363281 49.0625 7.703125 49.0625 C 8.109375 49.0625 8.472656 49.027344 8.796875 48.957031 C 9.121094 48.886719 9.394531 48.742188 9.613281 48.527344 C 9.832031 48.3125 9.941406 48.003906 9.941406 47.597656 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 44.53125 L 9.757812 44.53125 C 9.757812 44.285156 9.738281 44.085938 9.699219 43.921875 C 9.660156 43.761719 9.566406 43.683594 9.414062 43.683594 L 6.441406 43.683594 C 6.246094 43.683594 6.105469 43.710938 6.019531 43.769531 C 5.933594 43.828125 5.882812 43.914062 5.863281 44.023438 C 5.84375 44.132812 5.832031 44.300781 5.832031 44.53125 L 5.449219 44.53125 L 5.332031 42.972656 L 6.394531 42.972656 C 6.078125 42.859375 5.824219 42.695312 5.628906 42.480469 C 5.429688 42.261719 5.332031 42 5.332031 41.691406 C 5.332031 41.476562 5.398438 41.28125 5.523438 41.113281 C 5.652344 40.941406 5.820312 40.859375 6.03125 40.859375 C 6.160156 40.859375 6.273438 40.90625 6.371094 40.996094 C 6.46875 41.09375 6.519531 41.207031 6.519531 41.34375 C 6.519531 41.480469 6.46875 41.597656 6.375 41.691406 C 6.277344 41.789062 6.164062 41.835938 6.03125 41.835938 C 5.835938 41.835938 5.699219 41.765625 5.613281 41.625 L 5.613281 41.691406 C 5.613281 41.984375 5.722656 42.222656 5.933594 42.40625 C 6.148438 42.59375 6.410156 42.726562 6.726562 42.804688 C 7.039062 42.882812 7.339844 42.921875 7.625 42.921875 L 9.414062 42.921875 C 9.644531 42.921875 9.757812 42.570312 9.757812 41.867188 L 10.140625 41.867188 L 10.140625 44.53125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 40.183594 L 9.757812 40.183594 C 9.757812 39.933594 9.738281 39.726562 9.699219 39.570312 C 9.660156 39.410156 9.566406 39.332031 9.414062 39.332031 L 6.441406 39.332031 C 6.246094 39.332031 6.105469 39.359375 6.019531 39.421875 C 5.933594 39.480469 5.882812 39.5625 5.863281 39.671875 C 5.84375 39.78125 5.832031 39.953125 5.832031 40.183594 L 5.449219 40.183594 L 5.332031 38.605469 L 6.394531 38.605469 C 6.082031 38.457031 5.828125 38.238281 5.628906 37.953125 C 5.433594 37.671875 5.332031 37.359375 5.332031 37.023438 C 5.332031 36.191406 5.675781 35.699219 6.355469 35.550781 C 6.050781 35.40625 5.800781 35.195312 5.613281 34.914062 C 5.425781 34.636719 5.332031 34.328125 5.332031 33.996094 C 5.332031 33.671875 5.386719 33.394531 5.492188 33.164062 C 5.597656 32.9375 5.761719 32.769531 5.980469 32.65625 C 6.199219 32.542969 6.472656 32.484375 6.800781 32.484375 L 9.414062 32.484375 C 9.566406 32.484375 9.660156 32.40625 9.699219 32.246094 C 9.738281 32.085938 9.757812 31.882812 9.757812 31.636719 L 10.140625 31.636719 L 10.140625 34.128906 L 9.757812 34.128906 C 9.757812 33.882812 9.738281 33.679688 9.699219 33.519531 C 9.660156 33.355469 9.566406 33.277344 9.414062 33.277344 L 6.828125 33.277344 C 6.464844 33.277344 6.171875 33.328125 5.949219 33.433594 C 5.726562 33.535156 5.613281 33.746094 5.613281 34.066406 C 5.613281 34.488281 5.78125 34.832031 6.121094 35.101562 C 6.457031 35.375 6.839844 35.511719 7.269531 35.511719 L 9.414062 35.511719 C 9.566406 35.511719 9.660156 35.429688 9.699219 35.273438 C 9.738281 35.113281 9.757812 34.910156 9.757812 34.660156 L 10.140625 34.660156 L 10.140625 37.152344 L 9.757812 37.152344 C 9.757812 36.90625 9.738281 36.703125 9.699219 36.542969 C 9.660156 36.382812 9.566406 36.300781 9.414062 36.300781 L 6.828125 36.300781 C 6.476562 36.300781 6.1875 36.355469 5.957031 36.457031 C 5.730469 36.5625 5.613281 36.769531 5.613281 37.085938 C 5.613281 37.507812 5.78125 37.855469 6.121094 38.128906 C 6.457031 38.398438 6.839844 38.535156 7.269531 38.535156 L 9.414062 38.535156 C 9.566406 38.535156 9.660156 38.453125 9.699219 38.296875 C 9.738281 38.132812 9.757812 37.933594 9.757812 37.691406 L 10.140625 37.691406 L 10.140625 40.183594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 9.074219 30.902344 C 8.640625 30.902344 8.289062 30.730469 8.019531 30.390625 C 7.75 30.050781 7.558594 29.644531 7.445312 29.164062 C 7.335938 28.6875 7.28125 28.234375 7.28125 27.804688 L 6.828125 27.804688 C 6.621094 27.804688 6.417969 27.851562 6.222656 27.945312 C 6.023438 28.035156 5.863281 28.167969 5.738281 28.34375 C 5.613281 28.515625 5.550781 28.710938 5.550781 28.921875 C 5.550781 29.398438 5.660156 29.765625 5.875 30.015625 C 5.875 29.878906 5.925781 29.765625 6.03125 29.675781 C 6.136719 29.585938 6.257812 29.539062 6.394531 29.539062 C 6.539062 29.539062 6.664062 29.59375 6.765625 29.691406 C 6.871094 29.796875 6.921875 29.914062 6.921875 30.058594 C 6.921875 30.203125 6.871094 30.328125 6.765625 30.433594 C 6.664062 30.535156 6.539062 30.585938 6.394531 30.585938 C 6.011719 30.585938 5.726562 30.410156 5.542969 30.066406 C 5.355469 29.71875 5.261719 29.335938 5.261719 28.921875 C 5.261719 28.621094 5.324219 28.324219 5.449219 28.027344 C 5.574219 27.730469 5.757812 27.488281 5.988281 27.300781 C 6.226562 27.109375 6.5 27.015625 6.8125 27.015625 L 9.261719 27.015625 C 9.402344 27.015625 9.53125 26.984375 9.652344 26.921875 C 9.769531 26.863281 9.832031 26.769531 9.832031 26.644531 C 9.832031 26.523438 9.769531 26.433594 9.648438 26.375 C 9.527344 26.316406 9.398438 26.289062 9.261719 26.289062 L 8.5625 26.289062 L 8.5625 25.972656 L 9.261719 25.972656 C 9.421875 25.972656 9.574219 26.011719 9.722656 26.097656 C 9.867188 26.179688 9.984375 26.296875 10.074219 26.441406 C 10.160156 26.585938 10.207031 26.738281 10.207031 26.902344 C 10.207031 27.117188 10.121094 27.300781 9.957031 27.453125 C 9.792969 27.605469 9.597656 27.691406 9.371094 27.710938 C 9.640625 27.84375 9.859375 28.042969 10.019531 28.304688 C 10.183594 28.566406 10.265625 28.847656 10.265625 29.148438 C 10.265625 29.421875 10.222656 29.691406 10.140625 29.960938 C 10.058594 30.226562 9.929688 30.449219 9.753906 30.632812 C 9.578125 30.8125 9.351562 30.902344 9.074219 30.902344 Z M 9.074219 30.015625 C 9.328125 30.015625 9.542969 29.921875 9.714844 29.734375 C 9.890625 29.546875 9.976562 29.324219 9.976562 29.070312 C 9.976562 28.835938 9.917969 28.625 9.800781 28.433594 C 9.683594 28.242188 9.523438 28.089844 9.324219 27.976562 C 9.121094 27.863281 8.910156 27.804688 8.6875 27.804688 L 7.554688 27.804688 C 7.554688 28.136719 7.609375 28.476562 7.71875 28.820312 C 7.824219 29.164062 7.992188 29.449219 8.222656 29.675781 C 8.453125 29.902344 8.738281 30.015625 9.074219 30.015625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 25.496094 L 9.757812 25.496094 C 9.757812 25.246094 9.738281 25.042969 9.699219 24.886719 C 9.660156 24.726562 9.566406 24.648438 9.414062 24.648438 L 3.703125 24.648438 C 3.507812 24.648438 3.367188 24.679688 3.28125 24.734375 C 3.191406 24.796875 3.136719 24.878906 3.117188 24.988281 C 3.097656 25.097656 3.089844 25.269531 3.089844 25.496094 L 2.707031 25.496094 L 2.589844 23.878906 L 9.414062 23.878906 C 9.566406 23.878906 9.660156 23.800781 9.699219 23.644531 C 9.738281 23.484375 9.757812 23.28125 9.757812 23.035156 L 10.140625 23.035156 L 10.140625 25.496094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 22.441406 L 9.757812 22.441406 C 9.757812 22.191406 9.738281 21.988281 9.699219 21.828125 C 9.660156 21.671875 9.566406 21.59375 9.414062 21.59375 L 6.441406 21.59375 C 6.164062 21.59375 5.992188 21.644531 5.929688 21.753906 C 5.863281 21.859375 5.832031 22.074219 5.832031 22.394531 L 5.449219 22.394531 L 5.332031 20.824219 L 9.414062 20.824219 C 9.566406 20.824219 9.660156 20.753906 9.699219 20.617188 C 9.738281 20.480469 9.757812 20.296875 9.757812 20.066406 L 10.140625 20.066406 Z M 3.464844 21.980469 C 3.304688 21.980469 3.164062 21.917969 3.042969 21.796875 C 2.921875 21.675781 2.859375 21.539062 2.859375 21.386719 C 2.859375 21.28125 2.886719 21.179688 2.941406 21.085938 C 2.996094 20.988281 3.074219 20.914062 3.167969 20.863281 C 3.265625 20.808594 3.363281 20.78125 3.464844 20.78125 C 3.621094 20.78125 3.757812 20.84375 3.878906 20.964844 C 3.996094 21.085938 4.054688 21.226562 4.054688 21.386719 C 4.054688 21.539062 3.996094 21.675781 3.878906 21.796875 C 3.757812 21.917969 3.621094 21.980469 3.464844 21.980469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.140625 19.289062 C 10.140625 19.371094 10.097656 19.414062 10.019531 19.414062 L 9.933594 19.414062 C 9.902344 19.414062 9.878906 19.402344 9.859375 19.386719 L 5.738281 16.347656 L 5.738281 17.320312 C 5.738281 17.628906 5.757812 17.886719 5.796875 18.085938 C 5.835938 18.289062 5.910156 18.453125 6.015625 18.582031 C 6.125 18.710938 6.273438 18.804688 6.460938 18.863281 C 6.652344 18.921875 6.914062 18.949219 7.246094 18.949219 L 7.246094 19.261719 L 5.449219 19.140625 L 5.449219 15.5 C 5.449219 15.464844 5.460938 15.433594 5.488281 15.414062 C 5.511719 15.390625 5.539062 15.382812 5.574219 15.382812 L 5.632812 15.382812 C 5.65625 15.382812 5.679688 15.386719 5.707031 15.398438 L 9.832031 18.441406 L 9.832031 17.402344 C 9.832031 17.085938 9.8125 16.824219 9.769531 16.613281 C 9.730469 16.402344 9.636719 16.222656 9.488281 16.074219 C 9.347656 15.9375 9.164062 15.84375 8.929688 15.792969 C 8.699219 15.742188 8.410156 15.699219 8.066406 15.667969 L 8.066406 15.359375 L 10.140625 15.546875 L 10.140625 19.289062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 12.121094 C 10.265625 12.5625 10.148438 12.96875 9.914062 13.335938 C 9.683594 13.707031 9.371094 13.996094 8.984375 14.207031 C 8.597656 14.417969 8.1875 14.523438 7.753906 14.523438 C 7.328125 14.523438 6.925781 14.429688 6.542969 14.234375 C 6.164062 14.046875 5.855469 13.777344 5.617188 13.429688 C 5.382812 13.085938 5.261719 12.699219 5.261719 12.273438 C 5.261719 11.941406 5.320312 11.652344 5.429688 11.40625 C 5.542969 11.160156 5.699219 10.953125 5.894531 10.796875 C 6.09375 10.636719 6.328125 10.515625 6.597656 10.433594 C 6.863281 10.355469 7.160156 10.316406 7.484375 10.316406 C 7.578125 10.316406 7.625 10.351562 7.625 10.425781 L 7.625 13.574219 L 7.742188 13.574219 C 8.34375 13.574219 8.863281 13.453125 9.292969 13.210938 C 9.726562 12.96875 9.941406 12.570312 9.941406 12.019531 C 9.941406 11.796875 9.894531 11.59375 9.792969 11.402344 C 9.695312 11.210938 9.558594 11.046875 9.382812 10.910156 C 9.203125 10.769531 9.011719 10.675781 8.808594 10.625 C 8.785156 10.617188 8.765625 10.605469 8.746094 10.585938 C 8.726562 10.566406 8.714844 10.542969 8.714844 10.519531 L 8.714844 10.425781 C 8.714844 10.351562 8.761719 10.316406 8.855469 10.316406 C 9.265625 10.414062 9.605469 10.636719 9.867188 10.976562 C 10.132812 11.316406 10.265625 11.699219 10.265625 12.121094 Z M 7.355469 13.5625 L 7.355469 11.082031 C 7.082031 11.082031 6.804688 11.121094 6.527344 11.195312 C 6.246094 11.273438 6.015625 11.398438 5.828125 11.578125 C 5.644531 11.757812 5.550781 11.988281 5.550781 12.273438 C 5.550781 12.683594 5.742188 13 6.128906 13.226562 C 6.511719 13.449219 6.921875 13.5625 7.355469 13.5625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 10.265625 7.28125 C 10.265625 7.710938 10.148438 8.105469 9.914062 8.457031 C 9.683594 8.8125 9.375 9.085938 8.996094 9.28125 C 8.617188 9.476562 8.214844 9.574219 7.789062 9.574219 C 7.351562 9.574219 6.945312 9.46875 6.566406 9.253906 C 6.191406 9.042969 5.890625 8.75 5.667969 8.382812 C 5.445312 8.011719 5.332031 7.605469 5.332031 7.164062 C 5.332031 6.898438 5.390625 6.648438 5.5 6.410156 C 5.613281 6.175781 5.769531 5.96875 5.96875 5.792969 L 3.703125 5.792969 C 3.507812 5.792969 3.367188 5.824219 3.28125 5.882812 C 3.191406 5.941406 3.136719 6.023438 3.117188 6.128906 C 3.097656 6.238281 3.089844 6.40625 3.089844 6.636719 L 2.707031 6.636719 L 2.589844 5.03125 L 9.148438 5.03125 C 9.339844 5.03125 9.480469 5.003906 9.570312 4.941406 C 9.65625 4.886719 9.710938 4.800781 9.730469 4.691406 C 9.75 4.582031 9.757812 4.414062 9.757812 4.1875 L 10.140625 4.1875 L 10.265625 5.828125 L 9.578125 5.828125 C 9.792969 6.015625 9.960938 6.238281 10.082031 6.496094 C 10.203125 6.753906 10.265625 7.015625 10.265625 7.28125 Z M 9.195312 8.390625 C 9.429688 8.269531 9.621094 8.105469 9.761719 7.898438 C 9.90625 7.691406 9.976562 7.464844 9.976562 7.21875 C 9.976562 6.917969 9.890625 6.640625 9.714844 6.386719 C 9.542969 6.136719 9.316406 5.949219 9.039062 5.828125 L 6.429688 5.828125 C 6.273438 5.910156 6.132812 6.015625 6.003906 6.144531 C 5.878906 6.273438 5.78125 6.421875 5.714844 6.582031 C 5.648438 6.742188 5.613281 6.914062 5.613281 7.09375 C 5.613281 7.472656 5.722656 7.777344 5.9375 8.007812 C 6.152344 8.238281 6.425781 8.402344 6.757812 8.492188 C 7.089844 8.585938 7.4375 8.628906 7.800781 8.628906 C 8.09375 8.628906 8.347656 8.617188 8.5625 8.585938 C 8.777344 8.558594 8.988281 8.492188 9.195312 8.390625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,1.197815%);fill-opacity:1;" d="M 12.859375 3.585938 L 12.425781 3.585938 L 12.425781 2.527344 L 2.414062 2.527344 L 2.414062 3.585938 L 1.980469 3.585938 L 1.980469 2.09375 L 12.859375 2.09375 L 12.859375 3.585938 "/>
<path style="fill:none;stroke-width:15.0056;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,44.700623%,74.021912%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 500.15625 L 854.0625 530.546875 L 1319.257812 563.320312 L 1784.414062 598.398438 L 2249.609375 635.859375 L 2714.765625 675.625 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:15.0056;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,32.493591%,9.790039%);stroke-opacity:1;stroke-miterlimit:10;" d="M 388.90625 1045 L 854.0625 1166.640625 L 1319.257812 1297.695312 L 1784.414062 1438.046875 L 2249.609375 1587.773438 L 2714.765625 1746.875 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 47.140625 35.449219 L 92.160156 35.449219 L 92.160156 12.1875 L 47.140625 12.1875 Z M 47.140625 35.449219 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 80.085938 20.328125 C 80.085938 20.292969 80.089844 20.265625 80.09375 20.253906 L 81.398438 15.046875 C 81.421875 14.941406 81.4375 14.859375 81.445312 14.800781 C 81.445312 14.707031 81.25 14.660156 80.859375 14.660156 C 80.796875 14.660156 80.765625 14.617188 80.765625 14.535156 C 80.769531 14.523438 80.777344 14.5 80.785156 14.460938 C 80.796875 14.421875 80.808594 14.390625 80.824219 14.371094 C 80.839844 14.351562 80.863281 14.34375 80.894531 14.34375 L 82.109375 14.242188 L 82.132812 14.242188 C 82.132812 14.253906 82.144531 14.261719 82.164062 14.269531 C 82.1875 14.28125 82.199219 14.285156 82.203125 14.289062 C 82.214844 14.316406 82.21875 14.339844 82.21875 14.359375 L 81.269531 18.125 C 81.488281 18.03125 81.765625 17.8125 82.09375 17.472656 C 82.425781 17.132812 82.683594 16.886719 82.867188 16.738281 C 83.054688 16.585938 83.289062 16.511719 83.570312 16.511719 C 83.738281 16.511719 83.878906 16.570312 83.996094 16.683594 C 84.113281 16.800781 84.171875 16.941406 84.171875 17.105469 C 84.171875 17.210938 84.148438 17.308594 84.105469 17.398438 C 84.058594 17.488281 84 17.558594 83.921875 17.617188 C 83.84375 17.671875 83.75 17.703125 83.644531 17.703125 C 83.546875 17.703125 83.464844 17.671875 83.398438 17.609375 C 83.332031 17.550781 83.300781 17.472656 83.300781 17.371094 C 83.300781 17.230469 83.347656 17.109375 83.453125 17.011719 C 83.550781 16.910156 83.675781 16.863281 83.820312 16.863281 C 83.761719 16.785156 83.671875 16.746094 83.550781 16.746094 C 83.371094 16.746094 83.199219 16.796875 83.03125 16.898438 C 82.867188 17 82.6875 17.148438 82.496094 17.339844 C 82.304688 17.535156 82.128906 17.710938 81.972656 17.867188 C 81.8125 18.027344 81.667969 18.148438 81.535156 18.230469 C 81.886719 18.273438 82.191406 18.367188 82.457031 18.511719 C 82.71875 18.65625 82.847656 18.878906 82.847656 19.179688 C 82.847656 19.238281 82.835938 19.3125 82.8125 19.40625 C 82.757812 19.632812 82.730469 19.816406 82.730469 19.953125 C 82.730469 20.222656 82.824219 20.355469 83.011719 20.355469 C 83.226562 20.355469 83.390625 20.238281 83.503906 20 C 83.617188 19.761719 83.710938 19.484375 83.785156 19.167969 C 83.796875 19.132812 83.820312 19.113281 83.855469 19.113281 L 83.960938 19.113281 C 83.984375 19.113281 84.003906 19.121094 84.023438 19.136719 C 84.039062 19.152344 84.050781 19.171875 84.050781 19.195312 C 84.050781 19.199219 84.046875 19.207031 84.039062 19.21875 C 83.8125 20.132812 83.464844 20.59375 82.992188 20.59375 C 82.824219 20.59375 82.671875 20.554688 82.539062 20.472656 C 82.410156 20.394531 82.308594 20.289062 82.238281 20.152344 C 82.167969 20.015625 82.132812 19.859375 82.132812 19.6875 C 82.132812 19.59375 82.144531 19.496094 82.171875 19.390625 C 82.191406 19.320312 82.203125 19.253906 82.203125 19.195312 C 82.203125 18.960938 82.101562 18.785156 81.894531 18.664062 C 81.691406 18.546875 81.453125 18.472656 81.1875 18.445312 L 80.730469 20.285156 C 80.707031 20.378906 80.664062 20.449219 80.597656 20.507812 C 80.53125 20.5625 80.453125 20.59375 80.363281 20.59375 C 80.289062 20.59375 80.222656 20.566406 80.167969 20.515625 C 80.113281 20.464844 80.085938 20.402344 80.085938 20.328125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 85.320312 21.910156 C 85.128906 21.910156 84.972656 21.84375 84.855469 21.703125 C 84.738281 21.5625 84.660156 21.390625 84.617188 21.191406 C 84.574219 20.992188 84.550781 20.796875 84.550781 20.601562 L 84.550781 20.59375 C 84.550781 20.382812 84.570312 20.164062 84.609375 19.933594 C 84.648438 19.707031 84.707031 19.480469 84.785156 19.253906 C 84.863281 19.023438 84.945312 18.820312 85.03125 18.640625 C 85.09375 18.515625 85.175781 18.378906 85.277344 18.222656 C 85.375 18.066406 85.484375 17.925781 85.605469 17.792969 C 85.726562 17.660156 85.859375 17.550781 86 17.46875 C 86.140625 17.386719 86.28125 17.347656 86.421875 17.347656 L 86.425781 17.347656 C 86.582031 17.347656 86.710938 17.390625 86.8125 17.472656 C 86.914062 17.558594 86.996094 17.664062 87.054688 17.796875 C 87.113281 17.929688 87.152344 18.074219 87.175781 18.226562 C 87.195312 18.378906 87.207031 18.523438 87.207031 18.660156 C 87.207031 18.980469 87.164062 19.308594 87.078125 19.644531 C 86.992188 19.980469 86.871094 20.304688 86.714844 20.617188 C 86.65625 20.734375 86.574219 20.871094 86.472656 21.035156 C 86.371094 21.195312 86.265625 21.335938 86.148438 21.464844 C 86.03125 21.589844 85.90625 21.699219 85.761719 21.785156 C 85.617188 21.871094 85.472656 21.910156 85.324219 21.910156 Z M 85.332031 21.75 C 85.476562 21.75 85.613281 21.671875 85.742188 21.519531 C 85.871094 21.367188 85.984375 21.183594 86.082031 20.972656 C 86.179688 20.757812 86.265625 20.539062 86.339844 20.3125 C 86.414062 20.085938 86.46875 19.894531 86.503906 19.738281 L 85.203125 19.738281 C 85.136719 20.003906 85.082031 20.234375 85.042969 20.429688 C 85.003906 20.625 84.984375 20.816406 84.984375 21.003906 C 84.984375 21.5 85.101562 21.75 85.332031 21.75 Z M 85.25 19.515625 L 86.554688 19.515625 C 86.601562 19.328125 86.640625 19.171875 86.667969 19.046875 C 86.695312 18.921875 86.71875 18.789062 86.734375 18.648438 C 86.753906 18.507812 86.761719 18.378906 86.761719 18.261719 C 86.761719 17.761719 86.648438 17.511719 86.421875 17.511719 C 86.152344 17.511719 85.917969 17.730469 85.722656 18.164062 C 85.527344 18.601562 85.371094 19.050781 85.25 19.515625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 87.605469 22.660156 C 87.65625 22.699219 87.730469 22.71875 87.828125 22.71875 C 87.917969 22.71875 88.003906 22.671875 88.074219 22.582031 C 88.148438 22.492188 88.199219 22.394531 88.226562 22.289062 L 88.429688 21.492188 C 88.460938 21.347656 88.476562 21.246094 88.476562 21.191406 C 88.476562 21.117188 88.457031 21.054688 88.414062 20.996094 C 88.375 20.941406 88.316406 20.910156 88.238281 20.910156 C 88.144531 20.910156 88.054688 20.941406 87.96875 21.003906 C 87.886719 21.0625 87.816406 21.140625 87.757812 21.230469 C 87.703125 21.324219 87.660156 21.414062 87.640625 21.511719 C 87.636719 21.53125 87.625 21.539062 87.605469 21.539062 L 87.550781 21.539062 C 87.527344 21.539062 87.515625 21.523438 87.515625 21.492188 L 87.515625 21.480469 C 87.542969 21.371094 87.59375 21.261719 87.660156 21.15625 C 87.730469 21.046875 87.820312 20.960938 87.917969 20.898438 C 88.023438 20.832031 88.132812 20.800781 88.25 20.800781 C 88.359375 20.800781 88.457031 20.828125 88.542969 20.890625 C 88.632812 20.945312 88.695312 21.023438 88.734375 21.121094 C 88.785156 21.03125 88.851562 20.957031 88.929688 20.894531 C 89.011719 20.832031 89.097656 20.800781 89.191406 20.800781 C 89.257812 20.800781 89.324219 20.8125 89.390625 20.832031 C 89.457031 20.855469 89.511719 20.890625 89.554688 20.9375 C 89.597656 20.980469 89.621094 21.039062 89.621094 21.109375 C 89.621094 21.1875 89.59375 21.257812 89.546875 21.3125 C 89.496094 21.363281 89.433594 21.394531 89.355469 21.394531 C 89.308594 21.394531 89.269531 21.378906 89.234375 21.347656 C 89.203125 21.3125 89.1875 21.273438 89.1875 21.230469 C 89.1875 21.164062 89.207031 21.109375 89.253906 21.0625 C 89.296875 21.019531 89.351562 20.988281 89.410156 20.976562 C 89.355469 20.933594 89.28125 20.910156 89.1875 20.910156 C 89.089844 20.910156 89.003906 20.957031 88.933594 21.046875 C 88.863281 21.136719 88.8125 21.234375 88.78125 21.347656 L 88.582031 22.144531 C 88.550781 22.265625 88.535156 22.363281 88.535156 22.441406 C 88.535156 22.515625 88.558594 22.582031 88.601562 22.636719 C 88.644531 22.691406 88.703125 22.71875 88.777344 22.71875 C 88.917969 22.71875 89.042969 22.65625 89.152344 22.53125 C 89.261719 22.410156 89.332031 22.273438 89.367188 22.125 C 89.375 22.109375 89.386719 22.101562 89.402344 22.101562 L 89.460938 22.101562 C 89.472656 22.101562 89.480469 22.105469 89.488281 22.113281 C 89.492188 22.121094 89.496094 22.128906 89.496094 22.136719 C 89.496094 22.140625 89.496094 22.148438 89.496094 22.15625 C 89.453125 22.328125 89.363281 22.488281 89.226562 22.628906 C 89.089844 22.769531 88.9375 22.839844 88.765625 22.839844 C 88.65625 22.839844 88.554688 22.808594 88.46875 22.75 C 88.378906 22.6875 88.316406 22.609375 88.277344 22.507812 C 88.230469 22.597656 88.167969 22.675781 88.085938 22.742188 C 88.003906 22.808594 87.914062 22.839844 87.820312 22.839844 C 87.753906 22.839844 87.6875 22.828125 87.617188 22.804688 C 87.550781 22.78125 87.496094 22.746094 87.453125 22.699219 C 87.414062 22.652344 87.394531 22.59375 87.394531 22.523438 C 87.394531 22.453125 87.417969 22.390625 87.464844 22.328125 C 87.515625 22.273438 87.578125 22.242188 87.652344 22.242188 C 87.699219 22.242188 87.738281 22.257812 87.773438 22.285156 C 87.808594 22.316406 87.828125 22.355469 87.828125 22.40625 C 87.828125 22.46875 87.804688 22.523438 87.761719 22.570312 C 87.71875 22.617188 87.667969 22.648438 87.605469 22.660156 "/>
<path style="fill:none;stroke-width:15.0056;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,44.700623%,74.021912%);stroke-opacity:1;stroke-miterlimit:10;" d="M 486.367188 1606.679688 L 784.882812 1606.679688 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 80.085938 31.300781 C 80.085938 31.265625 80.089844 31.242188 80.09375 31.226562 L 81.398438 26.019531 C 81.421875 25.914062 81.4375 25.832031 81.445312 25.773438 C 81.445312 25.679688 81.25 25.632812 80.859375 25.632812 C 80.796875 25.632812 80.765625 25.59375 80.765625 25.511719 C 80.769531 25.5 80.777344 25.472656 80.785156 25.433594 C 80.796875 25.394531 80.808594 25.367188 80.824219 25.347656 C 80.839844 25.328125 80.863281 25.316406 80.894531 25.316406 L 82.109375 25.21875 L 82.132812 25.21875 C 82.132812 25.226562 82.144531 25.234375 82.164062 25.242188 C 82.1875 25.253906 82.199219 25.261719 82.203125 25.265625 C 82.214844 25.292969 82.21875 25.316406 82.21875 25.335938 L 81.269531 29.097656 C 81.488281 29.003906 81.765625 28.785156 82.09375 28.445312 C 82.425781 28.105469 82.683594 27.863281 82.867188 27.710938 C 83.054688 27.5625 83.289062 27.484375 83.570312 27.484375 C 83.738281 27.484375 83.878906 27.542969 83.996094 27.660156 C 84.113281 27.773438 84.171875 27.914062 84.171875 28.078125 C 84.171875 28.183594 84.148438 28.28125 84.105469 28.371094 C 84.058594 28.460938 84 28.535156 83.921875 28.589844 C 83.84375 28.648438 83.75 28.675781 83.644531 28.675781 C 83.546875 28.675781 83.464844 28.644531 83.398438 28.585938 C 83.332031 28.523438 83.300781 28.445312 83.300781 28.347656 C 83.300781 28.203125 83.347656 28.082031 83.453125 27.984375 C 83.550781 27.886719 83.675781 27.835938 83.820312 27.835938 C 83.761719 27.757812 83.671875 27.71875 83.550781 27.71875 C 83.371094 27.71875 83.199219 27.769531 83.03125 27.871094 C 82.867188 27.972656 82.6875 28.121094 82.496094 28.316406 C 82.304688 28.507812 82.128906 28.683594 81.972656 28.84375 C 81.8125 29 81.667969 29.121094 81.535156 29.203125 C 81.886719 29.246094 82.191406 29.339844 82.457031 29.484375 C 82.71875 29.628906 82.847656 29.851562 82.847656 30.152344 C 82.847656 30.210938 82.835938 30.285156 82.8125 30.382812 C 82.757812 30.609375 82.730469 30.789062 82.730469 30.925781 C 82.730469 31.195312 82.824219 31.332031 83.011719 31.332031 C 83.226562 31.332031 83.390625 31.210938 83.503906 30.972656 C 83.617188 30.734375 83.710938 30.457031 83.785156 30.140625 C 83.796875 30.105469 83.820312 30.089844 83.855469 30.089844 L 83.960938 30.089844 C 83.984375 30.089844 84.003906 30.097656 84.023438 30.113281 C 84.039062 30.128906 84.050781 30.148438 84.050781 30.171875 C 84.050781 30.175781 84.046875 30.183594 84.039062 30.195312 C 83.8125 31.109375 83.464844 31.566406 82.992188 31.566406 C 82.824219 31.566406 82.671875 31.527344 82.539062 31.449219 C 82.410156 31.371094 82.308594 31.261719 82.238281 31.125 C 82.167969 30.988281 82.132812 30.835938 82.132812 30.660156 C 82.132812 30.570312 82.144531 30.46875 82.171875 30.363281 C 82.191406 30.292969 82.203125 30.230469 82.203125 30.171875 C 82.203125 29.9375 82.101562 29.757812 81.894531 29.640625 C 81.691406 29.519531 81.453125 29.449219 81.1875 29.421875 L 80.730469 31.261719 C 80.707031 31.351562 80.664062 31.425781 80.597656 31.480469 C 80.53125 31.535156 80.453125 31.566406 80.363281 31.566406 C 80.289062 31.566406 80.222656 31.539062 80.167969 31.488281 C 80.113281 31.4375 80.085938 31.375 80.085938 31.300781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 85.320312 32.886719 C 85.128906 32.886719 84.972656 32.816406 84.855469 32.675781 C 84.738281 32.535156 84.660156 32.363281 84.617188 32.164062 C 84.574219 31.964844 84.550781 31.769531 84.550781 31.574219 L 84.550781 31.566406 C 84.550781 31.355469 84.570312 31.136719 84.609375 30.90625 C 84.648438 30.679688 84.707031 30.453125 84.785156 30.226562 C 84.863281 30 84.945312 29.796875 85.03125 29.617188 C 85.09375 29.492188 85.175781 29.351562 85.277344 29.195312 C 85.375 29.042969 85.484375 28.898438 85.605469 28.765625 C 85.726562 28.632812 85.859375 28.527344 86 28.445312 C 86.140625 28.363281 86.28125 28.320312 86.421875 28.320312 L 86.425781 28.320312 C 86.582031 28.320312 86.710938 28.363281 86.8125 28.445312 C 86.914062 28.53125 86.996094 28.640625 87.054688 28.773438 C 87.113281 28.90625 87.152344 29.046875 87.175781 29.199219 C 87.195312 29.351562 87.207031 29.496094 87.207031 29.632812 C 87.207031 29.953125 87.164062 30.28125 87.078125 30.617188 C 86.992188 30.953125 86.871094 31.277344 86.714844 31.589844 C 86.65625 31.710938 86.574219 31.847656 86.472656 32.007812 C 86.371094 32.167969 86.265625 32.3125 86.148438 32.4375 C 86.03125 32.566406 85.90625 32.671875 85.761719 32.757812 C 85.617188 32.84375 85.472656 32.886719 85.324219 32.886719 Z M 85.332031 32.722656 C 85.476562 32.722656 85.613281 32.644531 85.742188 32.492188 C 85.871094 32.339844 85.984375 32.160156 86.082031 31.945312 C 86.179688 31.734375 86.265625 31.511719 86.339844 31.285156 C 86.414062 31.058594 86.46875 30.867188 86.503906 30.710938 L 85.203125 30.710938 C 85.136719 30.976562 85.082031 31.207031 85.042969 31.402344 C 85.003906 31.597656 84.984375 31.789062 84.984375 31.976562 C 84.984375 32.476562 85.101562 32.722656 85.332031 32.722656 Z M 85.25 30.488281 L 86.554688 30.488281 C 86.601562 30.300781 86.640625 30.144531 86.667969 30.019531 C 86.695312 29.894531 86.71875 29.761719 86.734375 29.621094 C 86.753906 29.480469 86.761719 29.351562 86.761719 29.234375 C 86.761719 28.734375 86.648438 28.484375 86.421875 28.484375 C 86.152344 28.484375 85.917969 28.703125 85.722656 29.136719 C 85.527344 29.574219 85.371094 30.023438 85.25 30.488281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 87.472656 33.8125 C 87.453125 33.8125 87.441406 33.800781 87.441406 33.773438 C 87.441406 33.757812 87.441406 33.746094 87.445312 33.738281 C 87.527344 33.601562 87.625 33.46875 87.738281 33.34375 C 87.851562 33.214844 87.980469 33.085938 88.125 32.953125 C 88.269531 32.824219 88.414062 32.695312 88.558594 32.566406 C 88.703125 32.4375 88.824219 32.320312 88.917969 32.21875 L 88.898438 32.21875 C 88.832031 32.21875 88.734375 32.199219 88.605469 32.15625 C 88.476562 32.113281 88.378906 32.089844 88.308594 32.089844 C 88.226562 32.089844 88.148438 32.109375 88.074219 32.144531 C 88 32.179688 87.953125 32.230469 87.933594 32.300781 C 87.929688 32.324219 87.917969 32.335938 87.898438 32.335938 L 87.84375 32.335938 C 87.820312 32.335938 87.808594 32.320312 87.808594 32.289062 L 87.808594 32.273438 C 87.832031 32.1875 87.871094 32.105469 87.921875 32.03125 C 87.976562 31.953125 88.042969 31.890625 88.121094 31.84375 C 88.199219 31.796875 88.28125 31.773438 88.367188 31.773438 C 88.425781 31.773438 88.472656 31.785156 88.511719 31.8125 C 88.550781 31.839844 88.597656 31.878906 88.648438 31.9375 C 88.703125 31.996094 88.746094 32.039062 88.777344 32.0625 C 88.8125 32.085938 88.855469 32.097656 88.90625 32.097656 C 88.972656 32.097656 89.03125 32.066406 89.082031 32.007812 C 89.136719 31.949219 89.1875 31.875 89.238281 31.785156 C 89.246094 31.777344 89.257812 31.773438 89.269531 31.773438 L 89.320312 31.773438 C 89.332031 31.773438 89.34375 31.777344 89.347656 31.78125 C 89.351562 31.789062 89.355469 31.796875 89.355469 31.808594 C 89.355469 31.820312 89.355469 31.832031 89.351562 31.839844 C 89.269531 31.980469 89.171875 32.109375 89.066406 32.230469 C 88.957031 32.351562 88.816406 32.492188 88.644531 32.648438 C 88.46875 32.804688 88.324219 32.9375 88.203125 33.042969 C 88.085938 33.152344 87.972656 33.261719 87.867188 33.375 C 87.890625 33.367188 87.925781 33.363281 87.96875 33.363281 C 88.039062 33.363281 88.136719 33.382812 88.261719 33.425781 C 88.390625 33.46875 88.488281 33.492188 88.558594 33.492188 C 88.632812 33.492188 88.707031 33.476562 88.785156 33.441406 C 88.859375 33.410156 88.925781 33.363281 88.980469 33.304688 C 89.035156 33.246094 89.074219 33.179688 89.09375 33.105469 C 89.101562 33.085938 89.113281 33.074219 89.128906 33.074219 L 89.1875 33.074219 C 89.199219 33.074219 89.207031 33.078125 89.214844 33.085938 C 89.21875 33.09375 89.222656 33.105469 89.222656 33.117188 C 89.222656 33.121094 89.222656 33.125 89.222656 33.128906 C 89.195312 33.246094 89.144531 33.355469 89.074219 33.457031 C 89.003906 33.558594 88.917969 33.644531 88.820312 33.710938 C 88.71875 33.78125 88.613281 33.8125 88.5 33.8125 C 88.441406 33.8125 88.394531 33.800781 88.355469 33.773438 C 88.316406 33.746094 88.269531 33.703125 88.214844 33.644531 C 88.160156 33.585938 88.113281 33.542969 88.082031 33.519531 C 88.046875 33.492188 88.007812 33.480469 87.960938 33.480469 C 87.8125 33.480469 87.675781 33.585938 87.558594 33.796875 C 87.546875 33.808594 87.539062 33.8125 87.527344 33.8125 L 87.472656 33.8125 "/>
<path style="fill:none;stroke-width:15.0056;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(85.15625%,32.493591%,9.790039%);stroke-opacity:1;stroke-miterlimit:10;" d="M 486.367188 1496.953125 L 784.882812 1496.953125 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
<path style="fill:none;stroke-width:5.00062;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 471.40625 1435.507812 L 921.601562 1435.507812 L 921.601562 1668.125 L 471.40625 1668.125 Z M 471.40625 1435.507812 " transform="matrix(0.1,0,0,-0.1,0,179)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 141 KiB

View File

@ -0,0 +1,54 @@
% This file was created by matlab2tikz.
%
\definecolor{mycolor1}{rgb}{0.00000,0.44700,0.74100}%
\definecolor{mycolor2}{rgb}{0.85000,0.32500,0.09800}%
%
\begin{tikzpicture}
\begin{axis}[%
width=3.23in,
height=1.99in,
at={(0.528in,0.42in)},
scale only axis,
separate axis lines,
every outer x axis line/.append style={black},
every x tick label/.append style={font=\color{black}},
every x tick/.append style={black},
xmin=250,
xmax=350,
xlabel={Cube Size [mm]},
every outer y axis line/.append style={black},
every y tick label/.append style={font=\color{black}},
every y tick/.append style={black},
ymin=0,
ymax=0.0816666666666492,
ylabel={Rotational stiffnes [normalized]},
axis background/.style={fill=white},
xmajorgrids,
ymajorgrids,
legend style={at={(0.6,2.222)}, anchor=south west, legend cell align=left, align=left, draw=black}
]
\addplot [color=mycolor1, line width=1.5pt]
table[row sep=crcr]{%
250 0.0106166666666923\\
270 0.0123500000000263\\
290 0.0142166666666412\\
310 0.0162166666666508\\
330 0.0183499999999981\\
350 0.0206166666666832\\
};
\addlegendentry{$k_{\theta_x}$}
\addplot [color=mycolor2, line width=1.5pt]
table[row sep=crcr]{%
250 0.0416666666666856\\
270 0.0486000000000217\\
290 0.0560666666666521\\
310 0.0640666666666903\\
330 0.0726000000000226\\
350 0.0816666666666492\\
};
\addlegendentry{$k_{\theta_z}$}
\end{axis}
\end{tikzpicture}%

View File

@ -25,7 +25,7 @@
:END: :END:
* Identification * Identification
#+begin_src matlab :results none :exports none #+begin_src matlab :results none :exports none :noweb yes
<<matlab-init>> <<matlab-init>>
addpath('src'); addpath('src');
addpath('library'); addpath('library');
@ -37,7 +37,11 @@
The hexapod structure and Sample structure are initialized. The hexapod structure and Sample structure are initialized.
#+begin_src matlab :results none #+begin_src matlab :results none
initializeHexapod(); stewart = initializeGeneralConfiguration();
stewart = computeGeometricalProperties(stewart);
stewart = initializeMechanicalElements(stewart);
save('./mat/stewart.mat', 'stewart');
initializeSample(); initializeSample();
#+end_src #+end_src
@ -45,92 +49,111 @@ The hexapod structure and Sample structure are initialized.
G = identifyPlant(); G = identifyPlant();
#+end_src #+end_src
#+begin_src matlab :results none
freqs = logspace(2, 4, 1000);
#+end_src
* Cartesian Plot * Cartesian Plot
From a force applied in the Cartesian frame to a displacement in the Cartesian frame. From a force applied in the Cartesian frame to a displacement in the Cartesian frame.
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_cart(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_cart(1, 1), freqs, 'Hz'))));
bode(G.G_cart(3, 3)); plot(freqs, abs(squeeze(freqresp(G.G_cart(2, 1), freqs, 'Hz'))));
plot(freqs, abs(squeeze(freqresp(G.G_cart(3, 1), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude');
#+end_src
#+begin_src matlab :results none
figure;
bode(G.G_cart, freqs);
#+end_src #+end_src
* From a force to force sensor * From a force to force sensor
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_forc(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_forc(1, 1), freqs, 'Hz'))), 'k-', 'DisplayName', '$F_{m_i}/F_{i}$');
bode(G.G_forc(2, 2));
bode(G.G_forc(3, 3));
bode(G.G_forc(4, 4));
bode(G.G_forc(5, 5));
bode(G.G_forc(6, 6));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [N/N]');
legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_forc(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_forc(1, 1), freqs, 'Hz'))), 'k-', 'DisplayName', '$F_{m_i}/F_{i}$');
bode(G.G_forc(1, 2)); plot(freqs, abs(squeeze(freqresp(G.G_forc(2, 1), freqs, 'Hz'))), 'k--', 'DisplayName', '$F_{m_j}/F_{i}$');
bode(G.G_forc(1, 3)); plot(freqs, abs(squeeze(freqresp(G.G_forc(3, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_forc(1, 4)); plot(freqs, abs(squeeze(freqresp(G.G_forc(4, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_forc(1, 5)); plot(freqs, abs(squeeze(freqresp(G.G_forc(5, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_forc(1, 6)); plot(freqs, abs(squeeze(freqresp(G.G_forc(6, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [N/N]');
legend('location', 'southeast');
#+end_src #+end_src
* From a force applied in the leg to the displacement of the leg * From a force applied in the leg to the displacement of the leg
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_legs(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_legs(1, 1), freqs, 'Hz'))), 'k-', 'DisplayName', '$D_{i}/F_{i}$');
bode(G.G_legs(2, 2));
bode(G.G_legs(3, 3));
bode(G.G_legs(4, 4));
bode(G.G_legs(5, 5));
bode(G.G_legs(6, 6));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]');
#+end_src #+end_src
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_legs(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_legs(1, 1), freqs, 'Hz'))), 'k-', 'DisplayName', '$D_{i}/F_{i}$');
bode(G.G_legs(1, 2)); plot(freqs, abs(squeeze(freqresp(G.G_legs(2, 1), freqs, 'Hz'))), 'k--', 'DisplayName', '$D_{j}/F_{i}$');
bode(G.G_legs(1, 3)); plot(freqs, abs(squeeze(freqresp(G.G_legs(3, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_legs(1, 4)); plot(freqs, abs(squeeze(freqresp(G.G_legs(4, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_legs(1, 5)); plot(freqs, abs(squeeze(freqresp(G.G_legs(5, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
bode(G.G_legs(1, 6)); plot(freqs, abs(squeeze(freqresp(G.G_legs(6, 1), freqs, 'Hz'))), 'k--', 'HandleVisibility', 'off');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]');
legend('location', 'northeast');
#+end_src #+end_src
* Transmissibility * Transmissibility
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_tran(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_tran(1, 1), freqs, 'Hz'))));
bode(G.G_tran(2, 2)); plot(freqs, abs(squeeze(freqresp(G.G_tran(2, 2), freqs, 'Hz'))));
bode(G.G_tran(3, 3)); plot(freqs, abs(squeeze(freqresp(G.G_tran(3, 3), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/m]');
#+end_src #+end_src
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_tran(4, 4)); plot(freqs, abs(squeeze(freqresp(G.G_tran(4, 4), freqs, 'Hz'))));
bode(G.G_tran(5, 5)); plot(freqs, abs(squeeze(freqresp(G.G_tran(5, 5), freqs, 'Hz'))));
bode(G.G_tran(6, 6)); plot(freqs, abs(squeeze(freqresp(G.G_tran(6, 6), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [$\frac{rad/s}{rad/s}$]');
#+end_src #+end_src
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_tran(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_tran(1, 1), freqs, 'Hz'))));
bode(G.G_tran(2, 1)); plot(freqs, abs(squeeze(freqresp(G.G_tran(1, 2), freqs, 'Hz'))));
bode(G.G_tran(3, 1)); plot(freqs, abs(squeeze(freqresp(G.G_tran(1, 3), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/m]');
#+end_src #+end_src
* Compliance * Compliance
@ -139,10 +162,12 @@ From a force applied in the Cartesian frame to a relative displacement of the mo
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_comp(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_comp(1, 1), freqs, 'Hz'))));
bode(G.G_comp(2, 2)); plot(freqs, abs(squeeze(freqresp(G.G_comp(2, 2), freqs, 'Hz'))));
bode(G.G_comp(3, 3)); plot(freqs, abs(squeeze(freqresp(G.G_comp(3, 3), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]');
#+end_src #+end_src
* Inertial * Inertial
@ -151,10 +176,12 @@ From a force applied on the Cartesian frame to the absolute displacement of the
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
bode(G.G_iner(1, 1)); plot(freqs, abs(squeeze(freqresp(G.G_iner(1, 1), freqs, 'Hz'))));
bode(G.G_iner(2, 2)); plot(freqs, abs(squeeze(freqresp(G.G_iner(2, 2), freqs, 'Hz'))));
bode(G.G_iner(3, 3)); plot(freqs, abs(squeeze(freqresp(G.G_iner(3, 3), freqs, 'Hz'))));
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]');
#+end_src #+end_src
* identifyPlant * identifyPlant
@ -228,11 +255,11 @@ We defined all the Input/Output names of the identified transfer function.
We split the transfer function into sub transfer functions and we compute their minimum realization. We split the transfer function into sub transfer functions and we compute their minimum realization.
#+begin_src matlab #+begin_src matlab
sys.G_cart = minreal(G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'})); sys.G_cart = minreal(G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}));
sys.G_forc = minreal(G({'F1m', 'F2m', 'F3m', 'F4m', 'F5m', 'F6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_forc = minreal(G({'F1m', 'F2m', 'F3m', 'F4m', 'F5m', 'F6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
sys.G_legs = minreal(G({'D1m', 'D2m', 'D3m', 'D4m', 'D5m', 'D6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_legs = minreal(G({'D1m', 'D2m', 'D3m', 'D4m', 'D5m', 'D6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
sys.G_tran = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'})); sys.G_tran = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'}));
sys.G_comp = minreal(G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'})); sys.G_comp = minreal(G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'}));
sys.G_iner = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'})); sys.G_iner = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'}));
% sys.G_all = minreal(G); % sys.G_all = minreal(G);
#+end_src #+end_src

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2019-03-22 ven. 12:03 --> <!-- 2019-03-25 lun. 18:11 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform Studies</title> <title>Stewart Platform Studies</title>
@ -253,36 +253,37 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org2b3b6a5">1. Simscape Model</a></li> <li><a href="#org431e1f9">1. Simscape Model</a></li>
<li><a href="#org5dc817d">2. Architecture Study</a></li> <li><a href="#org27d326c">2. Architecture Study</a></li>
<li><a href="#orgccde31a">3. Motion Control</a></li> <li><a href="#orgd097f1e">3. Motion Control</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org2b3b6a5" class="outline-2"> <div id="outline-container-org431e1f9" class="outline-2">
<h2 id="org2b3b6a5"><span class="section-number-2">1</span> Simscape Model</h2> <h2 id="org431e1f9"><span class="section-number-2">1</span> Simscape Model</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="simscape-model.html">Model of the Stewart Platform</a></li> <li><a href="simscape-model.html">Model of the Stewart Platform</a></li>
<li><a href="identification.html">Identification</a></li> <li><a href="identification.html">Identification of the Simscape Model</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org5dc817d" class="outline-2"> <div id="outline-container-org27d326c" class="outline-2">
<h2 id="org5dc817d"><span class="section-number-2">2</span> Architecture Study</h2> <h2 id="org27d326c"><span class="section-number-2">2</span> Architecture Study</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="kinematic-study.html">Kinematic Study</a></li> <li><a href="kinematic-study.html">Kinematic Study</a></li>
<li><a href="stiffness-study.html">Stiffness Matrix Study</a></li> <li><a href="stiffness-study.html">Stiffness Matrix Study</a></li>
<li>Jacobian Study</li> <li>Jacobian Study</li>
<li><a href="cubic-configuration.html">Cubic Architecture</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-orgccde31a" class="outline-2"> <div id="outline-container-orgd097f1e" class="outline-2">
<h2 id="orgccde31a"><span class="section-number-2">3</span> Motion Control</h2> <h2 id="orgd097f1e"><span class="section-number-2">3</span> Motion Control</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
<ul class="org-ul"> <ul class="org-ul">
<li>Active Damping</li> <li>Active Damping</li>
@ -294,7 +295,7 @@ for the JavaScript code in this tag.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Thomas Dehaeze</p> <p class="author">Author: Thomas Dehaeze</p>
<p class="date">Created: 2019-03-22 ven. 12:03</p> <p class="date">Created: 2019-03-25 lun. 18:11</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> <p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div> </div>
</body> </body>

View File

@ -26,12 +26,13 @@
* Simscape Model * Simscape Model
- [[file:simscape-model.org][Model of the Stewart Platform]] - [[file:simscape-model.org][Model of the Stewart Platform]]
- [[file:identification.org][Identification]] - [[file:identification.org][Identification of the Simscape Model]]
* Architecture Study * Architecture Study
- [[file:kinematic-study.org][Kinematic Study]] - [[file:kinematic-study.org][Kinematic Study]]
- [[file:stiffness-study.org][Stiffness Matrix Study]] - [[file:stiffness-study.org][Stiffness Matrix Study]]
- Jacobian Study - Jacobian Study
- [[file:cubic-configuration.org][Cubic Architecture]]
* Motion Control * Motion Control
- Active Damping - Active Damping

View File

@ -1,4 +1,28 @@
#+TITLE: Kinematic Study of the Stewart Platform #+TITLE: Kinematic Study of the Stewart Platform
:DRAWER:
#+STARTUP: overview
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
#+HTML_HEAD: <script src="js/jquery.min.js"></script>
#+HTML_HEAD: <script src="js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/readtheorg.js"></script>
#+LATEX_CLASS: cleanreport
#+LaTeX_CLASS_OPTIONS: [tocnp, secbreak, minted]
#+LaTeX_HEADER: \usepackage{svg}
#+LaTeX_HEADER: \newcommand{\authorFirstName}{Thomas}
#+LaTeX_HEADER: \newcommand{\authorLastName}{Dehaeze}
#+LaTeX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :mkdirp yes
:END:
* Functions * Functions
:PROPERTIES: :PROPERTIES:

Binary file not shown.

Binary file not shown.

37
references.bib Normal file
View File

@ -0,0 +1,37 @@
@inproceedings{abbas14_vibrat_stewar_platf,
author = {Hussain Abbas and Huang Hai},
title = {Vibration isolation concepts for non-cubic Stewart Platform
using modal control},
booktitle = {Proceedings of 2014 11th International Bhurban Conference on
Applied Sciences \& Technology (IBCAST) Islamabad, Pakistan,
14th - 18th January, 2014},
year = 2014,
pages = {nil},
doi = {10.1109/ibcast.2014.6778139},
url = {https://doi.org/10.1109/ibcast.2014.6778139},
month = 1,
}
@book{taghirad13_paral,
author = {Taghirad, Hamid},
title = {Parallel robots : mechanics and control},
year = 2013,
publisher = {CRC Press},
address = {Boca Raton, FL},
isbn = 9781466555778,
keywords = {favorite},
}
@article{geng94_six_degree_of_freed_activ,
author = {Z.J. Geng and L.S. Haynes},
title = {Six Degree-Of-Freedom Active Vibration Control Using the
Stewart Platforms},
journal = {IEEE Transactions on Control Systems Technology},
volume = 2,
number = 1,
pages = {45-53},
year = 1994,
doi = {10.1109/87.273110},
url = {https://doi.org/10.1109/87.273110},
keywords = {},
}

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2019-03-22 ven. 12:03 --> <!-- 2019-03-25 lun. 11:18 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Simscape Model</title> <title>Stewart Platform - Simscape Model</title>
@ -275,42 +275,136 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org9a10766">1. Function description and arguments</a></li> <li><a href="#org527cc13">1. initializeGeneralConfiguration</a>
<li><a href="#orgb6911a1">2. Initialization of the stewart structure</a></li> <ul>
<li><a href="#org030aed6">3. Bottom Plate</a></li> <li><a href="#orgea5f8f5">1.1. Function description</a></li>
<li><a href="#orged8012a">4. Top Plate</a></li> <li><a href="#org2db42cb">1.2. Optional Parameters</a></li>
<li><a href="#orgc74617a">5. Legs</a></li> <li><a href="#org2f9279a">1.3. Geometry Description</a></li>
<li><a href="#org7cd2aa5">6. Ball Joints</a></li> <li><a href="#org1409cf0">1.4. Compute Aa and Ab</a></li>
<li><a href="#org1d76ed9">7. More parameters are initialized</a></li> <li><a href="#orgb91c416">1.5. Returns Stewart Structure</a></li>
<li><a href="#orge9faa26">8. Save the Stewart Structure</a></li> </ul>
<li><a href="#orga207d03">9. initializeParameters Function</a></li> </li>
<li><a href="#org724c1a1">10. initializeSample</a></li> <li><a href="#orgc3aa910">2. computeGeometricalProperties</a>
<ul>
<li><a href="#org180196f">2.1. Function description</a></li>
<li><a href="#org12cee4f">2.2. Optional Parameters</a></li>
<li><a href="#org0010af5">2.3. Rotation matrices</a></li>
<li><a href="#org98f4bad">2.4. Jacobian matrices</a></li>
</ul>
</li>
<li><a href="#orgb3e53d1">3. initializeMechanicalElements</a>
<ul>
<li><a href="#orge7f185e">3.1. Function description</a></li>
<li><a href="#org6bd219d">3.2. Optional Parameters</a></li>
<li><a href="#org8d0d9c0">3.3. Bottom Plate</a></li>
<li><a href="#org23fd88c">3.4. Top Plate</a></li>
<li><a href="#org96d7dab">3.5. Legs</a></li>
<li><a href="#org66df86f">3.6. Ball Joints</a></li>
</ul>
</li>
<li><a href="#orgf3c4474">4. initializeSample</a>
<ul>
<li><a href="#org1ec4152">4.1. Function description</a></li>
<li><a href="#orgcd3268d">4.2. Optional Parameters</a></li>
<li><a href="#org29ee9ed">4.3. Save the Sample structure</a></li>
</ul>
</li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org9a10766" class="outline-2">
<h2 id="org9a10766"><span class="section-number-2">1</span> Function description and arguments</h2>
<div class="outline-text-2" id="text-1">
<p> <p>
The <code>initializeHexapod</code> function takes one structure that contains configurations for the hexapod and returns one structure representing the hexapod. Stewart platforms are generated in multiple steps.
</p> </p>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">]</span> = <span style="color: #93E0E3;">initializeHexapod</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span> <p>
</pre> First, geometrical parameters are defined:
</p>
<ul class="org-ul">
<li>\({}^Aa_i\) - Position of the joints fixed to the fixed base w.r.t \(\{A\}\)</li>
<li>\({}^Ab_i\) - Position of the joints fixed to the mobile platform w.r.t \(\{A\}\)</li>
<li>\({}^Bb_i\) - Position of the joints fixed to the mobile platform w.r.t \(\{B\}\)</li>
<li>\(H\) - Total height of the mobile platform</li>
</ul>
<p>
These parameter are enough to determine all the kinematic properties of the platform like the Jacobian, stroke, stiffness, &#x2026;
These geometrical parameters can be generated using different functions: <code>initializeCubicConfiguration</code> for cubic configuration or <code>initializeGeneralConfiguration</code> for more general configuration.
</p>
<p>
A function <code>computeGeometricalProperties</code> is then used to compute:
</p>
<ul class="org-ul">
<li>\(J_f\) - Jacobian matrix for the force location</li>
<li>\(J_d\) - Jacobian matrix for displacement estimation</li>
<li>\(R_m\) - Rotation matrices to position the leg vectors</li>
</ul>
<p>
Then, geometrical parameters are computed for all the mechanical elements with the function <code>initializeMechanicalElements</code>:
</p>
<ul class="org-ul">
<li>Shape of the platforms
<ul class="org-ul">
<li>External Radius</li>
<li>Internal Radius</li>
<li>Density</li>
<li>Thickness</li>
</ul></li>
<li>Shape of the Legs
<ul class="org-ul">
<li>Radius</li>
<li>Size of ball joint</li>
<li>Density</li>
</ul></li>
</ul>
<p>
Other Parameters are defined for the Simscape simulation:
</p>
<ul class="org-ul">
<li>Sample mass, volume and position (<code>initializeSample</code> function)</li>
<li>Location of the inertial sensor</li>
<li>Location of the point for the differential measurements</li>
<li>Location of the Jacobian point for velocity/displacement computation</li>
</ul>
<div id="outline-container-org527cc13" class="outline-2">
<h2 id="org527cc13"><span class="section-number-2">1</span> initializeGeneralConfiguration</h2>
<div class="outline-text-2" id="text-1">
</div> </div>
<div id="outline-container-orgea5f8f5" class="outline-3">
<h3 id="orgea5f8f5"><span class="section-number-3">1.1</span> Function description</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The <code>initializeGeneralConfiguration</code> function takes one structure that contains configurations for the hexapod and returns one structure representing the Hexapod.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">]</span> = <span style="color: #93E0E3;">initializeGeneralConfiguration</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org2db42cb" class="outline-3">
<h3 id="org2db42cb"><span class="section-number-3">1.2</span> Optional Parameters</h3>
<div class="outline-text-3" id="text-1-2">
<p> <p>
Default values for opts. Default values for opts.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">opts = struct<span style="color: #DCDCCC;">(</span><span style="text-decoration: underline;">...</span> <pre class="src src-matlab">opts = struct<span style="color: #DCDCCC;">(</span><span style="text-decoration: underline;">...</span>
<span style="color: #CC9393;">'height'</span>, <span style="color: #BFEBBF;">90</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Height of the platform [mm]</span> <span style="color: #CC9393;">'H_tot'</span>, <span style="color: #BFEBBF;">90</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Height of the platform [mm]</span>
<span style="color: #CC9393;">'density'</span>, <span style="color: #BFEBBF;">8000</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Density of the material used for the hexapod [kg/m3]</span> <span style="color: #CC9393;">'H_joint'</span>, <span style="color: #BFEBBF;">15</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Height of the joints [mm]</span>
<span style="color: #CC9393;">'k_ax'</span>, <span style="color: #BFEBBF;">1e8</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Stiffness of each actuator [N/m]</span> <span style="color: #CC9393;">'H_plate'</span>, <span style="color: #BFEBBF;">10</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Thickness of the fixed and mobile platforms [mm]</span>
<span style="color: #CC9393;">'c_ax'</span>, <span style="color: #BFEBBF;">1000</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Damping of each actuator [N/(m/s)]</span> <span style="color: #CC9393;">'R_bot'</span>, <span style="color: #BFEBBF;">100</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Radius where the legs articulations are positionned [mm]</span>
<span style="color: #CC9393;">'stroke'</span>, <span style="color: #BFEBBF;">50e</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">6</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Maximum stroke of each actuator [m]</span> <span style="color: #CC9393;">'R_top'</span>, <span style="color: #BFEBBF;">80</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Radius where the legs articulations are positionned [mm]</span>
<span style="color: #CC9393;">'name', 'stewart'</span> <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Name of the file</span> <span style="color: #CC9393;">'a_bot'</span>, <span style="color: #BFEBBF;">10</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Angle Offset [deg]</span>
<span style="color: #CC9393;">'a_top'</span>, <span style="color: #BFEBBF;">40</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Angle Offset [deg]</span>
<span style="color: #CC9393;">'da_top'</span>, <span style="color: #BFEBBF;">0</span> <span style="text-decoration: underline;">...</span> % Angle Offset from <span style="color: #BFEBBF;">0</span> position [deg]
<span style="color: #DCDCCC;">)</span>; <span style="color: #DCDCCC;">)</span>;
</pre> </pre>
</div> </div>
@ -329,37 +423,263 @@ Populate opts with input parameters
</div> </div>
</div> </div>
<div id="outline-container-orgb6911a1" class="outline-2"> <div id="outline-container-org2f9279a" class="outline-3">
<h2 id="orgb6911a1"><span class="section-number-2">2</span> Initialization of the stewart structure</h2> <h3 id="org2f9279a"><span class="section-number-3">1.3</span> Geometry Description</h3>
<div class="outline-text-2" id="text-2"> <div class="outline-text-3" id="text-1-3">
<p>
We initialize the Stewart structure
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = struct<span style="color: #DCDCCC;">()</span>;
</pre>
</div>
<p> <div id="orgc30ce24" class="figure">
And we defined its total height.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.H = opts.height; <span style="color: #7F9F7F;">% [mm]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org030aed6" class="outline-2">
<h2 id="org030aed6"><span class="section-number-2">3</span> Bottom Plate</h2>
<div class="outline-text-2" id="text-3">
<div id="org3d7fe71" class="figure">
<p><img src="./figs/stewart_bottom_plate.png" alt="stewart_bottom_plate.png" /> <p><img src="./figs/stewart_bottom_plate.png" alt="stewart_bottom_plate.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Schematic of the bottom plates with all the parameters</p> <p><span class="figure-number">Figure 1: </span>Schematic of the bottom plates with all the parameters</p>
</div> </div>
</div>
</div>
<div id="outline-container-org1409cf0" class="outline-3">
<h3 id="org1409cf0"><span class="section-number-3">1.4</span> Compute Aa and Ab</h3>
<div class="outline-text-3" id="text-1-4">
<p>
We compute \([a_1, a_2, a_3, a_4, a_5, a_6]^T\) and \([b_1, b_2, b_3, b_4, b_5, b_6]^T\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Aa = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
Ab = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
Bb = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">3</span>
Aa<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>opts.R_bot<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">-</span> opts.a_bot<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.R_bot<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">-</span> opts.a_bot<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.H_plate<span style="color: #7CB8BB;">+</span>opts.H_joint<span style="color: #DCDCCC;">]</span>;
Aa<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>opts.R_bot<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.a_bot<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.R_bot<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.a_bot<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.H_plate<span style="color: #7CB8BB;">+</span>opts.H_joint<span style="color: #DCDCCC;">]</span>;
Ab<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>opts.R_top<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.da_top <span style="color: #7CB8BB;">-</span> opts.a_top<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.R_top<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.da_top <span style="color: #7CB8BB;">-</span> opts.a_top<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.H_tot <span style="color: #7CB8BB;">-</span> opts.H_plate <span style="color: #7CB8BB;">-</span> opts.H_joint<span style="color: #DCDCCC;">]</span>;
Ab<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>opts.R_top<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.da_top <span style="color: #7CB8BB;">+</span> opts.a_top<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.R_top<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> opts.da_top <span style="color: #7CB8BB;">+</span> opts.a_top<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
opts.H_tot <span style="color: #7CB8BB;">-</span> opts.H_plate <span style="color: #7CB8BB;">-</span> opts.H_joint<span style="color: #DCDCCC;">]</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
Bb = Ab <span style="color: #7CB8BB;">-</span> opts.H_tot<span style="color: #7CB8BB;">*</span><span style="color: #DCDCCC;">[</span><span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">1</span><span style="color: #DCDCCC;">]</span>;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb91c416" class="outline-3">
<h3 id="orgb91c416"><span class="section-number-3">1.5</span> Returns Stewart Structure</h3>
<div class="outline-text-3" id="text-1-5">
<div class="org-src-container">
<pre class="src src-matlab"> stewart = struct<span style="color: #DCDCCC;">()</span>;
stewart.Aa = Aa;
stewart.Ab = Ab;
stewart.Bb = Bb;
stewart.H_tot = opts.H_tot;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgc3aa910" class="outline-2">
<h2 id="orgc3aa910"><span class="section-number-2">2</span> computeGeometricalProperties</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-org180196f" class="outline-3">
<h3 id="org180196f"><span class="section-number-3">2.1</span> Function description</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">]</span> = <span style="color: #93E0E3;">computeGeometricalProperties</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">stewart</span>, <span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org12cee4f" class="outline-3">
<h3 id="org12cee4f"><span class="section-number-3">2.2</span> Optional Parameters</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Default values for opts.
</p>
<div class="org-src-container">
<pre class="src src-matlab">opts = struct<span style="color: #DCDCCC;">(</span><span style="text-decoration: underline;">...</span>
<span style="color: #CC9393;">'Jd_pos'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">30</span><span style="color: #BFEBBF;">]</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span style="color: #CC9393;">'Jf_pos'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">30</span><span style="color: #BFEBBF;">]</span> <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<p>
Populate opts with input parameters
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">if</span> exist<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'opts_param','var'</span><span style="color: #DCDCCC;">)</span>
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">opt</span> = <span style="color: #BFEBBF;">fieldnames</span><span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">opts_param</span><span style="color: #DCDCCC;">)</span><span style="color: #BFEBBF;">'</span>
opts.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span> = opts_param.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org0010af5" class="outline-3">
<h3 id="org0010af5"><span class="section-number-3">2.3</span> Rotation matrices</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We initialize \(l_i\) and \(\hat{s}_i\)
</p>
<div class="org-src-container">
<pre class="src src-matlab">leg_length = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">1</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
leg_vectors = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<p>
We compute \(b_i - a_i\), and then:
</p>
\begin{align*}
l_i &= \left|b_i - a_i\right| \\
\hat{s}_i &= \frac{b_i - a_i}{l_i}
\end{align*}
<div class="org-src-container">
<pre class="src src-matlab">legs = stewart.Ab <span style="color: #7CB8BB;">-</span> stewart.Aa;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
leg_length<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span> = norm<span style="color: #DCDCCC;">(</span>legs<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = legs<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> <span style="color: #7CB8BB;">/</span> leg_length<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
<p>
We compute rotation matrices to have the orientation of the legs.
The rotation matrix transforms the \(z\) axis to the axis of the leg. The other axis are not important here.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.Rm = struct<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'R'</span>, eye<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">3</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
sx = cross<span style="color: #DCDCCC;">(</span>leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">1</span> <span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span><span style="color: #BFEBBF;">]</span><span style="color: #DCDCCC;">)</span>;
sx = sx<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sx<span style="color: #DCDCCC;">)</span>;
sy = <span style="color: #7CB8BB;">-</span>cross<span style="color: #DCDCCC;">(</span>sx, leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
sy = sy<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sy<span style="color: #DCDCCC;">)</span>;
sz = leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span>;
sz = sz<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sz<span style="color: #DCDCCC;">)</span>;
stewart.Rm<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span>.R = <span style="color: #DCDCCC;">[</span>sx', sy', sz'<span style="color: #DCDCCC;">]</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org98f4bad" class="outline-3">
<h3 id="org98f4bad"><span class="section-number-3">2.4</span> Jacobian matrices</h3>
<div class="outline-text-3" id="text-2-4">
<p>
Compute Jacobian Matrix
</p>
<div class="org-src-container">
<pre class="src src-matlab">Jd = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
Jd<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">1</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span> = leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span>;
Jd<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">4</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span> = cross<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">001</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">(</span>stewart.Bb<span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #D0BF8F;">)</span> <span style="color: #7CB8BB;">-</span> opts.Jd_pos<span style="color: #BFEBBF;">)</span>, leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
stewart.Jd = Jd;
stewart.Jd_inv = inv<span style="color: #DCDCCC;">(</span>Jd<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Jf = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
Jf<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">1</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span> = leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span>;
Jf<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">4</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span> = cross<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">001</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">(</span>stewart.Bb<span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #D0BF8F;">)</span> <span style="color: #7CB8BB;">-</span> opts.Jf_pos<span style="color: #BFEBBF;">)</span>, leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
stewart.Jf = Jf;
stewart.Jf_inv = inv<span style="color: #DCDCCC;">(</span>Jf<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb3e53d1" class="outline-2">
<h2 id="orgb3e53d1"><span class="section-number-2">3</span> initializeMechanicalElements</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-orge7f185e" class="outline-3">
<h3 id="orge7f185e"><span class="section-number-3">3.1</span> Function description</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">]</span> = <span style="color: #93E0E3;">initializeMechanicalElements</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">stewart</span>, <span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org6bd219d" class="outline-3">
<h3 id="org6bd219d"><span class="section-number-3">3.2</span> Optional Parameters</h3>
<div class="outline-text-3" id="text-3-2">
<p>
Default values for opts.
</p>
<div class="org-src-container">
<pre class="src src-matlab">opts = struct<span style="color: #DCDCCC;">(</span><span style="text-decoration: underline;">...</span>
<span style="color: #CC9393;">'thickness'</span>, <span style="color: #BFEBBF;">10</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Thickness of the base and platform [mm]</span>
<span style="color: #CC9393;">'density'</span>, <span style="color: #BFEBBF;">1000</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Density of the material used for the hexapod [kg/m3]</span>
<span style="color: #CC9393;">'k_ax'</span>, <span style="color: #BFEBBF;">1e8</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Stiffness of each actuator [N/m]</span>
<span style="color: #CC9393;">'c_ax'</span>, <span style="color: #BFEBBF;">1000</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Damping of each actuator [N/(m/s)]</span>
<span style="color: #CC9393;">'stroke'</span>, <span style="color: #BFEBBF;">50e</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">6</span> <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% Maximum stroke of each actuator [m]</span>
<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<p>
Populate opts with input parameters
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">if</span> exist<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'opts_param','var'</span><span style="color: #DCDCCC;">)</span>
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">opt</span> = <span style="color: #BFEBBF;">fieldnames</span><span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">opts_param</span><span style="color: #DCDCCC;">)</span><span style="color: #BFEBBF;">'</span>
opts.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span> = opts_param.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org8d0d9c0" class="outline-3">
<h3 id="org8d0d9c0"><span class="section-number-3">3.3</span> Bottom Plate</h3>
<div class="outline-text-3" id="text-3-3">
<div id="org38598b1" class="figure">
<p><img src="./figs/stewart_bottom_plate.png" alt="stewart_bottom_plate.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Schematic of the bottom plates with all the parameters</p>
</div>
<p> <p>
The bottom plate structure is initialized. The bottom plate structure is initialized.
@ -382,16 +702,7 @@ BP.Rext = <span style="color: #BFEBBF;">150</span>; <span style="color: #7F9F7F;
We define its thickness. We define its thickness.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">BP.H = <span style="color: #BFEBBF;">10</span>; <span style="color: #7F9F7F;">% Thickness of the Bottom Plate [mm]</span> <pre class="src src-matlab">BP.H = opts.thickness; <span style="color: #7F9F7F;">% Thickness of the Bottom Plate [mm]</span>
</pre>
</div>
<p>
At which radius legs will be fixed and with that angle offset.
</p>
<div class="org-src-container">
<pre class="src src-matlab">BP.Rleg = <span style="color: #BFEBBF;">100</span>; <span style="color: #7F9F7F;">% Radius where the legs articulations are positionned [mm]</span>
BP.alpha = <span style="color: #BFEBBF;">10</span>; <span style="color: #7F9F7F;">% Angle Offset [deg]</span>
</pre> </pre>
</div> </div>
@ -429,9 +740,9 @@ The structure is added to the stewart structure
</div> </div>
</div> </div>
<div id="outline-container-orged8012a" class="outline-2"> <div id="outline-container-org23fd88c" class="outline-3">
<h2 id="orged8012a"><span class="section-number-2">4</span> Top Plate</h2> <h3 id="org23fd88c"><span class="section-number-3">3.4</span> Top Plate</h3>
<div class="outline-text-2" id="text-4"> <div class="outline-text-3" id="text-3-4">
<p> <p>
The top plate structure is initialized. The top plate structure is initialized.
</p> </p>
@ -457,16 +768,6 @@ The thickness of the top plate.
</pre> </pre>
</div> </div>
<p>
At which radius and angle are fixed the legs.
</p>
<div class="org-src-container">
<pre class="src src-matlab">TP.Rleg = <span style="color: #BFEBBF;">100</span>; <span style="color: #7F9F7F;">% Radius where the legs articulations are positionned [mm]</span>
TP.alpha = <span style="color: #BFEBBF;">20</span>; <span style="color: #7F9F7F;">% Angle [deg]</span>
TP.dalpha = <span style="color: #BFEBBF;">0</span>; % Angle Offset from <span style="color: #BFEBBF;">0</span> position [deg]
</pre>
</div>
<p> <p>
The density of its material. The density of its material.
</p> </p>
@ -501,17 +802,16 @@ The structure is added to the stewart structure
</div> </div>
</div> </div>
<div id="outline-container-orgc74617a" class="outline-2"> <div id="outline-container-org96d7dab" class="outline-3">
<h2 id="orgc74617a"><span class="section-number-2">5</span> Legs</h2> <h3 id="org96d7dab"><span class="section-number-3">3.5</span> Legs</h3>
<div class="outline-text-2" id="text-5"> <div class="outline-text-3" id="text-3-5">
<div id="orgc225133" class="figure"> <div id="orga9ade83" class="figure">
<p><img src="./figs/stewart_legs.png" alt="stewart_legs.png" /> <p><img src="./figs/stewart_legs.png" alt="stewart_legs.png" />
</p> </p>
<p><span class="figure-number">Figure 2: </span>Schematic for the legs of the Stewart platform</p> <p><span class="figure-number">Figure 3: </span>Schematic for the legs of the Stewart platform</p>
</div> </div>
<p> <p>
The leg structure is initialized. The leg structure is initialized.
</p> </p>
@ -570,6 +870,29 @@ The radius of spheres representing the ball joints are defined.
</pre> </pre>
</div> </div>
<p>
We estimate the length of the legs.
</p>
<div class="org-src-container">
<pre class="src src-matlab">legs = stewart.Ab <span style="color: #7CB8BB;">-</span> stewart.Aa;
Leg.lenght = norm<span style="color: #DCDCCC;">(</span>legs<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">1</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">1</span>.<span style="color: #BFEBBF;">5</span>;
</pre>
</div>
<p>
Then the shape of the bottom leg is estimated
</p>
<div class="org-src-container">
<pre class="src src-matlab">Leg.shape.bot = <span style="text-decoration: underline;">...</span>
<span style="color: #DCDCCC;">[</span><span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span>; <span style="text-decoration: underline;">...</span>
Leg.Rbot <span style="color: #BFEBBF;">0</span>; <span style="text-decoration: underline;">...</span>
Leg.Rbot Leg.lenght; <span style="text-decoration: underline;">...</span>
Leg.Rtop Leg.lenght; <span style="text-decoration: underline;">...</span>
Leg.Rtop <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span>Leg.lenght; <span style="text-decoration: underline;">...</span>
<span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span>Leg.lenght<span style="color: #DCDCCC;">]</span>;
</pre>
</div>
<p> <p>
The structure is added to the stewart structure The structure is added to the stewart structure
</p> </p>
@ -580,14 +903,14 @@ The structure is added to the stewart structure
</div> </div>
</div> </div>
<div id="outline-container-org7cd2aa5" class="outline-2"> <div id="outline-container-org66df86f" class="outline-3">
<h2 id="org7cd2aa5"><span class="section-number-2">6</span> Ball Joints</h2> <h3 id="org66df86f"><span class="section-number-3">3.6</span> Ball Joints</h3>
<div class="outline-text-2" id="text-6"> <div class="outline-text-3" id="text-3-6">
<div id="org7b92b11" class="figure"> <div id="org250b20b" class="figure">
<p><img src="./figs/stewart_ball_joints.png" alt="stewart_ball_joints.png" /> <p><img src="./figs/stewart_ball_joints.png" alt="stewart_ball_joints.png" />
</p> </p>
<p><span class="figure-number">Figure 3: </span>Schematic of the support for the ball joints</p> <p><span class="figure-number">Figure 4: </span>Schematic of the support for the ball joints</p>
</div> </div>
<p> <p>
@ -615,7 +938,7 @@ SP.c = <span style="color: #BFEBBF;">0</span>; <span style="color: #7F9F7F;">% [
Its height is defined Its height is defined
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">SP.H = <span style="color: #BFEBBF;">15</span>; <span style="color: #7F9F7F;">% [mm]</span> <pre class="src src-matlab">SP.H = stewart.Aa<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">1</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span> <span style="color: #7CB8BB;">-</span> BP.H; <span style="color: #7F9F7F;">% [mm]</span>
</pre> </pre>
</div> </div>
@ -660,195 +983,74 @@ The structure is added to the Hexapod structure
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org1d76ed9" class="outline-2">
<h2 id="org1d76ed9"><span class="section-number-2">7</span> More parameters are initialized</h2>
<div class="outline-text-2" id="text-7">
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeParameters<span style="color: #DCDCCC;">(</span>stewart<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
</div>
</div> </div>
<div id="outline-container-orge9faa26" class="outline-2"> <div id="outline-container-orgf3c4474" class="outline-2">
<h2 id="orge9faa26"><span class="section-number-2">8</span> Save the Stewart Structure</h2> <h2 id="orgf3c4474"><span class="section-number-2">4</span> initializeSample</h2>
<div class="outline-text-2" id="text-8"> <div class="outline-text-2" id="text-4">
<div class="org-src-container">
<pre class="src src-matlab">save<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'./mat/stewart.mat', 'stewart'</span><span style="color: #DCDCCC;">)</span>
</pre>
</div>
</div>
</div> </div>
<div id="outline-container-orga207d03" class="outline-2"> <div id="outline-container-org1ec4152" class="outline-3">
<h2 id="orga207d03"><span class="section-number-2">9</span> initializeParameters Function</h2> <h3 id="org1ec4152"><span class="section-number-3">4.1</span> Function description</h3>
<div class="outline-text-2" id="text-9"> <div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">]</span> = <span style="color: #93E0E3;">initializeParameters</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">stewart</span><span style="color: #DCDCCC;">)</span>
</pre>
</div>
<p>
We first compute \([a_1, a_2, a_3, a_4, a_5, a_6]^T\) and \([b_1, b_2, b_3, b_4, b_5, b_6]^T\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.Aa = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
stewart.Ab = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
stewart.Bb = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">3</span>
stewart.Aa<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>stewart.BP.Rleg<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">-</span> stewart.BP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.BP.Rleg<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">-</span> stewart.BP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.BP.H<span style="color: #7CB8BB;">+</span>stewart.SP.H<span style="color: #DCDCCC;">]</span>;
stewart.Aa<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>stewart.BP.Rleg<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.BP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.BP.Rleg<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.BP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.BP.H<span style="color: #7CB8BB;">+</span>stewart.SP.H<span style="color: #DCDCCC;">]</span>;
stewart.Ab<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>stewart.TP.Rleg<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.TP.dalpha <span style="color: #7CB8BB;">-</span> stewart.TP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.TP.Rleg<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.TP.dalpha <span style="color: #7CB8BB;">-</span> stewart.TP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.H <span style="color: #7CB8BB;">-</span> stewart.TP.H <span style="color: #7CB8BB;">-</span> stewart.SP.H<span style="color: #DCDCCC;">]</span>;
stewart.Ab<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = <span style="color: #DCDCCC;">[</span>stewart.TP.Rleg<span style="color: #7CB8BB;">*</span>cos<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.TP.dalpha <span style="color: #7CB8BB;">+</span> stewart.TP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.TP.Rleg<span style="color: #7CB8BB;">*</span>sin<span style="color: #BFEBBF;">(</span> <span style="color: #BFEBBF;">pi</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">180</span><span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">120</span><span style="color: #7CB8BB;">*</span><span style="color: #93E0E3;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #7CB8BB;">-</span><span style="color: #BFEBBF;">1</span><span style="color: #93E0E3;">)</span> <span style="color: #7CB8BB;">+</span> stewart.TP.dalpha <span style="color: #7CB8BB;">+</span> stewart.TP.alpha<span style="color: #D0BF8F;">)</span> <span style="color: #BFEBBF;">)</span>, <span style="text-decoration: underline;">...</span>
stewart.H <span style="color: #7CB8BB;">-</span> stewart.TP.H <span style="color: #7CB8BB;">-</span> stewart.SP.H<span style="color: #DCDCCC;">]</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
stewart.Bb = stewart.Ab <span style="color: #7CB8BB;">-</span> stewart.H<span style="color: #7CB8BB;">*</span><span style="color: #DCDCCC;">[</span><span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">1</span><span style="color: #DCDCCC;">]</span>;
</pre>
</div>
<p>
Now, we compute the leg vectors \(\hat{s}_i\) and leg position \(l_i\):
\[ b_i - a_i = l_i \hat{s}_i \]
</p>
<p>
We initialize \(l_i\) and \(\hat{s}_i\)
</p>
<div class="org-src-container">
<pre class="src src-matlab">leg_length = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">1</span><span style="color: #DCDCCC;">)</span>; <span style="color: #7F9F7F;">% [mm]</span>
leg_vectors = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span>, <span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<p>
We compute \(b_i - a_i\), and then:
</p>
\begin{align*}
l_i &= \left|b_i - a_i\right| \\
\hat{s}_i &= \frac{b_i - a_i}{l_i}
\end{align*}
<div class="org-src-container">
<pre class="src src-matlab">legs = stewart.Ab <span style="color: #7CB8BB;">-</span> stewart.Aa;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
leg_length<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span> = norm<span style="color: #DCDCCC;">(</span>legs<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> = legs<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span> <span style="color: #7CB8BB;">/</span> leg_length<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
<p>
Then the shape of the bottom leg is estimated
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.Leg.lenght = leg_length<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">1</span><span style="color: #DCDCCC;">)</span><span style="color: #7CB8BB;">/</span><span style="color: #BFEBBF;">1</span>.<span style="color: #BFEBBF;">5</span>;
stewart.Leg.shape.bot = <span style="text-decoration: underline;">...</span>
<span style="color: #DCDCCC;">[</span><span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span>; <span style="text-decoration: underline;">...</span>
stewart.Leg.Rbot <span style="color: #BFEBBF;">0</span>; <span style="text-decoration: underline;">...</span>
stewart.Leg.Rbot stewart.Leg.lenght; <span style="text-decoration: underline;">...</span>
stewart.Leg.Rtop stewart.Leg.lenght; <span style="text-decoration: underline;">...</span>
stewart.Leg.Rtop <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span>stewart.Leg.lenght; <span style="text-decoration: underline;">...</span>
<span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">2</span><span style="color: #7CB8BB;">*</span>stewart.Leg.lenght<span style="color: #DCDCCC;">]</span>;
</pre>
</div>
<p>
We compute rotation matrices to have the orientation of the legs.
The rotation matrix transforms the \(z\) axis to the axis of the leg. The other axis are not important here.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.Rm = struct<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'R'</span>, eye<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">3</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
sx = cross<span style="color: #DCDCCC;">(</span>leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">1</span> <span style="color: #BFEBBF;">0</span> <span style="color: #BFEBBF;">0</span><span style="color: #BFEBBF;">]</span><span style="color: #DCDCCC;">)</span>;
sx = sx<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sx<span style="color: #DCDCCC;">)</span>;
sy = <span style="color: #7CB8BB;">-</span>cross<span style="color: #DCDCCC;">(</span>sx, leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
sy = sy<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sy<span style="color: #DCDCCC;">)</span>;
sz = leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>,<span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span>;
sz = sz<span style="color: #7CB8BB;">/</span>norm<span style="color: #DCDCCC;">(</span>sz<span style="color: #DCDCCC;">)</span>;
stewart.Rm<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span><span style="color: #DCDCCC;">)</span>.R = <span style="color: #DCDCCC;">[</span>sx', sy', sz'<span style="color: #DCDCCC;">]</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
<p>
Compute Jacobian Matrix
</p>
<div class="org-src-container">
<pre class="src src-matlab">J = zeros<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">i</span> = <span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">:</span><span style="color: #BFEBBF;">6</span>
J<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">1</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">3</span><span style="color: #DCDCCC;">)</span> = leg_vectors<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #DCDCCC;">)</span>;
J<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #BFEBBF;">4</span><span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">6</span><span style="color: #DCDCCC;">)</span> = cross<span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">001</span><span style="color: #7CB8BB;">*</span><span style="color: #BFEBBF;">(</span>stewart.Ab<span style="color: #D0BF8F;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #D0BF8F;">)</span><span style="color: #7CB8BB;">-</span> stewart.H<span style="color: #7CB8BB;">*</span><span style="color: #D0BF8F;">[</span><span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">0</span>,<span style="color: #BFEBBF;">1</span><span style="color: #D0BF8F;">]</span><span style="color: #BFEBBF;">)</span>, leg_vectors<span style="color: #BFEBBF;">(</span><span style="color: #BFEBBF;">i</span>, <span style="color: #7CB8BB;">:</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span>
stewart.J = J;
stewart.Jinv = inv<span style="color: #DCDCCC;">(</span>J<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart.K = stewart.Leg.k_ax<span style="color: #7CB8BB;">*</span>stewart.J'<span style="color: #7CB8BB;">*</span>stewart.J;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"> <span style="color: #F0DFAF; font-weight: bold;">end</span>
<span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org724c1a1" class="outline-2">
<h2 id="org724c1a1"><span class="section-number-2">10</span> initializeSample</h2>
<div class="outline-text-2" id="text-10">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[]</span> = <span style="color: #93E0E3;">initializeSample</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span> <pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">function</span> <span style="color: #DCDCCC;">[]</span> = <span style="color: #93E0E3;">initializeSample</span><span style="color: #DCDCCC;">(</span><span style="color: #DFAF8F;">opts_param</span><span style="color: #DCDCCC;">)</span>
<span style="color: #7F9F7F; font-weight: bold; text-decoration: overline;">%% Default values for opts</span> </pre>
sample = struct<span style="color: #DCDCCC;">(</span> <span style="text-decoration: underline;">...</span> </div>
<span style="color: #CC9393;">'radius'</span>, <span style="color: #BFEBBF;">100</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% radius of the cylinder [mm]</span> </div>
<span style="color: #CC9393;">'height'</span>, <span style="color: #BFEBBF;">100</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% height of the cylinder [mm]</span> </div>
<span style="color: #CC9393;">'mass'</span>, <span style="color: #BFEBBF;">10</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% mass of the cylinder [kg]</span>
<span style="color: #CC9393;">'measheight'</span>, <span style="color: #BFEBBF;">50</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% measurement point z-offset [mm]</span>
<span style="color: #CC9393;">'offset'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span><span style="color: #BFEBBF;">]</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% offset position of the sample [mm]</span>
<span style="color: #CC9393;">'color'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">9</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">1</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">]</span> <span style="text-decoration: underline;">...</span>
<span style="color: #DCDCCC;">)</span>;
<span style="color: #7F9F7F; font-weight: bold; text-decoration: overline;">%% Populate opts with input parameters</span> <div id="outline-container-orgcd3268d" class="outline-3">
<span style="color: #F0DFAF; font-weight: bold;">if</span> exist<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'opts_param','var'</span><span style="color: #DCDCCC;">)</span> <h3 id="orgcd3268d"><span class="section-number-3">4.2</span> Optional Parameters</h3>
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">opt</span> = <span style="color: #BFEBBF;">fieldnames</span><span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">opts_param</span><span style="color: #DCDCCC;">)</span><span style="color: #BFEBBF;">'</span> <div class="outline-text-3" id="text-4-2">
sample.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span> = opts_param.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span>; <p>
<span style="color: #F0DFAF; font-weight: bold;">end</span> Default values for opts.
</p>
<div class="org-src-container">
<pre class="src src-matlab">sample = struct<span style="color: #DCDCCC;">(</span> <span style="text-decoration: underline;">...</span>
<span style="color: #CC9393;">'radius'</span>, <span style="color: #BFEBBF;">100</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% radius of the cylinder [mm]</span>
<span style="color: #CC9393;">'height'</span>, <span style="color: #BFEBBF;">100</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% height of the cylinder [mm]</span>
<span style="color: #CC9393;">'mass'</span>, <span style="color: #BFEBBF;">10</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% mass of the cylinder [kg]</span>
<span style="color: #CC9393;">'measheight'</span>, <span style="color: #BFEBBF;">50</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% measurement point z-offset [mm]</span>
<span style="color: #CC9393;">'offset'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span>, <span style="color: #BFEBBF;">0</span><span style="color: #BFEBBF;">]</span>, <span style="text-decoration: underline;">...</span> <span style="color: #7F9F7F;">% offset position of the sample [mm]</span>
<span style="color: #CC9393;">'color'</span>, <span style="color: #BFEBBF;">[</span><span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">9</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">1</span> <span style="color: #BFEBBF;">0</span>.<span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">]</span> <span style="text-decoration: underline;">...</span>
<span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<p>
Populate opts with input parameters
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">if</span> exist<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'opts_param','var'</span><span style="color: #DCDCCC;">)</span>
<span style="color: #F0DFAF; font-weight: bold;">for</span> <span style="color: #DFAF8F;">opt</span> = <span style="color: #BFEBBF;">fieldnames</span><span style="color: #DCDCCC;">(</span><span style="color: #BFEBBF;">opts_param</span><span style="color: #DCDCCC;">)</span><span style="color: #BFEBBF;">'</span>
sample.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span> = opts_param.<span style="color: #DCDCCC;">(</span>opt<span style="color: #BFEBBF;">{</span><span style="color: #BFEBBF;">1</span><span style="color: #BFEBBF;">}</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span> <span style="color: #F0DFAF; font-weight: bold;">end</span>
<span style="color: #7F9F7F; font-weight: bold; text-decoration: overline;">%% Save</span>
save<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'./mat/sample.mat', 'sample'</span><span style="color: #DCDCCC;">)</span>;
<span style="color: #F0DFAF; font-weight: bold;">end</span> <span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org29ee9ed" class="outline-3">
<h3 id="org29ee9ed"><span class="section-number-3">4.3</span> Save the Sample structure</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab">save<span style="color: #DCDCCC;">(</span><span style="color: #CC9393;">'./mat/sample.mat', 'sample'</span><span style="color: #DCDCCC;">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span style="color: #F0DFAF; font-weight: bold;">end</span>
</pre>
</div>
</div>
</div>
</div>
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Thomas Dehaeze</p> <p class="author">Author: Thomas Dehaeze</p>
<p class="date">Created: 2019-03-22 ven. 12:03</p> <p class="date">Created: 2019-03-25 lun. 11:18</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> <p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div> </div>
</body> </body>

View File

@ -17,29 +17,73 @@
#+LaTeX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com} #+LaTeX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
#+PROPERTY: header-args:matlab :session *MATLAB* #+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments no #+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports bode #+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no #+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs #+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :mkdirp yes #+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:matlab+ :tangle src/initializeHexapod.m
:END: :END:
* Function description and arguments Stewart platforms are generated in multiple steps.
The =initializeHexapod= function takes one structure that contains configurations for the hexapod and returns one structure representing the hexapod.
First, geometrical parameters are defined:
- ${}^Aa_i$ - Position of the joints fixed to the fixed base w.r.t $\{A\}$
- ${}^Ab_i$ - Position of the joints fixed to the mobile platform w.r.t $\{A\}$
- ${}^Bb_i$ - Position of the joints fixed to the mobile platform w.r.t $\{B\}$
- $H$ - Total height of the mobile platform
These parameter are enough to determine all the kinematic properties of the platform like the Jacobian, stroke, stiffness, ...
These geometrical parameters can be generated using different functions: =initializeCubicConfiguration= for cubic configuration or =initializeGeneralConfiguration= for more general configuration.
A function =computeGeometricalProperties= is then used to compute:
- $J_f$ - Jacobian matrix for the force location
- $J_d$ - Jacobian matrix for displacement estimation
- $R_m$ - Rotation matrices to position the leg vectors
Then, geometrical parameters are computed for all the mechanical elements with the function =initializeMechanicalElements=:
- Shape of the platforms
- External Radius
- Internal Radius
- Density
- Thickness
- Shape of the Legs
- Radius
- Size of ball joint
- Density
Other Parameters are defined for the Simscape simulation:
- Sample mass, volume and position (=initializeSample= function)
- Location of the inertial sensor
- Location of the point for the differential measurements
- Location of the Jacobian point for velocity/displacement computation
* initializeGeneralConfiguration
:PROPERTIES:
:HEADER-ARGS:matlab+: :exports code
:HEADER-ARGS:matlab+: :comments no
:HEADER-ARGS:matlab+: :eval no
:HEADER-ARGS:matlab+: :tangle src/initializeGeneralConfiguration.m
:END:
** Function description
The =initializeGeneralConfiguration= function takes one structure that contains configurations for the hexapod and returns one structure representing the Hexapod.
#+begin_src matlab #+begin_src matlab
function [stewart] = initializeHexapod(opts_param) function [stewart] = initializeGeneralConfiguration(opts_param)
#+end_src #+end_src
** Optional Parameters
Default values for opts. Default values for opts.
#+begin_src matlab #+begin_src matlab
opts = struct(... opts = struct(...
'height', 90, ... % Height of the platform [mm] 'H_tot', 90, ... % Height of the platform [mm]
'density', 8000, ... % Density of the material used for the hexapod [kg/m3] 'H_joint', 15, ... % Height of the joints [mm]
'k_ax', 1e8, ... % Stiffness of each actuator [N/m] 'H_plate', 10, ... % Thickness of the fixed and mobile platforms [mm]
'c_ax', 1000, ... % Damping of each actuator [N/(m/s)] 'R_bot', 100, ... % Radius where the legs articulations are positionned [mm]
'stroke', 50e-6, ... % Maximum stroke of each actuator [m] 'R_top', 80, ... % Radius where the legs articulations are positionned [mm]
'name', 'stewart' ... % Name of the file 'a_bot', 10, ... % Angle Offset [deg]
'a_top', 40, ... % Angle Offset [deg]
'da_top', 0 ... % Angle Offset from 0 position [deg]
); );
#+end_src #+end_src
@ -52,22 +96,190 @@ Populate opts with input parameters
end end
#+end_src #+end_src
* Initialization of the stewart structure ** Geometry Description
We initialize the Stewart structure
#+begin_src matlab
stewart = struct();
#+end_src
And we defined its total height.
#+begin_src matlab
stewart.H = opts.height; % [mm]
#+end_src
* Bottom Plate
#+name: fig:stewart_bottom_plate #+name: fig:stewart_bottom_plate
#+caption: Schematic of the bottom plates with all the parameters #+caption: Schematic of the bottom plates with all the parameters
[[file:./figs/stewart_bottom_plate.png]] [[file:./figs/stewart_bottom_plate.png]]
** Compute Aa and Ab
We compute $[a_1, a_2, a_3, a_4, a_5, a_6]^T$ and $[b_1, b_2, b_3, b_4, b_5, b_6]^T$.
#+begin_src matlab
Aa = zeros(6, 3); % [mm]
Ab = zeros(6, 3); % [mm]
Bb = zeros(6, 3); % [mm]
#+end_src
#+begin_src matlab
for i = 1:3
Aa(2*i-1,:) = [opts.R_bot*cos( pi/180*(120*(i-1) - opts.a_bot) ), ...
opts.R_bot*sin( pi/180*(120*(i-1) - opts.a_bot) ), ...
opts.H_plate+opts.H_joint];
Aa(2*i,:) = [opts.R_bot*cos( pi/180*(120*(i-1) + opts.a_bot) ), ...
opts.R_bot*sin( pi/180*(120*(i-1) + opts.a_bot) ), ...
opts.H_plate+opts.H_joint];
Ab(2*i-1,:) = [opts.R_top*cos( pi/180*(120*(i-1) + opts.da_top - opts.a_top) ), ...
opts.R_top*sin( pi/180*(120*(i-1) + opts.da_top - opts.a_top) ), ...
opts.H_tot - opts.H_plate - opts.H_joint];
Ab(2*i,:) = [opts.R_top*cos( pi/180*(120*(i-1) + opts.da_top + opts.a_top) ), ...
opts.R_top*sin( pi/180*(120*(i-1) + opts.da_top + opts.a_top) ), ...
opts.H_tot - opts.H_plate - opts.H_joint];
end
Bb = Ab - opts.H_tot*[0,0,1];
#+end_src
** Returns Stewart Structure
#+begin_src matlab :results none
stewart = struct();
stewart.Aa = Aa;
stewart.Ab = Ab;
stewart.Bb = Bb;
stewart.H_tot = opts.H_tot;
end
#+end_src
* computeGeometricalProperties
:PROPERTIES:
:HEADER-ARGS:matlab+: :exports code
:HEADER-ARGS:matlab+: :comments no
:HEADER-ARGS:matlab+: :eval no
:HEADER-ARGS:matlab+: :tangle src/computeGeometricalProperties.m
:END:
** Function description
#+begin_src matlab
function [stewart] = computeGeometricalProperties(stewart, opts_param)
#+end_src
** Optional Parameters
Default values for opts.
#+begin_src matlab
opts = struct(...
'Jd_pos', [0, 0, 30], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, 30] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
#+end_src
Populate opts with input parameters
#+begin_src matlab
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
#+end_src
** Rotation matrices
We initialize $l_i$ and $\hat{s}_i$
#+begin_src matlab
leg_length = zeros(6, 1); % [mm]
leg_vectors = zeros(6, 3);
#+end_src
We compute $b_i - a_i$, and then:
\begin{align*}
l_i &= \left|b_i - a_i\right| \\
\hat{s}_i &= \frac{b_i - a_i}{l_i}
\end{align*}
#+begin_src matlab
legs = stewart.Ab - stewart.Aa;
for i = 1:6
leg_length(i) = norm(legs(i,:));
leg_vectors(i,:) = legs(i,:) / leg_length(i);
end
#+end_src
We compute rotation matrices to have the orientation of the legs.
The rotation matrix transforms the $z$ axis to the axis of the leg. The other axis are not important here.
#+begin_src matlab
stewart.Rm = struct('R', eye(3));
for i = 1:6
sx = cross(leg_vectors(i,:), [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, leg_vectors(i,:));
sy = sy/norm(sy);
sz = leg_vectors(i,:);
sz = sz/norm(sz);
stewart.Rm(i).R = [sx', sy', sz'];
end
#+end_src
** Jacobian matrices
Compute Jacobian Matrix
#+begin_src matlab
Jd = zeros(6);
for i = 1:6
Jd(i, 1:3) = leg_vectors(i, :);
Jd(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jd_pos), leg_vectors(i, :));
end
stewart.Jd = Jd;
stewart.Jd_inv = inv(Jd);
#+end_src
#+begin_src matlab
Jf = zeros(6);
for i = 1:6
Jf(i, 1:3) = leg_vectors(i, :);
Jf(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jf_pos), leg_vectors(i, :));
end
stewart.Jf = Jf;
stewart.Jf_inv = inv(Jf);
#+end_src
#+begin_src matlab
end
#+end_src
* initializeMechanicalElements
:PROPERTIES:
:HEADER-ARGS:matlab+: :exports code
:HEADER-ARGS:matlab+: :comments no
:HEADER-ARGS:matlab+: :eval no
:HEADER-ARGS:matlab+: :tangle src/initializeMechanicalElements.m
:END:
** Function description
#+begin_src matlab
function [stewart] = initializeMechanicalElements(stewart, opts_param)
#+end_src
** Optional Parameters
Default values for opts.
#+begin_src matlab
opts = struct(...
'thickness', 10, ... % Thickness of the base and platform [mm]
'density', 1000, ... % Density of the material used for the hexapod [kg/m3]
'k_ax', 1e8, ... % Stiffness of each actuator [N/m]
'c_ax', 1000, ... % Damping of each actuator [N/(m/s)]
'stroke', 50e-6 ... % Maximum stroke of each actuator [m]
);
#+end_src
Populate opts with input parameters
#+begin_src matlab
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
#+end_src
** Bottom Plate
#+name: fig:stewart_bottom_plate
#+caption: Schematic of the bottom plates with all the parameters
[[file:./figs/stewart_bottom_plate.png]]
The bottom plate structure is initialized. The bottom plate structure is initialized.
#+begin_src matlab #+begin_src matlab
@ -82,13 +294,7 @@ We defined its internal radius (if there is a hole in the bottom plate) and its
We define its thickness. We define its thickness.
#+begin_src matlab #+begin_src matlab
BP.H = 10; % Thickness of the Bottom Plate [mm] BP.H = opts.thickness; % Thickness of the Bottom Plate [mm]
#+end_src
At which radius legs will be fixed and with that angle offset.
#+begin_src matlab
BP.Rleg = 100; % Radius where the legs articulations are positionned [mm]
BP.alpha = 10; % Angle Offset [deg]
#+end_src #+end_src
We defined the density of the material of the bottom plate. We defined the density of the material of the bottom plate.
@ -111,7 +317,7 @@ The structure is added to the stewart structure
stewart.BP = BP; stewart.BP = BP;
#+end_src #+end_src
* Top Plate ** Top Plate
The top plate structure is initialized. The top plate structure is initialized.
#+begin_src matlab #+begin_src matlab
TP = struct(); TP = struct();
@ -128,13 +334,6 @@ The thickness of the top plate.
TP.H = 10; % [mm] TP.H = 10; % [mm]
#+end_src #+end_src
At which radius and angle are fixed the legs.
#+begin_src matlab
TP.Rleg = 100; % Radius where the legs articulations are positionned [mm]
TP.alpha = 20; % Angle [deg]
TP.dalpha = 0; % Angle Offset from 0 position [deg]
#+end_src
The density of its material. The density of its material.
#+begin_src matlab #+begin_src matlab
TP.density = opts.density; % Density of the material [kg/m3] TP.density = opts.density; % Density of the material [kg/m3]
@ -155,12 +354,11 @@ The structure is added to the stewart structure
stewart.TP = TP; stewart.TP = TP;
#+end_src #+end_src
* Legs ** Legs
#+name: fig:stewart_legs #+name: fig:stewart_legs
#+caption: Schematic for the legs of the Stewart platform #+caption: Schematic for the legs of the Stewart platform
[[file:./figs/stewart_legs.png]] [[file:./figs/stewart_legs.png]]
The leg structure is initialized. The leg structure is initialized.
#+begin_src matlab #+begin_src matlab
Leg = struct(); Leg = struct();
@ -198,12 +396,29 @@ The radius of spheres representing the ball joints are defined.
Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm] Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm]
#+end_src #+end_src
We estimate the length of the legs.
#+begin_src matlab
legs = stewart.Ab - stewart.Aa;
Leg.lenght = norm(legs(1,:))/1.5;
#+end_src
Then the shape of the bottom leg is estimated
#+begin_src matlab
Leg.shape.bot = ...
[0 0; ...
Leg.Rbot 0; ...
Leg.Rbot Leg.lenght; ...
Leg.Rtop Leg.lenght; ...
Leg.Rtop 0.2*Leg.lenght; ...
0 0.2*Leg.lenght];
#+end_src
The structure is added to the stewart structure The structure is added to the stewart structure
#+begin_src matlab #+begin_src matlab
stewart.Leg = Leg; stewart.Leg = Leg;
#+end_src #+end_src
* Ball Joints ** Ball Joints
#+name: fig:stewart_ball_joints #+name: fig:stewart_ball_joints
#+caption: Schematic of the support for the ball joints #+caption: Schematic of the support for the ball joints
[[file:./figs/stewart_ball_joints.png]] [[file:./figs/stewart_ball_joints.png]]
@ -223,7 +438,7 @@ We can define its rotational stiffness and damping. For now, we use perfect join
Its height is defined Its height is defined
#+begin_src matlab #+begin_src matlab
SP.H = 15; % [mm] SP.H = stewart.Aa(1, 3) - BP.H; % [mm]
#+end_src #+end_src
Its radius is based on the radius on the sphere at the end of the legs. Its radius is based on the radius on the sphere at the end of the legs.
@ -253,251 +468,46 @@ The structure is added to the Hexapod structure
stewart.SP = SP; stewart.SP = SP;
#+end_src #+end_src
* More parameters are initialized
#+begin_src matlab
stewart = initializeParameters(stewart);
#+end_src
* Save the Stewart Structure
#+begin_src matlab
save('./mat/stewart.mat', 'stewart')
#+end_src
* initializeParameters Function :noexport:
:PROPERTIES:
:HEADER-ARGS:matlab+: :tangle no
:END:
#+begin_src matlab
function [stewart] = initializeParameters(stewart)
#+end_src
Computation of the position of the connection points on the base and moving platform
We first initialize =pos_base= corresponding to $[a_1, a_2, a_3, a_4, a_5, a_6]^T$ and =pos_top= corresponding to $[b_1, b_2, b_3, b_4, b_5, b_6]^T$.
#+begin_src matlab
stewart.pos_base = zeros(6, 3);
stewart.pos_top = zeros(6, 3);
#+end_src
We estimate the height between the ball joints of the bottom platform and of the top platform.
#+begin_src matlab
height = stewart.H - stewart.BP.H - stewart.TP.H - 2*stewart.SP.H; % [mm]
#+end_src
#+begin_src matlab
for i = 1:3
% base points
angle_m_b = 120*(i-1) - stewart.BP.alpha;
angle_p_b = 120*(i-1) + stewart.BP.alpha;
stewart.pos_base(2*i-1,:) = [stewart.BP.Rleg*cos(angle_m_b), stewart.BP.Rleg*sin(angle_m_b), 0.0];
stewart.pos_base(2*i,:) = [stewart.BP.Rleg*cos(angle_p_b), stewart.BP.Rleg*sin(angle_p_b), 0.0];
% top points
angle_m_t = 120*(i-1) - stewart.TP.alpha + stewart.TP.dalpha;
angle_p_t = 120*(i-1) + stewart.TP.alpha + stewart.TP.dalpha;
stewart.pos_top(2*i-1,:) = [stewart.TP.Rleg*cos(angle_m_t), stewart.TP.Rleg*sin(angle_m_t), height];
stewart.pos_top(2*i,:) = [stewart.TP.Rleg*cos(angle_p_t), stewart.TP.Rleg*sin(angle_p_t), height];
end
% permute pos_top points so that legs are end points of base and top points
stewart.pos_top = [stewart.pos_top(6,:); stewart.pos_top(1:5,:)]; %6th point on top connects to 1st on bottom
stewart.pos_top_tranform = stewart.pos_top - height*[zeros(6, 2),ones(6, 1)];
#+end_src
leg vectors
#+begin_src matlab
legs = stewart.pos_top - stewart.pos_base;
leg_length = zeros(6, 1);
leg_vectors = zeros(6, 3);
for i = 1:6
leg_length(i) = norm(legs(i,:));
leg_vectors(i,:) = legs(i,:) / leg_length(i);
end
stewart.Leg.lenght = 1000*leg_length(1)/1.5;
stewart.Leg.shape.bot = [0 0; ...
stewart.Leg.rad.bottom 0; ...
stewart.Leg.rad.bottom stewart.Leg.lenght; ...
stewart.Leg.rad.top stewart.Leg.lenght; ...
stewart.Leg.rad.top 0.2*stewart.Leg.lenght; ...
0 0.2*stewart.Leg.lenght];
#+end_src
Calculate revolute and cylindrical axes
#+begin_src matlab
rev1 = zeros(6, 3);
rev2 = zeros(6, 3);
cyl1 = zeros(6, 3);
for i = 1:6
rev1(i,:) = cross(leg_vectors(i,:), [0 0 1]);
rev1(i,:) = rev1(i,:) / norm(rev1(i,:));
rev2(i,:) = - cross(rev1(i,:), leg_vectors(i,:));
rev2(i,:) = rev2(i,:) / norm(rev2(i,:));
cyl1(i,:) = leg_vectors(i,:);
end
#+end_src
Coordinate systems
#+begin_src matlab
stewart.lower_leg = struct('rotation', eye(3));
stewart.upper_leg = struct('rotation', eye(3));
for i = 1:6
stewart.lower_leg(i).rotation = [rev1(i,:)', rev2(i,:)', cyl1(i,:)'];
stewart.upper_leg(i).rotation = [rev1(i,:)', rev2(i,:)', cyl1(i,:)'];
end
#+end_src
Position Matrix
#+begin_src matlab
stewart.M_pos_base = stewart.pos_base + (height+(stewart.TP.h+stewart.Leg.sphere.top+stewart.SP.h.top+stewart.jacobian)*1e-3)*[zeros(6, 2),ones(6, 1)];
#+end_src
Compute Jacobian Matrix
#+begin_src matlab
% aa = stewart.pos_top_tranform + (stewart.jacobian - stewart.TP.h - stewart.SP.height.top)*1e-3*[zeros(6, 2),ones(6, 1)];
bb = stewart.pos_top_tranform - (stewart.TP.h + stewart.SP.height.top)*1e-3*[zeros(6, 2),ones(6, 1)];
bb = bb - stewart.jacobian*1e-3*[zeros(6, 2),ones(6, 1)];
stewart.J = getJacobianMatrix(leg_vectors', bb');
stewart.K = stewart.Leg.k.ax*stewart.J'*stewart.J;
end
#+end_src
* initializeParameters Function
#+begin_src matlab
function [stewart] = initializeParameters(stewart)
#+end_src
We first compute $[a_1, a_2, a_3, a_4, a_5, a_6]^T$ and $[b_1, b_2, b_3, b_4, b_5, b_6]^T$.
#+begin_src matlab
stewart.Aa = zeros(6, 3); % [mm]
stewart.Ab = zeros(6, 3); % [mm]
stewart.Bb = zeros(6, 3); % [mm]
#+end_src
#+begin_src matlab
for i = 1:3
stewart.Aa(2*i-1,:) = [stewart.BP.Rleg*cos( pi/180*(120*(i-1) - stewart.BP.alpha) ), ...
stewart.BP.Rleg*sin( pi/180*(120*(i-1) - stewart.BP.alpha) ), ...
stewart.BP.H+stewart.SP.H];
stewart.Aa(2*i,:) = [stewart.BP.Rleg*cos( pi/180*(120*(i-1) + stewart.BP.alpha) ), ...
stewart.BP.Rleg*sin( pi/180*(120*(i-1) + stewart.BP.alpha) ), ...
stewart.BP.H+stewart.SP.H];
stewart.Ab(2*i-1,:) = [stewart.TP.Rleg*cos( pi/180*(120*(i-1) + stewart.TP.dalpha - stewart.TP.alpha) ), ...
stewart.TP.Rleg*sin( pi/180*(120*(i-1) + stewart.TP.dalpha - stewart.TP.alpha) ), ...
stewart.H - stewart.TP.H - stewart.SP.H];
stewart.Ab(2*i,:) = [stewart.TP.Rleg*cos( pi/180*(120*(i-1) + stewart.TP.dalpha + stewart.TP.alpha) ), ...
stewart.TP.Rleg*sin( pi/180*(120*(i-1) + stewart.TP.dalpha + stewart.TP.alpha) ), ...
stewart.H - stewart.TP.H - stewart.SP.H];
end
stewart.Bb = stewart.Ab - stewart.H*[0,0,1];
#+end_src
Now, we compute the leg vectors $\hat{s}_i$ and leg position $l_i$:
\[ b_i - a_i = l_i \hat{s}_i \]
We initialize $l_i$ and $\hat{s}_i$
#+begin_src matlab
leg_length = zeros(6, 1); % [mm]
leg_vectors = zeros(6, 3);
#+end_src
We compute $b_i - a_i$, and then:
\begin{align*}
l_i &= \left|b_i - a_i\right| \\
\hat{s}_i &= \frac{b_i - a_i}{l_i}
\end{align*}
#+begin_src matlab
legs = stewart.Ab - stewart.Aa;
for i = 1:6
leg_length(i) = norm(legs(i,:));
leg_vectors(i,:) = legs(i,:) / leg_length(i);
end
#+end_src
Then the shape of the bottom leg is estimated
#+begin_src matlab
stewart.Leg.lenght = leg_length(1)/1.5;
stewart.Leg.shape.bot = ...
[0 0; ...
stewart.Leg.Rbot 0; ...
stewart.Leg.Rbot stewart.Leg.lenght; ...
stewart.Leg.Rtop stewart.Leg.lenght; ...
stewart.Leg.Rtop 0.2*stewart.Leg.lenght; ...
0 0.2*stewart.Leg.lenght];
#+end_src
We compute rotation matrices to have the orientation of the legs.
The rotation matrix transforms the $z$ axis to the axis of the leg. The other axis are not important here.
#+begin_src matlab
stewart.Rm = struct('R', eye(3));
for i = 1:6
sx = cross(leg_vectors(i,:), [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, leg_vectors(i,:));
sy = sy/norm(sy);
sz = leg_vectors(i,:);
sz = sz/norm(sz);
stewart.Rm(i).R = [sx', sy', sz'];
end
#+end_src
Compute Jacobian Matrix
#+begin_src matlab
J = zeros(6);
for i = 1:6
J(i, 1:3) = leg_vectors(i, :);
J(i, 4:6) = cross(0.001*(stewart.Ab(i, :)- stewart.H*[0,0,1]), leg_vectors(i, :));
end
stewart.J = J;
stewart.Jinv = inv(J);
#+end_src
#+begin_src matlab
stewart.K = stewart.Leg.k_ax*stewart.J'*stewart.J;
#+end_src
#+begin_src matlab
end
end
#+end_src
* initializeSample * initializeSample
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS:matlab+: :exports code
:HEADER-ARGS:matlab+: :comments no
:HEADER-ARGS:matlab+: :eval no
:HEADER-ARGS:matlab+: :tangle src/initializeSample.m :HEADER-ARGS:matlab+: :tangle src/initializeSample.m
:END: :END:
** Function description
#+begin_src matlab #+begin_src matlab
function [] = initializeSample(opts_param) function [] = initializeSample(opts_param)
%% Default values for opts #+end_src
sample = struct( ...
'radius', 100, ... % radius of the cylinder [mm]
'height', 100, ... % height of the cylinder [mm]
'mass', 10, ... % mass of the cylinder [kg]
'measheight', 50, ... % measurement point z-offset [mm]
'offset', [0, 0, 0], ... % offset position of the sample [mm]
'color', [0.9 0.1 0.1] ...
);
%% Populate opts with input parameters ** Optional Parameters
if exist('opts_param','var') Default values for opts.
for opt = fieldnames(opts_param)' #+begin_src matlab
sample.(opt{1}) = opts_param.(opt{1}); sample = struct( ...
end 'radius', 100, ... % radius of the cylinder [mm]
'height', 100, ... % height of the cylinder [mm]
'mass', 10, ... % mass of the cylinder [kg]
'measheight', 50, ... % measurement point z-offset [mm]
'offset', [0, 0, 0], ... % offset position of the sample [mm]
'color', [0.9 0.1 0.1] ...
);
#+end_src
Populate opts with input parameters
#+begin_src matlab
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
sample.(opt{1}) = opts_param.(opt{1});
end end
end
%% Save #+end_src
save('./mat/sample.mat', 'sample');
** Save the Sample structure
#+begin_src matlab
save('./mat/sample.mat', 'sample');
#+end_src
#+begin_src matlab
end end
#+end_src #+end_src

View File

@ -0,0 +1,59 @@
function [stewart] = computeGeometricalProperties(stewart, opts_param)
opts = struct(...
'Jd_pos', [0, 0, 30], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, 30] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
leg_length = zeros(6, 1); % [mm]
leg_vectors = zeros(6, 3);
legs = stewart.Ab - stewart.Aa;
for i = 1:6
leg_length(i) = norm(legs(i,:));
leg_vectors(i,:) = legs(i,:) / leg_length(i);
end
stewart.Rm = struct('R', eye(3));
for i = 1:6
sx = cross(leg_vectors(i,:), [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, leg_vectors(i,:));
sy = sy/norm(sy);
sz = leg_vectors(i,:);
sz = sz/norm(sz);
stewart.Rm(i).R = [sx', sy', sz'];
end
Jd = zeros(6);
for i = 1:6
Jd(i, 1:3) = leg_vectors(i, :);
Jd(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jd_pos), leg_vectors(i, :));
end
stewart.Jd = Jd;
stewart.Jd_inv = inv(Jd);
Jf = zeros(6);
for i = 1:6
Jf(i, 1:3) = leg_vectors(i, :);
Jf(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jf_pos), leg_vectors(i, :));
end
stewart.Jf = Jf;
stewart.Jf_inv = inv(Jf);
end

View File

@ -53,7 +53,7 @@ G.OutputName = {'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm', ...
% identifyPlant:7 ends here % identifyPlant:7 ends here
% [[file:~/MEGA/These/Matlab/Simscape/stewart-simscape/identification.org::*identifyPlant][identifyPlant:8]] % [[file:~/MEGA/These/Matlab/Simscape/stewart-simscape/identification.org::*identifyPlant][identifyPlant:8]]
sys.G_cart = minreal(G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'})); sys.G_cart = G({'Dxm', 'Dym', 'Dzm', 'Rxm', 'Rym', 'Rzm'}, {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'});
sys.G_forc = minreal(G({'F1m', 'F2m', 'F3m', 'F4m', 'F5m', 'F6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_forc = minreal(G({'F1m', 'F2m', 'F3m', 'F4m', 'F5m', 'F6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
sys.G_legs = minreal(G({'D1m', 'D2m', 'D3m', 'D4m', 'D5m', 'D6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_legs = minreal(G({'D1m', 'D2m', 'D3m', 'D4m', 'D5m', 'D6m'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
sys.G_tran = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'})); sys.G_tran = minreal(G({'Dxtm', 'Dytm', 'Dztm', 'Rxtm', 'Rytm', 'Rztm'}, {'Dwx', 'Dwy', 'Dwz', 'Rwx', 'Rwy', 'Rwz'}));

View File

@ -0,0 +1,89 @@
function [stewart] = initializeCubicConfiguration(opts_param)
opts = struct(...
'H_tot', 90, ... % Total height of the Hexapod [mm]
'L', 110, ... % Size of the Cube [mm]
'H', 40, ... % Height between base joints and platform joints [mm]
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
points = [0, 0, 0; ...
0, 0, 1; ...
0, 1, 0; ...
0, 1, 1; ...
1, 0, 0; ...
1, 0, 1; ...
1, 1, 0; ...
1, 1, 1];
points = opts.L*points;
sx = cross([1, 1, 1], [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, [1, 1, 1]);
sy = sy/norm(sy);
sz = [1, 1, 1];
sz = sz/norm(sz);
R = [sx', sy', sz']';
cube = zeros(size(points));
for i = 1:size(points, 1)
cube(i, :) = R * points(i, :)';
end
leg_indices = [3, 4; ...
2, 4; ...
2, 6; ...
5, 6; ...
5, 7; ...
3, 7];
legs = zeros(6, 3);
legs_start = zeros(6, 3);
for i = 1:6
legs(i, :) = cube(leg_indices(i, 2), :) - cube(leg_indices(i, 1), :);
legs_start(i, :) = cube(leg_indices(i, 1), :);
end
Hmax = cube(4, 3) - cube(2, 3);
if opts.H0 < cube(2, 3)
error(sprintf('H0 is not high enought. Minimum H0 = %.1f', cube(2, 3)));
else if opts.H0 + opts.H > cube(4, 3)
error(sprintf('H0+H is too high. Maximum H0+H = %.1f', cube(4, 3)));
error('H0+H is too high');
end
Aa = zeros(6, 3);
for i = 1:6
t = (opts.H0-legs_start(i, 3))/(legs(i, 3));
Aa(i, :) = legs_start(i, :) + t*legs(i, :);
end
Ab = zeros(6, 3);
for i = 1:6
t = (opts.H0+opts.H-legs_start(i, 3))/(legs(i, 3));
Ab(i, :) = legs_start(i, :) + t*legs(i, :);
end
Bb = zeros(6, 3);
Bb = Ab - (opts.H0 + opts.H_tot/2 + opts.H/2)*[0, 0, 1];
h = opts.H0 + opts.H/2 - opts.H_tot/2;
Aa = Aa - h*[0, 0, 1];
Ab = Ab - h*[0, 0, 1];
stewart = struct();
stewart.Aa = Aa;
stewart.Ab = Ab;
stewart.Bb = Bb;
stewart.H_tot = opts.H_tot;
end

View File

@ -0,0 +1,47 @@
function [stewart] = initializeGeneralConfiguration(opts_param)
opts = struct(...
'H_tot', 90, ... % Height of the platform [mm]
'H_joint', 15, ... % Height of the joints [mm]
'H_plate', 10, ... % Thickness of the fixed and mobile platforms [mm]
'R_bot', 100, ... % Radius where the legs articulations are positionned [mm]
'R_top', 80, ... % Radius where the legs articulations are positionned [mm]
'a_bot', 10, ... % Angle Offset [deg]
'a_top', 40, ... % Angle Offset [deg]
'da_top', 0 ... % Angle Offset from 0 position [deg]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
Aa = zeros(6, 3); % [mm]
Ab = zeros(6, 3); % [mm]
Bb = zeros(6, 3); % [mm]
for i = 1:3
Aa(2*i-1,:) = [opts.R_bot*cos( pi/180*(120*(i-1) - opts.a_bot) ), ...
opts.R_bot*sin( pi/180*(120*(i-1) - opts.a_bot) ), ...
opts.H_plate+opts.H_joint];
Aa(2*i,:) = [opts.R_bot*cos( pi/180*(120*(i-1) + opts.a_bot) ), ...
opts.R_bot*sin( pi/180*(120*(i-1) + opts.a_bot) ), ...
opts.H_plate+opts.H_joint];
Ab(2*i-1,:) = [opts.R_top*cos( pi/180*(120*(i-1) + opts.da_top - opts.a_top) ), ...
opts.R_top*sin( pi/180*(120*(i-1) + opts.da_top - opts.a_top) ), ...
opts.H_tot - opts.H_plate - opts.H_joint];
Ab(2*i,:) = [opts.R_top*cos( pi/180*(120*(i-1) + opts.da_top + opts.a_top) ), ...
opts.R_top*sin( pi/180*(120*(i-1) + opts.da_top + opts.a_top) ), ...
opts.H_tot - opts.H_plate - opts.H_joint];
end
Bb = Ab - opts.H_tot*[0,0,1];
stewart = struct();
stewart.Aa = Aa;
stewart.Ab = Ab;
stewart.Bb = Bb;
stewart.H_tot = opts.H_tot;
end

View File

@ -1,228 +1,86 @@
% Function description and arguments
% The =initializeHexapod= function takes one structure that contains configurations for the hexapod and returns one structure representing the hexapod.
function [stewart] = initializeHexapod(opts_param) function [stewart] = initializeHexapod(opts_param)
% Default values for opts.
opts = struct(... opts = struct(...
'height', 90, ... % Height of the platform [mm] 'height', 90, ... % Height of the platform [mm]
'density', 8000, ... % Density of the material used for the hexapod [kg/m3] 'density', 10, ... % Density of the material used for the hexapod [kg/m3]
'k_ax', 1e8, ... % Stiffness of each actuator [N/m] 'k_ax', 1e8, ... % Stiffness of each actuator [N/m]
'c_ax', 1000, ... % Damping of each actuator [N/(m/s)] 'c_ax', 1000, ... % Damping of each actuator [N/(m/s)]
'stroke', 50e-6, ... % Maximum stroke of each actuator [m] 'stroke', 50e-6, ... % Maximum stroke of each actuator [m]
'name', 'stewart' ... % Name of the file 'name', 'stewart' ... % Name of the file
); );
% Populate opts with input parameters
if exist('opts_param','var') if exist('opts_param','var')
for opt = fieldnames(opts_param)' for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1}); opts.(opt{1}) = opts_param.(opt{1});
end end
end end
% Initialization of the stewart structure
% We initialize the Stewart structure
stewart = struct(); stewart = struct();
% And we defined its total height.
stewart.H = opts.height; % [mm] stewart.H = opts.height; % [mm]
% Bottom Plate
% #+name: fig:stewart_bottom_plate
% #+caption: Schematic of the bottom plates with all the parameters
% [[file:./figs/stewart_bottom_plate.png]]
% The bottom plate structure is initialized.
BP = struct(); BP = struct();
% We defined its internal radius (if there is a hole in the bottom plate) and its outer radius.
BP.Rint = 0; % Internal Radius [mm] BP.Rint = 0; % Internal Radius [mm]
BP.Rext = 150; % External Radius [mm] BP.Rext = 150; % External Radius [mm]
% We define its thickness.
BP.H = 10; % Thickness of the Bottom Plate [mm] BP.H = 10; % Thickness of the Bottom Plate [mm]
% At which radius legs will be fixed and with that angle offset.
BP.Rleg = 100; % Radius where the legs articulations are positionned [mm] BP.Rleg = 100; % Radius where the legs articulations are positionned [mm]
BP.alpha = 10; % Angle Offset [deg] BP.alpha = 30; % Angle Offset [deg]
% We defined the density of the material of the bottom plate.
BP.density = opts.density; % Density of the material [kg/m3] BP.density = opts.density; % Density of the material [kg/m3]
% And its color.
BP.color = [0.7 0.7 0.7]; % Color [RGB] BP.color = [0.7 0.7 0.7]; % Color [RGB]
% Then the profile of the bottom plate is computed and will be used by Simscape
BP.shape = [BP.Rint BP.H; BP.Rint 0; BP.Rext 0; BP.Rext BP.H]; % [mm] BP.shape = [BP.Rint BP.H; BP.Rint 0; BP.Rext 0; BP.Rext BP.H]; % [mm]
% The structure is added to the stewart structure
stewart.BP = BP; stewart.BP = BP;
% Top Plate
% The top plate structure is initialized.
TP = struct(); TP = struct();
% We defined the internal and external radius of the top plate.
TP.Rint = 0; % [mm] TP.Rint = 0; % [mm]
TP.Rext = 100; % [mm] TP.Rext = 100; % [mm]
% The thickness of the top plate.
TP.H = 10; % [mm] TP.H = 10; % [mm]
TP.Rleg = 80; % Radius where the legs articulations are positionned [mm]
TP.alpha = 10; % Angle [deg]
% At which radius and angle are fixed the legs.
TP.Rleg = 100; % Radius where the legs articulations are positionned [mm]
TP.alpha = 20; % Angle [deg]
TP.dalpha = 0; % Angle Offset from 0 position [deg] TP.dalpha = 0; % Angle Offset from 0 position [deg]
% The density of its material.
TP.density = opts.density; % Density of the material [kg/m3] TP.density = opts.density; % Density of the material [kg/m3]
% Its color.
TP.color = [0.7 0.7 0.7]; % Color [RGB] TP.color = [0.7 0.7 0.7]; % Color [RGB]
% Then the shape of the top plate is computed
TP.shape = [TP.Rint TP.H; TP.Rint 0; TP.Rext 0; TP.Rext TP.H]; TP.shape = [TP.Rint TP.H; TP.Rint 0; TP.Rext 0; TP.Rext TP.H];
% The structure is added to the stewart structure
stewart.TP = TP; stewart.TP = TP;
% Legs
% #+name: fig:stewart_legs
% #+caption: Schematic for the legs of the Stewart platform
% [[file:./figs/stewart_legs.png]]
% The leg structure is initialized.
Leg = struct(); Leg = struct();
% The maximum Stroke of each leg is defined.
Leg.stroke = opts.stroke; % [m] Leg.stroke = opts.stroke; % [m]
% The stiffness and damping of each leg are defined
Leg.k_ax = opts.k_ax; % Stiffness of each leg [N/m] Leg.k_ax = opts.k_ax; % Stiffness of each leg [N/m]
Leg.c_ax = opts.c_ax; % Damping of each leg [N/(m/s)] Leg.c_ax = opts.c_ax; % Damping of each leg [N/(m/s)]
% The radius of the legs are defined
Leg.Rtop = 10; % Radius of the cylinder of the top part of the leg[mm] Leg.Rtop = 10; % Radius of the cylinder of the top part of the leg[mm]
Leg.Rbot = 12; % Radius of the cylinder of the bottom part of the leg [mm] Leg.Rbot = 12; % Radius of the cylinder of the bottom part of the leg [mm]
Leg.density = 0.01*opts.density; % Density of the material used for the legs [kg/m3]
% The density of its material.
Leg.density = opts.density; % Density of the material used for the legs [kg/m3]
% Its color.
Leg.color = [0.5 0.5 0.5]; % Color of the top part of the leg [RGB] Leg.color = [0.5 0.5 0.5]; % Color of the top part of the leg [RGB]
% The radius of spheres representing the ball joints are defined.
Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm] Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm]
% The structure is added to the stewart structure
stewart.Leg = Leg; stewart.Leg = Leg;
% Ball Joints
% #+name: fig:stewart_ball_joints
% #+caption: Schematic of the support for the ball joints
% [[file:./figs/stewart_ball_joints.png]]
% =SP= is the structure representing the support for the ball joints at the extremity of each leg.
% The =SP= structure is initialized.
SP = struct(); SP = struct();
% We can define its rotational stiffness and damping. For now, we use perfect joints.
SP.k = 0; % [N*m/deg] SP.k = 0; % [N*m/deg]
SP.c = 0; % [N*m/deg] SP.c = 0; % [N*m/deg]
% Its height is defined
SP.H = 15; % [mm] SP.H = 15; % [mm]
% Its radius is based on the radius on the sphere at the end of the legs.
SP.R = Leg.R; % [mm] SP.R = Leg.R; % [mm]
SP.section = [0 SP.H-SP.R; SP.section = [0 SP.H-SP.R;
@ -230,40 +88,18 @@ SP.section = [0 SP.H-SP.R;
SP.R 0; SP.R 0;
SP.R SP.H]; SP.R SP.H];
% The density of its material is defined.
SP.density = opts.density; % [kg/m^3] SP.density = opts.density; % [kg/m^3]
% Its color is defined.
SP.color = [0.7 0.7 0.7]; % [RGB] SP.color = [0.7 0.7 0.7]; % [RGB]
% The structure is added to the Hexapod structure
stewart.SP = SP; stewart.SP = SP;
% More parameters are initialized
stewart = initializeParameters(stewart); stewart = initializeParameters(stewart);
% Save the Stewart Structure
save('./mat/stewart.mat', 'stewart') save('./mat/stewart.mat', 'stewart')
% initializeParameters Function
function [stewart] = initializeParameters(stewart) function [stewart] = initializeParameters(stewart)
% We first compute $[a_1, a_2, a_3, a_4, a_5, a_6]^T$ and $[b_1, b_2, b_3, b_4, b_5, b_6]^T$.
stewart.Aa = zeros(6, 3); % [mm] stewart.Aa = zeros(6, 3); % [mm]
stewart.Ab = zeros(6, 3); % [mm] stewart.Ab = zeros(6, 3); % [mm]
stewart.Bb = zeros(6, 3); % [mm] stewart.Bb = zeros(6, 3); % [mm]
@ -285,25 +121,9 @@ for i = 1:3
end end
stewart.Bb = stewart.Ab - stewart.H*[0,0,1]; stewart.Bb = stewart.Ab - stewart.H*[0,0,1];
% Now, we compute the leg vectors $\hat{s}_i$ and leg position $l_i$:
% \[ b_i - a_i = l_i \hat{s}_i \]
% We initialize $l_i$ and $\hat{s}_i$
leg_length = zeros(6, 1); % [mm] leg_length = zeros(6, 1); % [mm]
leg_vectors = zeros(6, 3); leg_vectors = zeros(6, 3);
% We compute $b_i - a_i$, and then:
% \begin{align*}
% l_i &= \left|b_i - a_i\right| \\
% \hat{s}_i &= \frac{b_i - a_i}{l_i}
% \end{align*}
legs = stewart.Ab - stewart.Aa; legs = stewart.Ab - stewart.Aa;
for i = 1:6 for i = 1:6
@ -311,10 +131,6 @@ for i = 1:6
leg_vectors(i,:) = legs(i,:) / leg_length(i); leg_vectors(i,:) = legs(i,:) / leg_length(i);
end end
% Then the shape of the bottom leg is estimated
stewart.Leg.lenght = leg_length(1)/1.5; stewart.Leg.lenght = leg_length(1)/1.5;
stewart.Leg.shape.bot = ... stewart.Leg.shape.bot = ...
[0 0; ... [0 0; ...
@ -324,11 +140,6 @@ stewart.Leg.shape.bot = ...
stewart.Leg.Rtop 0.2*stewart.Leg.lenght; ... stewart.Leg.Rtop 0.2*stewart.Leg.lenght; ...
0 0.2*stewart.Leg.lenght]; 0 0.2*stewart.Leg.lenght];
% We compute rotation matrices to have the orientation of the legs.
% The rotation matrix transforms the $z$ axis to the axis of the leg. The other axis are not important here.
stewart.Rm = struct('R', eye(3)); stewart.Rm = struct('R', eye(3));
for i = 1:6 for i = 1:6
@ -344,10 +155,6 @@ for i = 1:6
stewart.Rm(i).R = [sx', sy', sz']; stewart.Rm(i).R = [sx', sy', sz'];
end end
% Compute Jacobian Matrix
J = zeros(6); J = zeros(6);
for i = 1:6 for i = 1:6

View File

@ -0,0 +1,94 @@
function [stewart] = initializeMechanicalElements(stewart, opts_param)
opts = struct(...
'thickness', 10, ... % Thickness of the base and platform [mm]
'density', 1000, ... % Density of the material used for the hexapod [kg/m3]
'k_ax', 1e8, ... % Stiffness of each actuator [N/m]
'c_ax', 1000, ... % Damping of each actuator [N/(m/s)]
'stroke', 50e-6 ... % Maximum stroke of each actuator [m]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
BP = struct();
BP.Rint = 0; % Internal Radius [mm]
BP.Rext = 150; % External Radius [mm]
BP.H = opts.thickness; % Thickness of the Bottom Plate [mm]
BP.density = opts.density; % Density of the material [kg/m3]
BP.color = [0.7 0.7 0.7]; % Color [RGB]
BP.shape = [BP.Rint BP.H; BP.Rint 0; BP.Rext 0; BP.Rext BP.H]; % [mm]
stewart.BP = BP;
TP = struct();
TP.Rint = 0; % [mm]
TP.Rext = 100; % [mm]
TP.H = 10; % [mm]
TP.density = opts.density; % Density of the material [kg/m3]
TP.color = [0.7 0.7 0.7]; % Color [RGB]
TP.shape = [TP.Rint TP.H; TP.Rint 0; TP.Rext 0; TP.Rext TP.H];
stewart.TP = TP;
Leg = struct();
Leg.stroke = opts.stroke; % [m]
Leg.k_ax = opts.k_ax; % Stiffness of each leg [N/m]
Leg.c_ax = opts.c_ax; % Damping of each leg [N/(m/s)]
Leg.Rtop = 10; % Radius of the cylinder of the top part of the leg[mm]
Leg.Rbot = 12; % Radius of the cylinder of the bottom part of the leg [mm]
Leg.density = opts.density; % Density of the material used for the legs [kg/m3]
Leg.color = [0.5 0.5 0.5]; % Color of the top part of the leg [RGB]
Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm]
legs = stewart.Ab - stewart.Aa;
Leg.lenght = norm(legs(1,:))/1.5;
Leg.shape.bot = ...
[0 0; ...
Leg.Rbot 0; ...
Leg.Rbot Leg.lenght; ...
Leg.Rtop Leg.lenght; ...
Leg.Rtop 0.2*Leg.lenght; ...
0 0.2*Leg.lenght];
stewart.Leg = Leg;
SP = struct();
SP.k = 0; % [N*m/deg]
SP.c = 0; % [N*m/deg]
SP.H = stewart.Aa(1, 3) - BP.H; % [mm]
SP.R = Leg.R; % [mm]
SP.section = [0 SP.H-SP.R;
0 0;
SP.R 0;
SP.R SP.H];
SP.density = opts.density; % [kg/m^3]
SP.color = [0.7 0.7 0.7]; % [RGB]
stewart.SP = SP;

View File

@ -1,21 +1,20 @@
function [] = initializeSample(opts_param) function [] = initializeSample(opts_param)
%% Default values for opts
sample = struct( ...
'radius', 100, ... % radius of the cylinder [mm]
'height', 100, ... % height of the cylinder [mm]
'mass', 10, ... % mass of the cylinder [kg]
'measheight', 50, ... % measurement point z-offset [mm]
'offset', [0, 0, 0], ... % offset position of the sample [mm]
'color', [0.9 0.1 0.1] ...
);
%% Populate opts with input parameters sample = struct( ...
if exist('opts_param','var') 'radius', 100, ... % radius of the cylinder [mm]
for opt = fieldnames(opts_param)' 'height', 100, ... % height of the cylinder [mm]
sample.(opt{1}) = opts_param.(opt{1}); 'mass', 10, ... % mass of the cylinder [kg]
end 'measheight', 50, ... % measurement point z-offset [mm]
'offset', [0, 0, 0], ... % offset position of the sample [mm]
'color', [0.9 0.1 0.1] ...
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
sample.(opt{1}) = opts_param.(opt{1});
end end
end
%% Save
save('./mat/sample.mat', 'sample'); save('./mat/sample.mat', 'sample');
end end

View File

@ -0,0 +1,59 @@
function [stewart] = initializeSimscapeData(stewart, opts_param)
opts = struct(...
'Jd_pos', [0, 0, 30], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, 30] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
leg_length = zeros(6, 1); % [mm]
leg_vectors = zeros(6, 3);
legs = stewart.Ab - stewart.Aa;
for i = 1:6
leg_length(i) = norm(legs(i,:));
leg_vectors(i,:) = legs(i,:) / leg_length(i);
end
stewart.Rm = struct('R', eye(3));
for i = 1:6
sx = cross(leg_vectors(i,:), [1 0 0]);
sx = sx/norm(sx);
sy = -cross(sx, leg_vectors(i,:));
sy = sy/norm(sy);
sz = leg_vectors(i,:);
sz = sz/norm(sz);
stewart.Rm(i).R = [sx', sy', sz'];
end
Jd = zeros(6);
for i = 1:6
Jd(i, 1:3) = leg_vectors(i, :);
Jd(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jd_pos), leg_vectors(i, :));
end
stewart.Jd = Jd;
stewart.Jd_inv = inv(Jd);
Jf = zeros(6);
for i = 1:6
Jf(i, 1:3) = leg_vectors(i, :);
Jf(i, 4:6) = cross(0.001*(stewart.Bb(i, :) - opts.Jf_pos), leg_vectors(i, :));
end
stewart.Jf = Jf;
stewart.Jf_inv = inv(Jf);
end

View File

@ -0,0 +1,94 @@
function [stewart] = initializeStewartPlatform(stewart, opts_param)
opts = struct(...
'thickness', 10, ... % Thickness of the base and platform [mm]
'density', 1000, ... % Density of the material used for the hexapod [kg/m3]
'k_ax', 1e8, ... % Stiffness of each actuator [N/m]
'c_ax', 1000, ... % Damping of each actuator [N/(m/s)]
'stroke', 50e-6 ... % Maximum stroke of each actuator [m]
);
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
BP = struct();
BP.Rint = 0; % Internal Radius [mm]
BP.Rext = 150; % External Radius [mm]
BP.H = opts.thickness; % Thickness of the Bottom Plate [mm]
BP.density = opts.density; % Density of the material [kg/m3]
BP.color = [0.7 0.7 0.7]; % Color [RGB]
BP.shape = [BP.Rint BP.H; BP.Rint 0; BP.Rext 0; BP.Rext BP.H]; % [mm]
stewart.BP = BP;
TP = struct();
TP.Rint = 0; % [mm]
TP.Rext = 100; % [mm]
TP.H = 10; % [mm]
TP.density = opts.density; % Density of the material [kg/m3]
TP.color = [0.7 0.7 0.7]; % Color [RGB]
TP.shape = [TP.Rint TP.H; TP.Rint 0; TP.Rext 0; TP.Rext TP.H];
stewart.TP = TP;
Leg = struct();
Leg.stroke = opts.stroke; % [m]
Leg.k_ax = opts.k_ax; % Stiffness of each leg [N/m]
Leg.c_ax = opts.c_ax; % Damping of each leg [N/(m/s)]
Leg.Rtop = 10; % Radius of the cylinder of the top part of the leg[mm]
Leg.Rbot = 12; % Radius of the cylinder of the bottom part of the leg [mm]
Leg.density = opts.density; % Density of the material used for the legs [kg/m3]
Leg.color = [0.5 0.5 0.5]; % Color of the top part of the leg [RGB]
Leg.R = 1.3*Leg.Rbot; % Size of the sphere at the extremity of the leg [mm]
legs = stewart.Ab - stewart.Aa;
Leg.lenght = norm(legs(1,:))/1.5;
Leg.shape.bot = ...
[0 0; ...
Leg.Rbot 0; ...
Leg.Rbot Leg.lenght; ...
Leg.Rtop Leg.lenght; ...
Leg.Rtop 0.2*Leg.lenght; ...
0 0.2*Leg.lenght];
stewart.Leg = Leg;
SP = struct();
SP.k = 0; % [N*m/deg]
SP.c = 0; % [N*m/deg]
SP.H = stewart.Aa(1, 3) - BP.H; % [mm]
SP.R = Leg.R; % [mm]
SP.section = [0 SP.H-SP.R;
0 0;
SP.R 0;
SP.R SP.H];
SP.density = opts.density; % [kg/m^3]
SP.color = [0.7 0.7 0.7]; % [RGB]
stewart.SP = SP;

Binary file not shown.

View File

@ -1,4 +1,28 @@
#+TITLE: Stiffness of the Stewart Platform #+TITLE: Stiffness of the Stewart Platform
:DRAWER:
#+STARTUP: overview
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
#+HTML_HEAD: <script src="js/jquery.min.js"></script>
#+HTML_HEAD: <script src="js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="js/readtheorg.js"></script>
#+LATEX_CLASS: cleanreport
#+LaTeX_CLASS_OPTIONS: [tocnp, secbreak, minted]
#+LaTeX_HEADER: \usepackage{svg}
#+LaTeX_HEADER: \newcommand{\authorFirstName}{Thomas}
#+LaTeX_HEADER: \newcommand{\authorLastName}{Dehaeze}
#+LaTeX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :mkdirp yes
:END:
* Functions * Functions
:PROPERTIES: :PROPERTIES: