Compare commits

...

2 Commits

Author SHA1 Message Date
f8a7904563 Update Matlab code 2024-03-19 15:33:18 +01:00
c5b3b44c63 Update report 2024-03-19 15:33:09 +01:00
44 changed files with 16787 additions and 2991 deletions

293
.gitignore vendored
View File

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

Binary file not shown.

0
figs/apa300ml_ansys.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

0
figs/flexor_025_CS.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

0
figs/flexor_025_Geometry.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

0
figs/flexor_025_MDoF.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
figs/strut_fem_nodes.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

0
figs/strut_fem_nodes_side.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

2848
index.html

File diff suppressed because it is too large Load Diff

Binary file not shown.

0
matlab/APA300ML/APA300ML_mat_K.CSV Executable file → Normal file
View File

Can't render this file because it is too large.

0
matlab/APA300ML/APA300ML_mat_M.CSV Executable file → Normal file
View File

Can't render this file because it is too large.

0
matlab/APA300ML/APA300ML_out_nodes_3D.txt Executable file → Normal file
View File

0
matlab/APA300ML/CS.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

0
matlab/APA300ML/MDoF.jpg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

0
matlab/flexor_025/flex025_mat_K.CSV Executable file → Normal file
View File

0
matlab/flexor_025/flex025_mat_M.CSV Executable file → Normal file
View File

0
matlab/flexor_025/flex025_out_nodes_3D.txt Executable file → Normal file
View File

0
matlab/flexor_025/flex050_mat_K_050.CSV Executable file → Normal file
View File

0
matlab/flexor_025/flex050_mat_M_050.CSV Executable file → Normal file
View File

0
matlab/flexor_025/flex050_out_nodes_3D.txt Executable file → Normal file
View File

0
matlab/flexor_025/flexor_025.STEP Executable file → Normal file
View File

0
matlab/flexor_025/flexor_050.STEP Executable file → Normal file
View File

0
matlab/flexor_ID16/cp91_2MDoF_6modes.sub Executable file → Normal file
View File

0
matlab/flexor_ID16/mat_K_6modes_2MDoF.matrix Executable file → Normal file
View File

0
matlab/flexor_ID16/mat_M_6modes_2MDoF.matrix Executable file → Normal file
View File

0
matlab/flexor_ID16/out_nodes_3D.txt Executable file → Normal file
View File

Binary file not shown.

File diff suppressed because it is too large Load Diff

0
matlab/strut_encoder/strut_encoder_mat_K.CSV Executable file → Normal file
View File

0
matlab/strut_encoder/strut_encoder_mat_M.CSV Executable file → Normal file
View File

0
matlab/strut_encoder/strut_encoder_out_nodes_3D.txt Executable file → Normal file
View File

26
nass-fem.bib Normal file
View File

