stewart-simscape/docs/cubic-configuration.html

1298 lines
48 KiB
HTML
Raw Normal View History

<?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-12 10:22:51 +01:00
<!-- 2020-02-12 mer. 10:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cubic configuration for the Stewart Platform</title>
<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>
2020-02-11 15:50:52 +01:00
<li><a href="#org8c6677e">1. Configuration Analysis - Stiffness Matrix</a>
<ul>
2020-02-11 15:50:52 +01:00
<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="#orgd35acc0">1.5. Conclusion</a></li>
<li><a href="#org8afa645">1.6. Having Cube&rsquo;s center above the top platform</a></li>
</ul>
</li>
2020-02-11 15:50:52 +01:00
<li><a href="#org3044455">2. Functions</a>
<ul>
2020-02-11 15:50:52 +01:00
<li><a href="#org56504f1">2.1. <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</a>
<ul>
2020-02-11 15:27:39 +01:00
<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 discovery of the Cubic configuration is done in <a class='org-ref-reference' href="#geng94_six_degree_of_freed_activ">geng94_six_degree_of_freed_activ</a>.
</p>
<p>
2020-02-12 10:22:51 +01:00
The specificity of the Cubic configuration is that each actuator is orthogonal with the others:
</p>
2020-02-12 10:22:51 +01:00
<blockquote>
<p>
the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube.
</p>
</blockquote>
<p>
The cubic (or orthogonal) configuration of the Stewart platform is now widely used (<a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>,<a class='org-ref-reference' href="#jafari03_orthog_gough_stewar_platf_microm">jafari03_orthog_gough_stewar_platf_microm</a>).
</p>
<p>
2020-02-12 10:22:51 +01:00
According to <a class='org-ref-reference' href="#preumont07_six_axis_singl_stage_activ">preumont07_six_axis_singl_stage_activ</a>:
</p>
<blockquote>
<p>
This topology provides a uniform control capability and a uniform stiffness in all directions, and it minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other).
</p>
2020-02-12 10:22:51 +01:00
</blockquote>
2019-10-09 11:08:42 +02:00
<p>
2020-02-11 15:50:52 +01:00
To generate and study the Cubic configuration, <code>generateCubicConfiguration</code> is used (description in section <a href="#orga8311d3">2.1</a>).
The goal is to study the benefits of using a cubic configuration:
</p>
<ul class="org-ul">
<li>Equal stiffness in all the degrees of freedom?</li>
<li>No coupling between the actuators?</li>
<li>Is the center of the cube an important point?</li>
</ul>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org8c6677e" class="outline-2">
2020-02-11 15:50:52 +01:00
<h2 id="org8c6677e"><span class="section-number-2">1</span> Configuration Analysis - Stiffness Matrix</h2>
<div class="outline-text-2" id="text-1">
2020-02-12 10:22:51 +01:00
<p>
First, we have to understand what is the physical meaning of the Stiffness matrix \(\bm{K}\).
</p>
<p>
The Stiffness matrix links forces \(\bm{f}\) and torques \(\bm{n}\) applied on the mobile platform at \(\{B\}\) to the displacement \(\Delta\bm{\mathcal{X}}\) of the mobile platform represented by \(\{B\}\) with respect to \(\{A\}\):
\[ \bm{\mathcal{F}} = \bm{K} \Delta\bm{\mathcal{X}} \]
</p>
<p>
with:
</p>
<ul class="org-ul">
<li>\(\bm{\mathcal{F}} = [\bm{f}\ \bm{n}]^{T}\)</li>
<li>\(\Delta\bm{\mathcal{X}} = [\delta x, \delta y, \delta z, \delta \theta_{x}, \delta \theta_{y}, \delta \theta_{z}]^{T}\)</li>
</ul>
<p>
If the stiffness matrix is inversible, its inverse is the compliance matrix: \(\bm{C} = \bm{K}^{-1\) and:
\[ \Delta \bm{\mathcal{X}} = C \bm{\mathcal{F}} \]
</p>
<p>
Thus, if the stiffness matrix is diagonal, the compliance matrix is also diagonal and a force (resp. torque) \(\bm{\mathcal{F}}_i\) applied on the mobile platform at \(\{B\}\) will induce a pure translation (resp. rotation) of the mobile platform represented by \(\{B\}\) with respect to \(\{A\}\).
</p>
<p>
One has to note that this is only valid in a static way.
</p>
</div>
2020-02-12 10:22:51 +01:00
2020-02-11 15:27:39 +01:00
<div id="outline-container-orgf6f7ad2" class="outline-3">
2020-02-11 15:50:52 +01:00
<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>
2020-02-11 15:27:39 +01:00
We create a cubic Stewart platform (figure <a href="#org9454f54">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.
</p>
2020-02-12 10:22:51 +01:00
<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">
2020-02-11 15:27:39 +01:00
<pre class="src src-matlab">stewart = initializeStewartPlatform();
2020-02-12 10:22:51 +01:00
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);
2020-02-12 10:22:51 +01:00
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>
2020-02-11 15:27:39 +01:00
<div id="org9454f54" class="figure">
2020-02-11 18:04:45 +01:00
<p><img src="figs/3d-cubic-stewart-aligned.png" alt="3d-cubic-stewart-aligned.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Centered cubic configuration</p>
</div>
2020-02-11 15:27:39 +01:00
<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 2: </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 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">-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>
2020-02-11 15:27:39 +01:00
<div id="outline-container-orga88e79a" class="outline-3">
2020-02-11 15:50:52 +01:00
<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>
2020-02-11 15:27:39 +01:00
We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure <a href="#org9454f54">1</a>).
The Jacobian matrix is not estimated at the location of the center of the cube.
</p>
2020-02-12 10:22:51 +01:00
<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">
2020-02-11 15:27:39 +01:00
<pre class="src src-matlab">stewart = initializeStewartPlatform();
2020-02-12 10:22:51 +01:00
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);
2020-02-12 10:22:51 +01:00
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>
2020-02-11 15:27:39 +01:00
<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 3: </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 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">-2.5e-16</td>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">-5.3e-19</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-11 15:27:39 +01:00
<div id="outline-container-orge02ec88" class="outline-3">
2020-02-11 15:50:52 +01:00
<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>
2020-02-12 10:22:51 +01:00
Here, the &ldquo;center&rdquo; of the Stewart platform is not at the cube center (figure <a href="#org0235d3a">4</a>).
The Jacobian is estimated at the cube center.
</p>
2020-02-12 10:22:51 +01:00
<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">
2020-02-11 15:27:39 +01:00
<pre class="src src-matlab">stewart = initializeStewartPlatform();
2020-02-12 10:22:51 +01:00
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);
2020-02-12 10:22:51 +01:00
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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-12 10:22:51 +01:00
<p><span class="figure-number">Figure 4: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center (<a href="./figs/cubic_conf_not_centered_J_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_center.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">-2.2e-17</td>
<td class="org-right">1.1e-18</td>
<td class="org-right">0.015</td>
2020-02-12 10:22:51 +01:00
<td class="org-right">0</td>
<td class="org-right">3.5e-18</td>
</tr>
<tr>
2020-02-12 10:22:51 +01:00
<td class="org-right">4.4e-17</td>
<td class="org-right">0</td>
2020-02-12 10:22:51 +01:00
<td class="org-right">-1.4e-17</td>
<td class="org-right">-5.7e-20</td>
<td class="org-right">0.015</td>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org43fd7e4" class="outline-3">
2020-02-11 15:50:52 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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">
2020-02-11 15:27:39 +01:00
<pre class="src src-matlab">stewart = initializeStewartPlatform();
2020-02-12 10:22:51 +01:00
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);
2020-02-12 10:22:51 +01:00
stewart = initializeStrutDynamics(stewart, <span class="org-string">'K'</span>, ones(6,1));
stewart = computeJacobian(stewart);
2020-02-12 10:22:51 +01:00
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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-12 10:22:51 +01:00
<p><span class="figure-number">Figure 5: </span>Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center (<a href="./figs/cubic_conf_not_centered_J_stewart_center.png">png</a>, <a href="./figs/cubic_conf_not_centered_J_stewart_center.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">0</td>
</tr>
<tr>
2020-02-12 10:22:51 +01:00
<td class="org-right">1.5e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">5.9e-18</td>
<td class="org-right">-7.5e-18</td>
<td class="org-right">0</td>
2020-02-12 10:22:51 +01:00
<td class="org-right">3.5e-18</td>
<td class="org-right">0</td>
2020-02-12 10:22:51 +01:00
<td class="org-right">0.14</td>
</tr>
</tbody>
</table>
</div>
</div>
2020-02-11 15:27:39 +01:00
<div id="outline-container-orgd35acc0" class="outline-3">
2020-02-11 15:50:52 +01:00
<h3 id="orgd35acc0"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5">
<div class="important">
2020-02-12 10:22:51 +01:00
<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>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org8afa645" class="outline-3">
2020-02-11 15:50:52 +01:00
<h3 id="org8afa645"><span class="section-number-3">1.6</span> Having Cube&rsquo;s center above the top platform</h3>
<div class="outline-text-3" id="text-1-6">
<p>
2020-02-12 10:22:51 +01:00
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.
2020-02-12 10:22:51 +01:00
</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">
2020-02-12 10:22:51 +01:00
<li>Small Cube Size in Figure <a href="#org105635f">6</a></li>
<li>Medium Cube Size in Figure <a href="#org264ab9c">7</a></li>
<li>Large Cube Size in Figure <a href="#org52254fe">8</a></li>
</ul>
2020-02-12 10:22:51 +01:00
<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">
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<div id="org105635f" class="figure">
<p><img src="figs/stewart_cubic_conf_type_1.png" alt="stewart_cubic_conf_type_1.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Cubic Configuration for the Stewart Platform - Small Cube Size (<a href="./figs/stewart_cubic_conf_type_1.png">png</a>, <a href="./figs/stewart_cubic_conf_type_1.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">-2.8e-16</td>
<td class="org-right">0</td>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">-2.3e-17</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
2020-02-12 10:22:51 +01:00
<td class="org-right">-2.8e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<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>
2020-02-12 10:22:51 +01:00
<td class="org-right">0.0096</td>
</tr>
</tbody>
</table>
2020-02-12 10:22:51 +01:00
<div class="org-src-container">
<pre class="src src-matlab">Hc = 1.5<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div id="org264ab9c" class="figure">
<p><img src="figs/stewart_cubic_conf_type_2.png" alt="stewart_cubic_conf_type_2.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Cubic Configuration for the Stewart Platform - Medium Cube Size (<a href="./figs/stewart_cubic_conf_type_2.png">png</a>, <a href="./figs/stewart_cubic_conf_type_2.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-1.9e-16</td>
<td class="org-right">0</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-7.6e-17</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-1.9e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">2.5e-18</td>
<td class="org-right">2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-7.6e-17</td>
<td class="org-right">2.5e-18</td>
<td class="org-right">0.034</td>
<td class="org-right">8.7e-19</td>
<td class="org-right">8.7e-18</td>
</tr>
<tr>
<td class="org-right">5.7e-17</td>
<td class="org-right">0</td>
<td class="org-right">3.2e-17</td>
<td class="org-right">2.9e-19</td>
<td class="org-right">0.034</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-1e-18</td>
<td class="org-right">-1.3e-17</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">8.4e-18</td>
<td class="org-right">0</td>
<td class="org-right">0.14</td>
</tr>
</tbody>
</table>
<div class="org-src-container">
<pre class="src src-matlab">Hc = 2.5<span class="org-type">*</span>H; <span class="org-comment">% Size of the useful part of the cube [m]</span>
FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Center of the cube with respect to {F}</span>
</pre>
</div>
<div id="org52254fe" class="figure">
<p><img src="figs/stewart_cubic_conf_type_3.png" alt="stewart_cubic_conf_type_3.png" />
</p>
2020-02-12 10:22:51 +01:00
<p><span class="figure-number">Figure 8: </span>Cubic Configuration for the Stewart Platform - Large Cube Size (<a href="./figs/stewart_cubic_conf_type_3.png">png</a>, <a href="./figs/stewart_cubic_conf_type_3.pdf">pdf</a>)</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-3e-16</td>
<td class="org-right">0</td>
<td class="org-right">-8.3e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">0</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">0</td>
<td class="org-right">5.6e-17</td>
</tr>
<tr>
<td class="org-right">-3e-16</td>
<td class="org-right">0</td>
<td class="org-right">2</td>
<td class="org-right">-9.3e-19</td>
<td class="org-right">-2.8e-17</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">-2.2e-17</td>
<td class="org-right">-9.3e-19</td>
<td class="org-right">0.094</td>
<td class="org-right">0</td>
<td class="org-right">2.1e-17</td>
</tr>
<tr>
<td class="org-right">-8e-17</td>
<td class="org-right">0</td>
<td class="org-right">-3e-17</td>
<td class="org-right">-6.1e-19</td>
<td class="org-right">0.094</td>
<td class="org-right">0</td>
</tr>
<tr>
<td class="org-right">-6.2e-18</td>
<td class="org-right">7.2e-17</td>
<td class="org-right">5.6e-17</td>
<td class="org-right">2.3e-17</td>
<td class="org-right">0</td>
<td class="org-right">0.37</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org3044455" class="outline-2">
2020-02-11 15:50:52 +01:00
<h2 id="org3044455"><span class="section-number-2">2</span> Functions</h2>
<div class="outline-text-2" id="text-2">
<p>
2020-02-11 15:27:39 +01:00
<a id="org28ba607"></a>
</p>
</div>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org56504f1" class="outline-3">
2020-02-11 15:50:52 +01:00
<h3 id="org56504f1"><span class="section-number-3">2.1</span> <code>generateCubicConfiguration</code>: Generate a Cubic Configuration</h3>
<div class="outline-text-3" id="text-2-1">
<p>
2020-02-11 15:27:39 +01:00
<a id="orga8311d3"></a>
</p>
<p>
2020-02-11 18:04:45 +01:00
This Matlab function is accessible <a href="../src/generateCubicConfiguration.m">here</a>.
</p>
</div>
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<div id="outline-container-org3253792" class="outline-4">
<h4 id="org3253792">Documentation</h4>
<div class="outline-text-4" id="text-org3253792">
2020-02-11 15:27:39 +01:00
<div id="org8a7f3d8" class="figure">
<p><img src="figs/cubic-configuration-definition.png" alt="cubic-configuration-definition.png" />
</p>
2020-02-12 10:22:51 +01:00
<p><span class="figure-number">Figure 9: </span>Cubic Configuration</p>
</div>
</div>
</div>
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<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">
2020-02-11 15:27:39 +01:00
<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>
2020-02-11 15:27:39 +01:00
<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>
2020-02-12 10:22:51 +01:00
<p class="date">Created: 2020-02-12 mer. 10:22</p>
</div>
</body>
</html>