stewart-simscape/docs/cubic-configuration.html

1945 lines
85 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-02-13 jeu. 15:01 -->
<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>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<script src="./js/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/jquery.stickytableheaders.min.js"></script>
<script src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Cubic configuration for the Stewart Platform</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org3d18192">1. Stiffness Matrix for the Cubic configuration</a>
<ul>
<li><a href="#orgf6f7ad2">1.1. Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center</a></li>
<li><a href="#orga88e79a">1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</a></li>
<li><a href="#orge02ec88">1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</a></li>
<li><a href="#org43fd7e4">1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</a></li>
<li><a href="#org510da86">1.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgd70418b">2. Configuration with the Cube&rsquo;s center above the mobile platform</a>
<ul>
<li><a href="#org8afa645">2.1. Having Cube&rsquo;s center above the top platform</a></li>
<li><a href="#org949a403">2.2. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgcc4ecce">3. Cubic size analysis</a>
<ul>
<li><a href="#org0029d8c">3.1. Analysis</a></li>
<li><a href="#orgfc7135f">3.2. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgf09da67">4. Dynamic Coupling in the Cartesian Frame</a>
<ul>
<li><a href="#org5fe01ec">4.1. Cube&rsquo;s center at the Center of Mass of the mobile platform</a></li>
<li><a href="#org4cb2a36">4.2. Cube&rsquo;s center not coincident with the Mass of the Mobile platform</a></li>
<li><a href="#org2e09bcb">4.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org8f26dc0">5. Dynamic Coupling between actuators and sensors of each strut</a>
<ul>
<li><a href="#org6e391c9">5.1. Coupling between the actuators and sensors - Cubic Architecture</a></li>
<li><a href="#orgafd808d">5.2. Coupling between the actuators and sensors - Non-Cubic Architecture</a></li>
<li><a href="#org8c1a310">5.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org3044455">6. Functions</a>
<ul>
<li><a href="#org56504f1">6.1. <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</a>
<ul>
<li><a href="#orga5a9ba8">Function description</a></li>
<li><a href="#org3253792">Documentation</a></li>
<li><a href="#org154b5fb">Optional Parameters</a></li>
<li><a href="#orgbb480a6">Check the <code>stewart</code> structure elements</a></li>
<li><a href="#org771c630">Position of the Cube</a></li>
<li><a href="#org3a2f468">Compute the pose</a></li>
<li><a href="#org8c1af4f">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<p>
The Cubic configuration for the Stewart platform was first proposed in <a class='org-ref-reference' href="#geng94_six_degree_of_freed_activ">geng94_six_degree_of_freed_activ</a>.
This configuration is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube.
This configuration 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 offers the following advantages:
</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>
In this document, the cubic architecture is analyzed:
</p>
<ul class="org-ul">
<li>In section <a href="#orgda0ee50">1</a>, we study the link between the Stiffness matrix and the cubic architecture and we find what are the conditions to obtain a diagonal stiffness matrix</li>
<li>In section <a href="#orgb73265d">2</a>, we study cubic configurations where the cube&rsquo;s center is located above the mobile platform</li>
<li>In section <a href="#org348ec7d">3</a>, we study the effect of the cube&rsquo;s size on the Stewart platform properties</li>
<li>In section <a href="#org00d3816">4</a>, we study the dynamic coupling of the cubic configuration in the cartesian frame</li>
<li>In section <a href="#org5b5c8a9">5</a>, we study the dynamic coupling of the cubic configuration from actuators to sensors of each strut</li>
<li>In section <a href="#org28ba607">6</a>, function related to the cubic configuration are defined. To generate and study the Stewart platform with a Cubic configuration, the Matlab function <code>generateCubicConfiguration</code> is used (described <a href="#orga8311d3">here</a>).</li>
</ul>
<div id="outline-container-org3d18192" class="outline-2">
<h2 id="org3d18192"><span class="section-number-2">1</span> Stiffness Matrix for the Cubic configuration</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="orgda0ee50"></a>
</p>
<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>
<p>
We here study what makes the Stiffness matrix diagonal when using a cubic configuration.
</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">
<p>
We create a cubic Stewart platform (figure <a href="#orgaba20c8">1</a>) in such a way that the center of the cube (black star) 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.
</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>, 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">'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>
</div>
<div id="orgaba20c8" class="figure">
<p><img src="figs/cubic_conf_centered_J_center.png" alt="cubic_conf_centered_J_center.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center (<a href="./figs/cubic_conf_centered_J_center.png">png</a>, <a href="./figs/cubic_conf_centered_J_center.pdf">pdf</a>)</p>
</div>
<table id="org4baf591" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Stiffness Matrix</caption>
<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">-2.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2.1e-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.8e-19</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-2.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">-2.4e-18</td>
<td class="org-right">-1.4e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-7.8e-19</td>
<td class="org-right">-2.4e-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>
</tr>
<tr>
<td class="org-right">1.8e-17</td>
<td class="org-right">0</td>
<td class="org-right">-1.1e-17</td>
<td class="org-right">0</td>
<td class="org-right">0.015</td>
<td class="org-right">0</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">1.7e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.06</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orga88e79a" class="outline-3">
<h3 id="orga88e79a"><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">
<p>
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure <a href="#org47f8142">2</a>).
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>, 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">'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>
</div>
<div id="org47f8142" class="figure">
<p><img src="figs/cubic_conf_centered_J_not_center.png" alt="cubic_conf_centered_J_not_center.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center (<a href="./figs/cubic_conf_centered_J_not_center.png">png</a>, <a href="./figs/cubic_conf_centered_J_not_center.pdf">pdf</a>)</p>
</div>
<table id="org5cc2020" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Stiffness Matrix</caption>
<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">-2.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">-0.14</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">0.14</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-2.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</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">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.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>
</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">8.9e-19</td>
<td class="org-right">0</td>
<td class="org-right">0.06</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orge02ec88" class="outline-3">
<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="#org0235d3a">3</a>).
The Jacobian is estimated at the cube center.
</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>, 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">'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>
</div>
<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 3: </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 id="org6b3d8b1" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Stiffness Matrix</caption>
<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.7e-16</td>
<td class="org-right">0</td>
<td class="org-right">4.9e-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">2.8e-17</td>
</tr>
<tr>
<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.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">-2.2e-17</td>
<td class="org-right">1.1e-18</td>
<td class="org-right">0.015</td>
<td class="org-right">0</td>
<td class="org-right">3.5e-18</td>
</tr>
<tr>
<td class="org-right">4.4e-17</td>
<td class="org-right">0</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">-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">3.5e-18</td>
<td class="org-right">-8.7e-19</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}\), but the Stiffness matrix is not diagonal.
</p>
</div>
</div>
<div id="outline-container-org43fd7e4" class="outline-3">
<h3 id="org43fd7e4"><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">
<p>
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center.
The Jacobian is estimated at the center of the Stewart platform.
</p>
<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">
<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>, 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">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
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>
<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 4: </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 id="org846d51c" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Stiffness Matrix</caption>
<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.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">0.02</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">-0.02</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">1.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</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">-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">-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">5.9e-18</td>
<td class="org-right">-7.5e-18</td>
<td class="org-right">0</td>
<td class="org-right">3.5e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.14</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org510da86" class="outline-3">
<h3 id="org510da86"><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>
</ul>
</div>
</div>
</div>
</div>
<div id="outline-container-orgd70418b" class="outline-2">
<h2 id="orgd70418b"><span class="section-number-2">2</span> Configuration with the Cube&rsquo;s center above the mobile platform</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgb73265d"></a>
</p>
<p>
We saw in section <a href="#orgda0ee50">1</a> that in order to have a diagonal stiffness matrix, we need the cube&rsquo;s center to be located at frames \(\{A\}\) and \(\{B\}\).
Or, we usually want to have \(\{A\}\) and \(\{B\}\) located above the top platform where forces are applied and where displacements are expressed.
</p>
<p>
We here see if the cubic configuration can provide a diagonal stiffness matrix when \(\{A\}\) and \(\{B\}\) are above the mobile platform.
</p>
</div>
<div id="outline-container-org8afa645" class="outline-3">
<h3 id="org8afa645"><span class="section-number-3">2.1</span> Having Cube&rsquo;s center above the top platform</h3>
<div class="outline-text-3" id="text-2-1">
<p>
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.
</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>Small Cube Size in Figure <a href="#org105635f">5</a></li>
<li>Medium Cube Size in Figure <a href="#org264ab9c">6</a></li>
<li>Large Cube Size in Figure <a href="#org52254fe">7</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">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 5: </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 id="org91f89e4" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> Stiffness Matrix</caption>
<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">-2.8e-16</td>
<td class="org-right">0</td>
<td class="org-right">2.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">-2.3e-17</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-2.8e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</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">-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">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>
</tr>
<tr>
<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">6.2e-19</td>
<td class="org-right">0</td>
<td class="org-right">0.0096</td>
</tr>
</tbody>
</table>
<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 6: </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 id="orgcf84781" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 6:</span> Stiffness Matrix</caption>
<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 7: </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 id="org02f7789" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 7:</span> Stiffness Matrix</caption>
<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 id="outline-container-org949a403" class="outline-3">
<h3 id="org949a403"><span class="section-number-3">2.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-2">
<div class="important">
<p>
We found that we can have a diagonal stiffness matrix using the cubic architecture when \(\{A\}\) and \(\{B\}\) are located above the top platform.
Depending on the cube&rsquo;s size, we obtain 3 different configurations.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgcc4ecce" class="outline-2">
<h2 id="orgcc4ecce"><span class="section-number-2">3</span> Cubic size analysis</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org348ec7d"></a>
</p>
<p>
We here study the effect of the size of the cube used for the Stewart Cubic configuration.
</p>
<p>
We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform and the frames \(\{A\}\) and \(\{B\}\) are also taken at the center of the cube.
</p>
<p>
We only vary the size of the cube.
</p>
</div>
<div id="outline-container-org0029d8c" class="outline-3">
<h3 id="org0029d8c"><span class="section-number-3">3.1</span> Analysis</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We initialize the wanted cube&rsquo;s size.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Hcs = 1e<span class="org-type">-</span>3<span class="org-type">*</span>[250<span class="org-type">:</span>20<span class="org-type">:</span>350]; <span class="org-comment">% Heights for the Cube [m]</span>
Ks = zeros(6, 6, length(Hcs));
</pre>
</div>
<p>
The height of the Stewart platform is fixed:
</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>
</pre>
</div>
<p>
The frames \(\{A\}\) and \(\{B\}\) are positioned at the Stewart platform center as well as the cube&rsquo;s center:
</p>
<div class="org-src-container">
<pre class="src src-matlab">MO_B = <span class="org-type">-</span>50e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [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>
<p>
We find that for all the cube&rsquo;s size, \(k_x = k_y = k_z = k\) where \(k\) is the strut stiffness.
We also find that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) are varying with the cube&rsquo;s size (figure <a href="#orgf5b4a80">8</a>).
</p>
<div id="orgf5b4a80" class="figure">
<p><img src="figs/stiffness_cube_size.png" alt="stiffness_cube_size.png" />
</p>
<p><span class="figure-number">Figure 8: </span>\(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) function of the size of the cube</p>
</div>
</div>
</div>
<div id="outline-container-orgfc7135f" class="outline-3">
<h3 id="orgfc7135f"><span class="section-number-3">3.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-2">
<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.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgf09da67" class="outline-2">
<h2 id="orgf09da67"><span class="section-number-2">4</span> Dynamic Coupling in the Cartesian Frame</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org00d3816"></a>
</p>
<p>
In this section, we study the dynamics of the platform in the cartesian frame.
</p>
<p>
We here suppose that there is one relative motion sensor in each strut (\(\delta\bm{\mathcal{L}}\) is measured) and we would like to control the position of the top platform pose \(\delta \bm{\mathcal{X}}\).
</p>
<p>
Thanks to the Jacobian matrix, we can use the &ldquo;architecture&rdquo; shown in Figure <a href="#org76f24a0">9</a> to obtain the dynamics of the system from forces/torques applied by the actuators on the top platform to translations/rotations of the top platform.
</p>
<div class="org-src-container">
<pre class="src src-latex"><span class="org-font-latex-sedate"><span class="org-keyword">\begin</span></span>{<span class="org-function-name">tikzpicture</span>}
<span class="org-font-latex-sedate">\node</span>[block] (Jt) at (0, 0) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\bm</span></span><span class="org-font-latex-math">{J}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">^</span></span><span class="org-font-latex-math">{-T}$</span>};
<span class="org-font-latex-sedate">\node</span>[block, right= of Jt] (G) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\bm</span></span><span class="org-font-latex-math">{G}$</span>};
<span class="org-font-latex-sedate">\node</span>[block, right= of G] (J) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\bm</span></span><span class="org-font-latex-math">{J}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">^</span></span><span class="org-font-latex-math">{-1}$</span>};
<span class="org-font-latex-sedate">\draw</span>[-&gt;] (<span class="org-font-latex-math">$(Jt.west)+(-0.8, 0)$</span>) -- (Jt.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\bm</span></span><span class="org-font-latex-math">{</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\mathcal</span></span><span class="org-font-latex-math">{F}}$</span>};
<span class="org-font-latex-sedate">\draw</span>[-&gt;] (Jt.east) -- (G.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\bm</span></span><span class="org-font-latex-math">{</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\tau</span></span><span class="org-font-latex-math">}$</span>};
<span class="org-font-latex-sedate">\draw</span>[-&gt;] (G.east) -- (J.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\delta\bm</span></span><span class="org-font-latex-math">{</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\mathcal</span></span><span class="org-font-latex-math">{L}}$</span>};
<span class="org-font-latex-sedate">\draw</span>[-&gt;] (J.east) -- ++(0.8, 0) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\delta\bm</span></span><span class="org-font-latex-math">{</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\mathcal</span></span><span class="org-font-latex-math">{X}}$</span>};
<span class="org-font-latex-sedate"><span class="org-keyword">\end</span></span>{<span class="org-function-name">tikzpicture</span>}
</pre>
</div>
<div id="org76f24a0" class="figure">
<p><img src="figs/local_to_cartesian_coordinates.png" alt="local_to_cartesian_coordinates.png" />
</p>
<p><span class="figure-number">Figure 9: </span>From Strut coordinate to Cartesian coordinate using the Jacobian matrix</p>
</div>
<p>
We here study the dynamics from \(\bm{\mathcal{F}}\) to \(\delta\bm{\mathcal{X}}\).
</p>
<p>
One has to note that when considering the static behavior:
\[ \bm{G}(s = 0) = \begin{bmatrix}
1/k_1 & & 0 \\
& \ddots & 0 \\
0 & & 1/k_6
\end{bmatrix}\]
</p>
<p>
And thus:
\[ \frac{\delta\bm{\mathcal{X}}}{\bm{\mathcal{F}}}(s = 0) = \bm{J}^{-1} \bm{G}(s = 0) \bm{J}^{-T} = \bm{K}^{-1} = \bm{C} \]
</p>
<p>
We conclude that the <b>static</b> behavior of the platform depends on the stiffness matrix.
For the cubic configuration, we have a diagonal stiffness matrix is the frames \(\{A\}\) and \(\{B\}\) are coincident with the cube&rsquo;s center.
</p>
</div>
<div id="outline-container-org5fe01ec" class="outline-3">
<h3 id="org5fe01ec"><span class="section-number-3">4.1</span> Cube&rsquo;s center at the Center of Mass of the mobile platform</h3>
<div class="outline-text-3" id="text-4-1">
<p>
Let&rsquo;s create a Cubic Stewart Platform where the <b>Center of Mass of the mobile platform is located at the center of the cube</b>.
</p>
<p>
We define the size of the Stewart platform and the position of frames \(\{A\}\) and \(\{B\}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 200e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>10e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
</pre>
</div>
<p>
Now, we set the cube&rsquo;s parameters such that the center of the cube is coincident with \(\{A\}\) and \(\{B\}\).
</p>
<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 class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
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>, 25e<span class="org-type">-</span>3, <span class="org-string">'MHb'</span>, 25e<span class="org-type">-</span>3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, 1e6<span class="org-type">*</span>ones(6,1), <span class="org-string">'C'</span>, 1e1<span class="org-type">*</span>ones(6,1));
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical'</span>);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
</pre>
</div>
<p>
Now we set the geometry and mass of the mobile platform such that its center of mass is coincident with \(\{A\}\) and \(\{B\}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_F.Fa)), ...
<span class="org-string">'Mpm'</span>, 10, ...
<span class="org-string">'Mph'</span>, 20e<span class="org-type">-</span>3, ...
<span class="org-string">'Mpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_M.Mb)));
</pre>
</div>
<p>
And we set small mass for the struts.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalStruts(stewart, <span class="org-string">'Fsm'</span>, 1e<span class="org-type">-</span>3, <span class="org-string">'Msm'</span>, 1e<span class="org-type">-</span>3);
stewart = initializeInertialSensor(stewart);
</pre>
</div>
<p>
No flexibility below the Stewart platform and no payload.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<p>
The obtain geometry is shown in figure <a href="#orgc92a65b">10</a>.
</p>
<div id="orgc92a65b" class="figure">
<p><img src="figs/stewart_cubic_conf_decouple_dynamics.png" alt="stewart_cubic_conf_decouple_dynamics.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Geometry used for the simulations - The cube&rsquo;s center, the frames \(\{A\}\) and \(\{B\}\) and the Center of mass of the mobile platform are coincident (<a href="./figs/stewart_cubic_conf_decouple_dynamics.png">png</a>, <a href="./figs/stewart_cubic_conf_decouple_dynamics.pdf">pdf</a>)</p>
</div>
<p>
We now identify the dynamics from forces applied in each strut \(\bm{\tau}\) to the displacement of each strut \(d \bm{\mathcal{L}}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">open(<span class="org-string">'stewart_platform_model.slx'</span>)
<span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force Inputs [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Stewart Platform'</span>], 1, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'dLm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Displacement Outputs [m]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, options);
G.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
G.OutputName = {<span class="org-string">'Dm1'</span>, <span class="org-string">'Dm2'</span>, <span class="org-string">'Dm3'</span>, <span class="org-string">'Dm4'</span>, <span class="org-string">'Dm5'</span>, <span class="org-string">'Dm6'</span>};
</pre>
</div>
<p>
Now, thanks to the Jacobian (Figure <a href="#org76f24a0">9</a>), we compute the transfer function from \(\bm{\mathcal{F}}\) to \(\bm{\mathcal{X}}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Gc = inv(stewart.kinematics.J)<span class="org-type">*</span>G<span class="org-type">*</span>inv(stewart.kinematics.J<span class="org-type">'</span>);
Gc.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
Gc.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
</pre>
</div>
<p>
The obtain dynamics \(\bm{G}_{c}(s) = \bm{J}^{-T} \bm{G}(s) \bm{J}^{-1}\) is shown in Figure <a href="#orgcb3ac4d">11</a>.
</p>
<div id="orgcb3ac4d" class="figure">
<p><img src="figs/stewart_cubic_decoupled_dynamics_cartesian.png" alt="stewart_cubic_decoupled_dynamics_cartesian.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Dynamics from \(\bm{\mathcal{F}}\) to \(\bm{\mathcal{X}}\) (<a href="./figs/stewart_cubic_decoupled_dynamics_cartesian.png">png</a>, <a href="./figs/stewart_cubic_decoupled_dynamics_cartesian.pdf">pdf</a>)</p>
</div>
<div class="important">
<p>
The dynamics is well decoupled at all frequencies.
</p>
<p>
We have the same dynamics for:
</p>
<ul class="org-ul">
<li>\(D_x/F_x\), \(D_y/F_y\) and \(D_z/F_z\)</li>
<li>\(R_x/M_x\) and \(D_y/F_y\)</li>
</ul>
<p>
The Dynamics from \(F_i\) to \(D_i\) is just a 1-dof mass-spring-damper system.
</p>
<p>
This is because the Mass, Damping and Stiffness matrices are all diagonal.
</p>
</div>
</div>
</div>
<div id="outline-container-org4cb2a36" class="outline-3">
<h3 id="org4cb2a36"><span class="section-number-3">4.2</span> Cube&rsquo;s center not coincident with the Mass of the Mobile platform</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Let&rsquo;s create a Stewart platform with a cubic architecture where the cube&rsquo;s center is at the center of the Stewart platform.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 200e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>100e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
</pre>
</div>
<p>
Now, we set the cube&rsquo;s parameters such that the center of the cube is coincident with \(\{A\}\) and \(\{B\}\).
</p>
<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 class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
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>, 25e<span class="org-type">-</span>3, <span class="org-string">'MHb'</span>, 25e<span class="org-type">-</span>3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, 1e6<span class="org-type">*</span>ones(6,1), <span class="org-string">'C'</span>, 1e1<span class="org-type">*</span>ones(6,1));
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical'</span>);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
</pre>
</div>
<p>
However, the Center of Mass of the mobile platform is <b>not</b> located at the cube&rsquo;s center.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_F.Fa)), ...
<span class="org-string">'Mpm'</span>, 10, ...
<span class="org-string">'Mph'</span>, 20e<span class="org-type">-</span>3, ...
<span class="org-string">'Mpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_M.Mb)));
</pre>
</div>
<p>
And we set small mass for the struts.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalStruts(stewart, <span class="org-string">'Fsm'</span>, 1e<span class="org-type">-</span>3, <span class="org-string">'Msm'</span>, 1e<span class="org-type">-</span>3);
stewart = initializeInertialSensor(stewart);
</pre>
</div>
<p>
No flexibility below the Stewart platform and no payload.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<p>
The obtain geometry is shown in figure <a href="#orgfce7805">12</a>.
</p>
<div id="orgfce7805" class="figure">
<p><img src="figs/stewart_cubic_conf_mass_above.png" alt="stewart_cubic_conf_mass_above.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Geometry used for the simulations - The cube&rsquo;s center is coincident with the frames \(\{A\}\) and \(\{B\}\) but not with the Center of mass of the mobile platform (<a href="./figs/stewart_cubic_conf_mass_above.png">png</a>, <a href="./figs/stewart_cubic_conf_mass_above.pdf">pdf</a>)</p>
</div>
<p>
We now identify the dynamics from forces applied in each strut \(\bm{\tau}\) to the displacement of each strut \(d \bm{\mathcal{L}}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">open(<span class="org-string">'stewart_platform_model.slx'</span>)
<span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force Inputs [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Stewart Platform'</span>], 1, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'dLm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Displacement Outputs [m]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, options);
G.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
G.OutputName = {<span class="org-string">'Dm1'</span>, <span class="org-string">'Dm2'</span>, <span class="org-string">'Dm3'</span>, <span class="org-string">'Dm4'</span>, <span class="org-string">'Dm5'</span>, <span class="org-string">'Dm6'</span>};
</pre>
</div>
<p>
And we use the Jacobian to compute the transfer function from \(\bm{\mathcal{F}}\) to \(\bm{\mathcal{X}}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Gc = inv(stewart.kinematics.J)<span class="org-type">*</span>G<span class="org-type">*</span>inv(stewart.kinematics.J<span class="org-type">'</span>);
Gc.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
Gc.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
</pre>
</div>
<p>
The obtain dynamics \(\bm{G}_{c}(s) = \bm{J}^{-T} \bm{G}(s) \bm{J}^{-1}\) is shown in Figure <a href="#org7a04d45">13</a>.
</p>
<div id="org7a04d45" class="figure">
<p><img src="figs/stewart_conf_coupling_mass_matrix.png" alt="stewart_conf_coupling_mass_matrix.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Obtained Dynamics from \(\bm{\mathcal{F}}\) to \(\bm{\mathcal{X}}\) (<a href="./figs/stewart_conf_coupling_mass_matrix.png">png</a>, <a href="./figs/stewart_conf_coupling_mass_matrix.pdf">pdf</a>)</p>
</div>
<div class="important">
<p>
The system is decoupled at low frequency (the Stiffness matrix being diagonal), but it is <b>not</b> decoupled at all frequencies.
</p>
<p>
This was expected as the mass matrix is not diagonal (the Center of Mass of the mobile platform not being coincident with the frame \(\{B\}\)).
</p>
</div>
</div>
</div>
<div id="outline-container-org2e09bcb" class="outline-3">
<h3 id="org2e09bcb"><span class="section-number-3">4.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-3">
<div class="important">
<p>
Some conclusions can be drawn from the above analysis:
</p>
<ul class="org-ul">
<li>Static Decoupling &lt;=&gt; Diagonal Stiffness matrix &lt;=&gt; {A} and {B} at the cube&rsquo;s center</li>
<li>Dynamic Decoupling &lt;=&gt; Static Decoupling + CoM of mobile platform coincident with {A} and {B}.</li>
</ul>
</div>
</div>
</div>
</div>
<div id="outline-container-org8f26dc0" class="outline-2">
<h2 id="org8f26dc0"><span class="section-number-2">5</span> Dynamic Coupling between actuators and sensors of each strut</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="org5b5c8a9"></a>
</p>
<p>
From <a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>, the cubic configuration &ldquo;<i>minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other)</i>&rdquo;.
</p>
<p>
In this section, we wish to study such properties of the cubic architecture.
</p>
<p>
We will compare the transfer function from sensors to actuators in each strut for a cubic architecture and for a non-cubic architecture (where the struts are not orthogonal with each other).
</p>
</div>
<div id="outline-container-org6e391c9" class="outline-3">
<h3 id="org6e391c9"><span class="section-number-3">5.1</span> Coupling between the actuators and sensors - Cubic Architecture</h3>
<div class="outline-text-3" id="text-5-1">
<p>
Let&rsquo;s generate a Cubic architecture where the cube&rsquo;s center and the frames \(\{A\}\) and \(\{B\}\) are coincident.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 200e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>10e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
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 class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
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>, 25e<span class="org-type">-</span>3, <span class="org-string">'MHb'</span>, 25e<span class="org-type">-</span>3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, 1e6<span class="org-type">*</span>ones(6,1), <span class="org-string">'C'</span>, 1e1<span class="org-type">*</span>ones(6,1));
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical'</span>);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_F.Fa)), ...
<span class="org-string">'Mpm'</span>, 10, ...
<span class="org-string">'Mph'</span>, 20e<span class="org-type">-</span>3, ...
<span class="org-string">'Mpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_M.Mb)));
stewart = initializeCylindricalStruts(stewart, <span class="org-string">'Fsm'</span>, 1e<span class="org-type">-</span>3, <span class="org-string">'Msm'</span>, 1e<span class="org-type">-</span>3);
stewart = initializeInertialSensor(stewart);
</pre>
</div>
<p>
No flexibility below the Stewart platform and no payload.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<div id="org67d7284" class="figure">
<p><img src="figs/stewart_architecture_coupling_struts_cubic.png" alt="stewart_architecture_coupling_struts_cubic.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Geometry of the generated Stewart platform (<a href="./figs/stewart_architecture_coupling_struts_cubic.png">png</a>, <a href="./figs/stewart_architecture_coupling_struts_cubic.pdf">pdf</a>)</p>
</div>
<p>
And we identify the dynamics from the actuator forces \(\tau_{i}\) to the relative motion sensors \(\delta \mathcal{L}_{i}\) (Figure <a href="#orga20cd7d">15</a>) and to the force sensors \(\tau_{m,i}\) (Figure <a href="#org645e6c3">16</a>).
</p>
<div id="orga20cd7d" class="figure">
<p><img src="figs/coupling_struts_relative_sensor_cubic.png" alt="coupling_struts_relative_sensor_cubic.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Dynamics from the force actuators to the relative motion sensors (<a href="./figs/coupling_struts_relative_sensor_cubic.png">png</a>, <a href="./figs/coupling_struts_relative_sensor_cubic.pdf">pdf</a>)</p>
</div>
<div id="org645e6c3" class="figure">
<p><img src="figs/coupling_struts_force_sensor_cubic.png" alt="coupling_struts_force_sensor_cubic.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Dynamics from the force actuators to the force sensors (<a href="./figs/coupling_struts_force_sensor_cubic.png">png</a>, <a href="./figs/coupling_struts_force_sensor_cubic.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgafd808d" class="outline-3">
<h3 id="orgafd808d"><span class="section-number-3">5.2</span> Coupling between the actuators and sensors - Non-Cubic Architecture</h3>
<div class="outline-text-3" id="text-5-2">
<p>
Now we generate a Stewart platform which is not cubic but with approximately the same size as the previous cubic architecture.
</p>
<div class="org-src-container">
<pre class="src src-matlab">H = 200e<span class="org-type">-</span>3; <span class="org-comment">% height of the Stewart platform [m]</span>
MO_B = <span class="org-type">-</span>10e<span class="org-type">-</span>3; <span class="org-comment">% Position {B} with respect to {M} [m]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, H, <span class="org-string">'MO_B'</span>, MO_B);
stewart = generateGeneralConfiguration(stewart, <span class="org-string">'FR'</span>, 250e<span class="org-type">-</span>3, <span class="org-string">'MR'</span>, 150e<span class="org-type">-</span>3);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, 1e6<span class="org-type">*</span>ones(6,1), <span class="org-string">'C'</span>, 1e1<span class="org-type">*</span>ones(6,1));
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical'</span>);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_F.Fa)), ...
<span class="org-string">'Mpm'</span>, 10, ...
<span class="org-string">'Mph'</span>, 20e<span class="org-type">-</span>3, ...
<span class="org-string">'Mpr'</span>, 1.2<span class="org-type">*</span>max(vecnorm(stewart.platform_M.Mb)));
stewart = initializeCylindricalStruts(stewart, <span class="org-string">'Fsm'</span>, 1e<span class="org-type">-</span>3, <span class="org-string">'Msm'</span>, 1e<span class="org-type">-</span>3);
stewart = initializeInertialSensor(stewart);
</pre>
</div>
<p>
No flexibility below the Stewart platform and no payload.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<div id="org14d3492" class="figure">
<p><img src="figs/stewart_architecture_coupling_struts_non_cubic.png" alt="stewart_architecture_coupling_struts_non_cubic.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Geometry of the generated Stewart platform (<a href="./figs/stewart_architecture_coupling_struts_non_cubic.png">png</a>, <a href="./figs/stewart_architecture_coupling_struts_non_cubic.pdf">pdf</a>)</p>
</div>
<p>
And we identify the dynamics from the actuator forces \(\tau_{i}\) to the relative motion sensors \(\delta \mathcal{L}_{i}\) (Figure <a href="#orgff23a38">18</a>) and to the force sensors \(\tau_{m,i}\) (Figure <a href="#orgd802951">19</a>).
</p>
<div id="orgff23a38" class="figure">
<p><img src="figs/coupling_struts_relative_sensor_non_cubic.png" alt="coupling_struts_relative_sensor_non_cubic.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Dynamics from the force actuators to the relative motion sensors (<a href="./figs/coupling_struts_relative_sensor_non_cubic.png">png</a>, <a href="./figs/coupling_struts_relative_sensor_non_cubic.pdf">pdf</a>)</p>
</div>
<div id="orgd802951" class="figure">
<p><img src="figs/coupling_struts_force_sensor_non_cubic.png" alt="coupling_struts_force_sensor_non_cubic.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Dynamics from the force actuators to the force sensors (<a href="./figs/coupling_struts_force_sensor_non_cubic.png">png</a>, <a href="./figs/coupling_struts_force_sensor_non_cubic.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org8c1a310" class="outline-3">
<h3 id="org8c1a310"><span class="section-number-3">5.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-3">
<div class="important">
<p>
The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut and thus provides no advantages for decentralized control.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org3044455" class="outline-2">
<h2 id="org3044455"><span class="section-number-2">6</span> Functions</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="org28ba607"></a>
</p>
</div>
<div id="outline-container-org56504f1" class="outline-3">
<h3 id="org56504f1"><span class="section-number-3">6.1</span> <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</h3>
<div class="outline-text-3" id="text-6-1">
<p>
<a id="orga8311d3"></a>
</p>
<p>
This Matlab function is accessible <a href="../src/generateCubicConfiguration.m">here</a>.
</p>
</div>
<div id="outline-container-orga5a9ba8" class="outline-4">
<h4 id="orga5a9ba8">Function description</h4>
<div class="outline-text-4" id="text-orga5a9ba8">
<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>)
<span class="org-comment">% generateCubicConfiguration - Generate a Cubic Configuration</span>
<span class="org-comment">%</span>
<span class="org-comment">% Syntax: [stewart] = generateCubicConfiguration(stewart, args)</span>
<span class="org-comment">%</span>
<span class="org-comment">% Inputs:</span>
<span class="org-comment">% - stewart - A structure with the following fields</span>
<span class="org-comment">% - geometry.H [1x1] - Total height of the platform [m]</span>
<span class="org-comment">% - args - Can have the following fields:</span>
<span class="org-comment">% - Hc [1x1] - Height of the "useful" part of the cube [m]</span>
<span class="org-comment">% - FOc [1x1] - Height of the center of the cube with respect to {F} [m]</span>
<span class="org-comment">% - FHa [1x1] - Height of the plane joining the points ai with respect to the frame {F} [m]</span>
<span class="org-comment">% - MHb [1x1] - Height of the plane joining the points bi with respect to the frame {M} [m]</span>
<span class="org-comment">%</span>
<span class="org-comment">% Outputs:</span>
<span class="org-comment">% - stewart - updated Stewart structure with the added fields:</span>
<span class="org-comment">% - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F}</span>
<span class="org-comment">% - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M}</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org3253792" class="outline-4">
<h4 id="org3253792">Documentation</h4>
<div class="outline-text-4" id="text-org3253792">
<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 20: </span>Cubic Configuration</p>
</div>
</div>
</div>
<div id="outline-container-org154b5fb" class="outline-4">
<h4 id="org154b5fb">Optional Parameters</h4>
<div class="outline-text-4" id="text-org154b5fb">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
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.FHa (1,1) double {mustBeNumeric, mustBeNonnegative} = 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>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbb480a6" class="outline-4">
<h4 id="orgbb480a6">Check the <code>stewart</code> structure elements</h4>
<div class="outline-text-4" id="text-orgbb480a6">
<div class="org-src-container">
<pre class="src src-matlab">assert(isfield(stewart.geometry, <span class="org-string">'H'</span>), <span class="org-string">'stewart.geometry should have attribute H'</span>)
H = stewart.geometry.H;
</pre>
</div>
</div>
</div>
<div id="outline-container-org771c630" class="outline-4">
<h4 id="org771c630">Position of the Cube</h4>
<div class="outline-text-4" id="text-org771c630">
<p>
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
located at the center of the cube and aligned with {F} and {M}.
</p>
<div class="org-src-container">
<pre class="src src-matlab">sx = [ 2; <span class="org-type">-</span>1; <span class="org-type">-</span>1];
sy = [ 0; 1; <span class="org-type">-</span>1];
sz = [ 1; 1; 1];
R = [sx, sy, sz]<span class="org-type">./</span>vecnorm([sx, sy, sz]);
L = args.Hc<span class="org-type">*</span>sqrt(3);
Cc = R<span class="org-type">'*</span>[[0;0;L],[L;0;L],[L;0;0],[L;L;0],[0;L;0],[0;L;L]] <span class="org-type">-</span> [0;0;1.5<span class="org-type">*</span>args.Hc];
CCf = [Cc(<span class="org-type">:</span>,1), Cc(<span class="org-type">:</span>,3), Cc(<span class="org-type">:</span>,3), Cc(<span class="org-type">:</span>,5), Cc(<span class="org-type">:</span>,5), Cc(<span class="org-type">:</span>,1)]; <span class="org-comment">% CCf(:,i) corresponds to the bottom cube's vertice corresponding to the i'th leg</span>
CCm = [Cc(<span class="org-type">:</span>,2), Cc(<span class="org-type">:</span>,2), Cc(<span class="org-type">:</span>,4), Cc(<span class="org-type">:</span>,4), Cc(<span class="org-type">:</span>,6), Cc(<span class="org-type">:</span>,6)]; <span class="org-comment">% CCm(:,i) corresponds to the top cube's vertice corresponding to the i'th leg</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org3a2f468" class="outline-4">
<h4 id="org3a2f468">Compute the pose</h4>
<div class="outline-text-4" id="text-org3a2f468">
<p>
We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)).
</p>
<div class="org-src-container">
<pre class="src src-matlab">CSi = (CCm <span class="org-type">-</span> CCf)<span class="org-type">./</span>vecnorm(CCm <span class="org-type">-</span> CCf);
</pre>
</div>
<p>
We now which to compute the position of the joints \(a_{i}\) and \(b_{i}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Fa = CCf <span class="org-type">+</span> [0; 0; args.FOc] <span class="org-type">+</span> ((args.FHa<span class="org-type">-</span>(args.FOc<span class="org-type">-</span>args.Hc<span class="org-type">/</span>2))<span class="org-type">./</span>CSi(3,<span class="org-type">:</span>))<span class="org-type">.*</span>CSi;
Mb = CCf <span class="org-type">+</span> [0; 0; args.FOc<span class="org-type">-</span>H] <span class="org-type">+</span> ((H<span class="org-type">-</span>args.MHb<span class="org-type">-</span>(args.FOc<span class="org-type">-</span>args.Hc<span class="org-type">/</span>2))<span class="org-type">./</span>CSi(3,<span class="org-type">:</span>))<span class="org-type">.*</span>CSi;
</pre>
</div>
</div>
</div>
<div id="outline-container-org8c1af4f" class="outline-4">
<h4 id="org8c1af4f">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org8c1af4f">
<div class="org-src-container">
<pre class="src src-matlab">stewart.platform_F.Fa = Fa;
stewart.platform_M.Mb = Mb;
</pre>
</div>
</div>
</div>
</div>
</div>
<p>
<h1 class='org-ref-bib-h1'>Bibliography</h1>
<ul class='org-ref-bib'><li><a id="geng94_six_degree_of_freed_activ">[geng94_six_degree_of_freed_activ]</a> <a name="geng94_six_degree_of_freed_activ"></a>Geng & Haynes, Six Degree-Of-Freedom Active Vibration Control Using the Stewart Platforms, <i>IEEE Transactions on Control Systems Technology</i>, <b>2(1)</b>, 45-53 (1994). <a href="https://doi.org/10.1109/87.273110">link</a>. <a href="http://dx.doi.org/10.1109/87.273110">doi</a>.</li>
<li><a id="preumont07_six_axis_singl_stage_activ">[preumont07_six_axis_singl_stage_activ]</a> <a name="preumont07_six_axis_singl_stage_activ"></a>Preumont, Horodinca, Romanescu, de Marneffe, Avraam, Deraemaeker, Bossens & Abu Hanieh, A Six-Axis Single-Stage Active Vibration Isolator Based on Stewart Platform, <i>Journal of Sound and Vibration</i>, <b>300(3-5)</b>, 644-661 (2007). <a href="https://doi.org/10.1016/j.jsv.2006.07.050">link</a>. <a href="http://dx.doi.org/10.1016/j.jsv.2006.07.050">doi</a>.</li>
<li><a id="jafari03_orthog_gough_stewar_platf_microm">[jafari03_orthog_gough_stewar_platf_microm]</a> <a name="jafari03_orthog_gough_stewar_platf_microm"></a>Jafari & McInroy, Orthogonal Gough-Stewart Platforms for Micromanipulation, <i>IEEE Transactions on Robotics and Automation</i>, <b>19(4)</b>, 595-603 (2003). <a href="https://doi.org/10.1109/tra.2003.814506">link</a>. <a href="http://dx.doi.org/10.1109/tra.2003.814506">doi</a>.</li>
</ul>
</p>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-13 jeu. 15:01</p>
</div>
</body>
</html>