nass-simscape/docs/nano_hexapod.html
2021-04-19 16:32:49 +02:00

1320 lines
56 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2021-04-19 lun. 16:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Nano-Hexapod</title>
<meta name="author" content="Dehaeze Thomas" />
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="../../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Nano-Hexapod</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org3cc44d5">1. Nano-Hexapod</a>
<ul>
<li><a href="#org309ec4a">1.1. Nano Hexapod object</a></li>
<li><a href="#org3629bed">1.2. Jacobian from Solidworks Model</a></li>
<li><a href="#org10f93f2">1.3. Jacobian for encoders on the plates</a></li>
<li><a href="#org29732d1">1.4. Compare encoders on the struts and encoders on the platforms</a></li>
<li><a href="#orgd0bd54d">1.5. Nano Hexapod</a>
<ul>
<li><a href="#org3f24e44">1.5.1. DVF Plant</a></li>
<li><a href="#org0277dba">1.5.2. IFF Plant</a></li>
</ul>
</li>
<li><a href="#org46d1cf0">1.6. Decoupling at the CoK</a></li>
<li><a href="#orga23a393">1.7. Jacobian</a>
<ul>
<li><a href="#orge9af071">1.7.1. Compute Jacobian</a></li>
<li><a href="#org69ca639">1.7.2. Verify Jacobian</a></li>
<li><a href="#org508dcc8">1.7.3. Plant from APA forces to sample&rsquo;s displacement</a></li>
<li><a href="#orgc349f1d">1.7.4. Plant in the Cartesian frame</a></li>
<li><a href="#org74313d0">1.7.5. Plant in the frame of the legs =&gt; Verification of Jacobian for displacements</a></li>
</ul>
</li>
<li><a href="#orgd60e2b2">1.8. Stiffness matrix</a></li>
</ul>
</li>
<li><a href="#org8862f6b">2. Function - Initialize Nano Hexapod</a>
<ul>
<li><a href="#org438f7d8">Function description</a></li>
<li><a href="#org49bef56">Optional Parameters</a></li>
<li><a href="#org33f6631">Nano Hexapod Object</a></li>
<li><a href="#orgdc3de74">Flexible Joints - Bot</a></li>
<li><a href="#org7d4d003">Flexible Joints - Top</a></li>
<li><a href="#org3744992">Relative Motion Sensor</a></li>
<li><a href="#orgdaa740a">Amplified Piezoelectric Actuator</a></li>
<li><a href="#org8187b3b">Save the Structure</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org3cc44d5" class="outline-2">
<h2 id="org3cc44d5"><span class="section-number-2">1</span> Nano-Hexapod</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org309ec4a" class="outline-3">
<h3 id="org309ec4a"><span class="section-number-3">1.1</span> Nano Hexapod object</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The nano-hexapod can be initialized and configured using the <code>initializeNanoHexapodFinal</code> function.
</p>
<div class="org-src-container">
<pre class="src src-matlab">n_hexapod = initializeNanoHexapodFinal(<span class="org-string">'flex_bot_type'</span>, <span class="org-string">'4dof'</span>, ...
<span class="org-string">'flex_top_type'</span>, <span class="org-string">'3dof'</span>, ...
<span class="org-string">'motion_sensor_type'</span>, <span class="org-string">'struts'</span>, ...
<span class="org-string">'actuator_type'</span>, <span class="org-string">'2dof'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3629bed" class="outline-3">
<h3 id="org3629bed"><span class="section-number-3">1.2</span> Jacobian from Solidworks Model</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Center of joints a_i with respect to {F}:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Fa = [[<span class="org-type">-</span>86.05, <span class="org-type">-</span>74.78, 22.49],
[86.05, <span class="org-type">-</span>74.78, 22.49],
[107.79, <span class="org-type">-</span>37.13, 22.49],
[21.74, 111.91, 22.49],
[<span class="org-type">-</span>21.74, 111.91, 22.49],
[<span class="org-type">-</span>107.79, <span class="org-type">-</span>37.13, 22.49]]<span class="org-type">'*</span>1e<span class="org-type">-</span>3;
</pre>
</div>
<p>
Center of joints a_i with respect to {M}:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Mb = [[<span class="org-type">-</span>28.47, <span class="org-type">-</span>106.25, <span class="org-type">-</span>22.50],
[28.47, <span class="org-type">-</span>106.25, <span class="org-type">-</span>22.50],
[106.25, 28.47, <span class="org-type">-</span>22.50],
[77.78, 77.78, <span class="org-type">-</span>22.50],
[<span class="org-type">-</span>77.78, 77.78, <span class="org-type">-</span>22.50],
[<span class="org-type">-</span>106.25, 28.47, <span class="org-type">-</span>22.50]]<span class="org-type">'*</span>1e<span class="org-type">-</span>3;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Fb = Mb <span class="org-type">+</span> [0; 0; 95e<span class="org-type">-</span>3];
si = Fb <span class="org-type">-</span> Fa;
si = si<span class="org-type">./</span>vecnorm(si);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ki = ones(1,6);
bi = Fb;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ki<span class="org-type">.*</span>si<span class="org-type">*</span>si<span class="org-type">'</span>
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">1.8977</td>
<td class="org-right">2.4659e-17</td>
<td class="org-right">1.3383e-18</td>
</tr>
<tr>
<td class="org-right">2.4659e-17</td>
<td class="org-right">1.8977</td>
<td class="org-right">-2.3143e-05</td>
</tr>
<tr>
<td class="org-right">1.3383e-18</td>
<td class="org-right">-2.3143e-05</td>
<td class="org-right">2.2046</td>
</tr>
</tbody>
</table>
<div class="org-src-container">
<pre class="src src-matlab">OkX = (ki<span class="org-type">.*</span>cross(bi, si)<span class="org-type">*</span>si<span class="org-type">'</span>)<span class="org-type">/</span>(ki<span class="org-type">.*</span>si<span class="org-type">*</span>si<span class="org-type">'</span>);
Ok = [OkX(3,2);OkX(1,3);OkX(2,1)]
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">-1.7444e-18</td>
</tr>
<tr>
<td class="org-right">2.1511e-06</td>
</tr>
<tr>
<td class="org-right">0.052707</td>
</tr>
</tbody>
</table>
<p>
The center of the cube is therefore 52.7mm above the bottom platform {F} frame.
</p>
<p>
Let&rsquo;s compute the Jacobian at this location:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Jk = [si<span class="org-type">'</span>, cross(bi <span class="org-type">-</span> Ok, si)<span class="org-type">'</span>];
</pre>
</div>
<p>
And the stiffness matrix:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Jk<span class="org-type">'*</span>diag(ki)<span class="org-type">*</span>Jk
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">1.8977</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
<td class="org-right">-3.4694e-18</td>
<td class="org-right">2.5509e-06</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">1.8977</td>
<td class="org-right">-2.3143e-05</td>
<td class="org-right">4.1751e-06</td>
<td class="org-right">1.3878e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-2.3143e-05</td>
<td class="org-right">2.2046</td>
<td class="org-right">-5.0916e-11</td>
<td class="org-right">-3.4694e-18</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">4.1751e-06</td>
<td class="org-right">-5.0916e-11</td>
<td class="org-right">0.012594</td>
<td class="org-right">2.1684e-19</td>
<td class="org-right">8.6736e-19</td>
</tr>
<tr>
<td class="org-right">-3.2704e-18</td>
<td class="org-right">0</td>
<td class="org-right">-4.206e-18</td>
<td class="org-right">3.9451e-19</td>
<td class="org-right">0.012594</td>
<td class="org-right">-9.3183e-08</td>
</tr>
<tr>
<td class="org-right">2.5509e-06</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
<td class="org-right">8.6736e-19</td>
<td class="org-right">-9.3183e-08</td>
<td class="org-right">0.043362</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org10f93f2" class="outline-3">
<h3 id="org10f93f2"><span class="section-number-3">1.3</span> Jacobian for encoders on the plates</h3>
<div class="outline-text-3" id="text-1-3">
<p>
<b>Goal</b>: Compute the 6-DoF motion of the top platform (relative to the bottom platform) from the 6 encoder measurements.
</p>
<p>
The main differences with the case where the encoders are parallel with the strut are:
</p>
<ul class="org-ul">
<li>the encoder and ruler may not be parallel anymore as the top platform is moving</li>
<li>the derivation of the Jacobian (if possible) will not be the same</li>
</ul>
</div>
</div>
<div id="outline-container-org29732d1" class="outline-3">
<h3 id="org29732d1"><span class="section-number-3">1.4</span> Compare encoders on the struts and encoders on the platforms</h3>
<div class="outline-text-3" id="text-1-4">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nano_hexapod'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/F'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/D'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">n_hexapod.motion_sensor = struct();
n_hexapod.motion_sensor.type = 1; <span class="org-comment">% 1: Leg / 2: Plate</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Gs = linearize(mdl, io, 0.0, options);
Gs.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
Gs.OutputName = {<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">n_hexapod.motion_sensor = struct();
n_hexapod.motion_sensor.type = 2; <span class="org-comment">% 1: Leg / 2: Plate</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Gp = linearize(mdl, io, 0.0, options);
Gp.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
Gp.OutputName = {<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd0bd54d" class="outline-3">
<h3 id="orgd0bd54d"><span class="section-number-3">1.5</span> Nano Hexapod</h3>
<div class="outline-text-3" id="text-1-5">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nano_hexapod'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/F'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Fe'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External Force</span>
io(io_i) = linio([mdl, <span class="org-string">'/D'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Fm'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
io(io_i) = linio([mdl, <span class="org-string">'/X'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion of top platform</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 0.0, options);
G.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>, ...
<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
G.OutputName = {<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>, ...
<span class="org-string">'Fm1'</span>, <span class="org-string">'Fm2'</span>, <span class="org-string">'Fm3'</span>, <span class="org-string">'Fm4'</span>, <span class="org-string">'Fm5'</span>, <span class="org-string">'Fm6'</span> ...
<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
</pre>
</div>
<pre class="example">
size(G)
State-space model with 18 outputs, 12 inputs, and 60 states.
</pre>
<p>
Verify the number of DOF:
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Element</th>
<th scope="col" class="org-right">DoF</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Bot Plate</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-left">Struts</td>
<td class="org-right">6*4</td>
</tr>
<tr>
<td class="org-left">Top Plate + Sample</td>
<td class="org-right">12</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="org-left">Total:</td>
<td class="org-right">36</td>
</tr>
</tbody>
</table>
</div>
<div id="outline-container-org3f24e44" class="outline-4">
<h4 id="org3f24e44"><span class="section-number-4">1.5.1</span> DVF Plant</h4>
<div class="outline-text-4" id="text-1-5-1">
<p>
The DC gain from actuator to relative motion sensor should be equal to (for the 2dof APA):
\[ \frac{1}{k + k_a + kk_a/k_e} \]
</p>
<pre class="example">
1.8732e-08
</pre>
<p>
Which is almost the case:
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">-1.8676e-08</td>
<td class="org-right">5.2396e-11</td>
<td class="org-right">-8.8935e-11</td>
<td class="org-right">2.6392e-11</td>
<td class="org-right">9.7629e-11</td>
<td class="org-right">-1.5609e-10</td>
</tr>
<tr>
<td class="org-right">-1.4754e-11</td>
<td class="org-right">-1.8725e-08</td>
<td class="org-right">1.4348e-11</td>
<td class="org-right">-5.7189e-11</td>
<td class="org-right">-3.3327e-11</td>
<td class="org-right">7.0799e-11</td>
</tr>
<tr>
<td class="org-right">-3.4924e-11</td>
<td class="org-right">-7.7445e-11</td>
<td class="org-right">-1.8607e-08</td>
<td class="org-right">-4.6578e-11</td>
<td class="org-right">-1.9592e-11</td>
<td class="org-right">4.0299e-11</td>
</tr>
<tr>
<td class="org-right">6.1699e-11</td>
<td class="org-right">-7.1962e-11</td>
<td class="org-right">1.3374e-11</td>
<td class="org-right">-1.8623e-08</td>
<td class="org-right">-1.7898e-10</td>
<td class="org-right">5.4541e-11</td>
</tr>
<tr>
<td class="org-right">9.735e-11</td>
<td class="org-right">-1.0698e-10</td>
<td class="org-right">-1.6424e-11</td>
<td class="org-right">2.3718e-11</td>
<td class="org-right">-1.8826e-08</td>
<td class="org-right">8.387e-11</td>
</tr>
<tr>
<td class="org-right">-3.94e-11</td>
<td class="org-right">2.6436e-11</td>
<td class="org-right">-1.1338e-10</td>
<td class="org-right">5.0793e-11</td>
<td class="org-right">1.2358e-10</td>
<td class="org-right">-1.8792e-08</td>
</tr>
</tbody>
</table>
<p>
Other (off-diagonal) elements should be close to zero (probably limited to joint&rsquo;s stiffness).
<b>However, when setting joint&rsquo;s axial stiffness to infinity, I obtain better diagonal</b>.
</p>
<div id="orgc57a8a2" class="figure">
<p><img src="figs/nano_hexapod_struts_2dof_dvf_plant.png" alt="nano_hexapod_struts_2dof_dvf_plant.png" />
</p>
<p><span class="figure-number">Figure 1: </span>IFF Plant</p>
</div>
</div>
</div>
<div id="outline-container-org0277dba" class="outline-4">
<h4 id="org0277dba"><span class="section-number-4">1.5.2</span> IFF Plant</h4>
<div class="outline-text-4" id="text-1-5-2">
<div id="org07c51e9" class="figure">
<p><img src="figs/nano_hexapod_struts_2dof_iff_plant.png" alt="nano_hexapod_struts_2dof_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 2: </span>DVF Plant</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org46d1cf0" class="outline-3">
<h3 id="org46d1cf0"><span class="section-number-3">1.6</span> Decoupling at the CoK</h3>
<div class="outline-text-3" id="text-1-6">
<div class="org-src-container">
<pre class="src src-matlab">Gx = inv(Jk)<span class="org-type">*</span>G({<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>})<span class="org-type">*</span>inv(Jk<span class="org-type">'</span>);
Gx.inputname = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
Gx.outputname = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">-9.8399e-09</td>
<td class="org-right">-8.0785e-11</td>
<td class="org-right">-1.5723e-11</td>
<td class="org-right">2.6356e-10</td>
<td class="org-right">-4.9857e-10</td>
<td class="org-right">5.2177e-11</td>
</tr>
<tr>
<td class="org-right">-8.7554e-11</td>
<td class="org-right">-9.8585e-09</td>
<td class="org-right">2.6292e-11</td>
<td class="org-right">2.0485e-10</td>
<td class="org-right">2.0385e-10</td>
<td class="org-right">8.2942e-11</td>
</tr>
<tr>
<td class="org-right">4.3837e-11</td>
<td class="org-right">-5.5862e-14</td>
<td class="org-right">-8.4859e-09</td>
<td class="org-right">-9.0036e-12</td>
<td class="org-right">2.9325e-10</td>
<td class="org-right">-3.104e-11</td>
</tr>
<tr>
<td class="org-right">1.901e-09</td>
<td class="org-right">5.3078e-10</td>
<td class="org-right">-7.5477e-10</td>
<td class="org-right">-1.4759e-06</td>
<td class="org-right">-7.7918e-09</td>
<td class="org-right">-7.491e-10</td>
</tr>
<tr>
<td class="org-right">-7.1795e-11</td>
<td class="org-right">-1.6333e-09</td>
<td class="org-right">-1.8359e-10</td>
<td class="org-right">5.2707e-09</td>
<td class="org-right">-1.4794e-06</td>
<td class="org-right">3.2304e-10</td>
</tr>
<tr>
<td class="org-right">7.0322e-11</td>
<td class="org-right">1.7713e-12</td>
<td class="org-right">-5.8019e-11</td>
<td class="org-right">7.4838e-11</td>
<td class="org-right">-8.9677e-10</td>
<td class="org-right">-4.2938e-07</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orga23a393" class="outline-3">
<h3 id="orga23a393"><span class="section-number-3">1.7</span> Jacobian</h3>
<div class="outline-text-3" id="text-1-7">
</div>
<div id="outline-container-orge9af071" class="outline-4">
<h4 id="orge9af071"><span class="section-number-4">1.7.1</span> Compute Jacobian</h4>
<div class="outline-text-4" id="text-1-7-1">
<div class="org-src-container">
<pre class="src src-matlab">Ai = [out.b1.Data(1,<span class="org-type">:</span>)
out.b2.Data(1,<span class="org-type">:</span>)
out.b3.Data(1,<span class="org-type">:</span>)
out.b4.Data(1,<span class="org-type">:</span>)
out.b5.Data(1,<span class="org-type">:</span>)
out.b6.Data(1,<span class="org-type">:</span>)]<span class="org-type">'</span>;
Bi = [out.a1.Data(1,<span class="org-type">:</span>)
out.a2.Data(1,<span class="org-type">:</span>)
out.a3.Data(1,<span class="org-type">:</span>)
out.a4.Data(1,<span class="org-type">:</span>)
out.a5.Data(1,<span class="org-type">:</span>)
out.a6.Data(1,<span class="org-type">:</span>)]<span class="org-type">'</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 95e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 150e<span class="org-type">-</span>3);
stewart = generateGeneralConfiguration(stewart);
stewart.platform_F.Fa = Ai;
stewart.platform_M.Mb = Bi <span class="org-type">-</span> [0;0;1]<span class="org-type">*</span>stewart.geometry.H;
stewart = computeJointsPose(stewart);
stewart = initializeStewartPose(stewart, <span class="org-string">'AP'</span>, [0;0;0], <span class="org-string">'ARB'</span>, eye(3));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, 1e6<span class="org-type">*</span>ones(6,1), <span class="org-string">'C'</span>, 1e2<span class="org-type">*</span>ones(6,1));
stewart = initializeAmplifiedStrutDynamics(stewart);
stewart = initializeJointDynamics(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">displayArchitecture(stewart, <span class="org-string">'views'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
<pre class="example" id="org868846b">
describeStewartPlatform(stewart)
GEOMETRY:
- The height between the fixed based and the top platform is 95 [mm].
- Frame {A} is located 150 [mm] above the top platform.
- The initial length of the struts are:
82.8, 82.8, 82.8, 82.8, 82.8, 82.8 [mm]
ACTUATORS:
- The actuators are mechanicaly amplified.
- The vertical stiffness and damping contribution of the piezoelectric stack is:
ka = 2e+07 [N/m] ca = 1e+01 [N/(m/s)]
- Vertical stiffness when the piezoelectric stack is removed is:
kr = 5e+06 [N/m] cr = 1e+01 [N/(m/s)]
JOINTS:
- The joints on the fixed based are universal joints
- The joints on the mobile based are spherical joints
- The position of the joints on the fixed based with respect to {F} are (in [mm]):
-86.2 -74.7 22.3
86.3 -74.6 22.3
108 -37.3 22.3
21.5 112 22.3
-21.5 112 22.3
-108 -37.5 22.2
- The position of the joints on the mobile based with respect to {M} are (in [mm]):
-28.4 -106 -22.4
28.5 -106 -22.5
106 28.5 -22.5
77.8 77.8 -22.5
-77.8 77.8 -22.5
-106 28.4 -22.5
</pre>
<div class="org-src-container">
<pre class="src src-matlab">stewart = computeJacobian(stewart);
</pre>
</div>
</div>
</div>
<div id="outline-container-org69ca639" class="outline-4">
<h4 id="org69ca639"><span class="section-number-4">1.7.2</span> Verify Jacobian</h4>
<div class="outline-text-4" id="text-1-7-2">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/nano_hexapod_object.mat'</span>, <span class="org-string">'stewart'</span>);
J = stewart.kinematics.J;
</pre>
</div>
<p>
Transformation of motion:
</p>
<div class="org-src-container">
<pre class="src src-matlab">G1 = <span class="org-type">-</span>inv(J)<span class="org-type">*</span>G({<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>}, {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>});
G2 = G({<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>}, {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>});
</pre>
</div>
<p>
Transformation of Forces and Torques
</p>
<div class="org-src-container">
<pre class="src src-matlab">G1 = G({<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>}, {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>});
G2 = G({<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>})<span class="org-type">*</span>inv(J<span class="org-type">'</span>);
</pre>
</div>
<p>
<b>Not working because the forces applied on the APA are not really forces applied on the top platform (reduced by a factor ~ka/ke)</b>
</p>
</div>
</div>
<div id="outline-container-org508dcc8" class="outline-4">
<h4 id="org508dcc8"><span class="section-number-4">1.7.3</span> Plant from APA forces to sample&rsquo;s displacement</h4>
<div class="outline-text-4" id="text-1-7-3">
<div class="org-src-container">
<pre class="src src-matlab">Gx = G({<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>})<span class="org-type">*</span>inv(J<span class="org-type">'</span>);
Gx.inputname = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc349f1d" class="outline-4">
<h4 id="orgc349f1d"><span class="section-number-4">1.7.4</span> Plant in the Cartesian frame</h4>
<div class="outline-text-4" id="text-1-7-4">
<p>
Transfer function from forces/torque to displacement/rotation:
</p>
<div class="org-src-container">
<pre class="src src-matlab">GJ = inv(J)<span class="org-type">*</span>G({<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>})<span class="org-type">*</span>inv(J<span class="org-type">'</span>);
GJ.inputname = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
GJ.outputname = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org74313d0" class="outline-4">
<h4 id="org74313d0"><span class="section-number-4">1.7.5</span> Plant in the frame of the legs =&gt; Verification of Jacobian for displacements</h4>
<div class="outline-text-4" id="text-1-7-5">
<p>
Transfer Function in the frame of the legs
</p>
<div class="org-src-container">
<pre class="src src-matlab">G1 = <span class="org-type">-</span>J<span class="org-type">*</span>G({<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>});
G1.outputname = {<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>};
G2 = G({<span class="org-string">'D1'</span>, <span class="org-string">'D2'</span>, <span class="org-string">'D3'</span>, <span class="org-string">'D4'</span>, <span class="org-string">'D5'</span>, <span class="org-string">'D6'</span>}, {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>});
</pre>
</div>
<div class="important" id="org0505913">
<p>
It is working fine (until internal resonance of strut).
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgd60e2b2" class="outline-3">
<h3 id="orgd60e2b2"><span class="section-number-3">1.8</span> Stiffness matrix</h3>
<div class="outline-text-3" id="text-1-8">
<p>
Neglecting stiffness of the joints, we have:
\[ K = J^t \mathcal{K} J \]
where \(\mathcal{K}\) is a diagonal 6x6 matrix with axial stiffness of the struts on the diagonal.
</p>
<p>
Let&rsquo;s note the axial stiffness of the APA:
\[ k_{\text{APA}} = k + \frac{k_e k_a}{k_e + k_a} \]
</p>
<p>
Them axial stiffness of the struts \(k_s\):
\[ k_s = \frac{k_z k_{\text{APA}}}{k_z + 2 k_{\text{APA}}} \]
</p>
<div class="org-src-container">
<pre class="src src-matlab">kAPA = k <span class="org-type">+</span> ke<span class="org-type">*</span>ka<span class="org-type">/</span>(ke <span class="org-type">+</span> ka);
ks = kz<span class="org-type">*</span>kAPA<span class="org-type">/</span>(kz <span class="org-type">+</span> 2<span class="org-type">*</span>kAPA);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Ks = J<span class="org-type">'*</span>(ks<span class="org-type">*</span>eye(6))<span class="org-type">*</span>J
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">1.9937e-06</td>
<td class="org-right">7.7027e-12</td>
<td class="org-right">-1.5885e-11</td>
<td class="org-right">-1.6811e-10</td>
<td class="org-right">8.7902e-06</td>
<td class="org-right">3.0476e-11</td>
</tr>
<tr>
<td class="org-right">7.7027e-12</td>
<td class="org-right">1.9937e-06</td>
<td class="org-right">2.7221e-11</td>
<td class="org-right">-8.7901e-06</td>
<td class="org-right">6.5081e-12</td>
<td class="org-right">2.8619e-11</td>
</tr>
<tr>
<td class="org-right">-1.5885e-11</td>
<td class="org-right">2.7221e-11</td>
<td class="org-right">2.6114e-07</td>
<td class="org-right">-1.3209e-10</td>
<td class="org-right">-6.1725e-11</td>
<td class="org-right">4.0402e-11</td>
</tr>
<tr>
<td class="org-right">-1.6811e-10</td>
<td class="org-right">-8.7901e-06</td>
<td class="org-right">-1.3209e-10</td>
<td class="org-right">4.5712e-05</td>
<td class="org-right">-5.7781e-10</td>
<td class="org-right">-4.5817e-10</td>
</tr>
<tr>
<td class="org-right">8.7902e-06</td>
<td class="org-right">6.5081e-12</td>
<td class="org-right">-6.1725e-11</td>
<td class="org-right">-5.7781e-10</td>
<td class="org-right">4.5712e-05</td>
<td class="org-right">5.1628e-10</td>
</tr>
<tr>
<td class="org-right">3.0476e-11</td>
<td class="org-right">2.8619e-11</td>
<td class="org-right">4.0402e-11</td>
<td class="org-right">-4.5817e-10</td>
<td class="org-right">5.1628e-10</td>
<td class="org-right">1.3277e-05</td>
</tr>
</tbody>
</table>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">1.9869e-06</td>
<td class="org-right">2.043e-08</td>
<td class="org-right">1.6444e-09</td>
<td class="org-right">-4.094e-08</td>
<td class="org-right">8.7579e-06</td>
<td class="org-right">-3.5002e-09</td>
</tr>
<tr>
<td class="org-right">3.746e-09</td>
<td class="org-right">1.9841e-06</td>
<td class="org-right">-5.5274e-09</td>
<td class="org-right">-8.7257e-06</td>
<td class="org-right">-5.5082e-08</td>
<td class="org-right">-7.6978e-09</td>
</tr>
<tr>
<td class="org-right">-3.2056e-09</td>
<td class="org-right">-6.4295e-11</td>
<td class="org-right">2.6079e-07</td>
<td class="org-right">3.4103e-10</td>
<td class="org-right">-9.3873e-09</td>
<td class="org-right">9.6146e-10</td>
</tr>
<tr>
<td class="org-right">-1.1677e-08</td>
<td class="org-right">-8.736e-06</td>
<td class="org-right">2.4322e-08</td>
<td class="org-right">4.5343e-05</td>
<td class="org-right">2.52e-07</td>
<td class="org-right">2.5932e-08</td>
</tr>
<tr>
<td class="org-right">8.7439e-06</td>
<td class="org-right">8.441e-08</td>
<td class="org-right">5.9144e-09</td>
<td class="org-right">-1.6879e-07</td>
<td class="org-right">4.546e-05</td>
<td class="org-right">-9.8986e-09</td>
</tr>
<tr>
<td class="org-right">3.3453e-09</td>
<td class="org-right">4.508e-10</td>
<td class="org-right">1.8718e-09</td>
<td class="org-right">-2.7294e-09</td>
<td class="org-right">2.8776e-08</td>
<td class="org-right">1.3193e-05</td>
</tr>
</tbody>
</table>
<p>
We can see that we have almost the same stiffness:
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">1.0034</td>
<td class="org-right">0.00037703</td>
<td class="org-right">-0.0096597</td>
<td class="org-right">0.0041063</td>
<td class="org-right">1.0037</td>
<td class="org-right">-0.0087071</td>
</tr>
<tr>
<td class="org-right">0.0020562</td>
<td class="org-right">1.0048</td>
<td class="org-right">-0.0049247</td>
<td class="org-right">1.0074</td>
<td class="org-right">-0.00011815</td>
<td class="org-right">-0.0037178</td>
</tr>
<tr>
<td class="org-right">0.0049552</td>
<td class="org-right">-0.42338</td>
<td class="org-right">1.0013</td>
<td class="org-right">-0.38734</td>
<td class="org-right">0.0065754</td>
<td class="org-right">0.042021</td>
</tr>
<tr>
<td class="org-right">0.014397</td>
<td class="org-right">1.0062</td>
<td class="org-right">-0.005431</td>
<td class="org-right">1.0081</td>
<td class="org-right">-0.0022929</td>
<td class="org-right">-0.017668</td>
</tr>
<tr>
<td class="org-right">1.0053</td>
<td class="org-right">7.7101e-05</td>
<td class="org-right">-0.010436</td>
<td class="org-right">0.0034233</td>
<td class="org-right">1.0055</td>
<td class="org-right">-0.052157</td>
</tr>
<tr>
<td class="org-right">0.0091102</td>
<td class="org-right">0.063485</td>
<td class="org-right">0.021584</td>
<td class="org-right">0.16786</td>
<td class="org-right">0.017941</td>
<td class="org-right">1.0063</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-org8862f6b" class="outline-2">
<h2 id="org8862f6b"><span class="section-number-2">2</span> Function - Initialize Nano Hexapod</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgfdb5239"></a>
</p>
</div>
<div id="outline-container-org438f7d8" class="outline-3">
<h3 id="org438f7d8">Function description</h3>
<div class="outline-text-3" id="text-org438f7d8">
<div class="org-src-container">
<pre class="src src-matlab"> <span class="org-keyword">function</span> <span class="org-variable-name">[nano_hexapod]</span> = <span class="org-function-name">initializeNanoHexapodFinal</span>(<span class="org-variable-name">args</span>)
</pre>
</div>
</div>
</div>
<div id="outline-container-org49bef56" class="outline-3">
<h3 id="org49bef56">Optional Parameters</h3>
<div class="outline-text-3" id="text-org49bef56">
<div class="org-src-container">
<pre class="src src-matlab"> <span class="org-keyword">arguments</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Bottom Flexible Joints</span></span>
<span class="org-variable-name">args</span>.flex_bot_type char {mustBeMember(args.flex_bot_type,{<span class="org-string">'2dof'</span>, <span class="org-string">'3dof'</span>, <span class="org-string">'4dof'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'4dof'</span>
<span class="org-variable-name">args</span>.flex_bot_kRx (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>5 <span class="org-comment">% X bending stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_bot_kRy (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>5 <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_bot_kRz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>260 <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_bot_kz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e8 <span class="org-comment">% Axial Stiffness [N/m]</span>
<span class="org-variable-name">args</span>.flex_bot_cRx (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% X bending Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_bot_cRy (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% Y bending Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_bot_cRz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% Torsionnal Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_bot_cz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e2 <span class="org-comment">% Axial Damping [N/(m/s)]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Top Flexible Joints</span></span>
<span class="org-variable-name">args</span>.flex_top_type char {mustBeMember(args.flex_top_type,{<span class="org-string">'2dof'</span>, <span class="org-string">'3dof'</span>, <span class="org-string">'4dof'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'4dof'</span>
<span class="org-variable-name">args</span>.flex_top_kRx (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>5 <span class="org-comment">% X bending stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_top_kRy (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>5 <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_top_kRz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>260 <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
<span class="org-variable-name">args</span>.flex_top_kz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e8 <span class="org-comment">% Axial Stiffness [N/m]</span>
<span class="org-variable-name">args</span>.flex_top_cRx (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% X bending Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_top_cRy (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% Y bending Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_top_cRz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.1 <span class="org-comment">% Torsionnal Damping [Nm/(rad/s)]</span>
<span class="org-variable-name">args</span>.flex_top_cz (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e2 <span class="org-comment">% Axial Damping [N/(m/s)]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Relative Motion Sensor</span></span>
<span class="org-variable-name">args</span>.motion_sensor_type char {mustBeMember(args.motion_sensor_type,{<span class="org-string">'struts'</span>, <span class="org-string">'plates'</span>})} = <span class="org-string">'struts'</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Actuators</span></span>
<span class="org-variable-name">args</span>.actuator_type char {mustBeMember(args.actuator_type,{<span class="org-string">'2dof'</span>, <span class="org-string">'flexible frame'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'flexible'</span>
<span class="org-variable-name">args</span>.actuator_Ga (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1 <span class="org-comment">% Actuator gain [N/V]</span>
<span class="org-variable-name">args</span>.actuator_Gs (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1 <span class="org-comment">% Sensor gain [V/m]</span>
<span class="org-comment">% For 2DoF</span>
<span class="org-variable-name">args</span>.actuator_k (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.35e6 <span class="org-comment">% [N/m]</span>
<span class="org-variable-name">args</span>.actuator_ke (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1.5e6 <span class="org-comment">% [N/m]</span>
<span class="org-variable-name">args</span>.actuator_ka (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>43e6 <span class="org-comment">% [N/m]</span>
<span class="org-variable-name">args</span>.actuator_c (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>3e1 <span class="org-comment">% [N/(m/s)]</span>
<span class="org-variable-name">args</span>.actuator_ce (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e1 <span class="org-comment">% [N/(m/s)]</span>
<span class="org-variable-name">args</span>.actuator_ca (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e1 <span class="org-comment">% [N/(m/s)]</span>
<span class="org-variable-name">args</span>.actuator_Leq (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.056 <span class="org-comment">% [m]</span>
<span class="org-comment">% For Flexible Frame</span>
<span class="org-variable-name">args</span>.actuator_ks (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>235e6 <span class="org-comment">% Stiffness of one stack [N/m]</span>
<span class="org-variable-name">args</span>.actuator_cs (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>1e1 <span class="org-comment">% Stiffness of one stack [N/m]</span>
<span class="org-comment">% For Flexible</span>
<span class="org-variable-name">args</span>.actuator_xi (1,1) double {mustBeNumeric} = 0.01 <span class="org-comment">% Sensor gain [V/m]</span>
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org33f6631" class="outline-3">
<h3 id="org33f6631">Nano Hexapod Object</h3>
<div class="outline-text-3" id="text-org33f6631">
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod = struct();
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdc3de74" class="outline-3">
<h3 id="orgdc3de74">Flexible Joints - Bot</h3>
<div class="outline-text-3" id="text-orgdc3de74">
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.flex_bot = struct();
<span class="org-keyword">switch</span> <span class="org-constant">args.flex_bot_type</span>
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
nano_hexapod.flex_bot.type = 1;
<span class="org-keyword">case</span> <span class="org-string">'3dof'</span>
nano_hexapod.flex_bot.type = 2;
<span class="org-keyword">case</span> <span class="org-string">'4dof'</span>
nano_hexapod.flex_bot.type = 3;
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
nano_hexapod.flex_bot.type = 4;
<span class="org-keyword">end</span>
nano_hexapod.flex_bot.kRx = args.flex_bot_kRx; <span class="org-comment">% X bending stiffness [Nm/rad]</span>
nano_hexapod.flex_bot.kRy = args.flex_bot_kRy; <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
nano_hexapod.flex_bot.kRz = args.flex_bot_kRz; <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
nano_hexapod.flex_bot.kz = args.flex_bot_kz; <span class="org-comment">% Axial stiffness [N/m]</span>
nano_hexapod.flex_bot.cRx = args.flex_bot_cRx; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_bot.cRy = args.flex_bot_cRy; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_bot.cRz = args.flex_bot_cRz; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_bot.cz = args.flex_bot_cz; <span class="org-comment">%[N/(m/s)]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org7d4d003" class="outline-3">
<h3 id="org7d4d003">Flexible Joints - Top</h3>
<div class="outline-text-3" id="text-org7d4d003">
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.flex_top = struct();
<span class="org-keyword">switch</span> <span class="org-constant">args.flex_top_type</span>
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
nano_hexapod.flex_top.type = 1;
<span class="org-keyword">case</span> <span class="org-string">'3dof'</span>
nano_hexapod.flex_top.type = 2;
<span class="org-keyword">case</span> <span class="org-string">'4dof'</span>
nano_hexapod.flex_top.type = 3;
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
nano_hexapod.flex_top.type = 4;
<span class="org-keyword">end</span>
nano_hexapod.flex_top.kRx = args.flex_top_kRx; <span class="org-comment">% X bending stiffness [Nm/rad]</span>
nano_hexapod.flex_top.kRy = args.flex_top_kRy; <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
nano_hexapod.flex_top.kRz = args.flex_top_kRz; <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
nano_hexapod.flex_top.kz = args.flex_top_kz; <span class="org-comment">% Axial stiffness [N/m]</span>
nano_hexapod.flex_top.cRx = args.flex_top_cRx; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_top.cRy = args.flex_top_cRy; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_top.cRz = args.flex_top_cRz; <span class="org-comment">% [Nm/(rad/s)]</span>
nano_hexapod.flex_top.cz = args.flex_top_cz; <span class="org-comment">%[N/(m/s)]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org3744992" class="outline-3">
<h3 id="org3744992">Relative Motion Sensor</h3>
<div class="outline-text-3" id="text-org3744992">
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.motion_sensor = struct();
<span class="org-keyword">switch</span> <span class="org-constant">args.motion_sensor_type</span>
<span class="org-keyword">case</span> <span class="org-string">'struts'</span>
nano_hexapod.motion_sensor.type = 1;
<span class="org-keyword">case</span> <span class="org-string">'plates'</span>
nano_hexapod.motion_sensor.type = 2;
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdaa740a" class="outline-3">
<h3 id="orgdaa740a">Amplified Piezoelectric Actuator</h3>
<div class="outline-text-3" id="text-orgdaa740a">
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.actuator = struct();
<span class="org-keyword">switch</span> <span class="org-constant">args.actuator_type</span>
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
nano_hexapod.actuator.type = 1;
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
nano_hexapod.actuator.type = 2;
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
nano_hexapod.actuator.type = 3;
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.actuator.Ga = args.actuator_Ga; <span class="org-comment">% Actuator gain [N/V]</span>
nano_hexapod.actuator.Gs = args.actuator_Gs; <span class="org-comment">% Sensor gain [V/m]</span>
</pre>
</div>
<p>
2dof
</p>
<div class="org-src-container">
<pre class="src src-matlab">nano_hexapod.actuator.k = args.actuator_k; <span class="org-comment">% [N/m]</span>
nano_hexapod.actuator.ke = args.actuator_ke; <span class="org-comment">% [N/m]</span>
nano_hexapod.actuator.ka = args.actuator_ka; <span class="org-comment">% [N/m]</span>
nano_hexapod.actuator.c = args.actuator_c; <span class="org-comment">% [N/(m/s)]</span>
nano_hexapod.actuator.ce = args.actuator_ce; <span class="org-comment">% [N/(m/s)]</span>
nano_hexapod.actuator.ca = args.actuator_ca; <span class="org-comment">% [N/(m/s)]</span>
nano_hexapod.actuator.Leq = args.actuator_Leq; <span class="org-comment">% [m]</span>
</pre>
</div>
<p>
Flexible frame and fully flexible
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.actuator_type</span>
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
nano_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_b_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
nano_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_b_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
nano_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_b_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordinates [m]</span>
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
nano_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_full_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
nano_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_full_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
nano_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_full_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordiantes [m]</span>
<span class="org-keyword">end</span>
nano_hexapod.actuator.xi = args.actuator_xi; <span class="org-comment">% Damping ratio</span>
nano_hexapod.actuator.ks = args.actuator_ks; <span class="org-comment">% Stiffness of one stack [N/m]</span>
nano_hexapod.actuator.cs = args.actuator_cs; <span class="org-comment">% Damping of one stack [N/m]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org8187b3b" class="outline-3">
<h3 id="org8187b3b">Save the Structure</h3>
<div class="outline-text-3" id="text-org8187b3b">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">if</span> nargout <span class="org-type">==</span> 0
save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>, <span class="org-string">'-append'</span>);
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-04-19 lun. 16:22</p>
</div>
</body>
</html>