Different Cubic Architecture study

This commit is contained in:
Thomas Dehaeze 2020-02-12 10:22:51 +01:00
parent 9659e5a507
commit 747fe5549c
16 changed files with 581 additions and 189 deletions

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-02-11 mar. 17:52 -->
<!-- 2020-02-12 mer. 10:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cubic configuration for the Stewart Platform</title>
@ -299,20 +299,29 @@ for the JavaScript code in this tag.
<p>
The discovery of the Cubic configuration is done in <a class='org-ref-reference' href="#geng94_six_degree_of_freed_activ">geng94_six_degree_of_freed_activ</a>.
Further analysis is conducted in
</p>
<p>
The specificity of the Cubic configuration is that each actuator is orthogonal with the others.
The specificity of the Cubic configuration is that each actuator is orthogonal with the others:
</p>
<blockquote>
<p>
the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube.
</p>
</blockquote>
<p>
The cubic (or orthogonal) configuration of the Stewart platform is now widely used (<a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>,<a class='org-ref-reference' href="#jafari03_orthog_gough_stewar_platf_microm">jafari03_orthog_gough_stewar_platf_microm</a>).
</p>
<p>
According to <a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>, the cubic configuration provides a uniform stiffness in all directions and <b>minimizes the crosscoupling</b> from actuator to sensor of different legs (being orthogonal to each other).
According to <a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>:
</p>
<blockquote>
<p>
This topology provides a uniform control capability and a uniform stiffness in all directions, and it minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other).
</p>
</blockquote>
<p>
To generate and study the Cubic configuration, <code>generateCubicConfiguration</code> is used (description in section <a href="#orga8311d3">2.1</a>).
@ -327,7 +336,37 @@ The goal is to study the benefits of using a cubic configuration:
<div id="outline-container-org8c6677e" class="outline-2">
<h2 id="org8c6677e"><span class="section-number-2">1</span> Configuration Analysis - Stiffness Matrix</h2>
<div class="outline-text-2" id="text-1">
<p>
First, we have to understand what is the physical meaning of the Stiffness matrix \(\bm{K}\).
</p>
<p>
The Stiffness matrix links forces \(\bm{f}\) and torques \(\bm{n}\) applied on the mobile platform at \(\{B\}\) to the displacement \(\Delta\bm{\mathcal{X}}\) of the mobile platform represented by \(\{B\}\) with respect to \(\{A\}\):
\[ \bm{\mathcal{F}} = \bm{K} \Delta\bm{\mathcal{X}} \]
</p>
<p>
with:
</p>
<ul class="org-ul">
<li>\(\bm{\mathcal{F}} = [\bm{f}\ \bm{n}]^{T}\)</li>
<li>\(\Delta\bm{\mathcal{X}} = [\delta x, \delta y, \delta z, \delta \theta_{x}, \delta \theta_{y}, \delta \theta_{z}]^{T}\)</li>
</ul>
<p>
If the stiffness matrix is inversible, its inverse is the compliance matrix: \(\bm{C} = \bm{K}^{-1\) and:
\[ \Delta \bm{\mathcal{X}} = C \bm{\mathcal{F}} \]
</p>
<p>
Thus, if the stiffness matrix is diagonal, the compliance matrix is also diagonal and a force (resp. torque) \(\bm{\mathcal{F}}_i\) applied on the mobile platform at \(\{B\}\) will induce a pure translation (resp. rotation) of the mobile platform represented by \(\{B\}\) with respect to \(\{A\}\).
</p>
<p>
One has to note that this is only valid in a static way.
</p>
</div>
<div id="outline-container-orgf6f7ad2" class="outline-3">
<h3 id="orgf6f7ad2"><span class="section-number-3">1.1</span> Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center</h3>
<div class="outline-text-3" id="text-1-1">
@ -336,12 +375,20 @@ We create a cubic Stewart platform (figure <a href="#org9454f54">1</a>) in such
The Jacobian matrix is estimated at the location of the center of the cube.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 100e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>H<span class="org-type">/</span>2; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
Hc = H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, <span class="org-type">-</span>50e<span class="org-type">-</span>3);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'FOc'</span>, 50e<span class="org-type">-</span>3, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, H, <span class="org-string">'MO_B'</span>, MO_B);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, Hc, <span class="org-string">'FOc'</span>, FOc, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 175e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 150e<span class="org-type">-</span>3);
</pre>
@ -444,12 +491,20 @@ We create a cubic Stewart platform with center of the cube located at the center
The Jacobian matrix is not estimated at the location of the center of the cube.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 100e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = 20e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
Hc = H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H<span class="org-type">/</span>2; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 0);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'FOc'</span>, 50e<span class="org-type">-</span>3, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, H, <span class="org-string">'MO_B'</span>, MO_B);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, Hc, <span class="org-string">'FOc'</span>, FOc, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 175e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 150e<span class="org-type">-</span>3);
</pre>
@ -483,8 +538,8 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-2.5e-16</td>
<td class="org-right">1.4e-17</td>
<td class="org-right">-0.1</td>
<td class="org-right">0</td>
<td class="org-right">-0.14</td>
<td class="org-right">0</td>
</tr>
@ -492,7 +547,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">0.1</td>
<td class="org-right">0.14</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
@ -501,35 +556,35 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">-2.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">3.4e-18</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">-5.3e-19</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">1.4e-17</td>
<td class="org-right">0.1</td>
<td class="org-right">3.4e-18</td>
<td class="org-right">0.02</td>
<td class="org-right">1.1e-20</td>
<td class="org-right">3.4e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.14</td>
<td class="org-right">-5.3e-19</td>
<td class="org-right">0.025</td>
<td class="org-right">0</td>
<td class="org-right">8.7e-19</td>
</tr>
<tr>
<td class="org-right">-0.1</td>
<td class="org-right">-0.14</td>
<td class="org-right">0</td>
<td class="org-right">2.6e-18</td>
<td class="org-right">1.6e-19</td>
<td class="org-right">0.025</td>
<td class="org-right">0</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">1.4e-19</td>
<td class="org-right">0.02</td>
<td class="org-right">-1.7e-18</td>
</tr>
<tr>
<td class="org-right">6.6e-18</td>
<td class="org-right">-3.3e-18</td>
<td class="org-right">0</td>
<td class="org-right">3.6e-18</td>
<td class="org-right">-1.7e-18</td>
<td class="org-right">8.9e-19</td>
<td class="org-right">0</td>
<td class="org-right">0.06</td>
</tr>
</tbody>
@ -541,23 +596,24 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<h3 id="orge02ec88"><span class="section-number-3">1.3</span> Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</h3>
<div class="outline-text-3" id="text-1-3">
<p>
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center (figure <a href="#org97b319c">4</a>).
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center (figure <a href="#org0235d3a">4</a>).
The Jacobian is estimated at the cube center.
</p>
<div id="org97b319c" class="figure">
<p><img src="figs/3d-cubic-stewart-misaligned.png" alt="3d-cubic-stewart-misaligned.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Not centered cubic configuration</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 80e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>30e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
Hc = 100e<span class="org-type">-</span>3; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 80e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, <span class="org-type">-</span>40e<span class="org-type">-</span>3);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'FOc'</span>, 50e<span class="org-type">-</span>3, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, H, <span class="org-string">'MO_B'</span>, MO_B);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, Hc, <span class="org-string">'FOc'</span>, FOc, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 175e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 150e<span class="org-type">-</span>3);
</pre>
@ -567,7 +623,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<div id="org0235d3a" class="figure">
<p><img src="figs/cubic_conf_not_centered_J_center.png" alt="cubic_conf_not_centered_J_center.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center (<a href="./figs/cubic_conf_not_centered_J_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_center.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 4: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center (<a href="./figs/cubic_conf_not_centered_J_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_center.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -592,7 +648,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">0</td>
<td class="org-right">-1.7e-16</td>
<td class="org-right">0</td>
<td class="org-right">0.02</td>
<td class="org-right">4.9e-17</td>
<td class="org-right">0</td>
</tr>
@ -600,7 +656,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-0.02</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">0</td>
<td class="org-right">2.8e-17</td>
</tr>
@ -609,35 +665,35 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">-1.7e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">1.2e-19</td>
<td class="org-right">1.1e-18</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">1.4e-17</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-0.02</td>
<td class="org-right">1.2e-19</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">1.1e-18</td>
<td class="org-right">0.015</td>
<td class="org-right">-4.3e-19</td>
<td class="org-right">1.7e-18</td>
<td class="org-right">0</td>
<td class="org-right">3.5e-18</td>
</tr>
<tr>
<td class="org-right">0.02</td>
<td class="org-right">4.4e-17</td>
<td class="org-right">0</td>
<td class="org-right">-7.3e-18</td>
<td class="org-right">-3.3e-21</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">-5.7e-20</td>
<td class="org-right">0.015</td>
<td class="org-right">0</td>
<td class="org-right">-8.7e-19</td>
</tr>
<tr>
<td class="org-right">6.6e-18</td>
<td class="org-right">2.5e-17</td>
<td class="org-right">0</td>
<td class="org-right">2e-18</td>
<td class="org-right">0</td>
<td class="org-right">3.5e-18</td>
<td class="org-right">-8.7e-19</td>
<td class="org-right">0.06</td>
</tr>
</tbody>
@ -664,14 +720,22 @@ The center height of the Stewart platform is then at \(z = \frac{175-75}{2} = 50
The center of the cube from the top platform is at \(z = 110 - 175 = -65\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 100e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>H<span class="org-type">/</span>2; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
Hc = 1.5<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H<span class="org-type">/</span>2 <span class="org-type">+</span> 10e<span class="org-type">-</span>3; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 80e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, <span class="org-type">-</span>40e<span class="org-type">-</span>3);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'FOc'</span>, 50e<span class="org-type">-</span>3, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, H, <span class="org-string">'MO_B'</span>, MO_B);
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, Hc, <span class="org-string">'FOc'</span>, FOc, <span class="org-string">'FHa'</span>, 0, <span class="org-string">'MHb'</span>, 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 175e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 150e<span class="org-type">-</span>3);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 215e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 195e<span class="org-type">-</span>3);
</pre>
</div>
@ -679,7 +743,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<div id="orgbe766b3" class="figure">
<p><img src="figs/cubic_conf_not_centered_J_stewart_center.png" alt="cubic_conf_not_centered_J_stewart_center.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center (<a href="./figs/cubic_conf_not_centered_J_stewart_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_stewart_center.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 5: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center (<a href="./figs/cubic_conf_not_centered_J_stewart_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_stewart_center.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -702,7 +766,7 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<tr>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-1.7e-16</td>
<td class="org-right">1.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">0.02</td>
<td class="org-right">0</td>
@ -714,43 +778,43 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<td class="org-right">0</td>
<td class="org-right">-0.02</td>
<td class="org-right">0</td>
<td class="org-right">2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-1.7e-16</td>
<td class="org-right">1.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">1.2e-19</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">1.4e-17</td>
<td class="org-right">-3e-18</td>
<td class="org-right">-2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-0.02</td>
<td class="org-right">1.2e-19</td>
<td class="org-right">0.015</td>
<td class="org-right">-4.3e-19</td>
<td class="org-right">1.7e-18</td>
<td class="org-right">-3e-18</td>
<td class="org-right">0.034</td>
<td class="org-right">-8.7e-19</td>
<td class="org-right">5.2e-18</td>
</tr>
<tr>
<td class="org-right">0.02</td>
<td class="org-right">0</td>
<td class="org-right">-7.3e-18</td>
<td class="org-right">-3.3e-21</td>
<td class="org-right">0.015</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">-4.4e-19</td>
<td class="org-right">0.034</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">6.6e-18</td>
<td class="org-right">2.5e-17</td>
<td class="org-right">5.9e-18</td>
<td class="org-right">-7.5e-18</td>
<td class="org-right">0</td>
<td class="org-right">2e-18</td>
<td class="org-right">3.5e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.06</td>
<td class="org-right">0.14</td>
</tr>
</tbody>
</table>
@ -761,6 +825,9 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<h3 id="orgd35acc0"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5">
<div class="important">
<p>
Here are the conclusion about the Stiffness matrix for the Cubic configuration:
</p>
<ul class="org-ul">
<li>The cubic configuration permits to have \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\)</li>
<li>The stiffness matrix \(K\) is diagonal for the cubic configuration if the Jacobian is estimated at the cube center.</li>
@ -774,32 +841,47 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
<h3 id="org8afa645"><span class="section-number-3">1.6</span> Having Cube&rsquo;s center above the top platform</h3>
<div class="outline-text-3" id="text-1-6">
<p>
Let&rsquo;s say we want to have a decouple dynamics above the top platform.
Let&rsquo;s say we want to have a diagonal stiffness matrix when \(\{A\}\) and \(\{B\}\) are located above the top platform.
Thus, we want the cube&rsquo;s center to be located above the top center.
This is possible, to do so:
</p>
<p>
Let&rsquo;s fix the Height of the Stewart platform and the position of frames \(\{A\}\) and \(\{B\}\):
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 100e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = 20e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
</pre>
</div>
<p>
We find the several Cubic configuration for the Stewart platform where the center of the cube is located at frame \(\{A\}\).
The differences between the configuration are the cube&rsquo;s size:
</p>
<ul class="org-ul">
<li>The position of the center of the cube should be positioned at A</li>
<li>The Height of the &ldquo;useful&rdquo; part of the cube should be at least equal to two times the distance from F to A.
It is possible to have small cube, but then to configuration is a little bit strange.</li>
<li>Small Cube Size in Figure <a href="#org105635f">6</a></li>
<li>Medium Cube Size in Figure <a href="#org264ab9c">7</a></li>
<li>Large Cube Size in Figure <a href="#org52254fe">8</a></li>
</ul>
<p>
For each of the configuration, the Stiffness matrix is diagonal with \(k_x = k_y = k_y = 2k\) with \(k\) is the stiffness of each strut.
However, the rotational stiffnesses are increasing with the cube&rsquo;s size but the required size of the platform is also increasing, so there is a trade-off here.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 50e<span class="org-type">-</span>3);
FOc = stewart.H <span class="org-type">+</span> stewart.MO_B(3);
Hc = 2<span class="org-type">*</span>(stewart.H <span class="org-type">+</span> stewart.MO_B(3));
stewart = generateCubicConfiguration(stewart, <span class="org-string">'Hc'</span>, Hc, <span class="org-string">'FOc'</span>, FOc, <span class="org-string">'FHa'</span>, 10e<span class="org-type">-</span>3, <span class="org-string">'MHb'</span>, 10e<span class="org-type">-</span>3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = initializeJointDynamics(stewart, <span class="org-string">'disable'</span>, <span class="org-constant">true</span>);
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
<pre class="src src-matlab">Hc = 0.4<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div id="org105635f" class="figure">
<p><img src="figs/stewart_cubic_conf_type_1.png" alt="stewart_cubic_conf_type_1.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Cubic Configuration for the Stewart Platform - Small Cube Size (<a href="./figs/stewart_cubic_conf_type_1.png">png</a>, <a href="./figs/stewart_cubic_conf_type_1.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -820,9 +902,9 @@ stewart = initializeStewartPose(stewart);
<tr>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-3.2e-16</td>
<td class="org-right">-2.8e-16</td>
<td class="org-right">0</td>
<td class="org-right">3.1e-16</td>
<td class="org-right">2.4e-17</td>
<td class="org-right">0</td>
</tr>
@ -830,52 +912,222 @@ stewart = initializeStewartPose(stewart);
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-1.2e-16</td>
<td class="org-right">-2.3e-17</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-3.2e-16</td>
<td class="org-right">-2.8e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">5e-18</td>
<td class="org-right">-5.6e-17</td>
<td class="org-right">-2.1e-19</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-1.2e-16</td>
<td class="org-right">5e-18</td>
<td class="org-right">0.14</td>
<td class="org-right">3.5e-18</td>
<td class="org-right">1.4e-17</td>
<td class="org-right">-2.3e-17</td>
<td class="org-right">-2.1e-19</td>
<td class="org-right">0.0024</td>
<td class="org-right">-5.4e-20</td>
<td class="org-right">6.5e-19</td>
</tr>
<tr>
<td class="org-right">3e-16</td>
<td class="org-right">2.4e-17</td>
<td class="org-right">0</td>
<td class="org-right">4.9e-19</td>
<td class="org-right">-2.3e-20</td>
<td class="org-right">0.0024</td>
<td class="org-right">0</td>
<td class="org-right">-5.4e-17</td>
<td class="org-right">2.1e-19</td>
<td class="org-right">0.14</td>
<td class="org-right">-6.9e-18</td>
</tr>
<tr>
<td class="org-right">7.4e-19</td>
<td class="org-right">-2.6e-17</td>
<td class="org-right">-1.2e-18</td>
<td class="org-right">1.1e-18</td>
<td class="org-right">0</td>
<td class="org-right">1.3e-17</td>
<td class="org-right">-6.9e-18</td>
<td class="org-right">0.54</td>
<td class="org-right">6.2e-19</td>
<td class="org-right">0</td>
<td class="org-right">0.0096</td>
</tr>
</tbody>
</table>
<p>
We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiffness matrix is not diagonal.
<div class="org-src-container">
<pre class="src src-matlab">Hc = 1.5<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div id="org264ab9c" class="figure">
<p><img src="figs/stewart_cubic_conf_type_2.png" alt="stewart_cubic_conf_type_2.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Cubic Configuration for the Stewart Platform - Medium Cube Size (<a href="./figs/stewart_cubic_conf_type_2.png">png</a>, <a href="./figs/stewart_cubic_conf_type_2.pdf">pdf</a>)</p>
</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">2</td>
<td class="org-right">0</td>
<td class="org-right">-1.9e-16</td>
<td class="org-right">0</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-7.6e-17</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-1.9e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">2.5e-18</td>
<td class="org-right">2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-7.6e-17</td>
<td class="org-right">2.5e-18</td>
<td class="org-right">0.034</td>
<td class="org-right">8.7e-19</td>
<td class="org-right">8.7e-18</td>
</tr>
<tr>
<td class="org-right">5.7e-17</td>
<td class="org-right">0</td>
<td class="org-right">3.2e-17</td>
<td class="org-right">2.9e-19</td>
<td class="org-right">0.034</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-1e-18</td>
<td class="org-right">-1.3e-17</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">8.4e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.14</td>
</tr>
</tbody>
</table>
<div class="org-src-container">
<pre class="src src-matlab">Hc = 2.5<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div id="org52254fe" class="figure">
<p><img src="figs/stewart_cubic_conf_type_3.png" alt="stewart_cubic_conf_type_3.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Cubic Configuration for the Stewart Platform - Large Cube Size (<a href="./figs/stewart_cubic_conf_type_3.png">png</a>, <a href="./figs/stewart_cubic_conf_type_3.pdf">pdf</a>)</p>
</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">2</td>
<td class="org-right">0</td>
<td class="org-right">-3e-16</td>
<td class="org-right">0</td>
<td class="org-right">-8.3e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">0</td>
<td class="org-right">5.6e-17</td>
</tr>
<tr>
<td class="org-right">-3e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">-9.3e-19</td>
<td class="org-right">-2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">-9.3e-19</td>
<td class="org-right">0.094</td>
<td class="org-right">0</td>
<td class="org-right">2.1e-17</td>
</tr>
<tr>
<td class="org-right">-8e-17</td>
<td class="org-right">0</td>
<td class="org-right">-3e-17</td>
<td class="org-right">-6.1e-19</td>
<td class="org-right">0.094</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-6.2e-18</td>
<td class="org-right">7.2e-17</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">2.3e-17</td>
<td class="org-right">0</td>
<td class="org-right">0.37</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
@ -934,7 +1186,7 @@ This Matlab function is accessible <a href="../src/generateCubicConfiguration.m"
<div id="org8a7f3d8" class="figure">
<p><img src="figs/cubic-configuration-definition.png" alt="cubic-configuration-definition.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Cubic Configuration</p>
<p><span class="figure-number">Figure 9: </span>Cubic Configuration</p>
</div>
</div>
</div>
@ -1039,7 +1291,7 @@ stewart.platform_M.Mb = Mb;
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-11 mar. 17:52</p>
<p class="date">Created: 2020-02-12 mer. 10:22</p>
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -40,13 +40,18 @@
* Introduction :ignore:
The discovery of the Cubic configuration is done in cite:geng94_six_degree_of_freed_activ.
Further analysis is conducted in
The specificity of the Cubic configuration is that each actuator is orthogonal with the others.
The specificity of the Cubic configuration is that each actuator is orthogonal with the others:
#+begin_quote
the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube.
#+end_quote
The cubic (or orthogonal) configuration of the Stewart platform is now widely used (cite:preumont07_six_axis_singl_stage_activ,jafari03_orthog_gough_stewar_platf_microm).
According to cite:preumont07_six_axis_singl_stage_activ, the cubic configuration provides a uniform stiffness in all directions and *minimizes the crosscoupling* from actuator to sensor of different legs (being orthogonal to each other).
According to cite:preumont07_six_axis_singl_stage_activ:
#+begin_quote
This topology provides a uniform control capability and a uniform stiffness in all directions, and it minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other).
#+end_quote
To generate and study the Cubic configuration, =generateCubicConfiguration= is used (description in section [[sec:generateCubicConfiguration]]).
The goal is to study the benefits of using a cubic configuration:
@ -55,6 +60,23 @@ The goal is to study the benefits of using a cubic configuration:
- Is the center of the cube an important point?
* Configuration Analysis - Stiffness Matrix
** Introduction :ignore:
First, we have to understand what is the physical meaning of the Stiffness matrix $\bm{K}$.
The Stiffness matrix links forces $\bm{f}$ and torques $\bm{n}$ applied on the mobile platform at $\{B\}$ to the displacement $\Delta\bm{\mathcal{X}}$ of the mobile platform represented by $\{B\}$ with respect to $\{A\}$:
\[ \bm{\mathcal{F}} = \bm{K} \Delta\bm{\mathcal{X}} \]
with:
- $\bm{\mathcal{F}} = [\bm{f}\ \bm{n}]^{T}$
- $\Delta\bm{\mathcal{X}} = [\delta x, \delta y, \delta z, \delta \theta_{x}, \delta \theta_{y}, \delta \theta_{z}]^{T}$
If the stiffness matrix is inversible, its inverse is the compliance matrix: $\bm{C} = \bm{K}^{-1$ and:
\[ \Delta \bm{\mathcal{X}} = C \bm{\mathcal{F}} \]
Thus, if the stiffness matrix is diagonal, the compliance matrix is also diagonal and a force (resp. torque) $\bm{\mathcal{F}}_i$ applied on the mobile platform at $\{B\}$ will induce a pure translation (resp. rotation) of the mobile platform represented by $\{B\}$ with respect to $\{A\}$.
One has to note that this is only valid in a static way.
** 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>>
@ -72,12 +94,19 @@ The goal is to study the benefits of using a cubic configuration:
We create a cubic Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot).
The Jacobian matrix is estimated at the location of the center of the cube.
#+begin_src matlab
H = 100e-3; % height of the Stewart platform [m]
MO_B = -H/2; % Position {B} with respect to {M} [m]
Hc = H; % Size of the useful part of the cube [m]
FOc = H + MO_B; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', -50e-3);
stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
#+end_src
@ -88,7 +117,7 @@ The Jacobian matrix is estimated at the location of the center of the cube.
#+begin_src matlab :exports none
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, 50e-3, 200, 'kh');
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
@ -101,7 +130,7 @@ The Jacobian matrix is estimated at the location of the center of the cube.
[[file:figs/cubic_conf_centered_J_center.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
@ -116,19 +145,26 @@ The Jacobian matrix is estimated at the location of the center of the cube.
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]).
The Jacobian matrix is not estimated at the location of the center of the cube.
#+begin_src matlab
H = 100e-3; % height of the Stewart platform [m]
MO_B = 20e-3; % Position {B} with respect to {M} [m]
Hc = H; % Size of the useful part of the cube [m]
FOc = H/2; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 0);
stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
#+end_src
#+begin_src matlab :exports none
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, 50e-3, 200, 'kh');
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
@ -141,38 +177,41 @@ The Jacobian matrix is not estimated at the location of the center of the cube.
[[file:figs/cubic_conf_centered_J_not_center.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -2.5e-16 | 1.4e-17 | -0.1 | 0 |
| 0 | 2 | 0 | 0.1 | 0 | 0 |
| -2.5e-16 | 0 | 2 | 3.4e-18 | -1.4e-17 | 0 |
| 1.4e-17 | 0.1 | 3.4e-18 | 0.02 | 1.1e-20 | 3.4e-18 |
| -0.1 | 0 | -1.4e-17 | 1.4e-19 | 0.02 | -1.7e-18 |
| 6.6e-18 | -3.3e-18 | 0 | 3.6e-18 | -1.7e-18 | 0.06 |
| 2 | 0 | -2.5e-16 | 0 | -0.14 | 0 |
| 0 | 2 | 0 | 0.14 | 0 | 0 |
| -2.5e-16 | 0 | 2 | -5.3e-19 | 0 | 0 |
| 0 | 0.14 | -5.3e-19 | 0.025 | 0 | 8.7e-19 |
| -0.14 | 0 | 2.6e-18 | 1.6e-19 | 0.025 | 0 |
| 6.6e-18 | -3.3e-18 | 0 | 8.9e-19 | 0 | 0.06 |
** Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center
Here, the "center" of the Stewart platform is not at the cube center (figure [[fig:3d-cubic-stewart-misaligned]]).
Here, the "center" of the Stewart platform is not at the cube center (figure [[fig:cubic_conf_not_centered_J_center]]).
The Jacobian is estimated at the cube center.
#+name: fig:3d-cubic-stewart-misaligned
#+caption: Not centered cubic configuration
[[file:figs/3d-cubic-stewart-misaligned.png]]
#+begin_src matlab
H = 80e-3; % height of the Stewart platform [m]
MO_B = -30e-3; % Position {B} with respect to {M} [m]
Hc = 100e-3; % Size of the useful part of the cube [m]
FOc = H + MO_B; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3);
stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
#+end_src
#+begin_src matlab :exports none
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, 50e-3, 200, 'kh');
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
@ -185,16 +224,16 @@ The Jacobian is estimated at the cube center.
[[file:figs/cubic_conf_not_centered_J_center.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -1.7e-16 | 0 | 0.02 | 0 |
| 0 | 2 | 0 | -0.02 | 0 | 2.8e-17 |
| -1.7e-16 | 0 | 2 | 1.2e-19 | -1.4e-17 | 1.4e-17 |
| 0 | -0.02 | 1.2e-19 | 0.015 | -4.3e-19 | 1.7e-18 |
| 0.02 | 0 | -7.3e-18 | -3.3e-21 | 0.015 | 0 |
| 6.6e-18 | 2.5e-17 | 0 | 2e-18 | 0 | 0.06 |
| 2 | 0 | -1.7e-16 | 0 | 4.9e-17 | 0 |
| 0 | 2 | 0 | -2.2e-17 | 0 | 2.8e-17 |
| -1.7e-16 | 0 | 2 | 1.1e-18 | -1.4e-17 | 1.4e-17 |
| 0 | -2.2e-17 | 1.1e-18 | 0.015 | 0 | 3.5e-18 |
| 4.4e-17 | 0 | -1.4e-17 | -5.7e-20 | 0.015 | -8.7e-19 |
| 6.6e-18 | 2.5e-17 | 0 | 3.5e-18 | -8.7e-19 | 0.06 |
We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
@ -207,19 +246,26 @@ The Stewart platform is from $z = H_0 = 75$ to $z = H_0 + H_{tot} = 175$.
The center height of the Stewart platform is then at $z = \frac{175-75}{2} = 50$.
The center of the cube from the top platform is at $z = 110 - 175 = -65$.
#+begin_src matlab
H = 100e-3; % height of the Stewart platform [m]
MO_B = -H/2; % Position {B} with respect to {M} [m]
Hc = 1.5*H; % Size of the useful part of the cube [m]
FOc = H/2 + 10e-3; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3);
stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 215e-3, 'Mpr', 195e-3);
#+end_src
#+begin_src matlab :exports none
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, 50e-3, 200, 'kh');
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
@ -232,64 +278,158 @@ The center of the cube from the top platform is at $z = 110 - 175 = -65$.
[[file:figs/cubic_conf_not_centered_J_stewart_center.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -1.7e-16 | 0 | 0.02 | 0 |
| 0 | 2 | 0 | -0.02 | 0 | 2.8e-17 |
| -1.7e-16 | 0 | 2 | 1.2e-19 | -1.4e-17 | 1.4e-17 |
| 0 | -0.02 | 1.2e-19 | 0.015 | -4.3e-19 | 1.7e-18 |
| 0.02 | 0 | -7.3e-18 | -3.3e-21 | 0.015 | 0 |
| 6.6e-18 | 2.5e-17 | 0 | 2e-18 | 0 | 0.06 |
| 2 | 0 | 1.5e-16 | 0 | 0.02 | 0 |
| 0 | 2 | 0 | -0.02 | 0 | 0 |
| 1.5e-16 | 0 | 2 | -3e-18 | -2.8e-17 | 0 |
| 0 | -0.02 | -3e-18 | 0.034 | -8.7e-19 | 5.2e-18 |
| 0.02 | 0 | -2.2e-17 | -4.4e-19 | 0.034 | 0 |
| 5.9e-18 | -7.5e-18 | 0 | 3.5e-18 | 0 | 0.14 |
** Conclusion
#+begin_important
Here are the conclusion about the Stiffness matrix for the Cubic configuration:
- The cubic configuration permits to have $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$
- The stiffness matrix $K$ is diagonal for the cubic configuration if the Jacobian is estimated at the cube center.
#+end_important
** Having Cube's center above the top platform
Let's say we want to have a decouple dynamics above the top platform.
Let's say we want to have a diagonal stiffness matrix when $\{A\}$ and $\{B\}$ are located above the top platform.
Thus, we want the cube's center to be located above the top center.
This is possible, to do so:
- The position of the center of the cube should be positioned at A
- The Height of the "useful" part of the cube should be at least equal to two times the distance from F to A.
It is possible to have small cube, but then to configuration is a little bit strange.
Let's fix the Height of the Stewart platform and the position of frames $\{A\}$ and $\{B\}$:
#+begin_src matlab
H = 100e-3; % height of the Stewart platform [m]
MO_B = 20e-3; % Position {B} with respect to {M} [m]
#+end_src
We find the several Cubic configuration for the Stewart platform where the center of the cube is located at frame $\{A\}$.
The differences between the configuration are the cube's size:
- Small Cube Size in Figure [[fig:stewart_cubic_conf_type_1]]
- Medium Cube Size in Figure [[fig:stewart_cubic_conf_type_2]]
- Large Cube Size in Figure [[fig:stewart_cubic_conf_type_3]]
For each of the configuration, the Stiffness matrix is diagonal with $k_x = k_y = k_y = 2k$ with $k$ is the stiffness of each strut.
However, the rotational stiffnesses are increasing with the cube's size but the required size of the platform is also increasing, so there is a trade-off here.
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 50e-3);
FOc = stewart.H + stewart.MO_B(3);
Hc = 2*(stewart.H + stewart.MO_B(3));
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 10e-3, 'MHb', 10e-3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = initializeJointDynamics(stewart, 'disable', true);
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
Hc = 0.4*H; % Size of the useful part of the cube [m]
FOc = H + MO_B; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab :exports none
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)));
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, 50e-3, 200, 'kh');
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_1.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:stewart_cubic_conf_type_1
#+caption: Cubic Configuration for the Stewart Platform - Small Cube Size ([[./figs/stewart_cubic_conf_type_1.png][png]], [[./figs/stewart_cubic_conf_type_1.pdf][pdf]])
[[file:figs/stewart_cubic_conf_type_1.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -3.2e-16 | 0 | 3.1e-16 | 0 |
| 0 | 2 | 0 | -1.2e-16 | 0 | 0 |
| -3.2e-16 | 0 | 2 | 5e-18 | -5.6e-17 | 0 |
| 0 | -1.2e-16 | 5e-18 | 0.14 | 3.5e-18 | 1.4e-17 |
| 3e-16 | 0 | -5.4e-17 | 2.1e-19 | 0.14 | -6.9e-18 |
| 7.4e-19 | -2.6e-17 | 0 | 1.3e-17 | -6.9e-18 | 0.54 |
| 2 | 0 | -2.8e-16 | 0 | 2.4e-17 | 0 |
| 0 | 2 | 0 | -2.3e-17 | 0 | 0 |
| -2.8e-16 | 0 | 2 | -2.1e-19 | 0 | 0 |
| 0 | -2.3e-17 | -2.1e-19 | 0.0024 | -5.4e-20 | 6.5e-19 |
| 2.4e-17 | 0 | 4.9e-19 | -2.3e-20 | 0.0024 | 0 |
| -1.2e-18 | 1.1e-18 | 0 | 6.2e-19 | 0 | 0.0096 |
We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
#+begin_src matlab
Hc = 1.5*H; % Size of the useful part of the cube [m]
FOc = H + MO_B; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab :exports none
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)));
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_2.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:stewart_cubic_conf_type_2
#+caption: Cubic Configuration for the Stewart Platform - Medium Cube Size ([[./figs/stewart_cubic_conf_type_2.png][png]], [[./figs/stewart_cubic_conf_type_2.pdf][pdf]])
[[file:figs/stewart_cubic_conf_type_2.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -1.9e-16 | 0 | 5.6e-17 | 0 |
| 0 | 2 | 0 | -7.6e-17 | 0 | 0 |
| -1.9e-16 | 0 | 2 | 2.5e-18 | 2.8e-17 | 0 |
| 0 | -7.6e-17 | 2.5e-18 | 0.034 | 8.7e-19 | 8.7e-18 |
| 5.7e-17 | 0 | 3.2e-17 | 2.9e-19 | 0.034 | 0 |
| -1e-18 | -1.3e-17 | 5.6e-17 | 8.4e-18 | 0 | 0.14 |
#+begin_src matlab
Hc = 2.5*H; % Size of the useful part of the cube [m]
FOc = H + MO_B; % Center of the cube with respect to {F}
#+end_src
#+begin_src matlab :exports none
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
stewart = computeJacobian(stewart);
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)));
displayArchitecture(stewart, 'labels', false);
scatter3(0, 0, FOc, 200, 'kh');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_3.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:stewart_cubic_conf_type_3
#+caption: Cubic Configuration for the Stewart Platform - Large Cube Size ([[./figs/stewart_cubic_conf_type_3.png][png]], [[./figs/stewart_cubic_conf_type_3.pdf][pdf]])
[[file:figs/stewart_cubic_conf_type_3.png]]
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -3e-16 | 0 | -8.3e-17 | 0 |
| 0 | 2 | 0 | -2.2e-17 | 0 | 5.6e-17 |
| -3e-16 | 0 | 2 | -9.3e-19 | -2.8e-17 | 0 |
| 0 | -2.2e-17 | -9.3e-19 | 0.094 | 0 | 2.1e-17 |
| -8e-17 | 0 | -3e-17 | -6.1e-19 | 0.094 | 0 |
| -6.2e-18 | 7.2e-17 | 5.6e-17 | 2.3e-17 | 0 | 0.37 |
* TODO Cubic size analysis :noexport:
We here study the effect of the size of the cube used for the Stewart configuration.