Update the cubic configuration analysis

This commit is contained in:
Thomas Dehaeze 2020-02-06 18:23:01 +01:00
parent 3002bd2589
commit 8197bb4eb8
3 changed files with 432 additions and 498 deletions

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-02-06 jeu. 17:29 --> <!-- 2020-02-06 jeu. 18:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cubic configuration for the Stewart Platform</title> <title>Cubic configuration for the Stewart Platform</title>
@ -268,25 +268,25 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org75c6951">1. <span class="todo TODO">TODO</span> Configuration Analysis - Stiffness Matrix</a> <li><a href="#org8350a45">1. Configuration Analysis - Stiffness Matrix</a>
<ul> <ul>
<li><a href="#orga823f72">1.1. Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center</a></li> <li><a href="#org6b34363">1.1. Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center</a></li>
<li><a href="#org4261310">1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</a></li> <li><a href="#orgd59e9f0">1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</a></li>
<li><a href="#orgf297eb8">1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</a></li> <li><a href="#org27bd91a">1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</a></li>
<li><a href="#orgfeaf9c1">1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</a></li> <li><a href="#org4adea52">1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</a></li>
<li><a href="#org24bdf29">1.5. Conclusion</a></li> <li><a href="#org5defe19">1.5. Conclusion</a></li>
<li><a href="#org905f726">1.6. Having Cube&rsquo;s center above the top platform</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org2cb2ab0">2. <span class="todo TODO">TODO</span> Cubic size analysis</a></li> <li><a href="#org6746f61">2. Functions</a>
<li><a href="#orgeec7b47">3. Functions</a>
<ul> <ul>
<li><a href="#org92224ef">3.1. <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</a> <li><a href="#org80fcb20">2.1. <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</a>
<ul> <ul>
<li><a href="#org715472d">Function description</a></li> <li><a href="#orgd3654f4">Function description</a></li>
<li><a href="#orgbab37f8">Documentation</a></li> <li><a href="#orgf1c4374">Documentation</a></li>
<li><a href="#orgddbe42e">Optional Parameters</a></li> <li><a href="#org7703a4a">Optional Parameters</a></li>
<li><a href="#org66dd074">Position of the Cube</a></li> <li><a href="#org43039c1">Position of the Cube</a></li>
<li><a href="#org388f35d">Compute the pose</a></li> <li><a href="#orga18e804">Compute the pose</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -313,7 +313,7 @@ According to <a class='org-ref-reference' href="#preumont07_six_axis_singl_stage
</p> </p>
<p> <p>
To generate and study the Cubic configuration, <code>generateCubicConfiguration</code> is used (description in section <a href="#orgb0ae4eb">3.1</a>). To generate and study the Cubic configuration, <code>generateCubicConfiguration</code> is used (description in section <a href="#orgfe8cdfe">2.1</a>).
The goal is to study the benefits of using a cubic configuration: The goal is to study the benefits of using a cubic configuration:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
@ -322,48 +322,34 @@ The goal is to study the benefits of using a cubic configuration:
<li>Is the center of the cube an important point?</li> <li>Is the center of the cube an important point?</li>
</ul> </ul>
<div id="outline-container-org75c6951" class="outline-2"> <div id="outline-container-org8350a45" class="outline-2">
<h2 id="org75c6951"><span class="section-number-2">1</span> <span class="todo TODO">TODO</span> Configuration Analysis - Stiffness Matrix</h2> <h2 id="org8350a45"><span class="section-number-2">1</span> Configuration Analysis - Stiffness Matrix</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
</div> </div>
<div id="outline-container-orga823f72" class="outline-3"> <div id="outline-container-org6b34363" class="outline-3">
<h3 id="orga823f72"><span class="section-number-3">1.1</span> Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center</h3> <h3 id="org6b34363"><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"> <div class="outline-text-3" id="text-1-1">
<p> <p>
We create a cubic Stewart platform (figure <a href="#org66ade8d">1</a>) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot). We create a cubic Stewart platform (figure <a href="#org964919a">1</a>) 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. The Jacobian matrix is estimated at the location of the center of the cube.
</p> </p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeFramesPositions(<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 = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
stewart = computeJacobian(stewart);
</pre>
</div>
<div id="org66ade8d" class="figure">
<div id="org964919a" class="figure">
<p><img src="./figs/3d-cubic-stewart-aligned.png" alt="3d-cubic-stewart-aligned.png" /> <p><img src="./figs/3d-cubic-stewart-aligned.png" alt="3d-cubic-stewart-aligned.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Centered cubic configuration</p> <p><span class="figure-number">Figure 1: </span>Centered cubic configuration</p>
</div> </div>
<div class="org-src-container">
<pre class="src src-matlab">opts = struct(...
<span class="org-string">'H_tot'</span>, 100, ...<span class="org-comment"> % Total height of the Hexapod [mm]</span>
<span class="org-string">'L'</span>, 200<span class="org-type">/</span>sqrt(3), ...<span class="org-comment"> % Size of the Cube [mm]</span>
<span class="org-string">'H'</span>, 60, ...<span class="org-comment"> % Height between base joints and platform joints [mm]</span>
<span class="org-string">'H0'</span>, 200<span class="org-type">/</span>2<span class="org-type">-</span>60<span class="org-type">/</span>2 ...<span class="org-comment"> % Height between the corner of the cube and the plane containing the base joints [mm]</span>
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
<span class="org-string">'Jd_pos'</span>, [0, 0, <span class="org-type">-</span>50], ...<span class="org-comment"> % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span class="org-string">'Jf_pos'</span>, [0, 0, <span class="org-type">-</span>50] ...<span class="org-comment"> % Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
);
stewart = computeGeometricalProperties(stewart, opts);
save(<span class="org-string">'./mat/stewart.mat'</span>, <span class="org-string">'stewart'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K = stewart.Jf<span class="org-type">'*</span>stewart.Jf;
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -383,88 +369,76 @@ save(<span class="org-string">'./mat/stewart.mat'</span>, <span class="org-strin
<tbody> <tbody>
<tr> <tr>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">1.9e-18</td> <td class="org-right">0</td>
<td class="org-right">-2.3e-17</td> <td class="org-right">-2.5e-16</td>
<td class="org-right">1.8e-18</td> <td class="org-right">0</td>
<td class="org-right">5.5e-17</td> <td class="org-right">2.1e-17</td>
<td class="org-right">-1.5e-17</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.9e-18</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">6.8e-18</td> <td class="org-right">0</td>
<td class="org-right">-6.1e-17</td> <td class="org-right">-7.8e-19</td>
<td class="org-right">-1.6e-18</td> <td class="org-right">0</td>
<td class="org-right">4.8e-18</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-2.3e-17</td> <td class="org-right">-2.5e-16</td>
<td class="org-right">6.8e-18</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">-6.7e-18</td> <td class="org-right">-2.4e-18</td>
<td class="org-right">4.9e-18</td> <td class="org-right">-1.4e-17</td>
<td class="org-right">5.3e-19</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.8e-18</td> <td class="org-right">0</td>
<td class="org-right">-6.1e-17</td> <td class="org-right">-7.8e-19</td>
<td class="org-right">-6.7e-18</td> <td class="org-right">-2.4e-18</td>
<td class="org-right">0.0067</td> <td class="org-right">0.015</td>
<td class="org-right">-2.3e-20</td> <td class="org-right">-4.3e-19</td>
<td class="org-right">-6.1e-20</td> <td class="org-right">1.7e-18</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">5.5e-17</td> <td class="org-right">1.8e-17</td>
<td class="org-right">-1.6e-18</td> <td class="org-right">0</td>
<td class="org-right">4.9e-18</td> <td class="org-right">-1.1e-17</td>
<td class="org-right">-2.3e-20</td> <td class="org-right">0</td>
<td class="org-right">0.0067</td> <td class="org-right">0.015</td>
<td class="org-right">1e-18</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-1.5e-17</td> <td class="org-right">6.6e-18</td>
<td class="org-right">4.8e-18</td> <td class="org-right">-3.3e-18</td>
<td class="org-right">5.3e-19</td> <td class="org-right">0</td>
<td class="org-right">-6.1e-20</td> <td class="org-right">1.7e-18</td>
<td class="org-right">1e-18</td> <td class="org-right">0</td>
<td class="org-right">0.027</td> <td class="org-right">0.06</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<div id="outline-container-org4261310" class="outline-3"> <div id="outline-container-orgd59e9f0" class="outline-3">
<h3 id="org4261310"><span class="section-number-3">1.2</span> Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</h3> <h3 id="orgd59e9f0"><span class="section-number-3">1.2</span> Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
<p> <p>
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure <a href="#org66ade8d">1</a>). We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure <a href="#org964919a">1</a>).
The Jacobian matrix is not estimated at the location of the center of the cube. The Jacobian matrix is not estimated at the location of the center of the cube.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">opts = struct(... <pre class="src src-matlab">stewart = initializeFramesPositions(<span class="org-string">'H'</span>, 100e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 0);
<span class="org-string">'H_tot'</span>, 100, ...<span class="org-comment"> % Total height of the Hexapod [mm]</span> 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);
<span class="org-string">'L'</span>, 200<span class="org-type">/</span>sqrt(3), ...<span class="org-comment"> % Size of the Cube [mm]</span> stewart = computeJointsPose(stewart);
<span class="org-string">'H'</span>, 60, ...<span class="org-comment"> % Height between base joints and platform joints [mm]</span> stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
<span class="org-string">'H0'</span>, 200<span class="org-type">/</span>2<span class="org-type">-</span>60<span class="org-type">/</span>2 ...<span class="org-comment"> % Height between the corner of the cube and the plane containing the base joints [mm]</span> stewart = computeJacobian(stewart);
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
<span class="org-string">'Jd_pos'</span>, [0, 0, 0], ...<span class="org-comment"> % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span class="org-string">'Jf_pos'</span>, [0, 0, 0] ...<span class="org-comment"> % Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
);
stewart = computeGeometricalProperties(stewart, opts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K = stewart.Jf<span class="org-type">'*</span>stewart.Jf;
</pre> </pre>
</div> </div>
@ -487,102 +461,83 @@ stewart = computeGeometricalProperties(stewart, opts);
<tbody> <tbody>
<tr> <tr>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">1.9e-18</td> <td class="org-right">0</td>
<td class="org-right">-2.3e-17</td> <td class="org-right">-2.5e-16</td>
<td class="org-right">1.5e-18</td> <td class="org-right">1.4e-17</td>
<td class="org-right">-0.1</td> <td class="org-right">-0.1</td>
<td class="org-right">-1.5e-17</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.9e-18</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">6.8e-18</td> <td class="org-right">0</td>
<td class="org-right">0.1</td> <td class="org-right">0.1</td>
<td class="org-right">-1.6e-18</td> <td class="org-right">0</td>
<td class="org-right">4.8e-18</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-2.3e-17</td> <td class="org-right">-2.5e-16</td>
<td class="org-right">6.8e-18</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">-5.1e-19</td> <td class="org-right">3.4e-18</td>
<td class="org-right">-5.5e-18</td> <td class="org-right">-1.4e-17</td>
<td class="org-right">5.3e-19</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.5e-18</td> <td class="org-right">1.4e-17</td>
<td class="org-right">0.1</td> <td class="org-right">0.1</td>
<td class="org-right">-5.1e-19</td> <td class="org-right">3.4e-18</td>
<td class="org-right">0.012</td> <td class="org-right">0.02</td>
<td class="org-right">-3e-19</td> <td class="org-right">1.1e-20</td>
<td class="org-right">3.1e-19</td> <td class="org-right">3.4e-18</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-0.1</td> <td class="org-right">-0.1</td>
<td class="org-right">-1.6e-18</td> <td class="org-right">0</td>
<td class="org-right">-5.5e-18</td> <td class="org-right">-1.4e-17</td>
<td class="org-right">-3e-19</td> <td class="org-right">1.4e-19</td>
<td class="org-right">0.012</td> <td class="org-right">0.02</td>
<td class="org-right">1.9e-18</td> <td class="org-right">-1.7e-18</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-1.5e-17</td> <td class="org-right">6.6e-18</td>
<td class="org-right">4.8e-18</td> <td class="org-right">-3.3e-18</td>
<td class="org-right">5.3e-19</td> <td class="org-right">0</td>
<td class="org-right">3.1e-19</td> <td class="org-right">3.6e-18</td>
<td class="org-right">1.9e-18</td> <td class="org-right">-1.7e-18</td>
<td class="org-right">0.027</td> <td class="org-right">0.06</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<div id="outline-container-orgf297eb8" class="outline-3"> <div id="outline-container-org27bd91a" class="outline-3">
<h3 id="orgf297eb8"><span class="section-number-3">1.3</span> Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</h3> <h3 id="org27bd91a"><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"> <div class="outline-text-3" id="text-1-3">
<p> <p>
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center (figure <a href="#org4492663">2</a>). Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center (figure <a href="#orgeceb55c">2</a>).
The Jacobian is estimated at the cube center. The Jacobian is estimated at the cube center.
</p> </p>
<div id="org4492663" class="figure"> <div id="orgeceb55c" class="figure">
<p><img src="./figs/3d-cubic-stewart-misaligned.png" alt="3d-cubic-stewart-misaligned.png" /> <p><img src="./figs/3d-cubic-stewart-misaligned.png" alt="3d-cubic-stewart-misaligned.png" />
</p> </p>
<p><span class="figure-number">Figure 2: </span>Not centered cubic configuration</p> <p><span class="figure-number">Figure 2: </span>Not centered cubic configuration</p>
</div> </div>
<p>
The center of the cube is at \(z = 110\).
The Stewart platform is from \(z = H_0 = 75\) to \(z = H_0 + H_{tot} = 175\).
The center height of the Stewart platform is then at \(z = \frac{175-75}{2} = 50\).
The center of the cube from the top platform is at \(z = 110 - 175 = -65\).
</p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">opts = struct(... <pre class="src src-matlab">stewart = initializeFramesPositions(<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);
<span class="org-string">'H_tot'</span>, 100, ...<span class="org-comment"> % Total height of the Hexapod [mm]</span> 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);
<span class="org-string">'L'</span>, 220<span class="org-type">/</span>sqrt(3), ...<span class="org-comment"> % Size of the Cube [mm]</span> stewart = computeJointsPose(stewart);
<span class="org-string">'H'</span>, 60, ...<span class="org-comment"> % Height between base joints and platform joints [mm]</span> stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
<span class="org-string">'H0'</span>, 75 ...<span class="org-comment"> % Height between the corner of the cube and the plane containing the base joints [mm]</span> stewart = computeJacobian(stewart);
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
<span class="org-string">'Jd_pos'</span>, [0, 0, <span class="org-type">-</span>65], ...<span class="org-comment"> % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span class="org-string">'Jf_pos'</span>, [0, 0, <span class="org-type">-</span>65] ...<span class="org-comment"> % Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
);
stewart = computeGeometricalProperties(stewart, opts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K = stewart.Jf<span class="org-type">'*</span>stewart.Jf;
</pre> </pre>
</div> </div>
@ -605,56 +560,56 @@ stewart = computeGeometricalProperties(stewart, opts);
<tbody> <tbody>
<tr> <tr>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">-1.8e-17</td> <td class="org-right">0</td>
<td class="org-right">2.6e-17</td> <td class="org-right">-1.5e-16</td>
<td class="org-right">3.3e-18</td> <td class="org-right">0</td>
<td class="org-right">0.04</td> <td class="org-right">0.04</td>
<td class="org-right">1.7e-19</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-1.8e-17</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">1.9e-16</td> <td class="org-right">0</td>
<td class="org-right">-0.04</td> <td class="org-right">-0.04</td>
<td class="org-right">2.2e-19</td> <td class="org-right">0</td>
<td class="org-right">-5.3e-19</td> <td class="org-right">-2.8e-17</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">2.6e-17</td> <td class="org-right">-1.5e-16</td>
<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</td>
<td class="org-right">-8.9e-18</td> <td class="org-right">1.2e-18</td>
<td class="org-right">6.5e-19</td> <td class="org-right">-1e-17</td>
<td class="org-right">-5.8e-19</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">3.3e-18</td> <td class="org-right">0</td>
<td class="org-right">-0.04</td> <td class="org-right">-0.04</td>
<td class="org-right">-8.9e-18</td> <td class="org-right">1.2e-18</td>
<td class="org-right">0.0089</td> <td class="org-right">0.016</td>
<td class="org-right">-9.3e-20</td> <td class="org-right">0</td>
<td class="org-right">9.8e-20</td> <td class="org-right">8.7e-19</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">0.04</td> <td class="org-right">0.04</td>
<td class="org-right">2.2e-19</td> <td class="org-right">0</td>
<td class="org-right">6.5e-19</td> <td class="org-right">-6.2e-18</td>
<td class="org-right">-9.3e-20</td> <td class="org-right">-1.1e-19</td>
<td class="org-right">0.0089</td> <td class="org-right">0.016</td>
<td class="org-right">-2.4e-18</td> <td class="org-right">8.7e-19</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.7e-19</td> <td class="org-right">-3.7e-19</td>
<td class="org-right">-5.3e-19</td> <td class="org-right">-2.5e-17</td>
<td class="org-right">-5.8e-19</td> <td class="org-right">0</td>
<td class="org-right">9.8e-20</td> <td class="org-right">1.2e-18</td>
<td class="org-right">-2.4e-18</td> <td class="org-right">8.7e-19</td>
<td class="org-right">0.032</td> <td class="org-right">0.06</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -665,8 +620,8 @@ We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiff
</div> </div>
</div> </div>
<div id="outline-container-orgfeaf9c1" class="outline-3"> <div id="outline-container-org4adea52" class="outline-3">
<h3 id="orgfeaf9c1"><span class="section-number-3">1.4</span> Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</h3> <h3 id="org4adea52"><span class="section-number-3">1.4</span> Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</h3>
<div class="outline-text-3" id="text-1-4"> <div class="outline-text-3" id="text-1-4">
<p> <p>
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center. Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center.
@ -681,23 +636,11 @@ The center of the cube from the top platform is at \(z = 110 - 175 = -65\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">opts = struct(... <pre class="src src-matlab">stewart = initializeFramesPositions(<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>30e<span class="org-type">-</span>3);
<span class="org-string">'H_tot'</span>, 100, ...<span class="org-comment"> % Total height of the Hexapod [mm]</span> 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);
<span class="org-string">'L'</span>, 220<span class="org-type">/</span>sqrt(3), ...<span class="org-comment"> % Size of the Cube [mm]</span> stewart = computeJointsPose(stewart);
<span class="org-string">'H'</span>, 60, ...<span class="org-comment"> % Height between base joints and platform joints [mm]</span> stewart = initializeStrutDynamics(stewart, <span class="org-string">'Ki'</span>, ones(6,1));
<span class="org-string">'H0'</span>, 75 ...<span class="org-comment"> % Height between the corner of the cube and the plane containing the base joints [mm]</span> stewart = computeJacobian(stewart);
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
<span class="org-string">'Jd_pos'</span>, [0, 0, <span class="org-type">-</span>60], ...<span class="org-comment"> % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span class="org-string">'Jf_pos'</span>, [0, 0, <span class="org-type">-</span>60] ...<span class="org-comment"> % Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
);
stewart = computeGeometricalProperties(stewart, opts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K = stewart.Jf<span class="org-type">'*</span>stewart.Jf;
</pre> </pre>
</div> </div>
@ -720,56 +663,177 @@ stewart = computeGeometricalProperties(stewart, opts);
<tbody> <tbody>
<tr> <tr>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">-1.8e-17</td> <td class="org-right">0</td>
<td class="org-right">2.6e-17</td> <td class="org-right">-1.7e-16</td>
<td class="org-right">-5.7e-19</td> <td class="org-right">0</td>
<td class="org-right">0.03</td> <td class="org-right">4.9e-17</td>
<td class="org-right">1.7e-19</td> <td class="org-right">0</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-1.8e-17</td> <td class="org-right">0</td>
<td class="org-right">2</td> <td class="org-right">2</td>
<td class="org-right">1.9e-16</td> <td class="org-right">0</td>
<td class="org-right">-0.03</td> <td class="org-right">-2.2e-17</td>
<td class="org-right">2.2e-19</td> <td class="org-right">0</td>
<td class="org-right">-5.3e-19</td> <td class="org-right">2.8e-17</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">2.6e-17</td> <td class="org-right">-1.7e-16</td>
<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</td>
<td class="org-right">-1.5e-17</td> <td class="org-right">1.1e-18</td>
<td class="org-right">6.5e-19</td> <td class="org-right">-1.4e-17</td>
<td class="org-right">-5.8e-19</td> <td class="org-right">1.4e-17</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">-5.7e-19</td> <td class="org-right">0</td>
<td class="org-right">-0.03</td> <td class="org-right">-2.2e-17</td>
<td class="org-right">-1.5e-17</td> <td class="org-right">1.1e-18</td>
<td class="org-right">0.0085</td> <td class="org-right">0.015</td>
<td class="org-right">4.9e-20</td> <td class="org-right">0</td>
<td class="org-right">1.7e-19</td> <td class="org-right">3.5e-18</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">0.03</td> <td class="org-right">4.4e-17</td>
<td class="org-right">2.2e-19</td> <td class="org-right">0</td>
<td class="org-right">6.5e-19</td> <td class="org-right">-1.4e-17</td>
<td class="org-right">4.9e-20</td> <td class="org-right">-5.7e-20</td>
<td class="org-right">0.0085</td> <td class="org-right">0.015</td>
<td class="org-right">-1.1e-18</td> <td class="org-right">-8.7e-19</td>
</tr> </tr>
<tr> <tr>
<td class="org-right">1.7e-19</td> <td class="org-right">6.6e-18</td>
<td class="org-right">-5.3e-19</td> <td class="org-right">2.5e-17</td>
<td class="org-right">-5.8e-19</td> <td class="org-right">0</td>
<td class="org-right">1.7e-19</td> <td class="org-right">3.5e-18</td>
<td class="org-right">-1.1e-18</td> <td class="org-right">-8.7e-19</td>
<td class="org-right">0.032</td> <td class="org-right">0.06</td>
</tr>
</tbody>
</table>
<p>
We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), and the Stiffness matrix is diagonal.
</p>
</div>
</div>
<div id="outline-container-org5defe19" class="outline-3">
<h3 id="org5defe19"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5">
<div class="important">
<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>
</ul>
</div>
</div>
</div>
<div id="outline-container-org905f726" class="outline-3">
<h3 id="org905f726"><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.
Thus, we want the cube&rsquo;s center to be located above the top center.
This is possible, to do so:
</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>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeFramesPositions(<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>
</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">-4.6e-16</td>
<td class="org-right">0</td>
<td class="org-right">4e-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">-4.8e-17</td>
<td class="org-right">0</td>
<td class="org-right">-3.5e-17</td>
</tr>
<tr>
<td class="org-right">-4.6e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">1.5e-20</td>
<td class="org-right">4e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-4.8e-17</td>
<td class="org-right">1.5e-20</td>
<td class="org-right">0.00034</td>
<td class="org-right">6.8e-21</td>
<td class="org-right">4.2e-19</td>
</tr>
<tr>
<td class="org-right">4e-17</td>
<td class="org-right">0</td>
<td class="org-right">4e-17</td>
<td class="org-right">-3e-21</td>
<td class="org-right">0.00034</td>
<td class="org-right">-2.7e-20</td>
</tr>
<tr>
<td class="org-right">-1.7e-19</td>
<td class="org-right">-3.6e-17</td>
<td class="org-right">0</td>
<td class="org-right">4.2e-19</td>
<td class="org-right">-2.7e-20</td>
<td class="org-right">0.0014</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -779,131 +843,21 @@ We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiff
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-org24bdf29" class="outline-3">
<h3 id="org24bdf29"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5">
<div class="important">
<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 Stewart platform and the cube are centered <b>and</b> the Jacobian is estimated at the cube center</li>
</ul>
</div>
</div>
</div>
</div> </div>
<div id="outline-container-org2cb2ab0" class="outline-2"> <div id="outline-container-org6746f61" class="outline-2">
<h2 id="org2cb2ab0"><span class="section-number-2">2</span> <span class="todo TODO">TODO</span> Cubic size analysis</h2> <h2 id="org6746f61"><span class="section-number-2">2</span> Functions</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<p> <p>
We here study the effect of the size of the cube used for the Stewart configuration. <a id="org2a4885e"></a>
</p>
<p>
We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform.
</p>
<p>
We only vary the size of the cube.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H_cubes = 250<span class="org-type">:</span>20<span class="org-type">:</span>350;
stewarts = {zeros(length(H_cubes), 1)};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(H_cubes)</span>
H_cube = H_cubes(<span class="org-constant">i</span>);
H_tot = 100;
H = 80;
opts = struct(...
<span class="org-string">'H_tot'</span>, H_tot, ...<span class="org-comment"> % Total height of the Hexapod [mm]</span>
<span class="org-string">'L'</span>, H_cube<span class="org-type">/</span>sqrt(3), ...<span class="org-comment"> % Size of the Cube [mm]</span>
<span class="org-string">'H'</span>, H, ...<span class="org-comment"> % Height between base joints and platform joints [mm]</span>
<span class="org-string">'H0'</span>, H_cube<span class="org-type">/</span>2<span class="org-type">-</span>H<span class="org-type">/</span>2 ...<span class="org-comment"> % Height between the corner of the cube and the plane containing the base joints [mm]</span>
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
<span class="org-string">'Jd_pos'</span>, [0, 0, H_cube<span class="org-type">/</span>2<span class="org-type">-</span>opts.H0<span class="org-type">-</span>opts.H_tot], ...<span class="org-comment"> % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]</span>
<span class="org-string">'Jf_pos'</span>, [0, 0, H_cube<span class="org-type">/</span>2<span class="org-type">-</span>opts.H0<span class="org-type">-</span>opts.H_tot] ...<span class="org-comment"> % Position of the Jacobian for force location from the top of the mobile platform [mm]</span>
);
stewart = computeGeometricalProperties(stewart, opts);
stewarts(<span class="org-constant">i</span>) = {stewart};
<span class="org-keyword">end</span>
</pre>
</div>
<p>
The Stiffness matrix is computed for all generated Stewart platforms.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ks = zeros(6, 6, length(H_cube));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(H_cubes)</span>
Ks(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = stewarts{<span class="org-constant">i</span>}.Jd<span class="org-type">'*</span>stewarts{<span class="org-constant">i</span>}.Jd;
<span class="org-keyword">end</span>
</pre>
</div>
<p>
The only elements of \(K\) that vary are \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\).
</p>
<p>
Finally, we plot \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\)
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
plot(H_cubes, squeeze(Ks(4, 4, <span class="org-type">:</span>)), <span class="org-string">'DisplayName'</span>, <span class="org-string">'$k_{\theta_x}$'</span>);
plot(H_cubes, squeeze(Ks(6, 6, <span class="org-type">:</span>)), <span class="org-string">'DisplayName'</span>, <span class="org-string">'$k_{\theta_z}$'</span>);
hold off;
legend(<span class="org-string">'location'</span>, <span class="org-string">'northwest'</span>);
xlabel(<span class="org-string">'Cube Size [mm]'</span>); ylabel(<span class="org-string">'Rotational stiffnes [normalized]'</span>);
</pre>
</div>
<div id="org009489e" class="figure">
<p><img src="figs/stiffness_cube_size.png" alt="stiffness_cube_size.png" />
</p>
<p><span class="figure-number">Figure 3: </span>\(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) function of the size of the cube</p>
</div>
<p>
We observe that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) increase linearly with the cube size.
</p>
<div class="important">
<p>
In order to maximize the rotational stiffness of the Stewart platform, the size of the cube should be the highest possible.
In that case, the legs will the further separated. Size of the cube is then limited by allowed space.
</p>
</div>
</div>
</div>
<div id="outline-container-orgeec7b47" class="outline-2">
<h2 id="orgeec7b47"><span class="section-number-2">3</span> Functions</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orgb108018"></a>
</p> </p>
</div> </div>
<div id="outline-container-org92224ef" class="outline-3"> <div id="outline-container-org80fcb20" class="outline-3">
<h3 id="org92224ef"><span class="section-number-3">3.1</span> <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</h3> <h3 id="org80fcb20"><span class="section-number-3">2.1</span> <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-2-1">
<p> <p>
<a id="orgb0ae4eb"></a> <a id="orgfe8cdfe"></a>
</p> </p>
<p> <p>
@ -911,9 +865,9 @@ This Matlab function is accessible <a href="src/generateCubicConfiguration.m">he
</p> </p>
</div> </div>
<div id="outline-container-org715472d" class="outline-4"> <div id="outline-container-orgd3654f4" class="outline-4">
<h4 id="org715472d">Function description</h4> <h4 id="orgd3654f4">Function description</h4>
<div class="outline-text-4" id="text-org715472d"> <div class="outline-text-4" id="text-orgd3654f4">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[stewart]</span> = <span class="org-function-name">generateCubicConfiguration</span>(<span class="org-variable-name">stewart</span>, <span class="org-variable-name">args</span>) <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[stewart]</span> = <span class="org-function-name">generateCubicConfiguration</span>(<span class="org-variable-name">stewart</span>, <span class="org-variable-name">args</span>)
<span class="org-comment">% generateCubicConfiguration - Generate a Cubic Configuration</span> <span class="org-comment">% generateCubicConfiguration - Generate a Cubic Configuration</span>
@ -938,37 +892,37 @@ This Matlab function is accessible <a href="src/generateCubicConfiguration.m">he
</div> </div>
</div> </div>
<div id="outline-container-orgbab37f8" class="outline-4"> <div id="outline-container-orgf1c4374" class="outline-4">
<h4 id="orgbab37f8">Documentation</h4> <h4 id="orgf1c4374">Documentation</h4>
<div class="outline-text-4" id="text-orgbab37f8"> <div class="outline-text-4" id="text-orgf1c4374">
<div id="org946a873" class="figure"> <div id="org8d1a2f5" class="figure">
<p><img src="figs/cubic-configuration-definition.png" alt="cubic-configuration-definition.png" /> <p><img src="figs/cubic-configuration-definition.png" alt="cubic-configuration-definition.png" />
</p> </p>
<p><span class="figure-number">Figure 4: </span>Cubic Configuration</p> <p><span class="figure-number">Figure 3: </span>Cubic Configuration</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgddbe42e" class="outline-4"> <div id="outline-container-org7703a4a" class="outline-4">
<h4 id="orgddbe42e">Optional Parameters</h4> <h4 id="org7703a4a">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgddbe42e"> <div class="outline-text-4" id="text-org7703a4a">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">arguments <pre class="src src-matlab">arguments
stewart stewart
args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e<span class="org-type">-</span>3 args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e<span class="org-type">-</span>3
args.FOc (1,1) double {mustBeNumeric} = 50e<span class="org-type">-</span>3 args.FOc (1,1) double {mustBeNumeric} = 50e<span class="org-type">-</span>3
args.FHa (1,1) double {mustBeNumeric, mustBePositive} = 15e<span class="org-type">-</span>3 args.FHa (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e<span class="org-type">-</span>3
args.MHb (1,1) double {mustBeNumeric, mustBePositive} = 15e<span class="org-type">-</span>3 args.MHb (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e<span class="org-type">-</span>3
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org66dd074" class="outline-4"> <div id="outline-container-org43039c1" class="outline-4">
<h4 id="org66dd074">Position of the Cube</h4> <h4 id="org43039c1">Position of the Cube</h4>
<div class="outline-text-4" id="text-org66dd074"> <div class="outline-text-4" id="text-org43039c1">
<p> <p>
We define the useful points of the cube with respect to the Cube&rsquo;s center. We define the useful points of the cube with respect to the Cube&rsquo;s center.
\({}^{C}C\) are the 6 vertices of the cubes expressed in a frame {C} which is \({}^{C}C\) are the 6 vertices of the cubes expressed in a frame {C} which is
@ -993,9 +947,9 @@ CCm = [Cc(<span class="org-type">:</span>,2), Cc(<span class="org-type">:</span>
</div> </div>
</div> </div>
<div id="outline-container-org388f35d" class="outline-4"> <div id="outline-container-orga18e804" class="outline-4">
<h4 id="org388f35d">Compute the pose</h4> <h4 id="orga18e804">Compute the pose</h4>
<div class="outline-text-4" id="text-org388f35d"> <div class="outline-text-4" id="text-orga18e804">
<p> <p>
We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)). We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)).
</p> </p>
@ -1028,7 +982,7 @@ stewart.Mb = CCf <span class="org-type">+</span> [0; 0; args.FOc<span class="org
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-06 jeu. 17:29</p> <p class="date">Created: 2020-02-06 jeu. 18:22</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -21,7 +21,7 @@
#+PROPERTY: header-args:matlab+ :output-dir figs #+PROPERTY: header-args:matlab+ :output-dir figs
:END: :END:
* Introduction :ignore: * Introduction :ignore:
The discovery of the Cubic configuration is done in cite:geng94_six_degree_of_freed_activ. The discovery of the Cubic configuration is done in cite:geng94_six_degree_of_freed_activ.
Further analysis is conducted in Further analysis is conducted in
@ -37,7 +37,8 @@ The goal is to study the benefits of using a cubic configuration:
- No coupling between the actuators? - No coupling between the actuators?
- Is the center of the cube an important point? - Is the center of the cube an important point?
* Matlab Init :noexport:ignore: * Configuration Analysis - Stiffness Matrix
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@ -50,84 +51,57 @@ The goal is to study the benefits of using a cubic configuration:
simulinkproject('./'); simulinkproject('./');
#+end_src #+end_src
* TODO Configuration Analysis - Stiffness Matrix
** Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center ** Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center
We create a cubic Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot). 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. The Jacobian matrix is estimated at the location of the center of the cube.
#+begin_src matlab
stewart = initializeFramesPositions('H', 100e-3, 'MO_B', -50e-3);
stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
stewart = computeJacobian(stewart);
#+end_src
#+name: fig:3d-cubic-stewart-aligned #+name: fig:3d-cubic-stewart-aligned
#+caption: Centered cubic configuration #+caption: Centered cubic configuration
[[file:./figs/3d-cubic-stewart-aligned.png]] [[file:./figs/3d-cubic-stewart-aligned.png]]
#+begin_src matlab :results silent #+begin_src matlab :exports results :results value table replace :tangle no
opts = struct(... data2orgtable(stewart.K, {}, {}, ' %.2g ');
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 200/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -50], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -50] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
save('./mat/stewart.mat', 'stewart');
#+end_src
#+begin_src matlab :results none :exports code
K = stewart.Jf'*stewart.Jf;
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data, {}, {}, ' %.2g ');
#+end_src #+end_src
#+RESULTS: #+RESULTS:
| 2 | 1.9e-18 | -2.3e-17 | 1.8e-18 | 5.5e-17 | -1.5e-17 | | 2 | 0 | -2.5e-16 | 0 | 2.1e-17 | 0 |
| 1.9e-18 | 2 | 6.8e-18 | -6.1e-17 | -1.6e-18 | 4.8e-18 | | 0 | 2 | 0 | -7.8e-19 | 0 | 0 |
| -2.3e-17 | 6.8e-18 | 2 | -6.7e-18 | 4.9e-18 | 5.3e-19 | | -2.5e-16 | 0 | 2 | -2.4e-18 | -1.4e-17 | 0 |
| 1.8e-18 | -6.1e-17 | -6.7e-18 | 0.0067 | -2.3e-20 | -6.1e-20 | | 0 | -7.8e-19 | -2.4e-18 | 0.015 | -4.3e-19 | 1.7e-18 |
| 5.5e-17 | -1.6e-18 | 4.9e-18 | -2.3e-20 | 0.0067 | 1e-18 | | 1.8e-17 | 0 | -1.1e-17 | 0 | 0.015 | 0 |
| -1.5e-17 | 4.8e-18 | 5.3e-19 | -6.1e-20 | 1e-18 | 0.027 | | 6.6e-18 | -3.3e-18 | 0 | 1.7e-18 | 0 | 0.06 |
** Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center ** Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]). 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. The Jacobian matrix is not estimated at the location of the center of the cube.
#+begin_src matlab :results silent #+begin_src matlab
opts = struct(... stewart = initializeFramesPositions('H', 100e-3, 'MO_B', 0);
'H_tot', 100, ... % Total height of the Hexapod [mm] stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
'L', 200/sqrt(3), ... % Size of the Cube [mm] stewart = computeJointsPose(stewart);
'H', 60, ... % Height between base joints and platform joints [mm] stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm] stewart = computeJacobian(stewart);
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, 0], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, 0] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src #+end_src
#+begin_src matlab :results none :exports code #+begin_src matlab :exports results :results value table replace :tangle no
K = stewart.Jf'*stewart.Jf; data2orgtable(stewart.K, {}, {}, ' %.2g ');
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src #+end_src
#+RESULTS: #+RESULTS:
| 2 | 1.9e-18 | -2.3e-17 | 1.5e-18 | -0.1 | -1.5e-17 | | 2 | 0 | -2.5e-16 | 1.4e-17 | -0.1 | 0 |
| 1.9e-18 | 2 | 6.8e-18 | 0.1 | -1.6e-18 | 4.8e-18 | | 0 | 2 | 0 | 0.1 | 0 | 0 |
| -2.3e-17 | 6.8e-18 | 2 | -5.1e-19 | -5.5e-18 | 5.3e-19 | | -2.5e-16 | 0 | 2 | 3.4e-18 | -1.4e-17 | 0 |
| 1.5e-18 | 0.1 | -5.1e-19 | 0.012 | -3e-19 | 3.1e-19 | | 1.4e-17 | 0.1 | 3.4e-18 | 0.02 | 1.1e-20 | 3.4e-18 |
| -0.1 | -1.6e-18 | -5.5e-18 | -3e-19 | 0.012 | 1.9e-18 | | -0.1 | 0 | -1.4e-17 | 1.4e-19 | 0.02 | -1.7e-18 |
| -1.5e-17 | 4.8e-18 | 5.3e-19 | 3.1e-19 | 1.9e-18 | 0.027 | | 6.6e-18 | -3.3e-18 | 0 | 3.6e-18 | -1.7e-18 | 0.06 |
** Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center ** 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:3d-cubic-stewart-misaligned]]).
@ -137,42 +111,25 @@ The Jacobian is estimated at the cube center.
#+caption: Not centered cubic configuration #+caption: Not centered cubic configuration
[[file:./figs/3d-cubic-stewart-misaligned.png]] [[file:./figs/3d-cubic-stewart-misaligned.png]]
The center of the cube is at $z = 110$. #+begin_src matlab
The Stewart platform is from $z = H_0 = 75$ to $z = H_0 + H_{tot} = 175$. stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -40e-3);
The center height of the Stewart platform is then at $z = \frac{175-75}{2} = 50$. stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
The center of the cube from the top platform is at $z = 110 - 175 = -65$. stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
#+begin_src matlab :results silent stewart = computeJacobian(stewart);
opts = struct(...
'H_tot', 100, ... % Total height of the Hexapod [mm]
'L', 220/sqrt(3), ... % Size of the Cube [mm]
'H', 60, ... % Height between base joints and platform joints [mm]
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm]
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -65], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -65] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src #+end_src
#+begin_src matlab :results none :exports code #+begin_src matlab :exports results :results value table replace :tangle no
K = stewart.Jf'*stewart.Jf; data2orgtable(stewart.K, {}, {}, ' %.2g ');
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src #+end_src
#+RESULTS: #+RESULTS:
| 2 | -1.8e-17 | 2.6e-17 | 3.3e-18 | 0.04 | 1.7e-19 | | 2 | 0 | -1.5e-16 | 0 | 0.04 | 0 |
| -1.8e-17 | 2 | 1.9e-16 | -0.04 | 2.2e-19 | -5.3e-19 | | 0 | 2 | 0 | -0.04 | 0 | -2.8e-17 |
| 2.6e-17 | 1.9e-16 | 2 | -8.9e-18 | 6.5e-19 | -5.8e-19 | | -1.5e-16 | 0 | 2 | 1.2e-18 | -1e-17 | 0 |
| 3.3e-18 | -0.04 | -8.9e-18 | 0.0089 | -9.3e-20 | 9.8e-20 | | 0 | -0.04 | 1.2e-18 | 0.016 | 0 | 8.7e-19 |
| 0.04 | 2.2e-19 | 6.5e-19 | -9.3e-20 | 0.0089 | -2.4e-18 | | 0.04 | 0 | -6.2e-18 | -1.1e-19 | 0.016 | 8.7e-19 |
| 1.7e-19 | -5.3e-19 | -5.8e-19 | 9.8e-20 | -2.4e-18 | 0.032 | | -3.7e-19 | -2.5e-17 | 0 | 1.2e-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. We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
@ -185,47 +142,71 @@ 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 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$. The center of the cube from the top platform is at $z = 110 - 175 = -65$.
#+begin_src matlab :results silent #+begin_src matlab
opts = struct(... stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -30e-3);
'H_tot', 100, ... % Total height of the Hexapod [mm] stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
'L', 220/sqrt(3), ... % Size of the Cube [mm] stewart = computeJointsPose(stewart);
'H', 60, ... % Height between base joints and platform joints [mm] stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm] stewart = computeJacobian(stewart);
);
stewart = initializeCubicConfiguration(opts);
opts = struct(...
'Jd_pos', [0, 0, -60], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm]
'Jf_pos', [0, 0, -60] ... % Position of the Jacobian for force location from the top of the mobile platform [mm]
);
stewart = computeGeometricalProperties(stewart, opts);
#+end_src #+end_src
#+begin_src matlab :results none :exports code #+begin_src matlab :exports results :results value table replace :tangle no
K = stewart.Jf'*stewart.Jf; data2orgtable(stewart.K, {}, {}, ' %.2g ');
#+end_src
#+begin_src matlab :results value table :exports results
data = K;
data2orgtable(data', {}, {}, ' %.2g ');
#+end_src #+end_src
#+RESULTS: #+RESULTS:
| 2 | -1.8e-17 | 2.6e-17 | -5.7e-19 | 0.03 | 1.7e-19 | | 2 | 0 | -1.7e-16 | 0 | 4.9e-17 | 0 |
| -1.8e-17 | 2 | 1.9e-16 | -0.03 | 2.2e-19 | -5.3e-19 | | 0 | 2 | 0 | -2.2e-17 | 0 | 2.8e-17 |
| 2.6e-17 | 1.9e-16 | 2 | -1.5e-17 | 6.5e-19 | -5.8e-19 | | -1.7e-16 | 0 | 2 | 1.1e-18 | -1.4e-17 | 1.4e-17 |
| -5.7e-19 | -0.03 | -1.5e-17 | 0.0085 | 4.9e-20 | 1.7e-19 | | 0 | -2.2e-17 | 1.1e-18 | 0.015 | 0 | 3.5e-18 |
| 0.03 | 2.2e-19 | 6.5e-19 | 4.9e-20 | 0.0085 | -1.1e-18 | | 4.4e-17 | 0 | -1.4e-17 | -5.7e-20 | 0.015 | -8.7e-19 |
| 1.7e-19 | -5.3e-19 | -5.8e-19 | 1.7e-19 | -1.1e-18 | 0.032 | | 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. We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, and the Stiffness matrix is diagonal.
** Conclusion ** Conclusion
#+begin_important #+begin_important
- The cubic configuration permits to have $k_x = k_y = k_z$ and $k_{\theta\x} = k_{\theta_y}$ - The cubic configuration permits to have $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$
- The stiffness matrix $K$ is diagonal for the cubic configuration if the Stewart platform and the cube are centered *and* the Jacobian is estimated at the cube center - The stiffness matrix $K$ is diagonal for the cubic configuration if the Jacobian is estimated at the cube center.
#+end_important #+end_important
* TODO Cubic size analysis ** Having Cube's center above the top platform
Let's say we want to have a decouple dynamics 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.
#+begin_src matlab
stewart = initializeFramesPositions('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);
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable(stewart.K, {}, {}, ' %.2g ');
#+end_src
#+RESULTS:
| 2 | 0 | -4.6e-16 | 0 | 4e-17 | 0 |
| 0 | 2 | 0 | -4.8e-17 | 0 | -3.5e-17 |
| -4.6e-16 | 0 | 2 | 1.5e-20 | 4e-17 | 0 |
| 0 | -4.8e-17 | 1.5e-20 | 0.00034 | 6.8e-21 | 4.2e-19 |
| 4e-17 | 0 | 4e-17 | -3e-21 | 0.00034 | -2.7e-20 |
| -1.7e-19 | -3.6e-17 | 0 | 4.2e-19 | -2.7e-20 | 0.0014 |
We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal.
* TODO Cubic size analysis :noexport:
We here study the effect of the size of the cube used for the Stewart configuration. We here study the effect of the size of the cube used for the Stewart configuration.
We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform. We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform.
@ -260,7 +241,6 @@ We only vary the size of the cube.
end end
#+end_src #+end_src
The Stiffness matrix is computed for all generated Stewart platforms. The Stiffness matrix is computed for all generated Stewart platforms.
#+begin_src matlab :results none :exports code #+begin_src matlab :results none :exports code
Ks = zeros(6, 6, length(H_cube)); Ks = zeros(6, 6, length(H_cube));
@ -355,8 +335,8 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here
stewart stewart
args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e-3
args.FOc (1,1) double {mustBeNumeric} = 50e-3 args.FOc (1,1) double {mustBeNumeric} = 50e-3
args.FHa (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 args.FHa (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3
args.MHb (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 args.MHb (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3
end end
#+end_src #+end_src

View File

@ -21,8 +21,8 @@ arguments
stewart stewart
args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e-3
args.FOc (1,1) double {mustBeNumeric} = 50e-3 args.FOc (1,1) double {mustBeNumeric} = 50e-3
args.FHa (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 args.FHa (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3
args.MHb (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 args.MHb (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3
end end
sx = [ 2; -1; -1]; sx = [ 2; -1; -1];