Compare commits
7 Commits
0faaef06e6
...
master
Author | SHA1 | Date | |
---|---|---|---|
13c6750b15 | |||
ed0c18829b | |||
f5922ca970 | |||
240d113062 | |||
32330b92f0 | |||
58cd2026dc | |||
7fad722181 |
@@ -3,25 +3,30 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:53 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platform - Decentralized Active Damping</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>MathJax = {
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<script>
|
||||
MathJax = {
|
||||
svg: {
|
||||
scale: 1,
|
||||
fontCache: "global"
|
||||
},
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],}
|
||||
tags: "ams",
|
||||
multlineWidth: "%MULTLINEWIDTH",
|
||||
tagSide: "right",
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],},
|
||||
tagIndent: ".8em"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
@@ -34,35 +39,35 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgc22d5d6">1. Inertial Control</a>
|
||||
<li><a href="#orgddaf52f">1. Inertial Control</a>
|
||||
<ul>
|
||||
<li><a href="#org1671c0b">1.1. Identification of the Dynamics</a></li>
|
||||
<li><a href="#orgdae44ba">1.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org89e2002">1.3. Obtained Damping</a></li>
|
||||
<li><a href="#org3904320">1.4. Conclusion</a></li>
|
||||
<li><a href="#org933440d">1.1. Identification of the Dynamics</a></li>
|
||||
<li><a href="#org2875dd1">1.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org0cea759">1.3. Obtained Damping</a></li>
|
||||
<li><a href="#orga866100">1.4. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org89e426a">2. Integral Force Feedback</a>
|
||||
<li><a href="#orgf8ed544">2. Integral Force Feedback</a>
|
||||
<ul>
|
||||
<li><a href="#orgcb85703">2.1. Identification of the Dynamics with perfect Joints</a></li>
|
||||
<li><a href="#org4ca24f7">2.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org11e5ee2">2.3. Obtained Damping</a></li>
|
||||
<li><a href="#orgca67baa">2.4. Conclusion</a></li>
|
||||
<li><a href="#orga2d019b">2.1. Identification of the Dynamics with perfect Joints</a></li>
|
||||
<li><a href="#org6ac04ee">2.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org06e1086">2.3. Obtained Damping</a></li>
|
||||
<li><a href="#orgfa832d6">2.4. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org47a29be">3. Direct Velocity Feedback</a>
|
||||
<li><a href="#orgabec4e1">3. Direct Velocity Feedback</a>
|
||||
<ul>
|
||||
<li><a href="#orgc82a6a7">3.1. Identification of the Dynamics with perfect Joints</a></li>
|
||||
<li><a href="#org92d6cb1">3.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org7497409">3.3. Obtained Damping</a></li>
|
||||
<li><a href="#org61c422b">3.4. Conclusion</a></li>
|
||||
<li><a href="#org19cbcee">3.1. Identification of the Dynamics with perfect Joints</a></li>
|
||||
<li><a href="#org0fabf01">3.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
||||
<li><a href="#org6c74c9a">3.3. Obtained Damping</a></li>
|
||||
<li><a href="#org81b2156">3.4. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgc84bb75">4. Compliance and Transmissibility Comparison</a>
|
||||
<li><a href="#orgc7e2089">4. Compliance and Transmissibility Comparison</a>
|
||||
<ul>
|
||||
<li><a href="#orgebeb03b">4.1. Initialization</a></li>
|
||||
<li><a href="#orgdde930c">4.2. Identification</a></li>
|
||||
<li><a href="#orgcfd0381">4.3. Results</a></li>
|
||||
<li><a href="#org6ec3b9e">4.1. Initialization</a></li>
|
||||
<li><a href="#orge87554a">4.2. Identification</a></li>
|
||||
<li><a href="#org1d70ccd">4.3. Results</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -73,19 +78,19 @@
|
||||
The following decentralized active damping techniques are briefly studied:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Inertial Control (proportional feedback of the absolute velocity): Section <a href="#orgb2aa4b3">1</a></li>
|
||||
<li>Integral Force Feedback: Section <a href="#org44cadc6">2</a></li>
|
||||
<li>Direct feedback of the relative velocity of each strut: Section <a href="#orgbdd1eba">3</a></li>
|
||||
<li>Inertial Control (proportional feedback of the absolute velocity): Section <a href="#org709d56c">1</a></li>
|
||||
<li>Integral Force Feedback: Section <a href="#org1f0d316">2</a></li>
|
||||
<li>Direct feedback of the relative velocity of each strut: Section <a href="#org63027d0">3</a></li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-orgc22d5d6" class="outline-2">
|
||||
<h2 id="orgc22d5d6"><span class="section-number-2">1</span> Inertial Control</h2>
|
||||
<div id="outline-container-orgddaf52f" class="outline-2">
|
||||
<h2 id="orgddaf52f"><span class="section-number-2">1</span> Inertial Control</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="orgb2aa4b3"></a>
|
||||
<a id="org709d56c"></a>
|
||||
</p>
|
||||
|
||||
<div class="note">
|
||||
<div class="note" id="org1ae7526">
|
||||
<p>
|
||||
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_inertial.m">here</a>.
|
||||
</p>
|
||||
@@ -97,56 +102,56 @@ To run the script, open the Simulink Project, and type <code>run active_damping_
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1671c0b" class="outline-3">
|
||||
<h3 id="org1671c0b"><span class="section-number-3">1.1</span> Identification of the Dynamics</h3>
|
||||
<div id="outline-container-org933440d" class="outline-3">
|
||||
<h3 id="org933440d"><span class="section-number-3">1.1</span> Identification of the Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'accelerometer', 'freq', 5e3);
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'accelerometer'</span>, <span class="org-string">'freq'</span>, 5e3);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'rot_point'</span>, stewart.platform_F.FO_A);
|
||||
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
<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>;
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Vm'); io_i = io_i + 1; % Absolute velocity of each leg [m/s]
|
||||
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">'Vm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute velocity of each leg [m/s]</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
||||
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">'Vm1'</span>, <span class="org-string">'Vm2'</span>, <span class="org-string">'Vm3'</span>, <span class="org-string">'Vm4'</span>, <span class="org-string">'Vm5'</span>, <span class="org-string">'Vm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org116ea42">1</a>.
|
||||
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org5cd47c9">1</a>.
|
||||
</p>
|
||||
|
||||
<div id="org116ea42" class="figure">
|
||||
<div id="org5cd47c9" class="figure">
|
||||
<p><img src="figs/inertial_plant_coupling.png" alt="inertial_plant_coupling.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Transfer function from the Actuator force \(F_{i}\) to the absolute velocity of the same leg \(v_{m,i}\) and to the absolute velocity of the other legs \(v_{m,j}\) with \(i \neq j\) in grey (<a href="./figs/inertial_plant_coupling.png">png</a>, <a href="./figs/inertial_plant_coupling.pdf">pdf</a>)</p>
|
||||
@@ -154,17 +159,17 @@ The transfer function from actuator forces to force sensors is shown in Figure <
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdae44ba" class="outline-3">
|
||||
<h3 id="orgdae44ba"><span class="section-number-3">1.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div id="outline-container-org2875dd1" class="outline-3">
|
||||
<h3 id="org2875dd1"><span class="section-number-3">1.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
||||
<pre class="src src-matlab">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>);
|
||||
Gf = linearize(mdl, io, options);
|
||||
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Gf.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
||||
Gf.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>};
|
||||
Gf.OutputName = {<span class="org-string">'Vm1'</span>, <span class="org-string">'Vm2'</span>, <span class="org-string">'Vm3'</span>, <span class="org-string">'Vm4'</span>, <span class="org-string">'Vm5'</span>, <span class="org-string">'Vm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -174,16 +179,16 @@ We now use the amplified actuators and re-identify the dynamics
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
||||
Ga = linearize(mdl, io, options);
|
||||
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Ga.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
||||
Ga.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>};
|
||||
Ga.OutputName = {<span class="org-string">'Vm1'</span>, <span class="org-string">'Vm2'</span>, <span class="org-string">'Vm3'</span>, <span class="org-string">'Vm4'</span>, <span class="org-string">'Vm5'</span>, <span class="org-string">'Vm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org620efcd">2</a>.
|
||||
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org8fcc87b">2</a>.
|
||||
</p>
|
||||
|
||||
<div id="org620efcd" class="figure">
|
||||
<div id="org8fcc87b" class="figure">
|
||||
<p><img src="figs/inertial_plant_flexible_joint_decentralized.png" alt="inertial_plant_flexible_joint_decentralized.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Transfer function from the Actuator force \(F_{i}\) to the absolute velocity sensor \(v_{m,i}\) (<a href="./figs/inertial_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/inertial_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
||||
@@ -191,8 +196,8 @@ The new dynamics from force actuator to force sensor is shown in Figure <a href=
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org89e2002" class="outline-3">
|
||||
<h3 id="org89e2002"><span class="section-number-3">1.3</span> Obtained Damping</h3>
|
||||
<div id="outline-container-org0cea759" class="outline-3">
|
||||
<h3 id="org0cea759"><span class="section-number-3">1.3</span> Obtained Damping</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
The control is a performed in a decentralized manner.
|
||||
@@ -206,10 +211,10 @@ The \(6 \times 6\) control is a diagonal matrix with pure proportional action on
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The root locus is shown in figure <a href="#org9cabaee">3</a>.
|
||||
The root locus is shown in figure <a href="#orgaea8656">3</a>.
|
||||
</p>
|
||||
|
||||
<div id="org9cabaee" class="figure">
|
||||
<div id="orgaea8656" class="figure">
|
||||
<p><img src="figs/root_locus_inertial_rot_stiffness.png" alt="root_locus_inertial_rot_stiffness.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Root Locus plot with Decentralized Inertial Control when considering the stiffness of flexible joints (<a href="./figs/root_locus_inertial_rot_stiffness.png">png</a>, <a href="./figs/root_locus_inertial_rot_stiffness.pdf">pdf</a>)</p>
|
||||
@@ -217,10 +222,10 @@ The root locus is shown in figure <a href="#org9cabaee">3</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3904320" class="outline-3">
|
||||
<h3 id="org3904320"><span class="section-number-3">1.4</span> Conclusion</h3>
|
||||
<div id="outline-container-orga866100" class="outline-3">
|
||||
<h3 id="orga866100"><span class="section-number-3">1.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-1-4">
|
||||
<div class="important">
|
||||
<div class="important" id="org91c21ee">
|
||||
<p>
|
||||
We do not have guaranteed stability with Inertial control. This is because of the flexibility inside the internal sensor.
|
||||
</p>
|
||||
@@ -230,14 +235,14 @@ We do not have guaranteed stability with Inertial control. This is because of th
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org89e426a" class="outline-2">
|
||||
<h2 id="org89e426a"><span class="section-number-2">2</span> Integral Force Feedback</h2>
|
||||
<div id="outline-container-orgf8ed544" class="outline-2">
|
||||
<h2 id="orgf8ed544"><span class="section-number-2">2</span> Integral Force Feedback</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org44cadc6"></a>
|
||||
<a id="org1f0d316"></a>
|
||||
</p>
|
||||
|
||||
<div class="note">
|
||||
<div class="note" id="org30f755d">
|
||||
<p>
|
||||
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_iff.m">here</a>.
|
||||
</p>
|
||||
@@ -249,31 +254,31 @@ To run the script, open the Simulink Project, and type <code>run active_damping_
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcb85703" class="outline-3">
|
||||
<h3 id="orgcb85703"><span class="section-number-3">2.1</span> Identification of the Dynamics with perfect Joints</h3>
|
||||
<div id="outline-container-orga2d019b" class="outline-3">
|
||||
<h3 id="orga2d019b"><span class="section-number-3">2.1</span> Identification of the Dynamics with perfect Joints</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
We first initialize the Stewart platform without joint stiffness.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'rot_point'</span>, stewart.platform_F.FO_A);
|
||||
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -281,26 +286,26 @@ controller = initializeController('type', 'open-loop');
|
||||
And we identify the dynamics from force actuators to force sensors.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
<pre class="src src-matlab"><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>;
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N]
|
||||
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">'Taum'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensor Outputs [N]</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
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">'Fm1'</span>, <span class="org-string">'Fm2'</span>, <span class="org-string">'Fm3'</span>, <span class="org-string">'Fm4'</span>, <span class="org-string">'Fm5'</span>, <span class="org-string">'Fm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org8f016dc">4</a>.
|
||||
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org3b3de64">4</a>.
|
||||
</p>
|
||||
|
||||
<div id="org8f016dc" class="figure">
|
||||
<div id="org3b3de64" class="figure">
|
||||
<p><img src="figs/iff_plant_coupling.png" alt="iff_plant_coupling.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Transfer function from the Actuator force \(F_{i}\) to the Force sensor of the same leg \(F_{m,i}\) and to the force sensor of the other legs \(F_{m,j}\) with \(i \neq j\) in grey (<a href="./figs/iff_plant_coupling.png">png</a>, <a href="./figs/iff_plant_coupling.pdf">pdf</a>)</p>
|
||||
@@ -308,17 +313,17 @@ The transfer function from actuator forces to force sensors is shown in Figure <
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4ca24f7" class="outline-3">
|
||||
<h3 id="org4ca24f7"><span class="section-number-3">2.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div id="outline-container-org6ac04ee" class="outline-3">
|
||||
<h3 id="org6ac04ee"><span class="section-number-3">2.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
||||
<pre class="src src-matlab">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>);
|
||||
Gf = linearize(mdl, io);
|
||||
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
Gf.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>};
|
||||
Gf.OutputName = {<span class="org-string">'Fm1'</span>, <span class="org-string">'Fm2'</span>, <span class="org-string">'Fm3'</span>, <span class="org-string">'Fm4'</span>, <span class="org-string">'Fm5'</span>, <span class="org-string">'Fm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -328,16 +333,16 @@ We now use the amplified actuators and re-identify the dynamics
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
||||
Ga = linearize(mdl, io);
|
||||
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
Ga.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>};
|
||||
Ga.OutputName = {<span class="org-string">'Fm1'</span>, <span class="org-string">'Fm2'</span>, <span class="org-string">'Fm3'</span>, <span class="org-string">'Fm4'</span>, <span class="org-string">'Fm5'</span>, <span class="org-string">'Fm6'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org4a92e1b">5</a>.
|
||||
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org1902b8f">5</a>.
|
||||
</p>
|
||||
|
||||
<div id="org4a92e1b" class="figure">
|
||||
<div id="org1902b8f" class="figure">
|
||||
<p><img src="figs/iff_plant_flexible_joint_decentralized.png" alt="iff_plant_flexible_joint_decentralized.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Transfer function from the Actuator force \(F_{i}\) to the force sensor \(F_{m,i}\) (<a href="./figs/iff_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/iff_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
||||
@@ -345,8 +350,8 @@ The new dynamics from force actuator to force sensor is shown in Figure <a href=
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org11e5ee2" class="outline-3">
|
||||
<h3 id="org11e5ee2"><span class="section-number-3">2.3</span> Obtained Damping</h3>
|
||||
<div id="outline-container-org06e1086" class="outline-3">
|
||||
<h3 id="org06e1086"><span class="section-number-3">2.3</span> Obtained Damping</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<p>
|
||||
The control is a performed in a decentralized manner.
|
||||
@@ -360,17 +365,17 @@ The \(6 \times 6\) control is a diagonal matrix with pure integration action on
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The root locus is shown in figure <a href="#orgc8981ba">6</a> and the obtained pole damping function of the control gain is shown in figure <a href="#orgd7fefc7">7</a>.
|
||||
The root locus is shown in figure <a href="#orgce5d8d8">6</a> and the obtained pole damping function of the control gain is shown in figure <a href="#org67419cd">7</a>.
|
||||
</p>
|
||||
|
||||
<div id="orgc8981ba" class="figure">
|
||||
<div id="orgce5d8d8" class="figure">
|
||||
<p><img src="figs/root_locus_iff_rot_stiffness.png" alt="root_locus_iff_rot_stiffness.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Root Locus plot with Decentralized Integral Force Feedback when considering the stiffness of flexible joints (<a href="./figs/root_locus_iff_rot_stiffness.png">png</a>, <a href="./figs/root_locus_iff_rot_stiffness.pdf">pdf</a>)</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgd7fefc7" class="figure">
|
||||
<div id="org67419cd" class="figure">
|
||||
<p><img src="figs/pole_damping_gain_iff_rot_stiffness.png" alt="pole_damping_gain_iff_rot_stiffness.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Damping of the poles with respect to the gain of the Decentralized Integral Force Feedback when considering the stiffness of flexible joints (<a href="./figs/pole_damping_gain_iff_rot_stiffness.png">png</a>, <a href="./figs/pole_damping_gain_iff_rot_stiffness.pdf">pdf</a>)</p>
|
||||
@@ -378,10 +383,10 @@ The root locus is shown in figure <a href="#orgc8981ba">6</a> and the obtained p
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgca67baa" class="outline-3">
|
||||
<h3 id="orgca67baa"><span class="section-number-3">2.4</span> Conclusion</h3>
|
||||
<div id="outline-container-orgfa832d6" class="outline-3">
|
||||
<h3 id="orgfa832d6"><span class="section-number-3">2.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
<div class="important">
|
||||
<div class="important" id="orgad0c17b">
|
||||
<p>
|
||||
The joint stiffness has a huge impact on the attainable active damping performance when using force sensors.
|
||||
Thus, if Integral Force Feedback is to be used in a Stewart platform with flexible joints, the rotational stiffness of the joints should be minimized.
|
||||
@@ -392,14 +397,14 @@ Thus, if Integral Force Feedback is to be used in a Stewart platform with flexib
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org47a29be" class="outline-2">
|
||||
<h2 id="org47a29be"><span class="section-number-2">3</span> Direct Velocity Feedback</h2>
|
||||
<div id="outline-container-orgabec4e1" class="outline-2">
|
||||
<h2 id="orgabec4e1"><span class="section-number-2">3</span> Direct Velocity Feedback</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="orgbdd1eba"></a>
|
||||
<a id="org63027d0"></a>
|
||||
</p>
|
||||
|
||||
<div class="note">
|
||||
<div class="note" id="orgadea9d6">
|
||||
<p>
|
||||
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_dvf.m">here</a>.
|
||||
</p>
|
||||
@@ -411,31 +416,31 @@ To run the script, open the Simulink Project, and type <code>run active_damping_
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc82a6a7" class="outline-3">
|
||||
<h3 id="orgc82a6a7"><span class="section-number-3">3.1</span> Identification of the Dynamics with perfect Joints</h3>
|
||||
<div id="outline-container-org19cbcee" class="outline-3">
|
||||
<h3 id="org19cbcee"><span class="section-number-3">3.1</span> Identification of the Dynamics with perfect Joints</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
We first initialize the Stewart platform without joint stiffness.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'rot_point'</span>, stewart.platform_F.FO_A);
|
||||
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -443,30 +448,30 @@ controller = initializeController('type', 'open-loop');
|
||||
And we identify the dynamics from force actuators to force sensors.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
<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>;
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m]
|
||||
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>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
||||
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>
|
||||
The transfer function from actuator forces to relative motion sensors is shown in Figure <a href="#org6de423c">8</a>.
|
||||
The transfer function from actuator forces to relative motion sensors is shown in Figure <a href="#org34c24ba">8</a>.
|
||||
</p>
|
||||
|
||||
<div id="org6de423c" class="figure">
|
||||
<div id="org34c24ba" class="figure">
|
||||
<p><img src="figs/dvf_plant_coupling.png" alt="dvf_plant_coupling.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Transfer function from the Actuator force \(F_{i}\) to the Relative Motion Sensor \(D_{m,j}\) with \(i \neq j\) (<a href="./figs/dvf_plant_coupling.png">png</a>, <a href="./figs/dvf_plant_coupling.pdf">pdf</a>)</p>
|
||||
@@ -475,17 +480,17 @@ The transfer function from actuator forces to relative motion sensors is shown i
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org92d6cb1" class="outline-3">
|
||||
<h3 id="org92d6cb1"><span class="section-number-3">3.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div id="outline-container-org0fabf01" class="outline-3">
|
||||
<h3 id="org0fabf01"><span class="section-number-3">3.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
||||
<pre class="src src-matlab">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>);
|
||||
Gf = linearize(mdl, io, options);
|
||||
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Gf.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
||||
Gf.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>};
|
||||
Gf.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>
|
||||
|
||||
@@ -495,16 +500,16 @@ We now use the amplified actuators and re-identify the dynamics
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
||||
Ga = linearize(mdl, io, options);
|
||||
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Ga.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
||||
Ga.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>};
|
||||
Ga.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>
|
||||
The new dynamics from force actuator to relative motion sensor is shown in Figure <a href="#org5f559a9">9</a>.
|
||||
The new dynamics from force actuator to relative motion sensor is shown in Figure <a href="#orgba524e3">9</a>.
|
||||
</p>
|
||||
|
||||
<div id="org5f559a9" class="figure">
|
||||
<div id="orgba524e3" class="figure">
|
||||
<p><img src="figs/dvf_plant_flexible_joint_decentralized.png" alt="dvf_plant_flexible_joint_decentralized.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Transfer function from the Actuator force \(F_{i}\) to the relative displacement sensor \(D_{m,i}\) (<a href="./figs/dvf_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/dvf_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
||||
@@ -512,8 +517,8 @@ The new dynamics from force actuator to relative motion sensor is shown in Figur
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7497409" class="outline-3">
|
||||
<h3 id="org7497409"><span class="section-number-3">3.3</span> Obtained Damping</h3>
|
||||
<div id="outline-container-org6c74c9a" class="outline-3">
|
||||
<h3 id="org6c74c9a"><span class="section-number-3">3.3</span> Obtained Damping</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
The control is a performed in a decentralized manner.
|
||||
@@ -527,10 +532,10 @@ The \(6 \times 6\) control is a diagonal matrix with pure derivative action on t
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The root locus is shown in figure <a href="#org5e168d0">10</a>.
|
||||
The root locus is shown in figure <a href="#org0436b4d">10</a>.
|
||||
</p>
|
||||
|
||||
<div id="org5e168d0" class="figure">
|
||||
<div id="org0436b4d" class="figure">
|
||||
<p><img src="figs/root_locus_dvf_rot_stiffness.png" alt="root_locus_dvf_rot_stiffness.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Root Locus plot with Direct Velocity Feedback when considering the Stiffness of flexible joints (<a href="./figs/root_locus_dvf_rot_stiffness.png">png</a>, <a href="./figs/root_locus_dvf_rot_stiffness.pdf">pdf</a>)</p>
|
||||
@@ -538,10 +543,10 @@ The root locus is shown in figure <a href="#org5e168d0">10</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org61c422b" class="outline-3">
|
||||
<h3 id="org61c422b"><span class="section-number-3">3.4</span> Conclusion</h3>
|
||||
<div id="outline-container-org81b2156" class="outline-3">
|
||||
<h3 id="org81b2156"><span class="section-number-3">3.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
<div class="important">
|
||||
<div class="important" id="orgb486ca9">
|
||||
<p>
|
||||
Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors.
|
||||
</p>
|
||||
@@ -551,28 +556,28 @@ Joint stiffness does increase the resonance frequencies of the system but does n
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc84bb75" class="outline-2">
|
||||
<h2 id="orgc84bb75"><span class="section-number-2">4</span> Compliance and Transmissibility Comparison</h2>
|
||||
<div id="outline-container-orgc7e2089" class="outline-2">
|
||||
<h2 id="orgc7e2089"><span class="section-number-2">4</span> Compliance and Transmissibility Comparison</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
</div>
|
||||
<div id="outline-container-orgebeb03b" class="outline-3">
|
||||
<h3 id="orgebeb03b"><span class="section-number-3">4.1</span> Initialization</h3>
|
||||
<div id="outline-container-org6ec3b9e" class="outline-3">
|
||||
<h3 id="org6ec3b9e"><span class="section-number-3">4.1</span> Initialization</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
We first initialize the Stewart platform without joint stiffness.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -580,22 +585,22 @@ stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
The rotation point of the ground is located at the origin of frame \(\{A\}\).
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'rot_point'</span>, stewart.platform_F.FO_A);
|
||||
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdde930c" class="outline-3">
|
||||
<h3 id="orgdde930c"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div id="outline-container-orge87554a" class="outline-3">
|
||||
<h3 id="orge87554a"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<p>
|
||||
Let’s first identify the transmissibility and compliance in the open-loop case.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">controller = initializeController('type', 'open-loop');
|
||||
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
[T_ol, T_norm_ol, freqs] = computeTransmissibility();
|
||||
[C_ol, C_norm_ol, freqs] = computeCompliance();
|
||||
</pre>
|
||||
@@ -605,11 +610,11 @@ Let’s first identify the transmissibility and compliance in the open-loop
|
||||
Now, let’s identify the transmissibility and compliance for the Integral Force Feedback architecture.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">controller = initializeController('type', 'iff');
|
||||
K_iff = (1e4/s)*eye(6);
|
||||
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>);
|
||||
K_iff = (1e4<span class="org-type">/</span>s)<span class="org-type">*</span>eye(6);
|
||||
|
||||
[T_iff, T_norm_iff, ~] = computeTransmissibility();
|
||||
[C_iff, C_norm_iff, ~] = computeCompliance();
|
||||
[T_iff, T_norm_iff, <span class="org-type">~</span>] = computeTransmissibility();
|
||||
[C_iff, C_norm_iff, <span class="org-type">~</span>] = computeCompliance();
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -617,35 +622,35 @@ K_iff = (1e4/s)*eye(6);
|
||||
And for the Direct Velocity Feedback.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">controller = initializeController('type', 'dvf');
|
||||
K_dvf = 1e4*s/(1+s/2/pi/5000)*eye(6);
|
||||
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
|
||||
K_dvf = 1e4<span class="org-type">*</span>s<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>5000)<span class="org-type">*</span>eye(6);
|
||||
|
||||
[T_dvf, T_norm_dvf, ~] = computeTransmissibility();
|
||||
[C_dvf, C_norm_dvf, ~] = computeCompliance();
|
||||
[T_dvf, T_norm_dvf, <span class="org-type">~</span>] = computeTransmissibility();
|
||||
[C_dvf, C_norm_dvf, <span class="org-type">~</span>] = computeCompliance();
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcfd0381" class="outline-3">
|
||||
<h3 id="orgcfd0381"><span class="section-number-3">4.3</span> Results</h3>
|
||||
<div id="outline-container-org1d70ccd" class="outline-3">
|
||||
<h3 id="org1d70ccd"><span class="section-number-3">4.3</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-4-3">
|
||||
|
||||
<div id="orgc1f4c92" class="figure">
|
||||
<div id="org908e692" class="figure">
|
||||
<p><img src="figs/transmissibility_iff_dvf.png" alt="transmissibility_iff_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Obtained transmissibility for Open-Loop Control (Blue), Integral Force Feedback (Red) and Direct Velocity Feedback (Yellow) (<a href="./figs/transmissibility_iff_dvf.png">png</a>, <a href="./figs/transmissibility_iff_dvf.pdf">pdf</a>)</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org2d1b516" class="figure">
|
||||
<div id="orgc10c609" class="figure">
|
||||
<p><img src="figs/compliance_iff_dvf.png" alt="compliance_iff_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Obtained compliance for Open-Loop Control (Blue), Integral Force Feedback (Red) and Direct Velocity Feedback (Yellow) (<a href="./figs/compliance_iff_dvf.png">png</a>, <a href="./figs/compliance_iff_dvf.pdf">pdf</a>)</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgf9b6a2b" class="figure">
|
||||
<div id="orgd54f179" class="figure">
|
||||
<p><img src="figs/frobenius_norm_T_C_iff_dvf.png" alt="frobenius_norm_T_C_iff_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 13: </span>Frobenius norm of the Transmissibility and Compliance Matrices (<a href="./figs/frobenius_norm_T_C_iff_dvf.png">png</a>, <a href="./figs/frobenius_norm_T_C_iff_dvf.pdf">pdf</a>)</p>
|
||||
@@ -656,7 +661,7 @@ K_dvf = 1e4*s/(1+s/2/pi/5000)*eye(6);
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:53</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,145 +0,0 @@
|
||||
.org-bold { /* bold */ font-weight: bold; }
|
||||
.org-bold-italic { /* bold-italic */ font-weight: bold; font-style: italic; }
|
||||
.org-buffer-menu-buffer { /* buffer-menu-buffer */ font-weight: bold; }
|
||||
.org-builtin { /* font-lock-builtin-face */ color: #7a378b; }
|
||||
.org-button { /* button */ text-decoration: underline; }
|
||||
.org-calendar-today { /* calendar-today */ text-decoration: underline; }
|
||||
.org-change-log-acknowledgement { /* change-log-acknowledgement */ color: #b22222; }
|
||||
.org-change-log-conditionals { /* change-log-conditionals */ color: #a0522d; }
|
||||
.org-change-log-date { /* change-log-date */ color: #8b2252; }
|
||||
.org-change-log-email { /* change-log-email */ color: #a0522d; }
|
||||
.org-change-log-file { /* change-log-file */ color: #0000ff; }
|
||||
.org-change-log-function { /* change-log-function */ color: #a0522d; }
|
||||
.org-change-log-list { /* change-log-list */ color: #a020f0; }
|
||||
.org-change-log-name { /* change-log-name */ color: #008b8b; }
|
||||
.org-comint-highlight-input { /* comint-highlight-input */ font-weight: bold; }
|
||||
.org-comint-highlight-prompt { /* comint-highlight-prompt */ color: #00008b; }
|
||||
.org-comment { /* font-lock-comment-face */ color: #999988; font-style: italic; }
|
||||
.org-comment-delimiter { /* font-lock-comment-delimiter-face */ color: #999988; font-style: italic; }
|
||||
.org-completions-annotations { /* completions-annotations */ font-style: italic; }
|
||||
.org-completions-common-part { /* completions-common-part */ color: #000000; background-color: #ffffff; }
|
||||
.org-completions-first-difference { /* completions-first-difference */ font-weight: bold; }
|
||||
.org-constant { /* font-lock-constant-face */ color: #008b8b; }
|
||||
.org-diary { /* diary */ color: #ff0000; }
|
||||
.org-diff-context { /* diff-context */ color: #7f7f7f; }
|
||||
.org-diff-file-header { /* diff-file-header */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-function { /* diff-function */ background-color: #cccccc; }
|
||||
.org-diff-header { /* diff-header */ background-color: #cccccc; }
|
||||
.org-diff-hunk-header { /* diff-hunk-header */ background-color: #cccccc; }
|
||||
.org-diff-index { /* diff-index */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-nonexistent { /* diff-nonexistent */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-refine-change { /* diff-refine-change */ background-color: #d9d9d9; }
|
||||
.org-dired-directory { /* dired-directory */ color: #0000ff; }
|
||||
.org-dired-flagged { /* dired-flagged */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-header { /* dired-header */ color: #228b22; }
|
||||
.org-dired-ignored { /* dired-ignored */ color: #7f7f7f; }
|
||||
.org-dired-mark { /* dired-mark */ color: #008b8b; }
|
||||
.org-dired-marked { /* dired-marked */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-perm-write { /* dired-perm-write */ color: #b22222; }
|
||||
.org-dired-symlink { /* dired-symlink */ color: #a020f0; }
|
||||
.org-dired-warning { /* dired-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-doc { /* font-lock-doc-face */ color: #8b2252; }
|
||||
.org-escape-glyph { /* escape-glyph */ color: #a52a2a; }
|
||||
.org-file-name-shadow { /* file-name-shadow */ color: #7f7f7f; }
|
||||
.org-flyspell-duplicate { /* flyspell-duplicate */ color: #cdad00; font-weight: bold; text-decoration: underline; }
|
||||
.org-flyspell-incorrect { /* flyspell-incorrect */ color: #ff4500; font-weight: bold; text-decoration: underline; }
|
||||
.org-fringe { /* fringe */ background-color: #f2f2f2; }
|
||||
.org-function-name { /* font-lock-function-name-face */ color: teal; }
|
||||
.org-header-line { /* header-line */ color: #333333; background-color: #e5e5e5; }
|
||||
.org-help-argument-name { /* help-argument-name */ font-style: italic; }
|
||||
.org-highlight { /* highlight */ background-color: #b4eeb4; }
|
||||
.org-holiday { /* holiday */ background-color: #ffc0cb; }
|
||||
.org-isearch { /* isearch */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-isearch-fail { /* isearch-fail */ background-color: #ffc1c1; }
|
||||
.org-italic { /* italic */ font-style: italic; }
|
||||
.org-keyword { /* font-lock-keyword-face */ color: #0086b3; }
|
||||
.org-lazy-highlight { /* lazy-highlight */ background-color: #afeeee; }
|
||||
.org-link { /* link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-link-visited { /* link-visited */ color: #8b008b; text-decoration: underline; }
|
||||
.org-log-edit-header { /* log-edit-header */ color: #a020f0; }
|
||||
.org-log-edit-summary { /* log-edit-summary */ color: #0000ff; }
|
||||
.org-log-edit-unknown-header { /* log-edit-unknown-header */ color: #b22222; }
|
||||
.org-match { /* match */ background-color: #ffff00; }
|
||||
.org-next-error { /* next-error */ background-color: #eedc82; }
|
||||
.org-nobreak-space { /* nobreak-space */ color: #a52a2a; text-decoration: underline; }
|
||||
.org-org-archived { /* org-archived */ color: #7f7f7f; }
|
||||
.org-org-block { /* org-block */ color: #7f7f7f; }
|
||||
.org-org-block-begin-line { /* org-block-begin-line */ color: #b22222; }
|
||||
.org-org-block-end-line { /* org-block-end-line */ color: #b22222; }
|
||||
.org-org-checkbox { /* org-checkbox */ font-weight: bold; }
|
||||
.org-org-checkbox-statistics-done { /* org-checkbox-statistics-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-checkbox-statistics-todo { /* org-checkbox-statistics-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-clock-overlay { /* org-clock-overlay */ background-color: #ffff00; }
|
||||
.org-org-code { /* org-code */ color: #7f7f7f; }
|
||||
.org-org-column { /* org-column */ background-color: #e5e5e5; }
|
||||
.org-org-column-title { /* org-column-title */ background-color: #e5e5e5; font-weight: bold; text-decoration: underline; }
|
||||
.org-org-date { /* org-date */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-document-info { /* org-document-info */ color: #191970; }
|
||||
.org-org-document-info-keyword { /* org-document-info-keyword */ color: #7f7f7f; }
|
||||
.org-org-document-title { /* org-document-title */ color: #191970; font-size: 144%; font-weight: bold; }
|
||||
.org-org-done { /* org-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-drawer { /* org-drawer */ color: #0000ff; }
|
||||
.org-org-ellipsis { /* org-ellipsis */ color: #b8860b; text-decoration: underline; }
|
||||
.org-org-footnote { /* org-footnote */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-formula { /* org-formula */ color: #b22222; }
|
||||
.org-org-headline-done { /* org-headline-done */ color: #bc8f8f; }
|
||||
.org-org-hide { /* org-hide */ color: #ffffff; }
|
||||
.org-org-latex-and-export-specials { /* org-latex-and-export-specials */ color: #8b4513; }
|
||||
.org-org-level-1 { /* org-level-1 */ color: #0000ff; }
|
||||
.org-org-level-2 { /* org-level-2 */ color: #a0522d; }
|
||||
.org-org-level-3 { /* org-level-3 */ color: #a020f0; }
|
||||
.org-org-level-4 { /* org-level-4 */ color: #b22222; }
|
||||
.org-org-level-5 { /* org-level-5 */ color: #228b22; }
|
||||
.org-org-level-6 { /* org-level-6 */ color: #008b8b; }
|
||||
.org-org-level-7 { /* org-level-7 */ color: #7a378b; }
|
||||
.org-org-level-8 { /* org-level-8 */ color: #8b2252; }
|
||||
.org-org-link { /* org-link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-org-meta-line { /* org-meta-line */ color: #b22222; }
|
||||
.org-org-mode-line-clock { /* org-mode-line-clock */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-org-mode-line-clock-overrun { /* org-mode-line-clock-overrun */ color: #000000; background-color: #ff0000; }
|
||||
.org-org-quote { /* org-quote */ color: #7f7f7f; }
|
||||
.org-org-scheduled { /* org-scheduled */ color: #006400; }
|
||||
.org-org-scheduled-previously { /* org-scheduled-previously */ color: #b22222; }
|
||||
.org-org-scheduled-today { /* org-scheduled-today */ color: #006400; }
|
||||
.org-org-sexp-date { /* org-sexp-date */ color: #a020f0; }
|
||||
.org-org-special-keyword { /* org-special-keyword */ color: #a020f0; }
|
||||
.org-org-table { /* org-table */ color: #0000ff; }
|
||||
.org-org-tag { /* org-tag */ font-weight: bold; }
|
||||
.org-org-target { /* org-target */ text-decoration: underline; }
|
||||
.org-org-time-grid { /* org-time-grid */ color: #b8860b; }
|
||||
.org-org-todo { /* org-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-upcoming-deadline { /* org-upcoming-deadline */ color: #b22222; }
|
||||
.org-org-verbatim { /* org-verbatim */ color: #7f7f7f; }
|
||||
.org-org-verse { /* org-verse */ color: #7f7f7f; }
|
||||
.org-org-warning { /* org-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-outline-1 { /* outline-1 */ color: #0000ff; }
|
||||
.org-outline-2 { /* outline-2 */ color: #a0522d; }
|
||||
.org-outline-3 { /* outline-3 */ color: #a020f0; }
|
||||
.org-outline-4 { /* outline-4 */ color: #b22222; }
|
||||
.org-outline-5 { /* outline-5 */ color: #228b22; }
|
||||
.org-outline-6 { /* outline-6 */ color: #008b8b; }
|
||||
.org-outline-7 { /* outline-7 */ color: #7a378b; }
|
||||
.org-outline-8 { /* outline-8 */ color: #8b2252; }
|
||||
.org-preprocessor { /* font-lock-preprocessor-face */ color: #7a378b; }
|
||||
.org-query-replace { /* query-replace */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-regexp-grouping-backslash { /* font-lock-regexp-grouping-backslash */ font-weight: bold; }
|
||||
.org-regexp-grouping-construct { /* font-lock-regexp-grouping-construct */ font-weight: bold; }
|
||||
.org-region { /* region */ background-color: #eedc82; }
|
||||
.org-secondary-selection { /* secondary-selection */ background-color: #ffff00; }
|
||||
.org-shadow { /* shadow */ color: #7f7f7f; }
|
||||
.org-show-paren-match { /* show-paren-match */ background-color: #40e0d0; }
|
||||
.org-show-paren-mismatch { /* show-paren-mismatch */ color: #ffffff; background-color: #a020f0; }
|
||||
.org-string { /* font-lock-string-face */ color: #dd1144; }
|
||||
.org-tool-bar { /* tool-bar */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-tooltip { /* tooltip */ color: #000000; background-color: #ffffe0; }
|
||||
.org-trailing-whitespace { /* trailing-whitespace */ background-color: #ff0000; }
|
||||
.org-type { /* font-lock-type-face */ color: #228b22; }
|
||||
.org-underline { /* underline */ text-decoration: underline; }
|
||||
.org-variable-name { /* font-lock-variable-name-face */ color: teal; }
|
||||
.org-warning { /* font-lock-warning-face */ color: #ff0000; font-weight: bold; }
|
||||
.org-widget-button { /* widget-button */ font-weight: bold; }
|
||||
.org-widget-button-pressed { /* widget-button-pressed */ color: #ff0000; }
|
||||
.org-widget-documentation { /* widget-documentation */ color: #006400; }
|
||||
.org-widget-field { /* widget-field */ background-color: #d9d9d9; }
|
||||
.org-widget-inactive { /* widget-inactive */ color: #7f7f7f; }
|
||||
.org-widget-single-line-field { /* widget-single-line-field */ background-color: #d9d9d9; }
|
@@ -3,25 +3,30 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:52 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platform - Dynamics Study</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>MathJax = {
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<script>
|
||||
MathJax = {
|
||||
svg: {
|
||||
scale: 1,
|
||||
fontCache: "global"
|
||||
},
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],}
|
||||
tags: "ams",
|
||||
multlineWidth: "%MULTLINEWIDTH",
|
||||
tagSide: "right",
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],},
|
||||
tagIndent: ".8em"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
@@ -34,49 +39,49 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgc59e712">1. Compare external forces and forces applied by the actuators</a>
|
||||
<li><a href="#org7743c04">1. Compare external forces and forces applied by the actuators</a>
|
||||
<ul>
|
||||
<li><a href="#org4509b7d">1.1. Comparison with fixed support</a></li>
|
||||
<li><a href="#org8662186">1.2. Comparison with a flexible support</a></li>
|
||||
<li><a href="#org55e0dad">1.3. Conclusion</a></li>
|
||||
<li><a href="#orgc730bef">1.1. Comparison with fixed support</a></li>
|
||||
<li><a href="#orgefde538">1.2. Comparison with a flexible support</a></li>
|
||||
<li><a href="#orga9eb2fd">1.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org81ab204">2. Comparison of the static transfer function and the Compliance matrix</a>
|
||||
<li><a href="#orgb6a1ef7">2. Comparison of the static transfer function and the Compliance matrix</a>
|
||||
<ul>
|
||||
<li><a href="#orge7e7242">2.1. Analysis</a></li>
|
||||
<li><a href="#org9ee3939">2.2. Conclusion</a></li>
|
||||
<li><a href="#org3f1c253">2.1. Analysis</a></li>
|
||||
<li><a href="#orge261263">2.2. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc59e712" class="outline-2">
|
||||
<h2 id="orgc59e712"><span class="section-number-2">1</span> Compare external forces and forces applied by the actuators</h2>
|
||||
<div id="outline-container-org7743c04" class="outline-2">
|
||||
<h2 id="org7743c04"><span class="section-number-2">1</span> Compare external forces and forces applied by the actuators</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
In this section, we wish to compare the effect of forces/torques applied by the actuators with the effect of external forces/torques on the displacement of the mobile platform.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4509b7d" class="outline-3">
|
||||
<h3 id="org4509b7d"><span class="section-number-3">1.1</span> Comparison with fixed support</h3>
|
||||
<div id="outline-container-orgc730bef" class="outline-3">
|
||||
<h3 id="orgc730bef"><span class="section-number-3">1.1</span> Comparison with fixed support</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
Let’s generate a Stewart platform.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -85,9 +90,9 @@ We don’t put any flexibility below the Stewart platform such that <b>its b
|
||||
We also don’t put any payload on top of the Stewart platform.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'none');
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<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>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -95,22 +100,22 @@ controller = initializeController('type', 'open-loop');
|
||||
The transfer function from actuator forces \(\bm{\tau}\) to the relative displacement of the mobile platform \(\mathcal{\bm{X}}\) is extracted.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
<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>;
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
|
||||
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">'/Relative Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position/Orientation of {B} w.r.t. {A}</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
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">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -118,8 +123,8 @@ G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
Using the Jacobian matrix, we compute the transfer function from force/torques applied by the actuators on the frame \(\{B\}\) fixed to the mobile platform:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Gc = minreal(G*inv(stewart.kinematics.J'));
|
||||
Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
<pre class="src src-matlab">Gc = minreal(G<span class="org-type">*</span>inv(stewart.kinematics.J<span class="org-type">'</span>));
|
||||
Gc.InputName = {<span class="org-string">'Fnx'</span>, <span class="org-string">'Fny'</span>, <span class="org-string">'Fnz'</span>, <span class="org-string">'Mnx'</span>, <span class="org-string">'Mny'</span>, <span class="org-string">'Mnz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -127,35 +132,35 @@ Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
We also extract the transfer function from external forces \(\bm{\mathcal{F}}_{\text{ext}}\) on the frame \(\{B\}\) fixed to the mobile platform to the relative displacement \(\mathcal{\bm{X}}\) of \(\{B\}\) with respect to frame \(\{A\}\):
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Input/Output definition
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext'); io_i = io_i + 1; % External forces/torques applied on {B}
|
||||
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
|
||||
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'F_ext'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External forces/torques applied on {B}</span>
|
||||
io(io_i) = linio([mdl, <span class="org-string">'/Relative Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position/Orientation of {B} w.r.t. {A}</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
Gd = linearize(mdl, io, options);
|
||||
Gd.InputName = {'Fex', 'Fey', 'Fez', 'Mex', 'Mey', 'Mez'};
|
||||
Gd.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
Gd.InputName = {<span class="org-string">'Fex'</span>, <span class="org-string">'Fey'</span>, <span class="org-string">'Fez'</span>, <span class="org-string">'Mex'</span>, <span class="org-string">'Mey'</span>, <span class="org-string">'Mez'</span>};
|
||||
Gd.OutputName = {<span class="org-string">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The comparison of the two transfer functions is shown in Figure <a href="#orgbf9a54a">1</a>.
|
||||
The comparison of the two transfer functions is shown in Figure <a href="#org2de43b3">1</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgbf9a54a" class="figure">
|
||||
<div id="org2de43b3" class="figure">
|
||||
<p><img src="figs/comparison_Fext_F_fixed_base.png" alt="comparison_Fext_F_fixed_base.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Comparison of the transfer functions from \(\bm{\mathcal{F}}\) to \(\mathcal{\bm{X}}\) and from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\) (<a href="./figs/comparison_Fext_F_fixed_base.png">png</a>, <a href="./figs/comparison_Fext_F_fixed_base.pdf">pdf</a>)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
This can be understood from figure <a href="#org8bd3e63">2</a> where \(\mathcal{F}_{x}\) and \(\mathcal{F}_{x,\text{ext}}\) have clearly the same effect on \(\mathcal{X}_{x}\).
|
||||
This can be understood from figure <a href="#orgd6db375">2</a> where \(\mathcal{F}_{x}\) and \(\mathcal{F}_{x,\text{ext}}\) have clearly the same effect on \(\mathcal{X}_{x}\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org8bd3e63" class="figure">
|
||||
<div id="orgd6db375" class="figure">
|
||||
<p><img src="figs/1dof_actuator_external_forces.png" alt="1dof_actuator_external_forces.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Schematic representation of the stewart platform on a rigid support</p>
|
||||
@@ -163,14 +168,14 @@ This can be understood from figure <a href="#org8bd3e63">2</a> where \(\mathcal{
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8662186" class="outline-3">
|
||||
<h3 id="org8662186"><span class="section-number-3">1.2</span> Comparison with a flexible support</h3>
|
||||
<div id="outline-container-orgefde538" class="outline-3">
|
||||
<h3 id="orgefde538"><span class="section-number-3">1.2</span> Comparison with a flexible support</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
We now add a flexible support under the Stewart platform.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'flexible');
|
||||
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -178,50 +183,50 @@ We now add a flexible support under the Stewart platform.
|
||||
And we perform again the identification.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Input/Output definition
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
|
||||
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">'/Relative Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position/Orientation of {B} w.r.t. {A}</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
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">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
|
||||
|
||||
Gc = minreal(G*inv(stewart.kinematics.J'));
|
||||
Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
Gc = minreal(G<span class="org-type">*</span>inv(stewart.kinematics.J<span class="org-type">'</span>));
|
||||
Gc.InputName = {<span class="org-string">'Fnx'</span>, <span class="org-string">'Fny'</span>, <span class="org-string">'Fnz'</span>, <span class="org-string">'Mnx'</span>, <span class="org-string">'Mny'</span>, <span class="org-string">'Mnz'</span>};
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext'); io_i = io_i + 1; % External forces/torques applied on {B}
|
||||
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
|
||||
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'F_ext'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External forces/torques applied on {B}</span>
|
||||
io(io_i) = linio([mdl, <span class="org-string">'/Relative Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position/Orientation of {B} w.r.t. {A}</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
Gd = linearize(mdl, io, options);
|
||||
Gd.InputName = {'Fex', 'Fey', 'Fez', 'Mex', 'Mey', 'Mez'};
|
||||
Gd.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
Gd.InputName = {<span class="org-string">'Fex'</span>, <span class="org-string">'Fey'</span>, <span class="org-string">'Fez'</span>, <span class="org-string">'Mex'</span>, <span class="org-string">'Mey'</span>, <span class="org-string">'Mez'</span>};
|
||||
Gd.OutputName = {<span class="org-string">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The comparison between the obtained transfer functions is shown in Figure <a href="#orga2f2bd5">3</a>.
|
||||
The comparison between the obtained transfer functions is shown in Figure <a href="#org593368e">3</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orga2f2bd5" class="figure">
|
||||
<div id="org593368e" class="figure">
|
||||
<p><img src="figs/comparison_Fext_F_flexible_base.png" alt="comparison_Fext_F_flexible_base.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Comparison of the transfer functions from \(\bm{\mathcal{F}}\) to \(\mathcal{\bm{X}}\) and from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\) (<a href="./figs/comparison_Fext_F_flexible_base.png">png</a>, <a href="./figs/comparison_Fext_F_flexible_base.pdf">pdf</a>)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The addition of a flexible support can be schematically represented in Figure <a href="#orgee3ecbe">4</a>.
|
||||
The addition of a flexible support can be schematically represented in Figure <a href="#orga537ded">4</a>.
|
||||
We see that \(\mathcal{F}_{x}\) applies a force both on \(m\) and \(m^{\prime}\) whereas \(\mathcal{F}_{x,\text{ext}}\) only applies a force on \(m\).
|
||||
And thus \(\mathcal{F}_{x}\) and \(\mathcal{F}_{x,\text{ext}}\) have clearly <b>not</b> the same effect on \(\mathcal{X}_{x}\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgee3ecbe" class="figure">
|
||||
<div id="orga537ded" class="figure">
|
||||
<p><img src="figs/2dof_actuator_external_forces.png" alt="2dof_actuator_external_forces.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Schematic representation of the stewart platform on top of a flexible support</p>
|
||||
@@ -230,10 +235,10 @@ And thus \(\mathcal{F}_{x}\) and \(\mathcal{F}_{x,\text{ext}}\) have clearly <b>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org55e0dad" class="outline-3">
|
||||
<h3 id="org55e0dad"><span class="section-number-3">1.3</span> Conclusion</h3>
|
||||
<div id="outline-container-orga9eb2fd" class="outline-3">
|
||||
<h3 id="orga9eb2fd"><span class="section-number-3">1.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<div class="important">
|
||||
<div class="important" id="org4878fef">
|
||||
<p>
|
||||
The transfer function from forces/torques applied by the actuators on the payload \(\bm{\mathcal{F}} = \bm{J}^T \bm{\tau}\) to the pose of the mobile platform \(\bm{\mathcal{X}}\) is the same as the transfer function from external forces/torques to \(\bm{\mathcal{X}}\) as long as the Stewart platform’s base is fixed.
|
||||
</p>
|
||||
@@ -243,32 +248,32 @@ The transfer function from forces/torques applied by the actuators on the payloa
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org81ab204" class="outline-2">
|
||||
<h2 id="org81ab204"><span class="section-number-2">2</span> Comparison of the static transfer function and the Compliance matrix</h2>
|
||||
<div id="outline-container-orgb6a1ef7" class="outline-2">
|
||||
<h2 id="orgb6a1ef7"><span class="section-number-2">2</span> Comparison of the static transfer function and the Compliance matrix</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
In this section, we see how the Compliance matrix of the Stewart platform is linked to the static relation between \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge7e7242" class="outline-3">
|
||||
<h3 id="orge7e7242"><span class="section-number-3">2.1</span> Analysis</h3>
|
||||
<div id="outline-container-org3f1c253" class="outline-3">
|
||||
<h3 id="org3f1c253"><span class="section-number-3">2.1</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
Initialization of the Stewart platform.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart);
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeStrutDynamics(stewart);
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal_p'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical_p'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -276,9 +281,9 @@ stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
No flexibility below the Stewart platform and no payload.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground = initializeGround('type', 'none');
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
<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>);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -286,28 +291,28 @@ controller = initializeController('type', 'open-loop');
|
||||
Estimation of the transfer function from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\):
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
<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>;
|
||||
|
||||
%% Input/Output definition
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A}
|
||||
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">'/Relative Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position/Orientation of {B} w.r.t. {A}</span>
|
||||
|
||||
%% Run the linearization
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
|
||||
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">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Gc = minreal(G*inv(stewart.kinematics.J'));
|
||||
Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
|
||||
<pre class="src src-matlab">Gc = minreal(G<span class="org-type">*</span>inv(stewart.kinematics.J<span class="org-type">'</span>));
|
||||
Gc.InputName = {<span class="org-string">'Fnx'</span>, <span class="org-string">'Fny'</span>, <span class="org-string">'Fnz'</span>, <span class="org-string">'Mnx'</span>, <span class="org-string">'Mny'</span>, <span class="org-string">'Mnz'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -465,10 +470,10 @@ And now at the Compliance matrix.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9ee3939" class="outline-3">
|
||||
<h3 id="org9ee3939"><span class="section-number-3">2.2</span> Conclusion</h3>
|
||||
<div id="outline-container-orge261263" class="outline-3">
|
||||
<h3 id="orge261263"><span class="section-number-3">2.2</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<div class="important">
|
||||
<div class="important" id="org2428297">
|
||||
<p>
|
||||
The low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\) corresponds to the compliance matrix of the Stewart platform.
|
||||
</p>
|
||||
@@ -480,7 +485,7 @@ The low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathc
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:52</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
BIN
docs/figs/afzali_parametrization_hexapod.png
Normal file
After Width: | Height: | Size: 179 KiB |
BIN
docs/figs/afzali_stewart_platform_characteristics.png
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
docs/figs/afzali_top_view.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
docs/figs/comp_relative_motion_sensor_act_leg.pdf
Normal file
BIN
docs/figs/comp_relative_motion_sensor_act_leg.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
docs/figs/comp_relative_motion_sensor_act_leg_encoder.pdf
Normal file
BIN
docs/figs/comp_relative_motion_sensor_act_leg_encoder.png
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
docs/figs/introduction_stewart_mov_pos.pdf
Normal file
BIN
docs/figs/introduction_stewart_mov_pos.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/figs/introduction_stewart_rest_pos.pdf
Normal file
BIN
docs/figs/introduction_stewart_rest_pos.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
docs/figs/stewart_examples/stewart_beijen.jpg
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
docs/figs/stewart_examples/stewart_cleary.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
docs/figs/stewart_examples/stewart_czech.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
docs/figs/stewart_examples/stewart_dong07.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
docs/figs/stewart_examples/stewart_du14.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
docs/figs/stewart_examples/stewart_furutani.jpg
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
docs/figs/stewart_examples/stewart_geng.jpg
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
docs/figs/stewart_examples/stewart_ht_uw.jpg
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
docs/figs/stewart_examples/stewart_iran.jpg
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
docs/figs/stewart_examples/stewart_jpl.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
docs/figs/stewart_examples/stewart_kim00.jpg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
docs/figs/stewart_examples/stewart_mais.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
docs/figs/stewart_examples/stewart_nanoscale.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
docs/figs/stewart_examples/stewart_naval.jpg
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
docs/figs/stewart_examples/stewart_naves.jpg
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
docs/figs/stewart_examples/stewart_pph.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
docs/figs/stewart_examples/stewart_satra.jpg
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
docs/figs/stewart_examples/stewart_su04.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
docs/figs/stewart_examples/stewart_tang18.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
docs/figs/stewart_examples/stewart_ting07.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
docs/figs/stewart_examples/stewart_torii.jpg
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
docs/figs/stewart_examples/stewart_ulb_pz.jpg
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
docs/figs/stewart_examples/stewart_ulb_vc.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
docs/figs/stewart_examples/stewart_uqp.jpg
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
docs/figs/stewart_examples/stewart_uw_gsp.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
docs/figs/stewart_examples/stewart_wang16.jpg
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
docs/figs/stewart_examples/stewart_yang19.jpg
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
docs/figs/stewart_examples/stewart_zhang11.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
@@ -3,51 +3,45 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:30 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platforms</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
<a accesskey="h" href="index.html"> UP </a>
|
||||
<a accesskey="h" href="https://research.tdehaeze.xyz/"> UP </a>
|
||||
|
|
||||
<a accesskey="H" href="index.html"> HOME </a>
|
||||
<a accesskey="H" href="https://research.tdehaeze.xyz/"> HOME </a>
|
||||
</div><div id="content">
|
||||
<h1 class="title">Stewart Platforms</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgff0bfd7">1. Simulink Project (link)</a></li>
|
||||
<li><a href="#org38b9089">2. Stewart Platform Architecture Definition (link)</a></li>
|
||||
<li><a href="#orgf1c7b3b">3. Simscape Model of the Stewart Platform (link)</a></li>
|
||||
<li><a href="#org369c8bb">4. Kinematic Analysis (link)</a></li>
|
||||
<li><a href="#org2e3169e">5. Identification of the Stewart Dynamics (link)</a></li>
|
||||
<li><a href="#org0fdb910">6. Control</a></li>
|
||||
<li><a href="#org1f468b1">7. Cubic Configuration (link)</a></li>
|
||||
<li><a href="#orga2bd0e9">8. Bibliography (link)</a></li>
|
||||
<li><a href="#orgad01eeb">1. Simulink Project (link)</a></li>
|
||||
<li><a href="#orgf0936f9">2. Stewart Platform Architecture Definition (link)</a></li>
|
||||
<li><a href="#org4bef8ba">3. Simscape Model of the Stewart Platform (link)</a></li>
|
||||
<li><a href="#orgfd134cc">4. Kinematic Analysis (link)</a></li>
|
||||
<li><a href="#org2e5eede">5. Identification of the Stewart Dynamics (link)</a></li>
|
||||
<li><a href="#orgb272d52">6. Control</a></li>
|
||||
<li><a href="#org7c7008e">7. Cubic Configuration (link)</a></li>
|
||||
<li><a href="#org1f2f2c6">8. Bibliography (link)</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The goal of this project is to provide a Matlab/Simscape Toolbox to study Stewart platforms.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The project is divided into several section listed below.
|
||||
The git repository of the project is accessible <a href="https://git.tdehaeze.xyz/tdehaeze/stewart-simscape">here</a>.
|
||||
</p>
|
||||
|
||||
<div id="outline-container-orgff0bfd7" class="outline-2">
|
||||
<h2 id="orgff0bfd7"><span class="section-number-2">1</span> Simulink Project (<a href="simulink-project.html">link</a>)</h2>
|
||||
<div id="outline-container-orgad01eeb" class="outline-2">
|
||||
<h2 id="orgad01eeb"><span class="section-number-2">1</span> Simulink Project (<a href="simulink-project.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
The project is managed with a <b>Simulink Project</b>.
|
||||
@@ -56,8 +50,8 @@ Such project is briefly presented <a href="simulink-project.html">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org38b9089" class="outline-2">
|
||||
<h2 id="org38b9089"><span class="section-number-2">2</span> Stewart Platform Architecture Definition (<a href="stewart-architecture.html">link</a>)</h2>
|
||||
<div id="outline-container-orgf0936f9" class="outline-2">
|
||||
<h2 id="orgf0936f9"><span class="section-number-2">2</span> Stewart Platform Architecture Definition (<a href="stewart-architecture.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
The way the Stewart Platform is defined is explained <a href="stewart-architecture.html">here</a>.
|
||||
@@ -82,8 +76,8 @@ Other parameters are also defined such as:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf1c7b3b" class="outline-2">
|
||||
<h2 id="orgf1c7b3b"><span class="section-number-2">3</span> Simscape Model of the Stewart Platform (<a href="simscape-model.html">link</a>)</h2>
|
||||
<div id="outline-container-org4bef8ba" class="outline-2">
|
||||
<h2 id="org4bef8ba"><span class="section-number-2">3</span> Simscape Model of the Stewart Platform (<a href="simscape-model.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
The Stewart Platform is then modeled using <a href="https://www.mathworks.com/products/simscape.html">Simscape</a>.
|
||||
@@ -95,8 +89,8 @@ The way to model is build and works is explained <a href="simscape-model.html">h
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org369c8bb" class="outline-2">
|
||||
<h2 id="org369c8bb"><span class="section-number-2">4</span> Kinematic Analysis (<a href="kinematic-study.html">link</a>)</h2>
|
||||
<div id="outline-container-orgfd134cc" class="outline-2">
|
||||
<h2 id="orgfd134cc"><span class="section-number-2">4</span> Kinematic Analysis (<a href="kinematic-study.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
From the defined geometry of the Stewart platform, we can perform static analysis such as:
|
||||
@@ -116,8 +110,8 @@ All these analysis are described <a href="kinematic-study.html">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2e3169e" class="outline-2">
|
||||
<h2 id="org2e3169e"><span class="section-number-2">5</span> Identification of the Stewart Dynamics (<a href="identification.html">link</a>)</h2>
|
||||
<div id="outline-container-org2e5eede" class="outline-2">
|
||||
<h2 id="org2e5eede"><span class="section-number-2">5</span> Identification of the Stewart Dynamics (<a href="identification.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
The Dynamics of the Stewart platform can be identified using the Simscape model.
|
||||
@@ -138,8 +132,8 @@ The code that is used for identification is explained <a href="identification.ht
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0fdb910" class="outline-2">
|
||||
<h2 id="org0fdb910"><span class="section-number-2">6</span> Control</h2>
|
||||
<div id="outline-container-orgb272d52" class="outline-2">
|
||||
<h2 id="orgb272d52"><span class="section-number-2">6</span> Control</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
<p>
|
||||
The use of active control for Stewart platforms is a wide subject.
|
||||
@@ -182,8 +176,8 @@ Different control architectures (centralized and decentralized) are compared for
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1f468b1" class="outline-2">
|
||||
<h2 id="org1f468b1"><span class="section-number-2">7</span> Cubic Configuration (<a href="cubic-configuration.html">link</a>)</h2>
|
||||
<div id="outline-container-org7c7008e" class="outline-2">
|
||||
<h2 id="org7c7008e"><span class="section-number-2">7</span> Cubic Configuration (<a href="cubic-configuration.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-7">
|
||||
<p>
|
||||
The cubic configuration is a special class of Stewart platform that has interesting properties.
|
||||
@@ -195,8 +189,8 @@ These properties are studied in <a href="cubic-configuration.html">this</a> docu
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga2bd0e9" class="outline-2">
|
||||
<h2 id="orga2bd0e9"><span class="section-number-2">8</span> Bibliography (<a href="bibliography.html">link</a>)</h2>
|
||||
<div id="outline-container-org1f2f2c6" class="outline-2">
|
||||
<h2 id="org1f2f2c6"><span class="section-number-2">8</span> Bibliography (<a href="bibliography.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-8">
|
||||
<p>
|
||||
Many text books, PhD thesis and articles related to parallel robots and Stewart platforms are gathered in <a href="bibliography.html">this</a> document.
|
||||
@@ -206,7 +200,7 @@ Many text books, PhD thesis and articles related to parallel robots and Stewart
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:30</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
7
docs/js/bootstrap.min.js
vendored
4
docs/js/jquery.min.js
vendored
1
docs/js/jquery.stickytableheaders.min.js
vendored
@@ -1 +0,0 @@
|
||||
!function(a,b){"use strict";function c(c,g){var h=this;h.$el=a(c),h.el=c,h.id=e++,h.$window=a(b),h.$document=a(document),h.$el.bind("destroyed",a.proxy(h.teardown,h)),h.$clonedHeader=null,h.$originalHeader=null,h.isSticky=!1,h.hasBeenSticky=!1,h.leftOffset=null,h.topOffset=null,h.init=function(){h.$el.each(function(){var b=a(this);b.css("padding",0),h.$originalHeader=a("thead:first",this),h.$clonedHeader=h.$originalHeader.clone(),b.trigger("clonedHeader."+d,[h.$clonedHeader]),h.$clonedHeader.addClass("tableFloatingHeader"),h.$clonedHeader.css("display","none"),h.$originalHeader.addClass("tableFloatingHeaderOriginal"),h.$originalHeader.after(h.$clonedHeader),h.$printStyle=a('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'),a("head").append(h.$printStyle)}),h.setOptions(g),h.updateWidth(),h.toggleHeaders(),h.bind()},h.destroy=function(){h.$el.unbind("destroyed",h.teardown),h.teardown()},h.teardown=function(){h.isSticky&&h.$originalHeader.css("position","static"),a.removeData(h.el,"plugin_"+d),h.unbind(),h.$clonedHeader.remove(),h.$originalHeader.removeClass("tableFloatingHeaderOriginal"),h.$originalHeader.css("visibility","visible"),h.$printStyle.remove(),h.el=null,h.$el=null},h.bind=function(){h.$scrollableArea.on("scroll."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.on("scroll."+d+h.id,h.setPositionValues),h.$window.on("resize."+d+h.id,h.toggleHeaders)),h.$scrollableArea.on("resize."+d,h.toggleHeaders),h.$scrollableArea.on("resize."+d,h.updateWidth)},h.unbind=function(){h.$scrollableArea.off("."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.off("."+d+h.id,h.setPositionValues),h.$window.off("."+d+h.id,h.toggleHeaders)),h.$scrollableArea.off("."+d,h.updateWidth)},h.toggleHeaders=function(){h.$el&&h.$el.each(function(){var b,c=a(this),d=h.isWindowScrolling?isNaN(h.options.fixedOffset)?h.options.fixedOffset.outerHeight():h.options.fixedOffset:h.$scrollableArea.offset().top+(isNaN(h.options.fixedOffset)?0:h.options.fixedOffset),e=c.offset(),f=h.$scrollableArea.scrollTop()+d,g=h.$scrollableArea.scrollLeft(),i=h.isWindowScrolling?f>e.top:d>e.top,j=(h.isWindowScrolling?f:0)<e.top+c.height()-h.$clonedHeader.height()-(h.isWindowScrolling?0:d);i&&j?(b=e.left-g+h.options.leftOffset,h.$originalHeader.css({position:"fixed","margin-top":h.options.marginTop,left:b,"z-index":3}),h.leftOffset=b,h.topOffset=d,h.$clonedHeader.css("display",""),h.isSticky||(h.isSticky=!0,h.updateWidth()),h.setPositionValues()):h.isSticky&&(h.$originalHeader.css("position","static"),h.$clonedHeader.css("display","none"),h.isSticky=!1,h.resetWidth(a("td,th",h.$clonedHeader),a("td,th",h.$originalHeader)))})},h.setPositionValues=function(){var a=h.$window.scrollTop(),b=h.$window.scrollLeft();!h.isSticky||0>a||a+h.$window.height()>h.$document.height()||0>b||b+h.$window.width()>h.$document.width()||h.$originalHeader.css({top:h.topOffset-(h.isWindowScrolling?0:a),left:h.leftOffset-(h.isWindowScrolling?0:b)})},h.updateWidth=function(){if(h.isSticky){h.$originalHeaderCells||(h.$originalHeaderCells=a("th,td",h.$originalHeader)),h.$clonedHeaderCells||(h.$clonedHeaderCells=a("th,td",h.$clonedHeader));var b=h.getWidth(h.$clonedHeaderCells);h.setWidth(b,h.$clonedHeaderCells,h.$originalHeaderCells),h.$originalHeader.css("width",h.$clonedHeader.width())}},h.getWidth=function(c){var d=[];return c.each(function(c){var e,f=a(this);if("border-box"===f.css("box-sizing"))e=f[0].getBoundingClientRect().width;else{var g=a("th",h.$originalHeader);if("collapse"===g.css("border-collapse"))if(b.getComputedStyle)e=parseFloat(b.getComputedStyle(this,null).width);else{var i=parseFloat(f.css("padding-left")),j=parseFloat(f.css("padding-right")),k=parseFloat(f.css("border-width"));e=f.outerWidth()-i-j-k}else e=f.width()}d[c]=e}),d},h.setWidth=function(a,b,c){b.each(function(b){var d=a[b];c.eq(b).css({"min-width":d,"max-width":d})})},h.resetWidth=function(b,c){b.each(function(b){var d=a(this);c.eq(b).css({"min-width":d.css("min-width"),"max-width":d.css("max-width")})})},h.setOptions=function(c){h.options=a.extend({},f,c),h.$scrollableArea=a(h.options.scrollableArea),h.isWindowScrolling=h.$scrollableArea[0]===b},h.updateOptions=function(a){h.setOptions(a),h.unbind(),h.bind(),h.updateWidth(),h.toggleHeaders()},h.init()}var d="stickyTableHeaders",e=0,f={fixedOffset:0,leftOffset:0,marginTop:0,scrollableArea:b};a.fn[d]=function(b){return this.each(function(){var e=a.data(this,"plugin_"+d);e?"string"==typeof b?e[b].apply(e):e.updateOptions(b):"destroy"!==b&&a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window);
|
@@ -1,85 +0,0 @@
|
||||
$(function() {
|
||||
$('.note').before("<p class='admonition-title note'>Note</p>");
|
||||
$('.seealso').before("<p class='admonition-title seealso'>See also</p>");
|
||||
$('.warning').before("<p class='admonition-title warning'>Warning</p>");
|
||||
$('.caution').before("<p class='admonition-title caution'>Caution</p>");
|
||||
$('.attention').before("<p class='admonition-title attention'>Attention</p>");
|
||||
$('.tip').before("<p class='admonition-title tip'>Tip</p>");
|
||||
$('.important').before("<p class='admonition-title important'>Important</p>");
|
||||
$('.hint').before("<p class='admonition-title hint'>Hint</p>");
|
||||
$('.error').before("<p class='admonition-title error'>Error</p>");
|
||||
$('.danger').before("<p class='admonition-title danger'>Danger</p>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Close menu when you click a link.
|
||||
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
$(document).on('click', "[data-toggle='rst-current-version']", function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
// Make tables responsive
|
||||
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
$('#text-table-of-contents ul').first().addClass('nav');
|
||||
// ScrollSpy also requires that we use
|
||||
// a Bootstrap nav component.
|
||||
$('body').scrollspy({target: '#text-table-of-contents'});
|
||||
|
||||
// add sticky table headers
|
||||
$('table').stickyTableHeaders();
|
||||
|
||||
// set the height of tableOfContents
|
||||
var $postamble = $('#postamble');
|
||||
var $tableOfContents = $('#table-of-contents');
|
||||
$tableOfContents.css({paddingBottom: $postamble.outerHeight()});
|
||||
|
||||
// add TOC button
|
||||
var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
|
||||
$('#content').prepend(toggleSidebar);
|
||||
|
||||
// add close button when sidebar showed in mobile screen
|
||||
var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
|
||||
var tocTitle = $('#table-of-contents').find('h2');
|
||||
tocTitle.append(closeBtn);
|
||||
});
|
||||
|
||||
window.SphinxRtdTheme = (function (jquery) {
|
||||
var stickyNav = (function () {
|
||||
var navBar,
|
||||
win,
|
||||
stickyNavCssClass = 'stickynav',
|
||||
applyStickNav = function () {
|
||||
if (navBar.height() <= win.height()) {
|
||||
navBar.addClass(stickyNavCssClass);
|
||||
} else {
|
||||
navBar.removeClass(stickyNavCssClass);
|
||||
}
|
||||
},
|
||||
enable = function () {
|
||||
applyStickNav();
|
||||
win.on('resize', applyStickNav);
|
||||
},
|
||||
init = function () {
|
||||
navBar = jquery('nav.wy-nav-side:first');
|
||||
win = jquery(window);
|
||||
};
|
||||
jquery(init);
|
||||
return {
|
||||
enable : enable
|
||||
};
|
||||
}());
|
||||
return {
|
||||
StickyNav : stickyNav
|
||||
};
|
||||
}($));
|
83
docs/nass.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2021-01-08 ven. 15:53 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platform - NASS</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
</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">Stewart Platform - NASS</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org07676ec">1. NASS</a>
|
||||
<ul>
|
||||
<li><a href="#org0167386">1.1. Identification of the Dynamics</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org07676ec" class="outline-2">
|
||||
<h2 id="org07676ec"><span class="section-number-2">1</span> NASS</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
</div>
|
||||
<div id="outline-container-org0167386" class="outline-3">
|
||||
<h3 id="org0167386"><span class="section-number-3">1.1</span> Identification of the Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">apa = load(<span class="org-string">'./mat/APA300ML.mat'</span>, <span class="org-string">'int_xyz'</span>, <span class="org-string">'int_i'</span>, <span class="org-string">'n_xyz'</span>, <span class="org-string">'n_i'</span>, <span class="org-string">'nodes'</span>, <span class="org-string">'M'</span>, <span class="org-string">'K'</span>);
|
||||
flex_joint = load(<span class="org-string">'./mat/flexor_ID16.mat'</span>, <span class="org-string">'int_xyz'</span>, <span class="org-string">'int_i'</span>, <span class="org-string">'n_xyz'</span>, <span class="org-string">'n_i'</span>, <span class="org-string">'nodes'</span>, <span class="org-string">'M'</span>, <span class="org-string">'K'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 175e<span class="org-type">-</span>3);
|
||||
stewart = generateGeneralConfiguration(stewart, <span class="org-string">'FH'</span>, 20e<span class="org-type">-</span>3, <span class="org-string">'MH'</span>, 20e<span class="org-type">-</span>3, <span class="org-string">'FR'</span>, 228e<span class="org-type">-</span>3<span class="org-type">/</span>2, <span class="org-string">'MR'</span>, 220e<span class="org-type">-</span>3<span class="org-type">/</span>2, <span class="org-string">'FTh'</span>, [<span class="org-type">-</span>9, 9, 120<span class="org-type">-</span>9, 120<span class="org-type">+</span>9, 240<span class="org-type">-</span>9, 240<span class="org-type">+</span>9]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180), <span class="org-string">'MTh'</span>, [<span class="org-type">-</span>60<span class="org-type">+</span>15, 60<span class="org-type">-</span>15, 60<span class="org-type">+</span>15, 180<span class="org-type">-</span>15, 180<span class="org-type">+</span>15, <span class="org-type">-</span>60<span class="org-type">-</span>15]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180));
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeFlexibleStrutDynamics(stewart, <span class="org-string">'H'</span>, 0.03, <span class="org-string">'K'</span>, apa.K, <span class="org-string">'M'</span>, apa.M, <span class="org-string">'n_xyz'</span>, apa.n_xyz, <span class="org-string">'xi'</span>, 0.1, <span class="org-string">'step_file'</span>, <span class="org-string">'mat/APA300ML.STEP'</span>);
|
||||
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'K_F'</span>, flex_joint.K, <span class="org-string">'M_F'</span>, flex_joint.M, <span class="org-string">'n_xyz_F'</span>, flex_joint.n_xyz, <span class="org-string">'xi_F'</span>, 0.1, <span class="org-string">'step_file_F'</span>, <span class="org-string">'mat/flexor_ID16.STEP'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'K_M'</span>, flex_joint.K, <span class="org-string">'M_M'</span>, flex_joint.M, <span class="org-string">'n_xyz_M'</span>, flex_joint.n_xyz, <span class="org-string">'xi_M'</span>, 0.1, <span class="org-string">'step_file_M'</span>, <span class="org-string">'mat/flexor_ID16.STEP'</span>);
|
||||
stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'</span>, 150e<span class="org-type">-</span>3, <span class="org-string">'Mpr'</span>, 125e<span class="org-type">-</span>3);
|
||||
stewart = initializeCylindricalStruts(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'none'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'none'</span>);
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<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">'rigid'</span>, <span class="org-string">'m'</span>, 50);
|
||||
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">disturbances = initializeDisturbances();
|
||||
references = initializeReferences(stewart);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:53</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -3,25 +3,30 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:52 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platform - Simscape Model</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>MathJax = {
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<script>
|
||||
MathJax = {
|
||||
svg: {
|
||||
scale: 1,
|
||||
fontCache: "global"
|
||||
},
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],}
|
||||
tags: "ams",
|
||||
multlineWidth: "%MULTLINEWIDTH",
|
||||
tagSide: "right",
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],},
|
||||
tagIndent: ".8em"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
@@ -34,47 +39,47 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgc6e0b93">1. Parameters used for the Simscape Model</a></li>
|
||||
<li><a href="#org66977e8">2. Simulation Configuration - Configuration reference</a></li>
|
||||
<li><a href="#orgb2362eb">3. Subsystem Reference</a></li>
|
||||
<li><a href="#orgdfad86d">4. Subsystem - Fixed base and Mobile Platform</a></li>
|
||||
<li><a href="#org9d4af75">5. Subsystem - Struts</a></li>
|
||||
<li><a href="#org7e2c432">6. Other Elements</a>
|
||||
<li><a href="#org79eeba1">1. Parameters used for the Simscape Model</a></li>
|
||||
<li><a href="#org677dd01">2. Simulation Configuration - Configuration reference</a></li>
|
||||
<li><a href="#orge89e3e7">3. Subsystem Reference</a></li>
|
||||
<li><a href="#org5f42d80">4. Subsystem - Fixed base and Mobile Platform</a></li>
|
||||
<li><a href="#orgbec2976">5. Subsystem - Struts</a></li>
|
||||
<li><a href="#org806ecc3">6. Other Elements</a>
|
||||
<ul>
|
||||
<li><a href="#org3535b6d">6.1. Payload</a>
|
||||
<li><a href="#orgf4bef70">6.1. Payload</a>
|
||||
<ul>
|
||||
<li><a href="#orgd38089d">Function description</a></li>
|
||||
<li><a href="#org5518a84">Optional Parameters</a></li>
|
||||
<li><a href="#orgeeb8d35">Add Payload Type</a></li>
|
||||
<li><a href="#org6d52ffc">Add Stiffness, Damping and Mass properties of the Payload</a></li>
|
||||
<li><a href="#org920bdd0">Function description</a></li>
|
||||
<li><a href="#orgbc7950f">Optional Parameters</a></li>
|
||||
<li><a href="#org4ef4a9f">Add Payload Type</a></li>
|
||||
<li><a href="#org3243d76">Add Stiffness, Damping and Mass properties of the Payload</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgaaed406">6.2. Ground</a>
|
||||
<li><a href="#orgd9e12ef">6.2. Ground</a>
|
||||
<ul>
|
||||
<li><a href="#org7732939">Function description</a></li>
|
||||
<li><a href="#org480f36e">Optional Parameters</a></li>
|
||||
<li><a href="#orgef7035d">Add Ground Type</a></li>
|
||||
<li><a href="#org95633e8">Add Stiffness and Damping properties of the Ground</a></li>
|
||||
<li><a href="#org14ff2fc">Rotation Point</a></li>
|
||||
<li><a href="#orgc300ecf">Function description</a></li>
|
||||
<li><a href="#org1ee272a">Optional Parameters</a></li>
|
||||
<li><a href="#org2d22970">Add Ground Type</a></li>
|
||||
<li><a href="#orgf76def4">Add Stiffness and Damping properties of the Ground</a></li>
|
||||
<li><a href="#orgdb67a68">Rotation Point</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgae6907a">7. Initialize Disturbances</a>
|
||||
<li><a href="#org6d3b61e">7. Initialize Disturbances</a>
|
||||
<ul>
|
||||
<li><a href="#orge2fa859">Function Declaration and Documentation</a></li>
|
||||
<li><a href="#org6adb628">Optional Parameters</a></li>
|
||||
<li><a href="#org30dc07c">Structure initialization</a></li>
|
||||
<li><a href="#org0755155">Ground Motion</a></li>
|
||||
<li><a href="#org7617a55">Direct Forces</a></li>
|
||||
<li><a href="#orgf124972">Function Declaration and Documentation</a></li>
|
||||
<li><a href="#org668f4bb">Optional Parameters</a></li>
|
||||
<li><a href="#org0f7e4dd">Structure initialization</a></li>
|
||||
<li><a href="#org1a28fcd">Ground Motion</a></li>
|
||||
<li><a href="#org90b72d6">Direct Forces</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgd45a07f">8. Initialize References</a>
|
||||
<li><a href="#org93f2d30">8. Initialize References</a>
|
||||
<ul>
|
||||
<li><a href="#orge5deaa1">Function Declaration and Documentation</a></li>
|
||||
<li><a href="#orgeebb364">Optional Parameters</a></li>
|
||||
<li><a href="#orgc274320">8.1. Compute the corresponding strut length</a></li>
|
||||
<li><a href="#org36ac3fa">References</a></li>
|
||||
<li><a href="#org81500bb">Function Declaration and Documentation</a></li>
|
||||
<li><a href="#org05322ee">Optional Parameters</a></li>
|
||||
<li><a href="#org6f05adc">8.1. Compute the corresponding strut length</a></li>
|
||||
<li><a href="#orgda73a50">References</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -89,18 +94,18 @@ In this document is explained how the Simscape model of the Stewart Platform is
|
||||
It is divided in the following sections:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>section <a href="#org8d965c3">1</a>: is explained how the parameters of the Stewart platform are set for the Simscape model</li>
|
||||
<li>section <a href="#org354bfdb">2</a>: the Simulink configuration (solver, simulation time, …) is shared among all the Simulink files. It is explain how this is done.</li>
|
||||
<li>section <a href="#org66bbae2">3</a>: All the elements (platforms, struts, sensors, …) are saved in separate files and imported in Simulink files using “subsystem referenced”.</li>
|
||||
<li>section <a href="#orga4915c4">4</a>: The simscape model for the fixed base and mobile platform are described in this section.</li>
|
||||
<li>section <a href="#orgdb5206f">5</a>: The simscape model for the Stewart platform struts is described in this section.</li>
|
||||
<li>section <a href="#orge8daba9">1</a>: is explained how the parameters of the Stewart platform are set for the Simscape model</li>
|
||||
<li>section <a href="#org11ed7ef">2</a>: the Simulink configuration (solver, simulation time, …) is shared among all the Simulink files. It is explain how this is done.</li>
|
||||
<li>section <a href="#org1a0307c">3</a>: All the elements (platforms, struts, sensors, …) are saved in separate files and imported in Simulink files using “subsystem referenced”.</li>
|
||||
<li>section <a href="#org5fac181">4</a>: The simscape model for the fixed base and mobile platform are described in this section.</li>
|
||||
<li>section <a href="#org793a5c7">5</a>: The simscape model for the Stewart platform struts is described in this section.</li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-orgc6e0b93" class="outline-2">
|
||||
<h2 id="orgc6e0b93"><span class="section-number-2">1</span> Parameters used for the Simscape Model</h2>
|
||||
<div id="outline-container-org79eeba1" class="outline-2">
|
||||
<h2 id="org79eeba1"><span class="section-number-2">1</span> Parameters used for the Simscape Model</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org8d965c3"></a>
|
||||
<a id="orge8daba9"></a>
|
||||
The Simscape Model of the Stewart Platform is working with the <code>stewart</code> structure generated using the functions described <a href="stewart-architecture.html">here</a>.
|
||||
</p>
|
||||
|
||||
@@ -122,11 +127,11 @@ The main advantage to have all the parameters defined in one structure (and not
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org66977e8" class="outline-2">
|
||||
<h2 id="org66977e8"><span class="section-number-2">2</span> Simulation Configuration - Configuration reference</h2>
|
||||
<div id="outline-container-org677dd01" class="outline-2">
|
||||
<h2 id="org677dd01"><span class="section-number-2">2</span> Simulation Configuration - Configuration reference</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org354bfdb"></a>
|
||||
<a id="org11ed7ef"></a>
|
||||
As multiple simulink files will be used for simulation and tests, it is very useful to determine good simulation configuration that will be <b>shared</b> among all the simulink files.
|
||||
</p>
|
||||
|
||||
@@ -139,7 +144,7 @@ Basically, the configuration is stored in a mat file <code>conf_simscape.mat</co
|
||||
It is automatically loaded when the Simulink project is open. It can be loaded manually with the command:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load('mat/conf_simscape.mat');
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simscape.mat'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -147,17 +152,17 @@ It is automatically loaded when the Simulink project is open. It can be loaded m
|
||||
It is however possible to modify specific parameters just for one simulation using the <code>set_param</code> command:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">set_param(conf_simscape, 'StopTime', 1);
|
||||
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simscape</span>, <span class="org-string">'StopTime'</span>, 1);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb2362eb" class="outline-2">
|
||||
<h2 id="orgb2362eb"><span class="section-number-2">3</span> Subsystem Reference</h2>
|
||||
<div id="outline-container-orge89e3e7" class="outline-2">
|
||||
<h2 id="orge89e3e7"><span class="section-number-2">3</span> Subsystem Reference</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="org66bbae2"></a>
|
||||
<a id="org1a0307c"></a>
|
||||
Several Stewart platform models are used, for instance one is use to study the dynamics while the other is used to apply active damping techniques.
|
||||
</p>
|
||||
|
||||
@@ -175,12 +180,12 @@ These shared subsystems are:
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
These subsystems are referenced from another subsystem called <code>Stewart_Platform.slx</code> shown in figure <a href="#orgf687c71">1</a>, that basically connect them correctly.
|
||||
These subsystems are referenced from another subsystem called <code>Stewart_Platform.slx</code> shown in figure <a href="#org18dcfb1">1</a>, that basically connect them correctly.
|
||||
This subsystem is then referenced in other simulink models for various purposes (control, analysis, simulation, …).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgf687c71" class="figure">
|
||||
<div id="org18dcfb1" class="figure">
|
||||
<p><img src="figs/simscape_stewart_platform.png" alt="simscape_stewart_platform.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Simscape Subsystem of the Stewart platform. Encapsulate the Subsystems corresponding to the fixed base, mobile platform and all the struts.</p>
|
||||
@@ -188,11 +193,11 @@ This subsystem is then referenced in other simulink models for various purposes
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdfad86d" class="outline-2">
|
||||
<h2 id="orgdfad86d"><span class="section-number-2">4</span> Subsystem - Fixed base and Mobile Platform</h2>
|
||||
<div id="outline-container-org5f42d80" class="outline-2">
|
||||
<h2 id="org5f42d80"><span class="section-number-2">4</span> Subsystem - Fixed base and Mobile Platform</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
<a id="orga4915c4"></a>
|
||||
<a id="org5fac181"></a>
|
||||
Both the fixed base and the mobile platform simscape models share many similarities.
|
||||
</p>
|
||||
|
||||
@@ -210,14 +215,14 @@ As always, the parameters that define the geometry are taken from the <code>stew
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org858f0b4" class="figure">
|
||||
<div id="org7b43415" class="figure">
|
||||
<p><img src="figs/simscape_fixed_base.png" alt="simscape_fixed_base.png" width="1000px" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Simscape Model of the Fixed base</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org4b31aa3" class="figure">
|
||||
<div id="org7ed0d98" class="figure">
|
||||
<p><img src="figs/simscape_mobile_platform.png" alt="simscape_mobile_platform.png" width="800px" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Simscape Model of the Mobile platform</p>
|
||||
@@ -225,13 +230,13 @@ As always, the parameters that define the geometry are taken from the <code>stew
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9d4af75" class="outline-2">
|
||||
<h2 id="org9d4af75"><span class="section-number-2">5</span> Subsystem - Struts</h2>
|
||||
<div id="outline-container-orgbec2976" class="outline-2">
|
||||
<h2 id="orgbec2976"><span class="section-number-2">5</span> Subsystem - Struts</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
<a id="orgdb5206f"></a>
|
||||
<a id="org793a5c7"></a>
|
||||
For the Stewart platform, the 6 struts are identical.
|
||||
Thus, all the struts used in the Stewart platform are referring to the same subsystem called <code>stewart_strut.slx</code> and shown in Figure <a href="#org1dc8fce">4</a>.
|
||||
Thus, all the struts used in the Stewart platform are referring to the same subsystem called <code>stewart_strut.slx</code> and shown in Figure <a href="#org96a73eb">4</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -253,7 +258,7 @@ This is why the <b>UPS</b> configuration is used, but other configuration can be
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org1dc8fce" class="figure">
|
||||
<div id="org96a73eb" class="figure">
|
||||
<p><img src="figs/simscape_strut.png" alt="simscape_strut.png" width="800px" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Simscape model of the Stewart platform’s strut</p>
|
||||
@@ -282,15 +287,15 @@ Both inertial sensors are described bellow.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7e2c432" class="outline-2">
|
||||
<h2 id="org7e2c432"><span class="section-number-2">6</span> Other Elements</h2>
|
||||
<div id="outline-container-org806ecc3" class="outline-2">
|
||||
<h2 id="org806ecc3"><span class="section-number-2">6</span> Other Elements</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
</div>
|
||||
<div id="outline-container-org3535b6d" class="outline-3">
|
||||
<h3 id="org3535b6d"><span class="section-number-3">6.1</span> Payload</h3>
|
||||
<div id="outline-container-orgf4bef70" class="outline-3">
|
||||
<h3 id="orgf4bef70"><span class="section-number-3">6.1</span> Payload</h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<p>
|
||||
<a id="org3a56808"></a>
|
||||
<a id="orgdd9802d"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -298,77 +303,77 @@ This Matlab function is accessible <a href="../src/initializePayload.m">here</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd38089d" class="outline-4">
|
||||
<h4 id="orgd38089d">Function description</h4>
|
||||
<div class="outline-text-4" id="text-orgd38089d">
|
||||
<div id="outline-container-org920bdd0" class="outline-4">
|
||||
<h4 id="org920bdd0">Function description</h4>
|
||||
<div class="outline-text-4" id="text-org920bdd0">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">function [payload] = initializePayload(args)
|
||||
% initializePayload - Initialize the Payload that can then be used for simulations and analysis
|
||||
%
|
||||
% Syntax: [payload] = initializePayload(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - type - 'none', 'rigid', 'flexible', 'cartesian'
|
||||
% - h [1x1] - Height of the CoM of the payload w.r.t {M} [m]
|
||||
% This also the position where K and C are defined
|
||||
% - K [6x1] - Stiffness of the Payload [N/m, N/rad]
|
||||
% - C [6x1] - Damping of the Payload [N/(m/s), N/(rad/s)]
|
||||
% - m [1x1] - Mass of the Payload [kg]
|
||||
% - I [3x3] - Inertia matrix for the Payload [kg*m2]
|
||||
%
|
||||
% Outputs:
|
||||
% - payload - Struture with the following properties:
|
||||
% - type - 1 (none), 2 (rigid), 3 (flexible)
|
||||
% - h [1x1] - Height of the CoM of the payload w.r.t {M} [m]
|
||||
% - K [6x1] - Stiffness of the Payload [N/m, N/rad]
|
||||
% - C [6x1] - Stiffness of the Payload [N/(m/s), N/(rad/s)]
|
||||
% - m [1x1] - Mass of the Payload [kg]
|
||||
% - I [3x3] - Inertia matrix for the Payload [kg*m2]
|
||||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[payload]</span> = <span class="org-function-name">initializePayload</span>(<span class="org-variable-name">args</span>)
|
||||
<span class="org-comment">% initializePayload - Initialize the Payload that can then be used for simulations and analysis</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [payload] = initializePayload(args)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - args - Structure with the following fields:</span>
|
||||
<span class="org-comment">% - type - 'none', 'rigid', 'flexible', 'cartesian'</span>
|
||||
<span class="org-comment">% - h [1x1] - Height of the CoM of the payload w.r.t {M} [m]</span>
|
||||
<span class="org-comment">% This also the position where K and C are defined</span>
|
||||
<span class="org-comment">% - K [6x1] - Stiffness of the Payload [N/m, N/rad]</span>
|
||||
<span class="org-comment">% - C [6x1] - Damping of the Payload [N/(m/s), N/(rad/s)]</span>
|
||||
<span class="org-comment">% - m [1x1] - Mass of the Payload [kg]</span>
|
||||
<span class="org-comment">% - I [3x3] - Inertia matrix for the Payload [kg*m2]</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Outputs:</span>
|
||||
<span class="org-comment">% - payload - Struture with the following properties:</span>
|
||||
<span class="org-comment">% - type - 1 (none), 2 (rigid), 3 (flexible)</span>
|
||||
<span class="org-comment">% - h [1x1] - Height of the CoM of the payload w.r.t {M} [m]</span>
|
||||
<span class="org-comment">% - K [6x1] - Stiffness of the Payload [N/m, N/rad]</span>
|
||||
<span class="org-comment">% - C [6x1] - Stiffness of the Payload [N/(m/s), N/(rad/s)]</span>
|
||||
<span class="org-comment">% - m [1x1] - Mass of the Payload [kg]</span>
|
||||
<span class="org-comment">% - I [3x3] - Inertia matrix for the Payload [kg*m2]</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5518a84" class="outline-4">
|
||||
<h4 id="org5518a84">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-org5518a84">
|
||||
<div id="outline-container-orgbc7950f" class="outline-4">
|
||||
<h4 id="orgbc7950f">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-orgbc7950f">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">arguments
|
||||
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'cartesian'})} = 'none'
|
||||
args.K (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e8*ones(6,1)
|
||||
args.C (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
|
||||
args.h (1,1) double {mustBeNumeric, mustBeNonnegative} = 100e-3
|
||||
args.m (1,1) double {mustBeNumeric, mustBeNonnegative} = 10
|
||||
args.I (3,3) double {mustBeNumeric, mustBeNonnegative} = 1*eye(3)
|
||||
end
|
||||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||||
<span class="org-variable-name">args</span>.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'cartesian'</span>})} = <span class="org-string">'none'</span>
|
||||
<span class="org-variable-name">args</span>.K (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e8<span class="org-type">*</span>ones(6,1)
|
||||
<span class="org-variable-name">args</span>.C (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1<span class="org-type">*</span>ones(6,1)
|
||||
<span class="org-variable-name">args</span>.h (1,1) double {mustBeNumeric, mustBeNonnegative} = 100e<span class="org-type">-</span>3
|
||||
<span class="org-variable-name">args</span>.m (1,1) double {mustBeNumeric, mustBeNonnegative} = 10
|
||||
<span class="org-variable-name">args</span>.I (3,3) double {mustBeNumeric, mustBeNonnegative} = 1<span class="org-type">*</span>eye(3)
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgeeb8d35" class="outline-4">
|
||||
<h4 id="orgeeb8d35">Add Payload Type</h4>
|
||||
<div class="outline-text-4" id="text-orgeeb8d35">
|
||||
<div id="outline-container-org4ef4a9f" class="outline-4">
|
||||
<h4 id="org4ef4a9f">Add Payload Type</h4>
|
||||
<div class="outline-text-4" id="text-org4ef4a9f">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">switch args.type
|
||||
case 'none'
|
||||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'none'</span>
|
||||
payload.type = 1;
|
||||
case 'rigid'
|
||||
<span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
|
||||
payload.type = 2;
|
||||
case 'flexible'
|
||||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||||
payload.type = 3;
|
||||
case 'cartesian'
|
||||
<span class="org-keyword">case</span> <span class="org-string">'cartesian'</span>
|
||||
payload.type = 4;
|
||||
end
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6d52ffc" class="outline-4">
|
||||
<h4 id="org6d52ffc">Add Stiffness, Damping and Mass properties of the Payload</h4>
|
||||
<div class="outline-text-4" id="text-org6d52ffc">
|
||||
<div id="outline-container-org3243d76" class="outline-4">
|
||||
<h4 id="org3243d76">Add Stiffness, Damping and Mass properties of the Payload</h4>
|
||||
<div class="outline-text-4" id="text-org3243d76">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">payload.K = args.K;
|
||||
payload.C = args.C;
|
||||
@@ -382,11 +387,11 @@ payload.h = args.h;
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgaaed406" class="outline-3">
|
||||
<h3 id="orgaaed406"><span class="section-number-3">6.2</span> Ground</h3>
|
||||
<div id="outline-container-orgd9e12ef" class="outline-3">
|
||||
<h3 id="orgd9e12ef"><span class="section-number-3">6.2</span> Ground</h3>
|
||||
<div class="outline-text-3" id="text-6-2">
|
||||
<p>
|
||||
<a id="orge64ba82"></a>
|
||||
<a id="org140423a"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -394,67 +399,67 @@ This Matlab function is accessible <a href="../src/initializeGround.m">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7732939" class="outline-4">
|
||||
<h4 id="org7732939">Function description</h4>
|
||||
<div class="outline-text-4" id="text-org7732939">
|
||||
<div id="outline-container-orgc300ecf" class="outline-4">
|
||||
<h4 id="orgc300ecf">Function description</h4>
|
||||
<div class="outline-text-4" id="text-orgc300ecf">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">function [ground] = initializeGround(args)
|
||||
% initializeGround - Initialize the Ground that can then be used for simulations and analysis
|
||||
%
|
||||
% Syntax: [ground] = initializeGround(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - type - 'none', 'solid', 'flexible'
|
||||
% - rot_point [3x1] - Rotation point for the ground motion [m]
|
||||
% - K [3x1] - Translation Stiffness of the Ground [N/m]
|
||||
% - C [3x1] - Translation Damping of the Ground [N/(m/s)]
|
||||
%
|
||||
% Outputs:
|
||||
% - ground - Struture with the following properties:
|
||||
% - type - 1 (none), 2 (rigid), 3 (flexible)
|
||||
% - K [3x1] - Translation Stiffness of the Ground [N/m]
|
||||
% - C [3x1] - Translation Damping of the Ground [N/(m/s)]
|
||||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ground]</span> = <span class="org-function-name">initializeGround</span>(<span class="org-variable-name">args</span>)
|
||||
<span class="org-comment">% initializeGround - Initialize the Ground that can then be used for simulations and analysis</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [ground] = initializeGround(args)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - args - Structure with the following fields:</span>
|
||||
<span class="org-comment">% - type - 'none', 'solid', 'flexible'</span>
|
||||
<span class="org-comment">% - rot_point [3x1] - Rotation point for the ground motion [m]</span>
|
||||
<span class="org-comment">% - K [3x1] - Translation Stiffness of the Ground [N/m]</span>
|
||||
<span class="org-comment">% - C [3x1] - Translation Damping of the Ground [N/(m/s)]</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Outputs:</span>
|
||||
<span class="org-comment">% - ground - Struture with the following properties:</span>
|
||||
<span class="org-comment">% - type - 1 (none), 2 (rigid), 3 (flexible)</span>
|
||||
<span class="org-comment">% - K [3x1] - Translation Stiffness of the Ground [N/m]</span>
|
||||
<span class="org-comment">% - C [3x1] - Translation Damping of the Ground [N/(m/s)]</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org480f36e" class="outline-4">
|
||||
<h4 id="org480f36e">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-org480f36e">
|
||||
<div id="outline-container-org1ee272a" class="outline-4">
|
||||
<h4 id="org1ee272a">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-org1ee272a">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">arguments
|
||||
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'none'
|
||||
args.rot_point (3,1) double {mustBeNumeric} = zeros(3,1)
|
||||
args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = 1e8*ones(3,1)
|
||||
args.C (3,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(3,1)
|
||||
end
|
||||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||||
<span class="org-variable-name">args</span>.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'none'</span>
|
||||
<span class="org-variable-name">args</span>.rot_point (3,1) double {mustBeNumeric} = zeros(3,1)
|
||||
<span class="org-variable-name">args</span>.K (3,1) double {mustBeNumeric, mustBeNonnegative} = 1e8<span class="org-type">*</span>ones(3,1)
|
||||
<span class="org-variable-name">args</span>.C (3,1) double {mustBeNumeric, mustBeNonnegative} = 1e1<span class="org-type">*</span>ones(3,1)
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgef7035d" class="outline-4">
|
||||
<h4 id="orgef7035d">Add Ground Type</h4>
|
||||
<div class="outline-text-4" id="text-orgef7035d">
|
||||
<div id="outline-container-org2d22970" class="outline-4">
|
||||
<h4 id="org2d22970">Add Ground Type</h4>
|
||||
<div class="outline-text-4" id="text-org2d22970">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">switch args.type
|
||||
case 'none'
|
||||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'none'</span>
|
||||
ground.type = 1;
|
||||
case 'rigid'
|
||||
<span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
|
||||
ground.type = 2;
|
||||
case 'flexible'
|
||||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||||
ground.type = 3;
|
||||
end
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org95633e8" class="outline-4">
|
||||
<h4 id="org95633e8">Add Stiffness and Damping properties of the Ground</h4>
|
||||
<div class="outline-text-4" id="text-org95633e8">
|
||||
<div id="outline-container-orgf76def4" class="outline-4">
|
||||
<h4 id="orgf76def4">Add Stiffness and Damping properties of the Ground</h4>
|
||||
<div class="outline-text-4" id="text-orgf76def4">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground.K = args.K;
|
||||
ground.C = args.C;
|
||||
@@ -463,9 +468,9 @@ ground.C = args.C;
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org14ff2fc" class="outline-4">
|
||||
<h4 id="org14ff2fc">Rotation Point</h4>
|
||||
<div class="outline-text-4" id="text-org14ff2fc">
|
||||
<div id="outline-container-orgdb67a68" class="outline-4">
|
||||
<h4 id="orgdb67a68">Rotation Point</h4>
|
||||
<div class="outline-text-4" id="text-orgdb67a68">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ground.rot_point = args.rot_point;
|
||||
</pre>
|
||||
@@ -474,50 +479,50 @@ ground.C = args.C;
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-orgae6907a" class="outline-2">
|
||||
<h2 id="orgae6907a"><span class="section-number-2">7</span> Initialize Disturbances</h2>
|
||||
<div id="outline-container-org6d3b61e" class="outline-2">
|
||||
<h2 id="org6d3b61e"><span class="section-number-2">7</span> Initialize Disturbances</h2>
|
||||
<div class="outline-text-2" id="text-7">
|
||||
<p>
|
||||
<a id="org96254bf"></a>
|
||||
<a id="org5c942ea"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge2fa859" class="outline-3">
|
||||
<h3 id="orge2fa859">Function Declaration and Documentation</h3>
|
||||
<div class="outline-text-3" id="text-orge2fa859">
|
||||
<div id="outline-container-orgf124972" class="outline-3">
|
||||
<h3 id="orgf124972">Function Declaration and Documentation</h3>
|
||||
<div class="outline-text-3" id="text-orgf124972">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">function [disturbances] = initializeDisturbances(args)
|
||||
% initializeDisturbances - Initialize the disturbances
|
||||
%
|
||||
% Syntax: [disturbances] = initializeDisturbances(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args -
|
||||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[disturbances]</span> = <span class="org-function-name">initializeDisturbances</span>(<span class="org-variable-name">args</span>)
|
||||
<span class="org-comment">% initializeDisturbances - Initialize the disturbances</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [disturbances] = initializeDisturbances(args)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - args -</span>
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6adb628" class="outline-3">
|
||||
<h3 id="org6adb628">Optional Parameters</h3>
|
||||
<div class="outline-text-3" id="text-org6adb628">
|
||||
<div id="outline-container-org668f4bb" class="outline-3">
|
||||
<h3 id="org668f4bb">Optional Parameters</h3>
|
||||
<div class="outline-text-3" id="text-org668f4bb">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">arguments
|
||||
args.Fd double {mustBeNumeric, mustBeReal} = zeros(6,1)
|
||||
args.Fd_t double {mustBeNumeric, mustBeReal} = 0
|
||||
args.Dw double {mustBeNumeric, mustBeReal} = zeros(6,1)
|
||||
args.Dw_t double {mustBeNumeric, mustBeReal} = 0
|
||||
end
|
||||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||||
<span class="org-variable-name">args</span>.Fd double {mustBeNumeric, mustBeReal} = zeros(6,1)
|
||||
<span class="org-variable-name">args</span>.Fd_t double {mustBeNumeric, mustBeReal} = 0
|
||||
<span class="org-variable-name">args</span>.Dw double {mustBeNumeric, mustBeReal} = zeros(6,1)
|
||||
<span class="org-variable-name">args</span>.Dw_t double {mustBeNumeric, mustBeReal} = 0
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org30dc07c" class="outline-3">
|
||||
<h3 id="org30dc07c">Structure initialization</h3>
|
||||
<div class="outline-text-3" id="text-org30dc07c">
|
||||
<div id="outline-container-org0f7e4dd" class="outline-3">
|
||||
<h3 id="org0f7e4dd">Structure initialization</h3>
|
||||
<div class="outline-text-3" id="text-org0f7e4dd">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">disturbances = struct();
|
||||
</pre>
|
||||
@@ -525,9 +530,9 @@ end
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0755155" class="outline-3">
|
||||
<h3 id="org0755155">Ground Motion</h3>
|
||||
<div class="outline-text-3" id="text-org0755155">
|
||||
<div id="outline-container-org1a28fcd" class="outline-3">
|
||||
<h3 id="org1a28fcd">Ground Motion</h3>
|
||||
<div class="outline-text-3" id="text-org1a28fcd">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">disturbances.Dw = timeseries([args.Dw], args.Dw_t);
|
||||
</pre>
|
||||
@@ -535,9 +540,9 @@ end
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7617a55" class="outline-3">
|
||||
<h3 id="org7617a55">Direct Forces</h3>
|
||||
<div class="outline-text-3" id="text-org7617a55">
|
||||
<div id="outline-container-org90b72d6" class="outline-3">
|
||||
<h3 id="org90b72d6">Direct Forces</h3>
|
||||
<div class="outline-text-3" id="text-org90b72d6">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">disturbances.Fd = timeseries([args.Fd], args.Fd_t);
|
||||
</pre>
|
||||
@@ -546,73 +551,73 @@ end
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd45a07f" class="outline-2">
|
||||
<h2 id="orgd45a07f"><span class="section-number-2">8</span> Initialize References</h2>
|
||||
<div id="outline-container-org93f2d30" class="outline-2">
|
||||
<h2 id="org93f2d30"><span class="section-number-2">8</span> Initialize References</h2>
|
||||
<div class="outline-text-2" id="text-8">
|
||||
<p>
|
||||
<a id="org7e762f4"></a>
|
||||
<a id="orge24eeb5"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge5deaa1" class="outline-3">
|
||||
<h3 id="orge5deaa1">Function Declaration and Documentation</h3>
|
||||
<div class="outline-text-3" id="text-orge5deaa1">
|
||||
<div id="outline-container-org81500bb" class="outline-3">
|
||||
<h3 id="org81500bb">Function Declaration and Documentation</h3>
|
||||
<div class="outline-text-3" id="text-org81500bb">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">function [references] = initializeReferences(stewart, args)
|
||||
% initializeReferences - Initialize the references
|
||||
%
|
||||
% Syntax: [references] = initializeReferences(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args -
|
||||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[references]</span> = <span class="org-function-name">initializeReferences</span>(<span class="org-variable-name">stewart</span>, <span class="org-variable-name">args</span>)
|
||||
<span class="org-comment">% initializeReferences - Initialize the references</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [references] = initializeReferences(args)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - args -</span>
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgeebb364" class="outline-3">
|
||||
<h3 id="orgeebb364">Optional Parameters</h3>
|
||||
<div class="outline-text-3" id="text-orgeebb364">
|
||||
<div id="outline-container-org05322ee" class="outline-3">
|
||||
<h3 id="org05322ee">Optional Parameters</h3>
|
||||
<div class="outline-text-3" id="text-org05322ee">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">arguments
|
||||
stewart
|
||||
args.t double {mustBeNumeric, mustBeReal} = 0
|
||||
args.r double {mustBeNumeric, mustBeReal} = zeros(6, 1)
|
||||
end
|
||||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||||
<span class="org-variable-name">stewart</span>
|
||||
<span class="org-variable-name">args</span>.t double {mustBeNumeric, mustBeReal} = 0
|
||||
<span class="org-variable-name">args</span>.r double {mustBeNumeric, mustBeReal} = zeros(6, 1)
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc274320" class="outline-3">
|
||||
<h3 id="orgc274320"><span class="section-number-3">8.1</span> Compute the corresponding strut length</h3>
|
||||
<div id="outline-container-org6f05adc" class="outline-3">
|
||||
<h3 id="org6f05adc"><span class="section-number-3">8.1</span> Compute the corresponding strut length</h3>
|
||||
<div class="outline-text-3" id="text-8-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">rL = zeros(6, length(args.t));
|
||||
|
||||
for i = 1:length(args.t)
|
||||
R = [cos(args.r(6,i)) -sin(args.r(6,i)) 0;
|
||||
sin(args.r(6,i)) cos(args.r(6,i)) 0;
|
||||
0 0 1] * ...
|
||||
[cos(args.r(5,i)) 0 sin(args.r(5,i));
|
||||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(args.t)</span>
|
||||
R = [cos(args.r(6,<span class="org-constant">i</span>)) <span class="org-type">-</span>sin(args.r(6,<span class="org-constant">i</span>)) 0;
|
||||
sin(args.r(6,<span class="org-constant">i</span>)) cos(args.r(6,<span class="org-constant">i</span>)) 0;
|
||||
0 0 1] <span class="org-type">*</span> ...
|
||||
[cos(args.r(5,<span class="org-constant">i</span>)) 0 sin(args.r(5,<span class="org-constant">i</span>));
|
||||
0 1 0;
|
||||
-sin(args.r(5,i)) 0 cos(args.r(5,i))] * ...
|
||||
<span class="org-type">-</span>sin(args.r(5,<span class="org-constant">i</span>)) 0 cos(args.r(5,<span class="org-constant">i</span>))] <span class="org-type">*</span> ...
|
||||
[1 0 0;
|
||||
0 cos(args.r(4,i)) -sin(args.r(4,i));
|
||||
0 sin(args.r(4,i)) cos(args.r(4,i))];
|
||||
0 cos(args.r(4,<span class="org-constant">i</span>)) <span class="org-type">-</span>sin(args.r(4,<span class="org-constant">i</span>));
|
||||
0 sin(args.r(4,<span class="org-constant">i</span>)) cos(args.r(4,<span class="org-constant">i</span>))];
|
||||
|
||||
[Li, dLi] = inverseKinematics(stewart, 'AP', [args.r(1,i); args.r(2,i); args.r(3,i)], 'ARB', R);
|
||||
rL(:, i) = dLi;
|
||||
end
|
||||
[Li, dLi] = inverseKinematics(stewart, <span class="org-string">'AP'</span>, [args.r(1,<span class="org-constant">i</span>); args.r(2,<span class="org-constant">i</span>); args.r(3,<span class="org-constant">i</span>)], <span class="org-string">'ARB'</span>, R);
|
||||
rL(<span class="org-type">:</span>, <span class="org-constant">i</span>) = dLi;
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org36ac3fa" class="outline-3">
|
||||
<h3 id="org36ac3fa">References</h3>
|
||||
<div class="outline-text-3" id="text-org36ac3fa">
|
||||
<div id="outline-container-orgda73a50" class="outline-3">
|
||||
<h3 id="orgda73a50">References</h3>
|
||||
<div class="outline-text-3" id="text-orgda73a50">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">references.r = timeseries(args.r, args.t);
|
||||
references.rL = timeseries(rL, args.t);
|
||||
@@ -624,7 +629,7 @@ references.rL = timeseries(rL, args.t);
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:52</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -3,17 +3,13 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:52 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Simulink Project for the Stewart Simscape folder</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
@@ -49,7 +45,7 @@ The project can be opened using the <code>simulinkproject</code> function:
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">simulinkproject('../');
|
||||
<pre class="src src-matlab">simulinkproject(<span class="org-string">'../'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -61,16 +57,16 @@ The startup script is defined below and is exported to the <code>project_startup
|
||||
<pre class="src src-matlab">project = simulinkproject;
|
||||
projectRoot = project.RootFolder;
|
||||
|
||||
myCacheFolder = fullfile(projectRoot, '.SimulinkCache');
|
||||
myCodeFolder = fullfile(projectRoot, '.SimulinkCode');
|
||||
myCacheFolder = fullfile(projectRoot, <span class="org-string">'.SimulinkCache'</span>);
|
||||
myCodeFolder = fullfile(projectRoot, <span class="org-string">'.SimulinkCode'</span>);
|
||||
|
||||
Simulink.fileGenControl('set',...
|
||||
'CacheFolder', myCacheFolder,...
|
||||
'CodeGenFolder', myCodeFolder,...
|
||||
'createDir', true);
|
||||
Simulink.fileGenControl(<span class="org-string">'set'</span>,...
|
||||
<span class="org-string">'CacheFolder'</span>, myCacheFolder,...
|
||||
<span class="org-string">'CodeGenFolder'</span>, myCodeFolder,...
|
||||
<span class="org-string">'createDir'</span>, <span class="org-constant">true</span>);
|
||||
|
||||
%% Load the Simscape Configuration
|
||||
load('mat/conf_simscape.mat');
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Load the Simscape Configuration</span></span>
|
||||
load(<span class="org-string">'mat/conf_simscape.mat'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -78,7 +74,7 @@ load('mat/conf_simscape.mat');
|
||||
When the project closes, it runs the <code>project_shutdown.m</code> script defined below.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Simulink.fileGenControl('reset');
|
||||
<pre class="src src-matlab">Simulink.fileGenControl(<span class="org-string">'reset'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@@ -88,7 +84,7 @@ The project also permits to automatically add defined folder to the path when th
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:52</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -3,25 +3,30 @@
|
||||
"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-08-05 mer. 13:27 -->
|
||||
<!-- 2021-01-08 ven. 15:53 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Stewart Platform - Static Analysis</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>MathJax = {
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<script>
|
||||
MathJax = {
|
||||
svg: {
|
||||
scale: 1,
|
||||
fontCache: "global"
|
||||
},
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],}
|
||||
tags: "ams",
|
||||
multlineWidth: "%MULTLINEWIDTH",
|
||||
tagSide: "right",
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],},
|
||||
tagIndent: ".8em"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
@@ -34,20 +39,20 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgc502e97">1. Coupling</a></li>
|
||||
<li><a href="#org5d87fd3">1. Coupling</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc502e97" class="outline-2">
|
||||
<h2 id="orgc502e97"><span class="section-number-2">1</span> Coupling</h2>
|
||||
<div id="outline-container-org5d87fd3" class="outline-2">
|
||||
<h2 id="org5d87fd3"><span class="section-number-2">1</span> Coupling</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
What causes the coupling from \(F_i\) to \(X_i\) ?
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org41430df" class="figure">
|
||||
<div id="orgd94ead3" class="figure">
|
||||
<p><img src="figs/coupling.png" alt="coupling.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Block diagram to control an hexapod</p>
|
||||
@@ -69,7 +74,7 @@ Thus, the system is uncoupled if \(G\) and \(K\) are diagonal.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
||||
<p class="date">Created: 2021-01-08 ven. 15:53</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
BIN
mat/APA300ML.mat
12918
mat/base_plate.STEP
Normal file
BIN
mat/flexor_025.mat
Normal file
4118
mat/flexor_025.step
Executable file
BIN
mat/motion_error_ol.mat
Normal file
BIN
mat/strut_encoder.mat
Normal file
63197
mat/strut_encoder.step
Normal file
11895
mat/top_plate.STEP
Normal file
@@ -23,8 +23,9 @@ stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
|
||||
ground = initializeGround('type', 'none');
|
||||
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
|
||||
|
||||
|
||||
|
@@ -23,17 +23,14 @@ stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
||||
|
||||
ground = initializeGround('type', 'none');
|
||||
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
|
||||
|
||||
|
||||
% And we identify the dynamics from force actuators to force sensors.
|
||||
|
||||
%% Options for Linearized
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
|
||||
@@ -43,7 +40,7 @@ io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1;
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N]
|
||||
|
||||
%% Run the linearization
|
||||
G = linearize(mdl, io, options);
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
|
||||
@@ -88,7 +85,7 @@ linkaxes([ax1,ax2],'x');
|
||||
% We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
||||
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
||||
Gf = linearize(mdl, io, options);
|
||||
Gf = linearize(mdl, io);
|
||||
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
|
||||
@@ -97,7 +94,7 @@ Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
% We now use the amplified actuators and re-identify the dynamics
|
||||
|
||||
stewart = initializeAmplifiedStrutDynamics(stewart);
|
||||
Ga = linearize(mdl, io, options);
|
||||
Ga = linearize(mdl, io);
|
||||
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
||||
|
||||
|
@@ -22,8 +22,9 @@ stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart, 'type', 'accelerometer', 'freq', 5e3);
|
||||
|
||||
ground = initializeGround('type', 'none');
|
||||
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
||||
payload = initializePayload('type', 'none');
|
||||
controller = initializeController('type', 'open-loop');
|
||||
|
||||
%% Options for Linearized
|
||||
options = linearizeOptions;
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
@@ -1450,11 +1446,11 @@ Quantitatively:
|
||||
simulinkproject('../');
|
||||
#+end_src
|
||||
|
||||
** Stewart Platform Initialization
|
||||
#+begin_src matlab
|
||||
apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
open('stewart_platform_model.slx')
|
||||
#+end_src
|
||||
|
||||
** Stewart Platform Initialization
|
||||
#+begin_src matlab
|
||||
stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart);
|
||||
@@ -1463,32 +1459,23 @@ Quantitatively:
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 43e6*ones(6,1), 'K1', 0.4e6*ones(6,1), 'C1', 10*ones(6,1));
|
||||
apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 40.5e6*ones(6,1), 'K1', 0.4e6*ones(6,1));
|
||||
% stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_3dof', ...
|
||||
'type_M', 'spherical_3dof', ...
|
||||
'Kf_M', 100*ones(6,1), ...
|
||||
'Kt_M', 500*ones(6,1), ...
|
||||
'Kf_F', 100*ones(6,1), ...
|
||||
'Kt_F', 500*ones(6,1), ...
|
||||
'Ka_M', 200e6*ones(6,1), ...
|
||||
'Kr_M', 1e6*ones(6,1), ...
|
||||
'Ka_F', 200e6*ones(6,1), ...
|
||||
'Kr_F', 1e6*ones(6,1));
|
||||
% stewart = initializeJointDynamics(stewart, 'type_F', 'universal_3dof', ...
|
||||
% 'type_M', 'spherical_3dof', ...
|
||||
% 'Kf_M', 100*ones(6,1), ...
|
||||
% 'Kt_M', 500*ones(6,1), ...
|
||||
% 'Kf_F', 100*ones(6,1), ...
|
||||
% 'Kt_F', 500*ones(6,1), ...
|
||||
% 'Ka_M', 1e6*ones(6,1), ...
|
||||
% 'Kr_M', 1e6*ones(6,1), ...
|
||||
% 'Ka_F', 1e6*ones(6,1), ...
|
||||
% 'Kr_F', 1e6*ones(6,1));
|
||||
% stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
||||
flex_joint = load('./mat/flexor_025.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
stewart = initializeJointDynamics(stewart, 'type_M', 'spherical_3dof', ...
|
||||
'Kr_M', flex_joint.K(1,1)*ones(6,1), ...
|
||||
'Ka_M', flex_joint.K(3,3)*ones(6,1), ...
|
||||
'Kf_M', flex_joint.K(4,4)*ones(6,1), ...
|
||||
'Kt_M', flex_joint.K(6,6)*ones(6,1), ...
|
||||
'type_F', 'universal_3dof', ...
|
||||
'Kr_F', flex_joint.K(1,1)*ones(6,1), ...
|
||||
'Ka_F', flex_joint.K(3,3)*ones(6,1), ...
|
||||
'Kf_F', flex_joint.K(4,4)*ones(6,1), ...
|
||||
'Kt_F', flex_joint.K(6,6)*ones(6,1));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@@ -1497,7 +1484,6 @@ Quantitatively:
|
||||
|
||||
#+begin_src matlab
|
||||
stewart = initializeCylindricalStruts(stewart);
|
||||
% stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@@ -1518,10 +1504,6 @@ Quantitatively:
|
||||
disturbances = initializeDisturbances();
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
open('stewart_platform_model.slx')
|
||||
#+end_src
|
||||
|
||||
** Initialization :noexport:
|
||||
#+begin_src matlab
|
||||
%% Options for Linearized
|
||||
@@ -1581,3 +1563,156 @@ Quantitatively:
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/comp_relative_motion_sensor_act_leg.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:comp_relative_motion_sensor_act_leg
|
||||
#+caption: Comparison of the dynamique from actuator to relative motion sensor located in parallel with the actuator or with the leg (flexible joints included)
|
||||
#+RESULTS:
|
||||
[[file:figs/comp_relative_motion_sensor_act_leg.png]]
|
||||
|
||||
* Struts with Encoders
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports none
|
||||
simulinkproject('../');
|
||||
#+end_src
|
||||
|
||||
** Flexible Strut
|
||||
#+begin_src matlab
|
||||
apa = load('./mat/strut_encoder.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no
|
||||
data2orgtable([length(apa.n_i); length(apa.int_i); size(apa.M,1) - 6*length(apa.int_i); size(apa.M,1)], {'Total number of Nodes', 'Number of interface Nodes', 'Number of Modes', 'Size of M and K matrices'}, {}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| Total number of Nodes | 8 |
|
||||
| Number of interface Nodes | 8 |
|
||||
| Number of Modes | 6 |
|
||||
| Size of M and K matrices | 54 |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([[1:length(apa.int_i)]', apa.int_i, apa.int_xyz], {}, {'Node i', 'Node Number', 'x [m]', 'y [m]', 'z [m]'}, ' %f ');
|
||||
#+end_src
|
||||
|
||||
#+caption: Coordinates of the interface nodes
|
||||
#+RESULTS:
|
||||
| Node i | Node Number | x [m] | y [m] | z [m] |
|
||||
|--------+-------------+---------+--------+----------|
|
||||
| 1.0 | 504411.0 | 0.0 | 0.0 | 0.0405 |
|
||||
| 2.0 | 504412.0 | 0.0 | 0.0 | -0.0405 |
|
||||
| 3.0 | 504413.0 | -0.0325 | 0.0 | 0.0 |
|
||||
| 4.0 | 504414.0 | -0.0125 | 0.0 | 0.0 |
|
||||
| 5.0 | 504415.0 | -0.0075 | 0.0 | 0.0 |
|
||||
| 6.0 | 504416.0 | 0.0325 | 0.0 | 0.0 |
|
||||
| 7.0 | 504417.0 | 0.004 | 0.0145 | -0.00175 |
|
||||
| 8.0 | 504418.0 | 0.004 | 0.0166 | -0.00175 |
|
||||
|
||||
** Stewart Platform
|
||||
#+begin_src matlab
|
||||
stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 95e-3, 'MO_B', 220e-3);
|
||||
stewart = generateGeneralConfiguration(stewart, 'FH', 22.5e-3, 'FR', 114e-3, 'FTh', [ -11, 11, 120-11, 120+11, 240-11, 240+11]*(pi/180), ...
|
||||
'MH', 22.5e-3, 'MR', 110e-3, 'MTh', [-60+15, 60-15, 60+15, 180-15, 180+15, -60-15]*(pi/180));
|
||||
stewart = computeJointsPose(stewart);
|
||||
|
||||
stewart = initializeFlexibleStrutAndJointDynamics(stewart, 'H', (apa.int_xyz(1,3) - apa.int_xyz(2,3)), ...
|
||||
'K', apa.K, ...
|
||||
'M', apa.M, ...
|
||||
'n_xyz', apa.n_xyz, ...
|
||||
'xi', 0.1, ...
|
||||
'Gf', -2.65e7, ...
|
||||
'step_file', 'mat/APA300ML.STEP');
|
||||
|
||||
stewart = initializeSolidPlatforms(stewart);
|
||||
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
disturbances = initializeDisturbances();
|
||||
ground = initializeGround('type', 'none');
|
||||
payload = initializePayload('type', 'rigid', 'm', 1);
|
||||
controller = initializeController('type', 'open-loop');
|
||||
references = initializeReferences(stewart);
|
||||
#+end_src
|
||||
|
||||
|
||||
#+begin_src matlab
|
||||
%% Options for Linearized
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
%% Name of the Simulink File
|
||||
mdl = 'stewart_platform_model';
|
||||
|
||||
%% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m]
|
||||
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Lm'); io_i = io_i + 1; % Force Sensors [N]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Run the linearization
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
||||
G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', ...
|
||||
'D1', 'D2', 'D3', 'D4', 'D5', 'D6'};
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
freqs = logspace(0, 3, 1000);
|
||||
|
||||
figure;
|
||||
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G(i,i), freqs, 'Hz'))), 'color', [0 0.4470 0.7410 0.2]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G(6+i,i), freqs, 'Hz'))), 'color', [0.8500 0.3250 0.0980 0.2]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G(i,i), freqs, 'Hz'))), 'color', [0 0.4470 0.7410 0.2]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G(6+i,i), freqs, 'Hz'))), 'color', [0.8500 0.3250 0.0980 0.2]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-180, 180]);
|
||||
yticks([-180, -90, 0, 90, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/comp_relative_motion_sensor_act_leg_encoder.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:comp_relative_motion_sensor_act_leg_encoder
|
||||
#+caption:
|
||||
#+RESULTS:
|
||||
[[file:figs/comp_relative_motion_sensor_act_leg_encoder.png]]
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -1,11 +1,10 @@
|
||||
#+TITLE: Stewart Platforms
|
||||
:DRAWER:
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_LINK_HOME: https://research.tdehaeze.xyz/
|
||||
#+HTML_LINK_UP: https://research.tdehaeze.xyz/
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}")
|
||||
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
||||
@@ -20,8 +19,8 @@
|
||||
|
||||
* Introduction :ignore:
|
||||
The goal of this project is to provide a Matlab/Simscape Toolbox to study Stewart platforms.
|
||||
|
||||
The project is divided into several section listed below.
|
||||
The git repository of the project is accessible [[https://git.tdehaeze.xyz/tdehaeze/stewart-simscape][here]].
|
||||
|
||||
* Simulink Project ([[file:simulink-project.org][link]])
|
||||
The project is managed with a *Simulink Project*.
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
84
org/nass.org
Normal file
@@ -0,0 +1,84 @@
|
||||
#+TITLE: Stewart Platform - NASS
|
||||
:DRAWER:
|
||||
#+STARTUP: overview
|
||||
|
||||
#+LANGUAGE: en
|
||||
#+EMAIL: dehaeze.thomas@gmail.com
|
||||
#+AUTHOR: Dehaeze Thomas
|
||||
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
#+PROPERTY: header-args:matlab+ :exports both
|
||||
#+PROPERTY: header-args:matlab+ :results none
|
||||
#+PROPERTY: header-args:matlab+ :eval no-export
|
||||
#+PROPERTY: header-args:matlab+ :noweb yes
|
||||
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
||||
#+PROPERTY: header-args:matlab+ :output-dir figs
|
||||
|
||||
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}")
|
||||
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
||||
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
|
||||
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
|
||||
#+PROPERTY: header-args:latex+ :results file raw replace
|
||||
#+PROPERTY: header-args:latex+ :buffer no
|
||||
#+PROPERTY: header-args:latex+ :eval no-export
|
||||
#+PROPERTY: header-args:latex+ :exports results
|
||||
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
|
||||
:END:
|
||||
|
||||
* NASS
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
simulinkproject('../');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
open('stewart_platform_model.slx')
|
||||
#+end_src
|
||||
|
||||
** Identification of the Dynamics
|
||||
#+begin_src matlab
|
||||
apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
flex_joint = load('./mat/flexor_ID16.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
stewart = initializeStewartPlatform();
|
||||
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 175e-3);
|
||||
stewart = generateGeneralConfiguration(stewart, 'FH', 20e-3, 'MH', 20e-3, 'FR', 228e-3/2, 'MR', 220e-3/2, 'FTh', [-9, 9, 120-9, 120+9, 240-9, 240+9]*(pi/180), 'MTh', [-60+15, 60-15, 60+15, 180-15, 180+15, -60-15]*(pi/180));
|
||||
stewart = computeJointsPose(stewart);
|
||||
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
|
||||
stewart = initializeJointDynamics(stewart, 'type_F', 'flexible', 'K_F', flex_joint.K, 'M_F', flex_joint.M, 'n_xyz_F', flex_joint.n_xyz, 'xi_F', 0.1, 'step_file_F', 'mat/flexor_ID16.STEP', 'type_M', 'flexible', 'K_M', flex_joint.K, 'M_M', flex_joint.M, 'n_xyz_M', flex_joint.n_xyz, 'xi_M', 0.1, 'step_file_M', 'mat/flexor_ID16.STEP');
|
||||
stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 150e-3, 'Mpr', 125e-3);
|
||||
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
|
||||
stewart = computeJacobian(stewart);
|
||||
stewart = initializeStewartPose(stewart);
|
||||
stewart = initializeInertialSensor(stewart);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
ground = initializeGround('type', 'none');
|
||||
payload = initializePayload('type', 'rigid', 'm', 50);
|
||||
controller = initializeController('type', 'open-loop');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
disturbances = initializeDisturbances();
|
||||
references = initializeReferences(stewart);
|
||||
#+end_src
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
|
@@ -9,12 +9,8 @@
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
@@ -926,6 +922,66 @@ This Matlab function is accessible [[file:../src/initializeCylindricalPlatforms.
|
||||
stewart.platform_M.H = args.Mph;
|
||||
#+end_src
|
||||
|
||||
** =initializeSolidPlatforms=: Initialize the geometry of the Fixed and Mobile Platforms
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ../src/initializeSolidPlatforms.m
|
||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||
:END:
|
||||
<<sec:initializeSolidPlatforms>>
|
||||
|
||||
This Matlab function is accessible [[file:../src/initializeSolidPlatforms.m][here]].
|
||||
|
||||
*** Function description
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
function [stewart] = initializeSolidPlatforms(stewart, args)
|
||||
% initializeSolidPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
|
||||
%
|
||||
% Syntax: [stewart] = initializeSolidPlatforms(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - density [1x1] - Density of the platforms [kg]
|
||||
%
|
||||
% Outputs:
|
||||
% - stewart - updated Stewart structure with the added fields:
|
||||
% - platform_F [struct] - structure with the following fields:
|
||||
% - type = 2
|
||||
% - M [1x1] - Fixed Platform Density [kg/m^3]
|
||||
% - platform_M [struct] - structure with the following fields:
|
||||
% - type = 2
|
||||
% - M [1x1] - Mobile Platform Density [kg/m^3]
|
||||
#+end_src
|
||||
|
||||
*** Optional Parameters
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
arguments
|
||||
stewart
|
||||
args.density (1,1) double {mustBeNumeric, mustBePositive} = 7800
|
||||
end
|
||||
#+end_src
|
||||
|
||||
*** Populate the =stewart= structure
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
stewart.platform_F.type = 2;
|
||||
|
||||
stewart.platform_F.density = args.density;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
stewart.platform_M.type = 2;
|
||||
|
||||
stewart.platform_M.density = args.density;
|
||||
#+end_src
|
||||
|
||||
** =initializeCylindricalStruts=: Define the inertia of cylindrical struts
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ../src/initializeCylindricalStruts.m
|
||||
@@ -1513,6 +1569,96 @@ Rotational Damping
|
||||
stewart.joints_M.step_file = args.step_file_M;
|
||||
#+end_src
|
||||
|
||||
** TODO =initializeFlexibleStrutAndJointDynamics=: Model each strut with a flexible element
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ../src/initializeFlexibleStrutAndJointDynamics.m
|
||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||
:END:
|
||||
<<sec:initializeFlexibleStrutAndJointDynamics>>
|
||||
|
||||
This Matlab function is accessible [[file:../src/initializeFlexibleStrutAndJointDynamics.m][here]].
|
||||
|
||||
*** Function description
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
function [stewart] = initializeFlexibleStrutAndJointDynamics(stewart, args)
|
||||
% initializeFlexibleStrutAndJointDynamics - Add Stiffness and Damping properties of each strut
|
||||
%
|
||||
% Syntax: [stewart] = initializeFlexibleStrutAndJointDynamics(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - K [nxn] - Vertical stiffness contribution of the piezoelectric stack [N/m]
|
||||
% - M [nxn] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
|
||||
% - xi [1x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
|
||||
% - step_file [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
|
||||
% - Gf [6x1] - Gain from strain in [m] to measured [N] such that it matches
|
||||
%
|
||||
% Outputs:
|
||||
% - stewart - updated Stewart structure with the added fields:
|
||||
#+end_src
|
||||
|
||||
*** Optional Parameters
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
arguments
|
||||
stewart
|
||||
args.K double {mustBeNumeric} = zeros(6,6)
|
||||
args.M double {mustBeNumeric} = zeros(6,6)
|
||||
args.H double {mustBeNumeric} = 0
|
||||
args.n_xyz double {mustBeNumeric} = zeros(2,3)
|
||||
args.xi double {mustBeNumeric} = 0.1
|
||||
args.Gf double {mustBeNumeric} = 1
|
||||
args.step_file char {} = ''
|
||||
end
|
||||
#+end_src
|
||||
|
||||
*** Compute the axial offset
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
|
||||
#+begin_src matlab
|
||||
stewart.actuators.ax_off = (stewart.geometry.l(1) - args.H)/2; % Axial Offset at the ends of the actuator
|
||||
#+end_src
|
||||
|
||||
*** Populate the =stewart= structure
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
No discrete joints:
|
||||
#+begin_src matlab
|
||||
stewart.joints_F.type = 10;
|
||||
stewart.joints_M.type = 10;
|
||||
|
||||
#+end_src
|
||||
|
||||
No discrete struts:
|
||||
#+begin_src matlab
|
||||
stewart.struts_F.type = 3;
|
||||
stewart.struts_M.type = 3;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
stewart.actuators.type = 4;
|
||||
|
||||
stewart.actuators.Km = args.K;
|
||||
stewart.actuators.Mm = args.M;
|
||||
|
||||
stewart.actuators.n_xyz = args.n_xyz;
|
||||
stewart.actuators.xi = args.xi;
|
||||
|
||||
stewart.actuators.step_file = args.step_file;
|
||||
|
||||
stewart.actuators.K = args.K(3,3); % Axial Stiffness
|
||||
|
||||
stewart.actuators.Gf = args.Gf;
|
||||
#+end_src
|
||||
|
||||
** =initializeInertialSensor=: Initialize the inertial sensor in each strut
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ../src/initializeInertialSensor.m
|
||||
|
48
src/initializeFlexibleStrutAndJointDynamics.m
Normal file
@@ -0,0 +1,48 @@
|
||||
function [stewart] = initializeFlexibleStrutAndJointDynamics(stewart, args)
|
||||
% initializeFlexibleStrutAndJointDynamics - Add Stiffness and Damping properties of each strut
|
||||
%
|
||||
% Syntax: [stewart] = initializeFlexibleStrutAndJointDynamics(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - K [nxn] - Vertical stiffness contribution of the piezoelectric stack [N/m]
|
||||
% - M [nxn] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
|
||||
% - xi [1x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
|
||||
% - step_file [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
|
||||
% - Gf [6x1] - Gain from strain in [m] to measured [N] such that it matches
|
||||
%
|
||||
% Outputs:
|
||||
% - stewart - updated Stewart structure with the added fields:
|
||||
|
||||
arguments
|
||||
stewart
|
||||
args.K double {mustBeNumeric} = zeros(6,6)
|
||||
args.M double {mustBeNumeric} = zeros(6,6)
|
||||
args.H double {mustBeNumeric} = 0
|
||||
args.n_xyz double {mustBeNumeric} = zeros(2,3)
|
||||
args.xi double {mustBeNumeric} = 0.1
|
||||
args.Gf double {mustBeNumeric} = 1
|
||||
args.step_file char {} = ''
|
||||
end
|
||||
|
||||
stewart.actuators.ax_off = (stewart.geometry.l(1) - args.H)/2; % Axial Offset at the ends of the actuator
|
||||
|
||||
stewart.joints_F.type = 10;
|
||||
stewart.joints_M.type = 10;
|
||||
|
||||
stewart.struts_F.type = 3;
|
||||
stewart.struts_M.type = 3;
|
||||
|
||||
stewart.actuators.type = 4;
|
||||
|
||||
stewart.actuators.Km = args.K;
|
||||
stewart.actuators.Mm = args.M;
|
||||
|
||||
stewart.actuators.n_xyz = args.n_xyz;
|
||||
stewart.actuators.xi = args.xi;
|
||||
|
||||
stewart.actuators.step_file = args.step_file;
|
||||
|
||||
stewart.actuators.K = args.K(3,3); % Axial Stiffness
|
||||
|
||||
stewart.actuators.Gf = args.Gf;
|
30
src/initializeSolidPlatforms.m
Normal file
@@ -0,0 +1,30 @@
|
||||
function [stewart] = initializeSolidPlatforms(stewart, args)
|
||||
% initializeSolidPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
|
||||
%
|
||||
% Syntax: [stewart] = initializeSolidPlatforms(args)
|
||||
%
|
||||
% Inputs:
|
||||
% - args - Structure with the following fields:
|
||||
% - density [1x1] - Density of the platforms [kg]
|
||||
%
|
||||
% Outputs:
|
||||
% - stewart - updated Stewart structure with the added fields:
|
||||
% - platform_F [struct] - structure with the following fields:
|
||||
% - type = 2
|
||||
% - M [1x1] - Fixed Platform Density [kg/m^3]
|
||||
% - platform_M [struct] - structure with the following fields:
|
||||
% - type = 2
|
||||
% - M [1x1] - Mobile Platform Density [kg/m^3]
|
||||
|
||||
arguments
|
||||
stewart
|
||||
args.density (1,1) double {mustBeNumeric, mustBePositive} = 7800
|
||||
end
|
||||
|
||||
stewart.platform_F.type = 2;
|
||||
|
||||
stewart.platform_F.density = args.density;
|
||||
|
||||
stewart.platform_M.type = 2;
|
||||
|
||||
stewart.platform_M.density = args.density;
|