@ -0,0 +1,26 @@
@book{fleming14_desig_model_contr_nanop_system,
author = {Andrew J. Fleming and Kam K. Leang},
title = {Design, Modeling and Control of Nanopositioning Systems},
year = 2014,
publisher = {Springer International Publishing},
url = {https://doi.org/10.1007/978-3-319-06617-2},
doi = {10.1007/978-3-319-06617-2},
series = {Advances in Industrial Control},
}
@article{souleille18_concep_activ_mount_space_applic,
author = {Souleille, Adrien and Lampert, Thibault and Lafarga, V and
Hellegouarch, Sylvain and Rondineau, Alan and Rodrigues,
Gon{\c{c}}alo and Collette, Christophe},
title = {A Concept of Active Mount for Space Applications},
journal = {CEAS Space Journal},
volume = 10,
number = 2,
pages = {157--165},
year = 2018,
publisher = {Springer},
keywords = {parallel robot, iff},
}

View File

@ -1,7 +1,5 @@
#+TITLE: NASS - Finite Element Models with Simscape
:DRAWER:
#+STARTUP: overview
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
@ -12,28 +10,95 @@
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+BIND: org-latex-image-default-option "scale=1"
#+BIND: org-latex-image-default-width ""
#+LaTeX_CLASS: scrreprt
#+LaTeX_CLASS_OPTIONS: [a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]
#+LaTeX_HEADER_EXTRA: \input{preamble.tex}
#+LATEX_HEADER_EXTRA: \bibliography{nass-fem.bib}
#+BIND: org-latex-bib-compiler "biber"
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports none
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :noweb yes
#+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :tangle no
#+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
#+PROPERTY: header-args:latex+ :results raw replace :buffer no
#+PROPERTY: header-args:latex+ :results file raw replace
#+PROPERTY: header-args:latex+ :buffer no
#+PROPERTY: header-args:latex+ :tangle no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
#+begin_export html
<hr>
<p>This report is also available as a <a href="./nass-fem.pdf">pdf</a>.</p>
<hr>
#+end_export
#+latex: \clearpage
* Build :noexport:
#+NAME: startblock
#+BEGIN_SRC emacs-lisp :results none :tangle no
(add-to-list 'org-latex-classes
'("scrreprt"
"\\documentclass{scrreprt}"
("\\chapter{%s}" . "\\chapter*{%s}")
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
))
;; Remove automatic org heading labels
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
(add-to-list 'org-export-filter-headline-functions
'my-latex-filter-removeOrgAutoLabels)
;; Remove all org comments in the output LaTeX file
(defun delete-org-comments (backend)
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
'comment 'identity))
do
(setf (buffer-substring (org-element-property :begin comment)
(org-element-property :end comment))
"")))
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
;; Use no package by default
(setq org-latex-packages-alist nil)
(setq org-latex-default-packages-alist nil)
;; Do not include the subtitle inside the title
(setq org-latex-subtitle-separate t)
(setq org-latex-subtitle-format "\\subtitle{%s}")
(setq org-export-before-parsing-hook '(org-ref-glossary-before-parsing
org-ref-acronyms-before-parsing))
#+END_SRC
* Notes :noexport:
- [ ] Convert this into a standard report
- [ ] look at the [[file:~/Cloud/research/papers/published/brumund21_multib_simul_reduc_order_flexib_bodies_fea/paper/brumund21_multib_simul_reduc_order_flexib_bodies_fea.pdf][published paper]]
* Introduction :ignore:
In this document, Finite Element Models (FEM) of parts of the Nano-Hexapod are developed and integrated into Simscape for dynamical analysis.
@ -64,60 +129,67 @@ The remote point used are also shown in this figure.
#+name: fig:apa300ml_ansys
#+caption: Ansys FEM of the APA300ML
#+attr_latex: :width 0.7\linewidth
[[file:figs/apa300ml_ansys.jpg]]
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('matlab/');
addpath('matlab/APA300ML/');
addpath('matlab/');
addpath('matlab/APA300ML/');
#+end_src
#+begin_src matlab :eval no
addpath('APA300ML/');
addpath('APA300ML/');
#+end_src
#+begin_src matlab
open('APA300ML.slx');
% open('APA300ML.slx');
#+end_src
** Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates
We first extract the stiffness and mass matrices.
#+begin_src matlab
K = readmatrix('APA300ML_mat_K.CSV');
M = readmatrix('APA300ML_mat_M.CSV');
K = readmatrix('APA300ML_mat_K.CSV');
M = readmatrix('APA300ML_mat_M.CSV');
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(K(1:10, 1:10), {}, {}, ' %.1g ');
data2orgtable(K(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:APA300ML_mat_K
#+caption: First 10x10 elements of the Stiffness matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 200000000.0 | 30000.0 | -20000.0 | -70.0 | 300000.0 | 40.0 | 10000000.0 | 10000.0 | -6000.0 | 30.0 |
| 30000.0 | 30000000.0 | 2000.0 | -200000.0 | 60.0 | -10.0 | 4000.0 | 2000000.0 | -500.0 | 9000.0 |
| -20000.0 | 2000.0 | 7000000.0 | -10.0 | -30.0 | 10.0 | 6000.0 | 900.0 | -500000.0 | 3 |
| -70.0 | -200000.0 | -10.0 | 1000.0 | -0.1 | 0.08 | -20.0 | -9000.0 | 3 | -30.0 |
| 300000.0 | 60.0 | -30.0 | -0.1 | 900.0 | 0.1 | 30000.0 | 20.0 | -10.0 | 0.06 |
| 40.0 | -10.0 | 10.0 | 0.08 | 0.1 | 10000.0 | 20.0 | 9 | -5 | 0.03 |
| 10000000.0 | 4000.0 | 6000.0 | -20.0 | 30000.0 | 20.0 | 200000000.0 | 10000.0 | 9000.0 | 50.0 |
| 10000.0 | 2000000.0 | 900.0 | -9000.0 | 20.0 | 9 | 10000.0 | 30000000.0 | -500.0 | 200000.0 |
| -6000.0 | -500.0 | -500000.0 | 3 | -10.0 | -5 | 9000.0 | -500.0 | 7000000.0 | -2 |
| 30.0 | 9000.0 | 3 | -30.0 | 0.06 | 0.03 | 50.0 | 200000.0 | -2 | 1000.0 |
| 200000000 | 30000 | -20000 | -70 | 300000 | 40 | 10000000 | 10000 | -6000 | 30 |
| 30000 | 30000000 | 2000 | -200000 | 60 | -10 | 4000 | 2000000 | -500 | 9000 |
| -20000 | 2000 | 7000000 | -10 | -30 | 10 | 6000 | 900 | -500000 | 3 |
| -70 | -200000 | -10 | 1000 | -0.1 | 08 | -20 | -9000 | 3 | -30 |
| 300000 | 60 | -30 | -0.1 | 900 | 0.1 | 30000 | 20 | -10 | 06 |
| 40 | -10 | 10 | 08 | 0.1 | 10000 | 20 | 9 | -5 | 03 |
| 10000000 | 4000 | 6000 | -20 | 30000 | 20 | 200000000 | 10000 | 9000 | 50 |
| 10000 | 2000000 | 900 | -9000 | 20 | 9 | 10000 | 30000000 | -500 | 200000 |
| -6000 | -500 | -500000 | 3 | -10 | -5 | 9000 | -500 | 7000000 | -2 |
| 30 | 9000 | 3 | -30 | 06 | 03 | 50 | 200000 | -2 | 1000 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(M(1:10, 1:10), {}, {}, ' %.1g ');
data2orgtable(M(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:APA300ML_mat_M
#+caption: First 10x10 elements of the Mass matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 0.01 | -2e-06 | 1e-06 | 6e-09 | 5e-05 | -5e-09 | -0.0005 | -7e-07 | 6e-07 | -3e-09 |
| -2e-06 | 0.01 | 8e-07 | -2e-05 | -8e-09 | 2e-09 | -9e-07 | -0.0002 | 1e-08 | -9e-07 |
@ -140,23 +212,29 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([[1:length(int_i)]', int_i, int_xyz], {}, {'Node i', 'Node Number', 'x [m]', 'y [m]', 'z [m]'}, ' %f ');
#+end_src
#+name: tab:coordinate_nodes
#+caption: Coordinates of the interface nodes
#+attr_latex: :environment tabularx :width 0.6\linewidth :align ccccc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Node i | Node Number | x [m] | y [m] | z [m] |
|--------+-------------+---------+-------+--------|
| 1.0 | 697783.0 | 0.0 | 0.0 | -0.015 |
| 2.0 | 697784.0 | 0.0 | 0.0 | 0.015 |
| 3.0 | 697785.0 | -0.0325 | 0.0 | 0.0 |
| 4.0 | 697786.0 | -0.0125 | 0.0 | 0.0 |
| 5.0 | 697787.0 | -0.0075 | 0.0 | 0.0 |
| 6.0 | 697788.0 | 0.0125 | 0.0 | 0.0 |
| 7.0 | 697789.0 | 0.0325 | 0.0 | 0.0 |
| 1.0 | 697783 | 0.0 | 0.0 | -0.015 |
| 2.0 | 697784 | 0.0 | 0.0 | 0.015 |
| 3.0 | 697785 | -0.0325 | 0.0 | 0.0 |
| 4.0 | 697786 | -0.0125 | 0.0 | 0.0 |
| 5.0 | 697787 | -0.0075 | 0.0 | 0.0 |
| 6.0 | 697788 | 0.0125 | 0.0 | 0.0 |
| 7.0 | 697789 | 0.0325 | 0.0 | 0.0 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable([length(n_i); length(int_i); size(M,1) - 6*length(int_i); size(M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
#+end_src
#+name: tab:parameters_fem
#+caption: Some extracted parameters of the FEM
#+attr_latex: :environment tabularx :width 0.4\linewidth :align lc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Total number of Nodes | 7 |
| Number of interface Nodes | 7 |
@ -206,7 +284,7 @@ If we take the numerical values, we obtain:
#+RESULTS:
: 5.64
From cite:fleming14_desig_model_contr_nanop_system (page 123), the relation between relative displacement of the sensor stack and generated voltage is:
From [[cite:&fleming14_desig_model_contr_nanop_system]] (page 123), the relation between relative displacement of the sensor stack and generated voltage is:
#+name: eq:piezo_strain_to_voltage
\begin{equation}
V_s = \frac{d_{33}}{\epsilon^T s^D n} \Delta h
@ -561,9 +639,13 @@ The parameters are shown in the table below.
#+name: fig:souleille18_model_piezo
#+caption: Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator
#+attr_latex: :width 0.7\linewidth
[[file:./figs/souleille18_model_piezo.png]]
#+name: tab:parameters_apa100m
#+caption:Parameters used for the model of the APA 100M
#+attr_latex: :environment tabularx :width 0.8\linewidth :align cl
#+attr_latex: :center t :booktabs t
| | Meaning |
|-------+----------------------------------------------------------------|
| $k_e$ | Stiffness used to adjust the pole of the isolator |
@ -622,9 +704,13 @@ Then $k_e$ and $k_1$ are computed.
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable(1e-6*[ka; ke; k1], {'ka', 'ke', 'k1'}, {'Value [N/um]'}, ' %.1f ');
data2orgtable(1e-6*[ka; ke; k1], {'=ka=', '=ke=', '=k1='}, {'Value [N/um]'}, ' %.1f ');
#+end_src
#+name: tab:stiffnesses_apa100m
#+caption:Obtained stiffnesses of the APA 100M
#+attr_latex: :environment tabularx :width 0.3\linewidth :align cl
#+attr_latex: :center t :booktabs t
#+RESULTS:
| | Value [N/um] |
|----+--------------|
@ -729,6 +815,7 @@ The dynamics of the FEM model and the simpler model are compared in Figure [[fig
#+name: fig:apa300ml_comp_simpler_model
#+caption: Comparison of the Dynamics between the FEM model and the simplified one
#+attr_latex: :width 1.0\linewidth
#+RESULTS:
[[file:figs/apa300ml_comp_simpler_model.png]]
@ -1025,6 +1112,7 @@ It is the expected behavior as shown in the Figure [[fig:souleille18_results]] (
#+name: fig:souleille18_results
#+caption: Results obtained in cite:souleille18_concep_activ_mount_space_applic
#+attr_latex: :width 1.0\linewidth
[[file:figs/souleille18_results.png]]
@ -1043,6 +1131,7 @@ A simplified model of the flexor is then developped.
#+name: fig:flexor_id16_screenshot
#+caption: Flexor studied
#+attr_latex: :width 0.3\linewidth
[[file:figs/flexor_id16_screenshot.png]]
** Matlab Init :noexport:ignore:
@ -1078,24 +1167,29 @@ We first extract the stiffness and mass matrices.
data2orgtable(K(1:10, 1:10), {}, {}, ' %.2e ');
#+end_src
#+name: tab:APA300ML_mat_K_2MDoF
#+caption: First 10x10 elements of the Stiffness matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 11200000.0 | 195.0 | 2220.0 | -0.719 | -265.0 | 1.59 | -11200000.0 | -213.0 | -2220.0 | 0.147 |
| 195.0 | 11400000.0 | 1290.0 | -148.0 | -0.188 | 2.41 | -212.0 | -11400000.0 | -1290.0 | 148.0 |
| 2220.0 | 1290.0 | 119000000.0 | 1.31 | 1.49 | 1.79 | -2220.0 | -1290.0 | -119000000.0 | -1.31 |
| -0.719 | -148.0 | 1.31 | 33.0 | 0.000488 | -0.000977 | 0.141 | 148.0 | -1.31 | -33.0 |
| -265.0 | -0.188 | 1.49 | 0.000488 | 33.0 | 0.00293 | 266.0 | 0.154 | -1.49 | 0.00026 |
| 1.59 | 2.41 | 1.79 | -0.000977 | 0.00293 | 236.0 | -1.32 | -2.55 | -1.79 | 0.000379 |
| -11200000.0 | -212.0 | -2220.0 | 0.141 | 266.0 | -1.32 | 11400000.0 | 24600.0 | 1640.0 | 120.0 |
| -213.0 | -11400000.0 | -1290.0 | 148.0 | 0.154 | -2.55 | 24600.0 | 11400000.0 | 1290.0 | -72.0 |
| -2220.0 | -1290.0 | -119000000.0 | -1.31 | -1.49 | -1.79 | 1640.0 | 1290.0 | 119000000.0 | 1.32 |
| 0.147 | 148.0 | -1.31 | -33.0 | 0.00026 | 0.000379 | 120.0 | -72.0 | 1.32 | 34.7 |
| 11200000 | 195 | 2220 | -0.719 | -265 | 1.59 | -11200000 | -213 | -2220 | 0.147 | | 195 | 11400000 | 1290 | -148 | -0.188 | 2.41 | -212 | -11400000 | -1290 | 148 |
| 2220 | 1290 | 119000000 | 1.31 | 1.49 | 1.79 | -2220 | -1290 | -119000000 | -1.31 | | | | | | | | | | | |
| -0.719 | -148 | 1.31 | 33 | 000488 | -000977 | 0.141 | 148 | -1.31 | -33 | | | | | | | | | | | |
| -265 | -0.188 | 1.49 | 000488 | 33 | 00293 | 266 | 0.154 | -1.49 | 00026 | | | | | | | | | | | |
| 1.59 | 2.41 | 1.79 | -000977 | 00293 | 236 | -1.32 | -2.55 | -1.79 | 000379 | | | | | | | | | | | |
| -11200000 | -212 | -2220 | 0.141 | 266 | -1.32 | 11400000 | 24600 | 1640 | 120 | | | | | | | | | | | |
| -213 | -11400000 | -1290 | 148 | 0.154 | -2.55 | 24600 | 11400000 | 1290 | -72 | | | | | | | | | | | |
| -2220 | -1290 | -119000000 | -1.31 | -1.49 | -1.79 | 1640 | 1290 | 119000000 | 1.32 | | | | | | | | | | | |
| 0.147 | 148 | -1.31 | -33 | 00026 | 000379 | 120 | -72 | 1.32 | 34.7 | | | | | | | | | | | |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(M(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:APA300ML_mat_M_2MDoF
#+caption: First 10x10 elements of the Mass matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 0.02 | 1e-09 | -4e-08 | -1e-10 | 0.0002 | -3e-11 | 0.004 | 5e-08 | 7e-08 | 1e-10 |
| 1e-09 | 0.02 | -3e-07 | -0.0002 | -1e-10 | -2e-09 | 2e-08 | 0.004 | 3e-07 | 1e-05 |
@ -1108,6 +1202,20 @@ We first extract the stiffness and mass matrices.
| 7e-08 | 3e-07 | 0.003 | -8e-10 | 2e-09 | -1e-09 | -3e-07 | -4e-08 | 0.02 | -1e-09 |
| 1e-10 | 1e-05 | 1e-09 | -1e-09 | -3e-13 | 2e-12 | -2e-10 | 0.0002 | -1e-09 | 2e-06 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable([length(n_i); length(int_i); size(M,1) - 6*length(int_i); size(M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
#+end_src
#+name: tab:parameters_fem_2MDoF
#+caption: Some extracted parameters of the FEM
#+attr_latex: :environment tabularx :width 0.4\linewidth :align lc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Total number of Nodes | 2 |
| Number of interface Nodes | 2 |
| Number of Modes | 6 |
| Size of M and K matrices | 18 |
Then, we extract the coordinates of the interface nodes.
#+begin_src matlab
[int_xyz, int_i, n_xyz, n_i, nodes] = extractNodes('out_nodes_3D.txt');
@ -1117,23 +1225,16 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([[1:length(int_i)]', int_i, int_xyz], {}, {'Node i', 'Node Number', 'x [m]', 'y [m]', 'z [m]'}, ' %f ');
#+end_src
#+name: tab:coordinate_nodes_2MDoF
#+caption: Coordinates of the interface nodes
#+attr_latex: :environment tabularx :width 0.6\linewidth :align ccccc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Node i | Node Number | x [m] | y [m] | z [m] |
|--------+-------------+-------+-------+-------|
| 1.0 | 181278.0 | 0.0 | 0.0 | 0.0 |
| 2.0 | 181279.0 | 0.0 | 0.0 | -0.0 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable([length(n_i); length(int_i); size(M,1) - 6*length(int_i); size(M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
#+end_src
#+RESULTS:
| Total number of Nodes | 2 |
| Number of interface Nodes | 2 |
| Number of Modes | 6 |
| Size of M and K matrices | 18 |
Using =K=, =M= and =int_xyz=, we can use the =Reduced Order Flexible Solid= simscape block.
** Identification of the parameters using Simscape and looking at the Stiffness Matrix
@ -1159,11 +1260,15 @@ The dynamics is identified from the applied force/torque to the measured displac
And we find the same parameters as the one estimated from the Stiffness matrix.
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable([1e-6*K(3,3), K(4,4), K(5,5), K(6,6) ; 1e-6./dcgain(G(3,3)), 1./dcgain(G(4,4)), 1./dcgain(G(5,5)), 1./dcgain(G(6,6))]', {'Axial Stiffness Dz [N/um]', 'Bending Stiffness Rx [Nm/rad]', 'Bending Stiffness Ry [Nm/rad]', 'Torsion Stiffness Rz [Nm/rad]'}, {'*Caracteristic*', '*Value*', '*Identification*'}, ' %0.f ');
data2orgtable([1e-6*K(3,3), K(4,4), K(5,5), K(6,6) ; 1e-6./dcgain(G(3,3)), 1./dcgain(G(4,4)), 1./dcgain(G(5,5)), 1./dcgain(G(6,6))]', {'Axial Stiffness Dz [N/um]', 'Bending Stiffness Rx [Nm/rad]', 'Bending Stiffness Ry [Nm/rad]', 'Torsion Stiffness Rz [Nm/rad]'}, {'*Characteristic*', '*Value*', '*Identification*'}, ' %0.f ');
#+end_src
#+name: tab:comp_identified_stiffnesses
#+caption: Comparison of identified and FEM stiffnesses
#+attr_latex: :environment tabularx :width 0.7\linewidth :align lcc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| *Caracteristic* | *Value* | *Identification* |
| *Characteristic* | *Value* | *Identification* |
|-------------------------------+---------+------------------|
| Axial Stiffness Dz [N/um] | 119 | 119 |
| Bending Stiffness Rx [Nm/rad] | 33 | 33 |
@ -1175,6 +1280,7 @@ Let's now model the flexible joint with a "perfect" Bushing joint as shown in Fi
#+name: fig:flexible_joint_simscape
#+caption: Bushing Joint used to model the flexible joint
#+attr_latex: :width 0.3\linewidth
[[file:figs/flexible_joint_simscape.png]]
The parameters of the Bushing joint (stiffnesses) are estimated from the Stiffness matrix that was computed from the FEM.
@ -1271,6 +1377,7 @@ The obtained geometry is shown in Figure [[fig:optimal_flexor]].
#+name: fig:optimal_flexor
#+caption: Flexor studied
#+attr_latex: :width 1.0\linewidth
[[file:figs/flexor_025_MDoF.jpg]]
** Matlab Init :noexport:ignore:
@ -1306,25 +1413,31 @@ We first extract the stiffness and mass matrices.
data2orgtable(K(1:10, 1:10), {}, {}, ' %.2e ');
#+end_src
#+name: tab:flex_mat_K
#+caption: First 10x10 elements of the Stiffness matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 12700000.0 | -18.5 | -26.8 | 0.00162 | -4.63 | 64.0 | -12700000.0 | 18.3 | 26.7 | 0.00234 |
| -18.5 | 12700000.0 | -499.0 | -132.0 | 0.00414 | -0.495 | 18.4 | -12700000.0 | 499.0 | 132.0 |
| -26.8 | -499.0 | 94000000.0 | -470.0 | 0.00771 | -0.855 | 26.8 | 498.0 | -94000000.0 | 470.0 |
| 0.00162 | -132.0 | -470.0 | 4.83 | 2.61e-07 | 0.000123 | -0.00163 | 132.0 | 470.0 | -4.83 |
| -4.63 | 0.00414 | 0.00771 | 2.61e-07 | 4.83 | 4.43e-05 | 4.63 | -0.00413 | -0.00772 | -4.3e-07 |
| 64.0 | -0.495 | -0.855 | 0.000123 | 4.43e-05 | 260.0 | -64.0 | 0.495 | 0.855 | -0.000124 |
| -12700000.0 | 18.4 | 26.8 | -0.00163 | 4.63 | -64.0 | 12700000.0 | -18.2 | -26.7 | -0.00234 |
| 18.3 | -12700000.0 | 498.0 | 132.0 | -0.00413 | 0.495 | -18.2 | 12700000.0 | -498.0 | -132.0 |
| 26.7 | 499.0 | -94000000.0 | 470.0 | -0.00772 | 0.855 | -26.7 | -498.0 | 94000000.0 | -470.0 |
| 0.00234 | 132.0 | 470.0 | -4.83 | -4.3e-07 | -0.000124 | -0.00234 | -132.0 | -470.0 | 4.83 |
| 12700000 | -18.5 | -26.8 | 00162 | -4.63 | 64 | -12700000 | 18.3 | 26.7 | 00234 |
| -18.5 | 12700000 | -499 | -132 | 00414 | -0.495 | 18.4 | -12700000 | 499 | 132 |
| -26.8 | -499 | 94000000 | -470 | 00771 | -0.855 | 26.8 | 498 | -94000000 | 470 |
| 00162 | -132 | -470 | 4.83 | 2.61e-07 | 000123 | -00163 | 132 | 470 | -4.83 |
| -4.63 | 00414 | 00771 | 2.61e-07 | 4.83 | 4.43e-05 | 4.63 | -00413 | -00772 | -4.3e-07 |
| 64 | -0.495 | -0.855 | 000123 | 4.43e-05 | 260 | -64 | 0.495 | 0.855 | -000124 |
| -12700000 | 18.4 | 26.8 | -00163 | 4.63 | -64 | 12700000 | -18.2 | -26.7 | -00234 |
| 18.3 | -12700000 | 498 | 132 | -00413 | 0.495 | -18.2 | 12700000 | -498 | -132 |
| 26.7 | 499 | -94000000 | 470 | -00772 | 0.855 | -26.7 | -498 | 94000000 | -470 |
| 00234 | 132 | 470 | -4.83 | -4.3e-07 | -000124 | -00234 | -132 | -470 | 4.83 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(M(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:flex_mat_M
#+caption: First 10x10 elements of the Mass matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 0.006 | 8e-09 | -2e-08 | -1e-10 | 3e-05 | 3e-08 | 0.003 | -3e-09 | 9e-09 | 2e-12 |
| 8e-09 | 0.02 | 1e-07 | -3e-05 | 1e-11 | 6e-10 | 1e-08 | 0.003 | -5e-08 | 3e-09 |
@ -1347,6 +1460,10 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([length(n_i); length(int_i); size(M,1) - 6*length(int_i); size(M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
#+end_src
#+name: tab:coordinate_nodes_flex
#+caption: Coordinates of the interface nodes for Flexible Joint
#+attr_latex: :environment tabularx :width 0.6\linewidth :align ccccc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Total number of Nodes | 2 |
| Number of interface Nodes | 2 |
@ -1357,7 +1474,10 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([[1:length(int_i)]', int_i, int_xyz], {}, {'Node i', 'Node Number', 'x [m]', 'y [m]', 'z [m]'}, ' %f ');
#+end_src
#+name: tab:coordinate_interface_nodes_flex
#+caption: Coordinates of the interface nodes
#+attr_latex: :environment tabularx :width 0.6\linewidth :align ccccc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Node i | Node Number | x [m] | y [m] | z [m] |
|--------+-------------+-------+-------+-------|
@ -1392,6 +1512,10 @@ And we find the same parameters as the one estimated from the Stiffness matrix.
data2orgtable([1e-6*K(3,3), K(4,4), K(5,5), K(6,6) ; 1e-6./dcgain(G(3,3)), 1./dcgain(G(4,4)), 1./dcgain(G(5,5)), 1./dcgain(G(6,6))]', {'Axial Stiffness Dz [N/um]', 'Bending Stiffness Rx [Nm/rad]', 'Bending Stiffness Ry [Nm/rad]', 'Torsion Stiffness Rz [Nm/rad]'}, {'*Caracteristic*', '*Value*', '*Identification*'}, ' %.1f ');
#+end_src
#+name: tab:comp_identified_stiffnesses_flex
#+caption: Comparison of identified and FEM stiffnesses
#+attr_latex: :environment tabularx :width 0.7\linewidth :align lcc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| *Caracteristic* | *Value* | *Identification* |
|-------------------------------+---------+------------------|
@ -1403,10 +1527,6 @@ And we find the same parameters as the one estimated from the Stiffness matrix.
** Simpler Model
Let's now model the flexible joint with a "perfect" Bushing joint as shown in Figure [[fig:flexible_joint_simscape]].
#+name: fig:flexible_joint_simscape
#+caption: Bushing Joint used to model the flexible joint
[[file:figs/flexible_joint_simscape.png]]
The parameters of the Bushing joint (stiffnesses) are estimated from the Stiffness matrix that was computed from the FEM.
#+begin_src matlab
Kx = K(1,1); % [N/m]
@ -1480,13 +1600,13 @@ The two obtained dynamics are compared in Figure
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/flexor_ID16_compare_bushing_joint.pdf', 'width', 'wide', 'height', 'normal');
exportFig('figs/flexor_ID16_compare_bushing_joint_optimized.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:flexor_ID16_compare_bushing_joint
#+name: fig:flexor_ID16_compare_bushing_joint_optimized
#+caption: Comparison of the Joint compliance between the FEM model and the simpler model
#+RESULTS:
[[file:figs/flexor_ID16_compare_bushing_joint.png]]
[[file:figs/flexor_ID16_compare_bushing_joint_optimized.png]]
** Comparison with a stiffer Flexible Joint
The stiffness matrix with the flexible joint with a "hinge" size of 0.50mm is loaded.
@ -1500,6 +1620,10 @@ Its parameters are compared with the Flexible Joint with a size of 0.25mm in the
data2orgtable([1e-6*K(3,3), 1e-6*K(2,2), K(4,4), K(5,5), K(6,6) ; 1e-6*K_050(3,3), 1e-6*K_050(2,2), K_050(4,4), K_050(5,5), K_050(6,6)]', {'Axial Stiffness Dz [N/um]', 'Shear Stiffness [N/um]', 'Bending Stiffness Rx [Nm/rad]', 'Bending Stiffness Ry [Nm/rad]', 'Torsion Stiffness Rz [Nm/rad]'}, {'*Caracteristic*', '*0.25 mm*', '*0.50 mm*'}, ' %.1f ');
#+end_src
#+name: tab:comp_stiffnesses_flex_size
#+caption: Comparison of flexible joint stiffnesses for 0.25 and 0.5mm
#+attr_latex: :environment tabularx :width 0.7\linewidth :align lcc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| *Caracteristic* | *0.25 mm* | *0.50 mm* |
|-------------------------------+-----------+-----------|
@ -1522,12 +1646,14 @@ The 3D as well as the interface nodes are shown in Figure [[fig:strut_encoder_po
#+name: fig:strut_encoder_points3
#+caption: Interface points
#+attr_latex: :width 1.0\linewidth
[[file:figs/strut_fem_nodes.jpg]]
A side view is shown in Figure [[fig:strut_encoder_nodes_side]].
#+name: fig:strut_encoder_nodes_side
#+caption: Interface points - Side view
#+attr_latex: :width 1.0\linewidth
[[file:figs/strut_fem_nodes_side.jpg]]
The flexible joints used have a 0.25mm width size.
@ -1565,25 +1691,31 @@ We first extract the stiffness and mass matrices.
data2orgtable(K(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:strut_mat_K
#+caption: First 10x10 elements of the Stiffness matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 2000000.0 | 1000000.0 | -3000000.0 | -400.0 | 300.0 | 200.0 | -30.0 | 2000.0 | -10000.0 | 0.3 |
| 1000000.0 | 4000000.0 | -8000000.0 | -900.0 | 400.0 | -50.0 | -6000.0 | 10000.0 | -20000.0 | 3 |
| -3000000.0 | -8000000.0 | 20000000.0 | 2000.0 | -900.0 | 200.0 | -10000.0 | 20000.0 | -300000.0 | 7 |
| -400.0 | -900.0 | 2000.0 | 5 | -0.1 | 0.05 | 1 | -3 | 6 | -0.0007 |
| 300.0 | 400.0 | -900.0 | -0.1 | 5 | 0.04 | -0.1 | 0.5 | -3 | 0.0001 |
| 200.0 | -50.0 | 200.0 | 0.05 | 0.04 | 300.0 | 4 | -0.01 | -1 | 3e-05 |
| -30.0 | -6000.0 | -10000.0 | 1 | -0.1 | 4 | 3000000.0 | -1000000.0 | -2000000.0 | -300.0 |
| 2000.0 | 10000.0 | 20000.0 | -3 | 0.5 | -0.01 | -1000000.0 | 6000000.0 | 7000000.0 | 1000.0 |
| -10000.0 | -20000.0 | -300000.0 | 6 | -3 | -1 | -2000000.0 | 7000000.0 | 20000000.0 | 2000.0 |
| 0.3 | 3 | 7 | -0.0007 | 0.0001 | 3e-05 | -300.0 | 1000.0 | 2000.0 | 5 |
| 2000000 | 1000000 | -3000000 | -400 | 300 | 200 | -30 | 2000 | -10000 | 0.3 |
| 1000000 | 4000000 | -8000000 | -900 | 400 | -50 | -6000 | 10000 | -20000 | 3 |
| -3000000 | -8000000 | 20000000 | 2000 | -900 | 200 | -10000 | 20000 | -300000 | 7 |
| -400 | -900 | 2000 | 5 | -0.1 | 05 | 1 | -3 | 6 | -0007 |
| 300 | 400 | -900 | -0.1 | 5 | 04 | -0.1 | 0.5 | -3 | 0001 |
| 200 | -50 | 200 | 05 | 04 | 300 | 4 | -01 | -1 | 3e-05 |
| -30 | -6000 | -10000 | 1 | -0.1 | 4 | 3000000 | -1000000 | -2000000 | -300 |
| 2000 | 10000 | 20000 | -3 | 0.5 | -01 | -1000000 | 6000000 | 7000000 | 1000 |
| -10000 | -20000 | -300000 | 6 | -3 | -1 | -2000000 | 7000000 | 20000000 | 2000 |
| 0.3 | 3 | 7 | -0007 | 0001 | 3e-05 | -300 | 1000 | 2000 | 5 |
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(M(1:10, 1:10), {}, {}, ' %.1g ');
#+end_src
#+name: tab:strut_mat_M
#+caption: First 10x10 elements of the Mass matrix
#+attr_latex: :environment tabularx :width \linewidth :align XXXXXXXXXX
#+attr_latex: :center t :booktabs t :font \tiny
#+RESULTS:
| 0.04 | -0.005 | 0.007 | 2e-06 | 0.0001 | -5e-07 | -1e-05 | -9e-07 | 8e-05 | -5e-10 |
| -0.005 | 0.03 | 0.02 | -0.0001 | 1e-06 | -3e-07 | 3e-05 | -0.0001 | 8e-05 | -3e-08 |
@ -1606,6 +1738,10 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([length(n_i); length(int_i); size(M,1) - 6*length(int_i); size(M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
#+end_src
#+name: tab:parameters_fem_strut
#+caption: Some extracted parameters of the FEM
#+attr_latex: :environment tabularx :width 0.4\linewidth :align lc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Total number of Nodes | 8 |
| Number of interface Nodes | 8 |
@ -1616,7 +1752,10 @@ Then, we extract the coordinates of the interface nodes.
data2orgtable([[1:length(int_i)]', int_i, int_xyz], {}, {'Node i', 'Node Number', 'x [m]', 'y [m]', 'z [m]'}, ' %f ');
#+end_src
#+name: tab:coordinate_nodes_strut
#+caption: Coordinates of the interface nodes
#+attr_latex: :environment tabularx :width 0.6\linewidth :align ccccc
#+attr_latex: :center t :booktabs t
#+RESULTS:
| Node i | Node Number | x [m] | y [m] | z [m] |
|--------+-------------+---------+--------+----------|
@ -1849,5 +1988,4 @@ The same dynamics is identified for a payload mass of 10Kg.
| Rz [Nm/rad] | 118.0 | 114.803 |
* Bibliography :ignore:
bibliographystyle:unsrt
bibliography:ref.bib
#+latex: \printbibliography[heading=bibintoc,title={Bibliography}]

BIN
nass-fem.pdf Normal file

Binary file not shown.

723
nass-fem.tex Normal file
View File

@ -0,0 +1,723 @@
% Created 2024-03-19 Tue 11:08
% Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
\input{preamble.tex}
\bibliography{nass-fem.bib}
\author{Dehaeze Thomas}
\date{\today}
\title{NASS - Finite Element Models with Simscape}
\hypersetup{
pdfauthor={Dehaeze Thomas},
pdftitle={NASS - Finite Element Models with Simscape},
pdfkeywords={},
pdfsubject={},
pdfcreator={Emacs 29.2 (Org mode 9.7)},
pdflang={English}}
\usepackage{biblatex}
\begin{document}
\maketitle
\tableofcontents
\clearpage
In this document, Finite Element Models (FEM) of parts of the Nano-Hexapod are developed and integrated into Simscape for dynamical analysis.
It is divided in the following sections:
\begin{itemize}
\item Section \ref{sec:APA300ML}:
A super-element of the Amplified Piezoelectric Actuator APA300ML used for the NASS is exported using Ansys and imported in Simscape.
The static and dynamical properties of the APA300ML are then estimated using the Simscape model.
\item Section \ref{sec:flexor_ID16}:
A first geometry of a Flexible joint is modelled and its characteristics are identified from the Stiffness matrix as well as from the Simscape model.
\item Section \ref{sec:flexor_025}:
An optimized flexible joint is developed for the Nano-Hexapod and is then imported in a Simscape model.
\item Section \ref{sec:strut_encoder}:
A super element of a complete strut is studied.
\end{itemize}
\chapter{APA300ML}
\label{sec:APA300ML}
In this section, the Amplified Piezoelectric Actuator APA300ML (\href{doc/APA300ML.pdf}{doc}) is modeled using a Finite Element Software.
Then a \emph{super element} is exported and imported in Simscape where its dynamic is studied.
A 3D view of the Amplified Piezoelectric Actuator (APA300ML) is shown in Figure \ref{fig:apa300ml_ansys}.
The remote point used are also shown in this figure.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.7\linewidth]{figs/apa300ml_ansys.jpg}
\caption{\label{fig:apa300ml_ansys}Ansys FEM of the APA300ML}
\end{figure}
\section{Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates}
We first extract the stiffness and mass matrices.
\begin{table}[htbp]
\caption{\label{tab:APA300ML_mat_K}First 10x10 elements of the Stiffness matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
200000000 & 30000 & -20000 & -70 & 300000 & 40 & 10000000 & 10000 & -6000 & 30\\
30000 & 30000000 & 2000 & -200000 & 60 & -10 & 4000 & 2000000 & -500 & 9000\\
-20000 & 2000 & 7000000 & -10 & -30 & 10 & 6000 & 900 & -500000 & 3\\
-70 & -200000 & -10 & 1000 & -0.1 & 08 & -20 & -9000 & 3 & -30\\
300000 & 60 & -30 & -0.1 & 900 & 0.1 & 30000 & 20 & -10 & 06\\
40 & -10 & 10 & 08 & 0.1 & 10000 & 20 & 9 & -5 & 03\\
10000000 & 4000 & 6000 & -20 & 30000 & 20 & 200000000 & 10000 & 9000 & 50\\
10000 & 2000000 & 900 & -9000 & 20 & 9 & 10000 & 30000000 & -500 & 200000\\
-6000 & -500 & -500000 & 3 & -10 & -5 & 9000 & -500 & 7000000 & -2\\
30 & 9000 & 3 & -30 & 06 & 03 & 50 & 200000 & -2 & 1000\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:APA300ML_mat_M}First 10x10 elements of the Mass matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
0.01 & -2e-06 & 1e-06 & 6e-09 & 5e-05 & -5e-09 & -0.0005 & -7e-07 & 6e-07 & -3e-09\\
-2e-06 & 0.01 & 8e-07 & -2e-05 & -8e-09 & 2e-09 & -9e-07 & -0.0002 & 1e-08 & -9e-07\\
1e-06 & 8e-07 & 0.009 & 5e-10 & 1e-09 & -1e-09 & -5e-07 & 3e-08 & 6e-05 & 1e-10\\
6e-09 & -2e-05 & 5e-10 & 3e-07 & 2e-11 & -3e-12 & 3e-09 & 9e-07 & -4e-10 & 3e-09\\
5e-05 & -8e-09 & 1e-09 & 2e-11 & 6e-07 & -4e-11 & -1e-06 & -2e-09 & 1e-09 & -8e-12\\
-5e-09 & 2e-09 & -1e-09 & -3e-12 & -4e-11 & 1e-07 & -2e-09 & -1e-09 & -4e-10 & -5e-12\\
-0.0005 & -9e-07 & -5e-07 & 3e-09 & -1e-06 & -2e-09 & 0.01 & 1e-07 & -3e-07 & -2e-08\\
-7e-07 & -0.0002 & 3e-08 & 9e-07 & -2e-09 & -1e-09 & 1e-07 & 0.01 & -4e-07 & 2e-05\\
6e-07 & 1e-08 & 6e-05 & -4e-10 & 1e-09 & -4e-10 & -3e-07 & -4e-07 & 0.009 & -2e-10\\
-3e-09 & -9e-07 & 1e-10 & 3e-09 & -8e-12 & -5e-12 & -2e-08 & 2e-05 & -2e-10 & 3e-07\\
\bottomrule
\end{tabularx}
\end{table}
Then, we extract the coordinates of the interface nodes.
\begin{table}[htbp]
\caption{\label{tab:coordinate_nodes}Coordinates of the interface nodes}
\centering
\begin{tabularx}{0.6\linewidth}{ccccc}
\toprule
Node i & Node Number & x [m] & y [m] & z [m]\\
\midrule
1.0 & 697783 & 0.0 & 0.0 & -0.015\\
2.0 & 697784 & 0.0 & 0.0 & 0.015\\
3.0 & 697785 & -0.0325 & 0.0 & 0.0\\
4.0 & 697786 & -0.0125 & 0.0 & 0.0\\
5.0 & 697787 & -0.0075 & 0.0 & 0.0\\
6.0 & 697788 & 0.0125 & 0.0 & 0.0\\
7.0 & 697789 & 0.0325 & 0.0 & 0.0\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:parameters_fem}Some extracted parameters of the FEM}
\centering
\begin{tabularx}{0.4\linewidth}{lc}
\toprule
Total number of Nodes & 7\\
Number of interface Nodes & 7\\
Number of Modes & 120\\
Size of M and K matrices & 162\\
\bottomrule
\end{tabularx}
\end{table}
Using \texttt{K}, \texttt{M} and \texttt{int\_xyz}, we can now use the \texttt{Reduced Order Flexible Solid} simscape block.
\section{Piezoelectric parameters}
In order to make the conversion from applied voltage to generated force or from the strain to the generated voltage, we need to defined some parameters corresponding to the piezoelectric material:
PZT-4
The ratio of the developed force to applied voltage is:
\begin{equation}
\label{eq:piezo_voltage_to_force}
F_a = g_a V_a, \quad g_a = d_{33} n k_a
\end{equation}
where:
\begin{itemize}
\item \(F_a\): developed force in [N]
\item \(n\): number of layers of the actuator stack
\item \(d_{33}\): strain constant in [m/V]
\item \(k_a\): actuator stack stiffness in [N/m]
\item \(V_a\): applied voltage in [V]
\end{itemize}
If we take the numerical values, we obtain:
From \cite{fleming14_desig_model_contr_nanop_system} (page 123), the relation between relative displacement of the sensor stack and generated voltage is:
\begin{equation}
\label{eq:piezo_strain_to_voltage}
V_s = \frac{d_{33}}{\epsilon^T s^D n} \Delta h
\end{equation}
where:
\begin{itemize}
\item \(V_s\): measured voltage in [V]
\item \(d_{33}\): strain constant in [m/V]
\item \(\epsilon^T\): permittivity under constant stress in [F/m]
\item \(s^D\): elastic compliance under constant electric displacement in [m\^{}2/N]
\item \(n\): number of layers of the sensor stack
\item \(\Delta h\): relative displacement in [m]
\end{itemize}
If we take the numerical values, we obtain:
\section{Simscape Model}
The flexible element is imported using the \texttt{Reduced Order Flexible Solid} simscape block.
Let's say we use two stacks as a force sensor and one stack as an actuator:
\begin{itemize}
\item A \texttt{Relative Motion Sensor} block is added between the nodes A and C
\item An \texttt{Internal Force} block is added between the remote points E and B
\end{itemize}
The interface nodes are shown in Figure \ref{fig:apa300ml_ansys}.
One mass is fixed at one end of the piezo-electric stack actuator (remove point F), the other end is fixed to the world frame (remote point G).
\section{Identification of the APA Characteristics}
\subsection{Stiffness}
The transfer function from vertical external force to the relative vertical displacement is identified.
The inverse of its DC gain is the axial stiffness of the APA:
The specified stiffness in the datasheet is \(k = 1.8\, [N/\mu m]\).
\subsection{Resonance Frequency}
The resonance frequency is specified to be between 650Hz and 840Hz.
This is also the case for the FEM model (Figure \ref{fig:apa300ml_resonance}).
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_resonance.png}
\caption{\label{fig:apa300ml_resonance}First resonance is around 800Hz}
\end{figure}
\subsection{Amplification factor}
The amplification factor is the ratio of the vertical displacement to the stack displacement.
The ratio of the two displacement is computed from the FEM model.
This is actually correct and approximately corresponds to the ratio of the piezo height and length:
\subsection{Stroke}
Estimation of the actuator stroke:
\[ \Delta H = A n \Delta L \]
with:
\begin{itemize}
\item \(\Delta H\) Axial Stroke of the APA
\item \(A\) Amplification factor (5 for the APA300ML)
\item \(n\) Number of stack used
\item \(\Delta L\) Stroke of the stack (0.1\% of its length)
\end{itemize}
This is exactly the specified stroke in the data-sheet.
\subsection{Stroke BIS}
\begin{itemize}
\item[{$\square$}] Identified the stroke form the transfer function from V to z
\end{itemize}
\section{Identification of the Dynamics from actuator to replace displacement}
We first set the mass to be approximately zero.
The dynamics is identified from the applied force to the measured relative displacement.
The same dynamics is identified for a payload mass of 10Kg.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_plant_dynamics.png}
\caption{\label{fig:apa300ml_plant_dynamics}Transfer function from forces applied by the stack to the axial displacement of the APA}
\end{figure}
The root locus corresponding to Direct Velocity Feedback with a mass of 10kg is shown in Figure \ref{fig:apa300ml_dvf_root_locus}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_dvf_root_locus.png}
\caption{\label{fig:apa300ml_dvf_root_locus}Root Locus for Direct Velocity Feedback}
\end{figure}
\section{Identification of the Dynamics from actuator to force sensor}
Let's use 2 stacks as a force sensor and 1 stack as force actuator.
The transfer function from actuator voltage to sensor voltage is identified and shown in Figure \ref{fig:apa300ml_iff_plant}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_iff_plant.png}
\caption{\label{fig:apa300ml_iff_plant}Transfer function from actuator to force sensor}
\end{figure}
For root locus corresponding to IFF is shown in Figure \ref{fig:apa300ml_iff_root_locus}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_iff_root_locus.png}
\caption{\label{fig:apa300ml_iff_root_locus}Root Locus for IFF}
\end{figure}
\section{Identification for a simpler model}
The goal in this section is to identify the parameters of a simple APA model from the FEM.
This can be useful is a lower order model is to be used for simulations.
The presented model is based on \cite{souleille18_concep_activ_mount_space_applic}.
The model represents the Amplified Piezo Actuator (APA) from Cedrat-Technologies (Figure \ref{fig:souleille18_model_piezo}).
The parameters are shown in the table below.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.7\linewidth]{./figs/souleille18_model_piezo.png}
\caption{\label{fig:souleille18_model_piezo}Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator}
\end{figure}
\begin{table}[htbp]
\caption{\label{tab:parameters_apa100m}Parameters used for the model of the APA 100M}
\centering
\begin{tabularx}{0.8\linewidth}{cl}
\toprule
& Meaning\\
\midrule
\(k_e\) & Stiffness used to adjust the pole of the isolator\\
\(k_1\) & Stiffness of the metallic suspension when the stack is removed\\
\(k_a\) & Stiffness of the actuator\\
\(c_1\) & Added viscous damping\\
\bottomrule
\end{tabularx}
\end{table}
The goal is to determine \(k_e\), \(k_a\) and \(k_1\) so that the simplified model fits the FEM model.
\[ \alpha = \frac{x_1}{f}(\omega=0) = \frac{\frac{k_e}{k_e + k_a}}{k_1 + \frac{k_e k_a}{k_e + k_a}} \]
\[ \beta = \frac{x_1}{F}(\omega=0) = \frac{1}{k_1 + \frac{k_e k_a}{k_e + k_a}} \]
If we can fix \(k_a\), we can determine \(k_e\) and \(k_1\) with:
\[ k_e = \frac{k_a}{\frac{\beta}{\alpha} - 1} \]
\[ k_1 = \frac{1}{\beta} - \frac{k_e k_a}{k_e + k_a} \]
From the identified dynamics, compute \(\alpha\) and \(\beta\)
\(k_a\) is estimated using the following formula:
The factor can be adjusted to better match the curves.
Then \(k_e\) and \(k_1\) are computed.
\begin{table}[htbp]
\caption{\label{tab:stiffnesses_apa100m}Obtained stiffnesses of the APA 100M}
\centering
\begin{tabularx}{0.3\linewidth}{cl}
\toprule
& Value [N/um]\\
\midrule
ka & 40.5\\
ke & 1.5\\
k1 & 0.4\\
\bottomrule
\end{tabularx}
\end{table}
The damping in the system is adjusted to match the FEM model if necessary.
The analytical model of the simpler system is defined below:
And the DC gain is adjusted for the force sensor:
The dynamics of the FEM model and the simpler model are compared in Figure \ref{fig:apa300ml_comp_simpler_model}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=1.0\linewidth]{figs/apa300ml_comp_simpler_model.png}
\caption{\label{fig:apa300ml_comp_simpler_model}Comparison of the Dynamics between the FEM model and the simplified one}
\end{figure}
The simplified model has also been implemented in Simscape.
The dynamics of the Simscape simplified model is identified and compared with the FEM one in Figure \ref{fig:apa300ml_comp_simpler_simscape}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/apa300ml_comp_simpler_simscape.png}
\caption{\label{fig:apa300ml_comp_simpler_simscape}Comparison of the Dynamics between the FEM model and the simplified simscape model}
\end{figure}
\section{Integral Force Feedback}
In this section, Integral Force Feedback control architecture is applied on the APA300ML.
First, the plant (dynamics from voltage actuator to voltage sensor is identified).
The payload mass is set to 10kg.
The obtained dynamics is shown in Figure \ref{fig:piezo_amplified_iff_plant}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/piezo_amplified_iff_plant.png}
\caption{\label{fig:piezo_amplified_iff_plant}IFF Plant}
\end{figure}
The controller is defined below and the loop gain is shown in Figure \ref{fig:piezo_amplified_iff_loop_gain}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/piezo_amplified_iff_loop_gain.png}
\caption{\label{fig:piezo_amplified_iff_loop_gain}IFF Loop Gain}
\end{figure}
Now the closed-loop system is identified again and compare with the open loop system in Figure \ref{fig:piezo_amplified_iff_comp}.
It is the expected behavior as shown in the Figure \ref{fig:souleille18_results} (from \cite{souleille18_concep_activ_mount_space_applic}).
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/piezo_amplified_iff_comp.png}
\caption{\label{fig:piezo_amplified_iff_comp}OL and CL transfer functions}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=1.0\linewidth]{figs/souleille18_results.png}
\caption{\label{fig:souleille18_results}Results obtained in \cite{souleille18_concep_activ_mount_space_applic}}
\end{figure}
\chapter{First Flexible Joint Geometry}
\label{sec:flexor_ID16}
The studied flexor is shown in Figure \ref{fig:flexor_id16_screenshot}.
The stiffness and mass matrices representing the dynamics of the flexor are exported from a FEM.
It is then imported into Simscape.
A simplified model of the flexor is then developped.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.3\linewidth]{figs/flexor_id16_screenshot.png}
\caption{\label{fig:flexor_id16_screenshot}Flexor studied}
\end{figure}
\section{Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates}
We first extract the stiffness and mass matrices.
\begin{table}[htbp]
\caption{\label{tab:APA300ML_mat_K_2MDoF}First 10x10 elements of the Stiffness matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
11200000 & 195 & 2220 & -0.719 & -265 & 1.59 & -11200000 & -213 & -2220 & 0.147 & & 195 & 11400000 & 1290 & -148 & -0.188 & 2.41 & -212 & -11400000 & -1290 & 148\\
2220 & 1290 & 119000000 & 1.31 & 1.49 & 1.79 & -2220 & -1290 & -119000000 & -1.31 & & & & & & & & & & & \\
-0.719 & -148 & 1.31 & 33 & 000488 & -000977 & 0.141 & 148 & -1.31 & -33 & & & & & & & & & & & \\
-265 & -0.188 & 1.49 & 000488 & 33 & 00293 & 266 & 0.154 & -1.49 & 00026 & & & & & & & & & & & \\
1.59 & 2.41 & 1.79 & -000977 & 00293 & 236 & -1.32 & -2.55 & -1.79 & 000379 & & & & & & & & & & & \\
-11200000 & -212 & -2220 & 0.141 & 266 & -1.32 & 11400000 & 24600 & 1640 & 120 & & & & & & & & & & & \\
-213 & -11400000 & -1290 & 148 & 0.154 & -2.55 & 24600 & 11400000 & 1290 & -72 & & & & & & & & & & & \\
-2220 & -1290 & -119000000 & -1.31 & -1.49 & -1.79 & 1640 & 1290 & 119000000 & 1.32 & & & & & & & & & & & \\
0.147 & 148 & -1.31 & -33 & 00026 & 000379 & 120 & -72 & 1.32 & 34.7 & & & & & & & & & & & \\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:APA300ML_mat_M_2MDoF}First 10x10 elements of the Mass matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
0.02 & 1e-09 & -4e-08 & -1e-10 & 0.0002 & -3e-11 & 0.004 & 5e-08 & 7e-08 & 1e-10\\
1e-09 & 0.02 & -3e-07 & -0.0002 & -1e-10 & -2e-09 & 2e-08 & 0.004 & 3e-07 & 1e-05\\
-4e-08 & -3e-07 & 0.02 & 7e-10 & -2e-09 & 1e-09 & 3e-07 & 7e-08 & 0.003 & 1e-09\\
-1e-10 & -0.0002 & 7e-10 & 4e-06 & -1e-12 & -6e-13 & 2e-10 & -7e-06 & -8e-10 & -1e-09\\
0.0002 & -1e-10 & -2e-09 & -1e-12 & 3e-06 & 2e-13 & 9e-06 & 4e-11 & 2e-09 & -3e-13\\
-3e-11 & -2e-09 & 1e-09 & -6e-13 & 2e-13 & 4e-07 & 8e-11 & 9e-10 & -1e-09 & 2e-12\\
0.004 & 2e-08 & 3e-07 & 2e-10 & 9e-06 & 8e-11 & 0.02 & -7e-08 & -3e-07 & -2e-10\\
5e-08 & 0.004 & 7e-08 & -7e-06 & 4e-11 & 9e-10 & -7e-08 & 0.01 & -4e-08 & 0.0002\\
7e-08 & 3e-07 & 0.003 & -8e-10 & 2e-09 & -1e-09 & -3e-07 & -4e-08 & 0.02 & -1e-09\\
1e-10 & 1e-05 & 1e-09 & -1e-09 & -3e-13 & 2e-12 & -2e-10 & 0.0002 & -1e-09 & 2e-06\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:parameters_fem_2MDoF}Some extracted parameters of the FEM}
\centering
\begin{tabularx}{0.4\linewidth}{lc}
\toprule
Total number of Nodes & 2\\
Number of interface Nodes & 2\\
Number of Modes & 6\\
Size of M and K matrices & 18\\
\bottomrule
\end{tabularx}
\end{table}
Then, we extract the coordinates of the interface nodes.
\begin{table}[htbp]
\caption{\label{tab:coordinate_nodes_2MDoF}Coordinates of the interface nodes}
\centering
\begin{tabularx}{0.6\linewidth}{ccccc}
\toprule
Node i & Node Number & x [m] & y [m] & z [m]\\
\midrule
1.0 & 181278.0 & 0.0 & 0.0 & 0.0\\
2.0 & 181279.0 & 0.0 & 0.0 & -0.0\\
\bottomrule
\end{tabularx}
\end{table}
Using \texttt{K}, \texttt{M} and \texttt{int\_xyz}, we can use the \texttt{Reduced Order Flexible Solid} simscape block.
\section{Identification of the parameters using Simscape and looking at the Stiffness Matrix}
The flexor is now imported into Simscape and its parameters are estimated using an identification.
The dynamics is identified from the applied force/torque to the measured displacement/rotation of the flexor.
And we find the same parameters as the one estimated from the Stiffness matrix.
\begin{table}[htbp]
\caption{\label{tab:comp_identified_stiffnesses}Comparison of identified and FEM stiffnesses}
\centering
\begin{tabularx}{0.7\linewidth}{lcc}
\toprule
\textbf{Characteristic} & \textbf{Value} & \textbf{Identification}\\
\midrule
Axial Stiffness Dz [N/um] & 119 & 119\\
Bending Stiffness Rx [Nm/rad] & 33 & 33\\
Bending Stiffness Ry [Nm/rad] & 33 & 33\\
Torsion Stiffness Rz [Nm/rad] & 236 & 236\\
\bottomrule
\end{tabularx}
\end{table}
\section{Simpler Model}
Let's now model the flexible joint with a ``perfect'' Bushing joint as shown in Figure \ref{fig:flexible_joint_simscape}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.3\linewidth]{figs/flexible_joint_simscape.png}
\caption{\label{fig:flexible_joint_simscape}Bushing Joint used to model the flexible joint}
\end{figure}
The parameters of the Bushing joint (stiffnesses) are estimated from the Stiffness matrix that was computed from the FEM.
The dynamics from the applied force/torque to the measured displacement/rotation of the flexor is identified again for this simpler model.
The two obtained dynamics are compared in Figure
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/flexor_ID16_compare_bushing_joint.png}
\caption{\label{fig:flexor_ID16_compare_bushing_joint}Comparison of the Joint compliance between the FEM model and the simpler model}
\end{figure}
\chapter{Optimized Flexible Joint}
\label{sec:flexor_025}
The joint geometry has been optimized using Ansys to have lower bending stiffness while keeping a large axial stiffness.
The obtained geometry is shown in Figure \ref{fig:optimal_flexor}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=1.0\linewidth]{figs/flexor_025_MDoF.jpg}
\caption{\label{fig:optimal_flexor}Flexor studied}
\end{figure}
\section{Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates}
We first extract the stiffness and mass matrices.
\begin{table}[htbp]
\caption{\label{tab:flex_mat_K}First 10x10 elements of the Stiffness matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
12700000 & -18.5 & -26.8 & 00162 & -4.63 & 64 & -12700000 & 18.3 & 26.7 & 00234\\
-18.5 & 12700000 & -499 & -132 & 00414 & -0.495 & 18.4 & -12700000 & 499 & 132\\
-26.8 & -499 & 94000000 & -470 & 00771 & -0.855 & 26.8 & 498 & -94000000 & 470\\
00162 & -132 & -470 & 4.83 & 2.61e-07 & 000123 & -00163 & 132 & 470 & -4.83\\
-4.63 & 00414 & 00771 & 2.61e-07 & 4.83 & 4.43e-05 & 4.63 & -00413 & -00772 & -4.3e-07\\
64 & -0.495 & -0.855 & 000123 & 4.43e-05 & 260 & -64 & 0.495 & 0.855 & -000124\\
-12700000 & 18.4 & 26.8 & -00163 & 4.63 & -64 & 12700000 & -18.2 & -26.7 & -00234\\
18.3 & -12700000 & 498 & 132 & -00413 & 0.495 & -18.2 & 12700000 & -498 & -132\\
26.7 & 499 & -94000000 & 470 & -00772 & 0.855 & -26.7 & -498 & 94000000 & -470\\
00234 & 132 & 470 & -4.83 & -4.3e-07 & -000124 & -00234 & -132 & -470 & 4.83\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:flex_mat_M}First 10x10 elements of the Mass matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
0.006 & 8e-09 & -2e-08 & -1e-10 & 3e-05 & 3e-08 & 0.003 & -3e-09 & 9e-09 & 2e-12\\
8e-09 & 0.02 & 1e-07 & -3e-05 & 1e-11 & 6e-10 & 1e-08 & 0.003 & -5e-08 & 3e-09\\
-2e-08 & 1e-07 & 0.01 & -6e-08 & -6e-11 & -8e-12 & -1e-07 & 1e-08 & 0.003 & -1e-08\\
-1e-10 & -3e-05 & -6e-08 & 1e-06 & 7e-14 & 6e-13 & 1e-10 & 1e-06 & -1e-08 & 3e-10\\
3e-05 & 1e-11 & -6e-11 & 7e-14 & 2e-07 & 1e-10 & 3e-08 & -7e-12 & 6e-11 & -6e-16\\
3e-08 & 6e-10 & -8e-12 & 6e-13 & 1e-10 & 5e-07 & 1e-08 & -5e-10 & -1e-11 & 1e-13\\
0.003 & 1e-08 & -1e-07 & 1e-10 & 3e-08 & 1e-08 & 0.02 & -2e-08 & 1e-07 & -4e-12\\
-3e-09 & 0.003 & 1e-08 & 1e-06 & -7e-12 & -5e-10 & -2e-08 & 0.006 & -8e-08 & 3e-05\\
9e-09 & -5e-08 & 0.003 & -1e-08 & 6e-11 & -1e-11 & 1e-07 & -8e-08 & 0.01 & -6e-08\\
2e-12 & 3e-09 & -1e-08 & 3e-10 & -6e-16 & 1e-13 & -4e-12 & 3e-05 & -6e-08 & 2e-07\\
\bottomrule
\end{tabularx}
\end{table}
Then, we extract the coordinates of the interface nodes.
\begin{table}[htbp]
\caption{\label{tab:coordinate_nodes_flex}Coordinates of the interface nodes for Flexible Joint}
\centering
\begin{tabularx}{0.6\linewidth}{ccccc}
\toprule
Total number of Nodes & 2\\
Number of interface Nodes & 2\\
Number of Modes & 6\\
Size of M and K matrices & 18\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:coordinate_interface_nodes_flex}Coordinates of the interface nodes}
\centering
\begin{tabularx}{0.6\linewidth}{ccccc}
\toprule
Node i & Node Number & x [m] & y [m] & z [m]\\
\midrule
1.0 & 528875.0 & 0.0 & 0.0 & 0.0\\
2.0 & 528876.0 & 0.0 & 0.0 & -0.0\\
\bottomrule
\end{tabularx}
\end{table}
Using \texttt{K}, \texttt{M} and \texttt{int\_xyz}, we can use the \texttt{Reduced Order Flexible Solid} simscape block.
\section{Identification of the parameters using Simscape}
The flexor is now imported into Simscape and its parameters are estimated using an identification.
The dynamics is identified from the applied force/torque to the measured displacement/rotation of the flexor.
And we find the same parameters as the one estimated from the Stiffness matrix.
\begin{table}[htbp]
\caption{\label{tab:comp_identified_stiffnesses_flex}Comparison of identified and FEM stiffnesses}
\centering
\begin{tabularx}{0.7\linewidth}{lcc}
\toprule
\textbf{Caracteristic} & \textbf{Value} & \textbf{Identification}\\
\midrule
Axial Stiffness Dz [N/um] & 94.0 & 93.9\\
Bending Stiffness Rx [Nm/rad] & 4.8 & 4.8\\
Bending Stiffness Ry [Nm/rad] & 4.8 & 4.8\\
Torsion Stiffness Rz [Nm/rad] & 260.2 & 260.2\\
\bottomrule
\end{tabularx}
\end{table}
\section{Simpler Model}
Let's now model the flexible joint with a ``perfect'' Bushing joint as shown in Figure \ref{fig:flexible_joint_simscape}.
The parameters of the Bushing joint (stiffnesses) are estimated from the Stiffness matrix that was computed from the FEM.
The dynamics from the applied force/torque to the measured displacement/rotation of the flexor is identified again for this simpler model.
The two obtained dynamics are compared in Figure
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/flexor_ID16_compare_bushing_joint_optimized.png}
\caption{\label{fig:flexor_ID16_compare_bushing_joint_optimized}Comparison of the Joint compliance between the FEM model and the simpler model}
\end{figure}
\section{Comparison with a stiffer Flexible Joint}
The stiffness matrix with the flexible joint with a ``hinge'' size of 0.50mm is loaded.
Its parameters are compared with the Flexible Joint with a size of 0.25mm in the table below.
\begin{table}[htbp]
\caption{\label{tab:comp_stiffnesses_flex_size}Comparison of flexible joint stiffnesses for 0.25 and 0.5mm}
\centering
\begin{tabularx}{0.7\linewidth}{lcc}
\toprule
\textbf{Caracteristic} & \textbf{0.25 mm} & \textbf{0.50 mm}\\
\midrule
Axial Stiffness Dz [N/um] & 94.0 & 124.7\\
Shear Stiffness [N/um] & 12.7 & 25.8\\
Bending Stiffness Rx [Nm/rad] & 4.8 & 26.0\\
Bending Stiffness Ry [Nm/rad] & 4.8 & 26.0\\
Torsion Stiffness Rz [Nm/rad] & 260.2 & 538.0\\
\bottomrule
\end{tabularx}
\end{table}
\chapter{Complete Strut with Encoder}
\label{sec:strut_encoder}
\section{Introduction}
Now, the full nano-hexapod strut is modelled using Ansys.
The 3D as well as the interface nodes are shown in Figure \ref{fig:strut_encoder_points3}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=1.0\linewidth]{figs/strut_fem_nodes.jpg}
\caption{\label{fig:strut_encoder_points3}Interface points}
\end{figure}
A side view is shown in Figure \ref{fig:strut_encoder_nodes_side}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=1.0\linewidth]{figs/strut_fem_nodes_side.jpg}
\caption{\label{fig:strut_encoder_nodes_side}Interface points - Side view}
\end{figure}
The flexible joints used have a 0.25mm width size.
\section{Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates}
We first extract the stiffness and mass matrices.
\begin{table}[htbp]
\caption{\label{tab:strut_mat_K}First 10x10 elements of the Stiffness matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
2000000 & 1000000 & -3000000 & -400 & 300 & 200 & -30 & 2000 & -10000 & 0.3\\
1000000 & 4000000 & -8000000 & -900 & 400 & -50 & -6000 & 10000 & -20000 & 3\\
-3000000 & -8000000 & 20000000 & 2000 & -900 & 200 & -10000 & 20000 & -300000 & 7\\
-400 & -900 & 2000 & 5 & -0.1 & 05 & 1 & -3 & 6 & -0007\\
300 & 400 & -900 & -0.1 & 5 & 04 & -0.1 & 0.5 & -3 & 0001\\
200 & -50 & 200 & 05 & 04 & 300 & 4 & -01 & -1 & 3e-05\\
-30 & -6000 & -10000 & 1 & -0.1 & 4 & 3000000 & -1000000 & -2000000 & -300\\
2000 & 10000 & 20000 & -3 & 0.5 & -01 & -1000000 & 6000000 & 7000000 & 1000\\
-10000 & -20000 & -300000 & 6 & -3 & -1 & -2000000 & 7000000 & 20000000 & 2000\\
0.3 & 3 & 7 & -0007 & 0001 & 3e-05 & -300 & 1000 & 2000 & 5\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:strut_mat_M}First 10x10 elements of the Mass matrix}
\centering
\tiny
\begin{tabularx}{\linewidth}{XXXXXXXXXX}
\toprule
0.04 & -0.005 & 0.007 & 2e-06 & 0.0001 & -5e-07 & -1e-05 & -9e-07 & 8e-05 & -5e-10\\
-0.005 & 0.03 & 0.02 & -0.0001 & 1e-06 & -3e-07 & 3e-05 & -0.0001 & 8e-05 & -3e-08\\
0.007 & 0.02 & 0.08 & -6e-06 & -5e-06 & -7e-07 & 4e-05 & -0.0001 & 0.0005 & -3e-08\\
2e-06 & -0.0001 & -6e-06 & 2e-06 & -4e-10 & 2e-11 & -8e-09 & 3e-08 & -2e-08 & 6e-12\\
0.0001 & 1e-06 & -5e-06 & -4e-10 & 3e-06 & 2e-10 & -3e-09 & 3e-09 & -7e-09 & 6e-13\\
-5e-07 & -3e-07 & -7e-07 & 2e-11 & 2e-10 & 5e-07 & -2e-08 & 5e-09 & -5e-09 & 1e-12\\
-1e-05 & 3e-05 & 4e-05 & -8e-09 & -3e-09 & -2e-08 & 0.04 & 0.004 & 0.003 & 1e-06\\
-9e-07 & -0.0001 & -0.0001 & 3e-08 & 3e-09 & 5e-09 & 0.004 & 0.02 & -0.02 & 0.0001\\
8e-05 & 8e-05 & 0.0005 & -2e-08 & -7e-09 & -5e-09 & 0.003 & -0.02 & 0.08 & -5e-06\\
-5e-10 & -3e-08 & -3e-08 & 6e-12 & 6e-13 & 1e-12 & 1e-06 & 0.0001 & -5e-06 & 2e-06\\
\bottomrule
\end{tabularx}
\end{table}
Then, we extract the coordinates of the interface nodes.
\begin{table}[htbp]
\caption{\label{tab:parameters_fem_strut}Some extracted parameters of the FEM}
\centering
\begin{tabularx}{0.4\linewidth}{lc}
\toprule
Total number of Nodes & 8\\
Number of interface Nodes & 8\\
Number of Modes & 6\\
Size of M and K matrices & 54\\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[htbp]
\caption{\label{tab:coordinate_nodes_strut}Coordinates of the interface nodes}
\centering
\begin{tabularx}{0.6\linewidth}{ccccc}
\toprule
Node i & Node Number & x [m] & y [m] & z [m]\\
\midrule
1.0 & 504411.0 & 0.0 & 0.0 & 0.0405\\
2.0 & 504412.0 & 0.0 & 0.0 & -0.0405\\
3.0 & 504413.0 & -0.0325 & 0.0 & 0.0\\
4.0 & 504414.0 & -0.0125 & 0.0 & 0.0\\
5.0 & 504415.0 & -0.0075 & 0.0 & 0.0\\
6.0 & 504416.0 & 0.0325 & 0.0 & 0.0\\
7.0 & 504417.0 & 0.004 & 0.0145 & -0.00175\\
8.0 & 504418.0 & 0.004 & 0.0166 & -0.00175\\
\bottomrule
\end{tabularx}
\end{table}
Using \texttt{K}, \texttt{M} and \texttt{int\_xyz}, we can use the \texttt{Reduced Order Flexible Solid} simscape block.
\section{Piezoelectric parameters}
Parameters for the APA300ML:
\section{Identification of the Dynamics}
The dynamics is identified from the applied force to the measured relative displacement.
The same dynamics is identified for a payload mass of 10Kg.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/dynamics_encoder_full_strut.png}
\caption{\label{fig:dynamics_encoder_full_strut}Dynamics from the force actuator to the measured motion by the encoder}
\end{figure}
\printbibliography[heading=bibintoc,title={Bibliography}]
\end{document}

131
preamble.tex Normal file
View File

@ -0,0 +1,131 @@
\usepackage{float}
\usepackage{caption,tabularx,booktabs}
\usepackage[ % use biblatex for bibliography
backend=biber, % use biber backend (bibtex replacement) or bibtex
style=ieee, % bib style
hyperref=true, % activate hyperref support
backref=true, % activate backrefs
isbn=false, % don't show isbn tags
url=false, % don't show url tags
doi=false, % don't show doi tags
urldate=long, % display type for dates
maxnames=3, %
minnames=1, %
maxbibnames=5, %
minbibnames=3, %
maxcitenames=2, %
mincitenames=1 %
]{biblatex}
\usepackage{fontawesome}
\usepackage{caption}
\usepackage{subcaption}
\captionsetup[figure]{labelfont=bf}
\captionsetup[subfigure]{labelfont=bf}
\captionsetup[listing]{labelfont=bf}
\captionsetup[table]{labelfont=bf}
\usepackage{xcolor}
\definecolor{my-blue}{HTML}{6b7adb}
\definecolor{my-pale-blue}{HTML}{e6e9f9}
\definecolor{my-red}{HTML}{db6b6b}
\definecolor{my-pale-red}{HTML}{f9e6e6}
\definecolor{my-green}{HTML}{6bdbb6}
\definecolor{my-pale-green}{HTML}{e6f9f3}
\definecolor{my-yellow}{HTML}{dbd26b}
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
\definecolor{my-orange}{HTML}{dba76b}
\definecolor{my-pale-orange}{HTML}{f9f0e6}
\definecolor{my-grey}{HTML}{a3a3a3}
\definecolor{my-pale-grey}{HTML}{f0f0f0}
\definecolor{my-turq}{HTML}{6bc7db}
\definecolor{my-pale-turq}{HTML}{e6f6f9}
\usepackage{inconsolata}
\usepackage[newfloat=true, chapter]{minted}
\usemintedstyle{autumn}
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
\setminted[matlab]{label=Matlab}
\setminted[latex]{label=LaTeX}
\setminted[bash]{label=Bash}
\setminted[python]{label=Python}
\setminted[text]{label=Results}
\setminted[md]{label=Org Mode}
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
\newtcolorbox{note}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Note}
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
\newtcolorbox{my-quote}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
\newtcolorbox{my-verse}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{aside}{%
\marginpar{\BODY}
}
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
\usepackage{soul}
\sethlcolor{my-pale-grey}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
\makeatletter
\preto\Gin@extensions{png,}
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
\preto\Gin@extensions{gif,}
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
\makeatother
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
allcolors = my-blue
}
\usepackage{hypcap}

21
ref.bib
View File

@ -1,21 +0,0 @@
@article{souleille18_concep_activ_mount_space_applic,
author = {Souleille, Adrien and Lampert, Thibault and Lafarga, V and Hellegouarch, Sylvain and Rondineau, Alan and Rodrigues, Gon{\c{c}}alo and Collette, Christophe},
title = {A Concept of Active Mount for Space Applications},
journal = {CEAS Space Journal},
volume = {10},
number = {2},
pages = {157--165},
year = {2018},
publisher = {Springer},
}
@book{fleming14_desig_model_contr_nanop_system,
author = {Andrew J. Fleming and Kam K. Leang},
title = {Design, Modeling and Control of Nanopositioning Systems},
year = {2014},
publisher = {Springer International Publishing},
url = {https://doi.org/10.1007/978-3-319-06617-2},
doi = {10.1007/978-3-319-06617-2},
pages = {nil},
series = {Advances in Industrial Control},
}