Work on HAC-LAC, Control architectures

This commit is contained in:
Thomas Dehaeze 2020-02-28 17:35:44 +01:00
parent c1ca4b3b78
commit 02943f0f28
52 changed files with 2706 additions and 334 deletions

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-02-27 jeu. 14:16 --> <!-- 2020-02-28 ven. 17:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Decentralized Active Damping</title> <title>Stewart Platform - Decentralized Active Damping</title>
@ -249,25 +249,25 @@
<li><a href="#orgd59c804">1. Inertial Control</a> <li><a href="#orgd59c804">1. Inertial Control</a>
<ul> <ul>
<li><a href="#org5f749c8">1.1. Identification of the Dynamics</a></li> <li><a href="#org5f749c8">1.1. Identification of the Dynamics</a></li>
<li><a href="#orgd637197">1.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li> <li><a href="#org3014959">1.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
<li><a href="#orgd895eeb">1.3. Obtained Damping</a></li> <li><a href="#orga144352">1.3. Obtained Damping</a></li>
<li><a href="#orgeaf5ef8">1.4. Conclusion</a></li> <li><a href="#org004b094">1.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org74c7eb4">2. Integral Force Feedback</a> <li><a href="#org74c7eb4">2. Integral Force Feedback</a>
<ul> <ul>
<li><a href="#orgcaa6199">2.1. Identification of the Dynamics with perfect Joints</a></li> <li><a href="#org7313778">2.1. Identification of the Dynamics with perfect Joints</a></li>
<li><a href="#org1910546">2.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li> <li><a href="#org462c581">2.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
<li><a href="#org9e1f2e2">2.3. Obtained Damping</a></li> <li><a href="#org943bf7b">2.3. Obtained Damping</a></li>
<li><a href="#org405813e">2.4. Conclusion</a></li> <li><a href="#orga677c7d">2.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org08917d6">3. Direct Velocity Feedback</a> <li><a href="#org08917d6">3. Direct Velocity Feedback</a>
<ul> <ul>
<li><a href="#org7313778">3.1. Identification of the Dynamics with perfect Joints</a></li> <li><a href="#orgcd99b62">3.1. Identification of the Dynamics with perfect Joints</a></li>
<li><a href="#org3014959">3.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li> <li><a href="#orgd0f78f7">3.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
<li><a href="#orga144352">3.3. Obtained Damping</a></li> <li><a href="#org3f64d96">3.3. Obtained Damping</a></li>
<li><a href="#org004b094">3.4. Conclusion</a></li> <li><a href="#org8e1ece7">3.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org183f3f2">4. Compliance and Transmissibility Comparison</a> <li><a href="#org183f3f2">4. Compliance and Transmissibility Comparison</a>
@ -330,6 +330,7 @@ stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</spa
<div class="org-src-container"> <div class="org-src-container">
<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); <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>); 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> </pre>
</div> </div>
@ -365,8 +366,8 @@ The transfer function from actuator forces to force sensors is shown in Figure <
</div> </div>
</div> </div>
<div id="outline-container-orgd637197" class="outline-3"> <div id="outline-container-org3014959" class="outline-3">
<h3 id="orgd637197"><span class="section-number-3">1.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3> <h3 id="org3014959"><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"> <div class="outline-text-3" id="text-1-2">
<p> <p>
We add some stiffness and damping in the flexible joints and we re-identify the dynamics. We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
@ -402,8 +403,8 @@ The new dynamics from force actuator to force sensor is shown in Figure <a href=
</div> </div>
</div> </div>
<div id="outline-container-orgd895eeb" class="outline-3"> <div id="outline-container-orga144352" class="outline-3">
<h3 id="orgd895eeb"><span class="section-number-3">1.3</span> Obtained Damping</h3> <h3 id="orga144352"><span class="section-number-3">1.3</span> Obtained Damping</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
<p> <p>
The control is a performed in a decentralized manner. The control is a performed in a decentralized manner.
@ -428,8 +429,8 @@ The root locus is shown in figure <a href="#org9af9e33">3</a>.
</div> </div>
</div> </div>
<div id="outline-container-orgeaf5ef8" class="outline-3"> <div id="outline-container-org004b094" class="outline-3">
<h3 id="orgeaf5ef8"><span class="section-number-3">1.4</span> Conclusion</h3> <h3 id="org004b094"><span class="section-number-3">1.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-4"> <div class="outline-text-3" id="text-1-4">
<div class="important"> <div class="important">
<p> <p>
@ -460,8 +461,8 @@ To run the script, open the Simulink Project, and type <code>run active_damping_
</div> </div>
</div> </div>
<div id="outline-container-orgcaa6199" class="outline-3"> <div id="outline-container-org7313778" class="outline-3">
<h3 id="orgcaa6199"><span class="section-number-3">2.1</span> Identification of the Dynamics with perfect Joints</h3> <h3 id="org7313778"><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"> <div class="outline-text-3" id="text-2-1">
<p> <p>
We first initialize the Stewart platform without joint stiffness. We first initialize the Stewart platform without joint stiffness.
@ -484,11 +485,7 @@ stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</spa
<div class="org-src-container"> <div class="org-src-container">
<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); <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>); payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre> controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
</div>
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
</pre> </pre>
</div> </div>
@ -496,11 +493,7 @@ payload = initializePayload(<span class="org-string">'type'</span>, <span class=
And we identify the dynamics from force actuators to force sensors. And we identify the dynamics from force actuators to force sensors.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span> <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'stewart_platform_model'</span>; mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
@ -509,7 +502,7 @@ io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1,
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> 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>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, options); G = linearize(mdl, io);
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.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>}; 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> </pre>
@ -527,15 +520,15 @@ The transfer function from actuator forces to force sensors is shown in Figure <
</div> </div>
</div> </div>
<div id="outline-container-org1910546" class="outline-3"> <div id="outline-container-org462c581" class="outline-3">
<h3 id="org1910546"><span class="section-number-3">2.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3> <h3 id="org462c581"><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"> <div class="outline-text-3" id="text-2-2">
<p> <p>
We add some stiffness and damping in the flexible joints and we re-identify the dynamics. We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<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>); <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 = linearize(mdl, io);
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.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>}; 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> </pre>
@ -546,7 +539,7 @@ We now use the amplified actuators and re-identify the dynamics
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart); <pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
Ga = linearize(mdl, io, options); Ga = linearize(mdl, io);
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.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>}; 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> </pre>
@ -564,8 +557,8 @@ The new dynamics from force actuator to force sensor is shown in Figure <a href=
</div> </div>
</div> </div>
<div id="outline-container-org9e1f2e2" class="outline-3"> <div id="outline-container-org943bf7b" class="outline-3">
<h3 id="org9e1f2e2"><span class="section-number-3">2.3</span> Obtained Damping</h3> <h3 id="org943bf7b"><span class="section-number-3">2.3</span> Obtained Damping</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<p> <p>
The control is a performed in a decentralized manner. The control is a performed in a decentralized manner.
@ -597,8 +590,8 @@ The root locus is shown in figure <a href="#orge21bbea">6</a> and the obtained p
</div> </div>
</div> </div>
<div id="outline-container-org405813e" class="outline-3"> <div id="outline-container-orga677c7d" class="outline-3">
<h3 id="org405813e"><span class="section-number-3">2.4</span> Conclusion</h3> <h3 id="orga677c7d"><span class="section-number-3">2.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-4"> <div class="outline-text-3" id="text-2-4">
<div class="important"> <div class="important">
<p> <p>
@ -630,8 +623,8 @@ To run the script, open the Simulink Project, and type <code>run active_damping_
</div> </div>
</div> </div>
<div id="outline-container-org7313778" class="outline-3"> <div id="outline-container-orgcd99b62" class="outline-3">
<h3 id="org7313778"><span class="section-number-3">3.1</span> Identification of the Dynamics with perfect Joints</h3> <h3 id="orgcd99b62"><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"> <div class="outline-text-3" id="text-3-1">
<p> <p>
We first initialize the Stewart platform without joint stiffness. We first initialize the Stewart platform without joint stiffness.
@ -654,6 +647,7 @@ stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</spa
<div class="org-src-container"> <div class="org-src-container">
<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); <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>); 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> </pre>
</div> </div>
@ -693,8 +687,8 @@ The transfer function from actuator forces to relative motion sensors is shown i
</div> </div>
<div id="outline-container-org3014959" class="outline-3"> <div id="outline-container-orgd0f78f7" class="outline-3">
<h3 id="org3014959"><span class="section-number-3">3.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3> <h3 id="orgd0f78f7"><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"> <div class="outline-text-3" id="text-3-2">
<p> <p>
We add some stiffness and damping in the flexible joints and we re-identify the dynamics. We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
@ -730,8 +724,8 @@ The new dynamics from force actuator to relative motion sensor is shown in Figur
</div> </div>
</div> </div>
<div id="outline-container-orga144352" class="outline-3"> <div id="outline-container-org3f64d96" class="outline-3">
<h3 id="orga144352"><span class="section-number-3">3.3</span> Obtained Damping</h3> <h3 id="org3f64d96"><span class="section-number-3">3.3</span> Obtained Damping</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<p> <p>
The control is a performed in a decentralized manner. The control is a performed in a decentralized manner.
@ -756,8 +750,8 @@ The root locus is shown in figure <a href="#org277d60d">10</a>.
</div> </div>
</div> </div>
<div id="outline-container-org004b094" class="outline-3"> <div id="outline-container-org8e1ece7" class="outline-3">
<h3 id="org004b094"><span class="section-number-3">3.4</span> Conclusion</h3> <h3 id="org8e1ece7"><span class="section-number-3">3.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-4"> <div class="outline-text-3" id="text-3-4">
<div class="important"> <div class="important">
<p> <p>
@ -799,6 +793,7 @@ The rotation point of the ground is located at the origin of frame \(\{A\}\).
<div class="org-src-container"> <div class="org-src-container">
<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); <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>); 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> </pre>
</div> </div>
</div> </div>
@ -822,7 +817,7 @@ Now, let&rsquo;s identify the transmissibility and compliance for the Integral F
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>); <pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>);
G_iff = (2e4<span class="org-type">/</span>s)<span class="org-type">*</span>eye(6); K_iff = (1e4<span class="org-type">/</span>s)<span class="org-type">*</span>eye(6);
[T_iff, T_norm_iff, <span class="org-type">~</span>] = computeTransmissibility(); [T_iff, T_norm_iff, <span class="org-type">~</span>] = computeTransmissibility();
[C_iff, C_norm_iff, <span class="org-type">~</span>] = computeCompliance(); [C_iff, C_norm_iff, <span class="org-type">~</span>] = computeCompliance();
@ -834,7 +829,7 @@ And for the Direct Velocity Feedback.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>); <pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
G_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); 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, <span class="org-type">~</span>] = computeTransmissibility(); [T_dvf, T_norm_dvf, <span class="org-type">~</span>] = computeTransmissibility();
[C_dvf, C_norm_dvf, <span class="org-type">~</span>] = computeCompliance(); [C_dvf, C_norm_dvf, <span class="org-type">~</span>] = computeCompliance();
@ -872,7 +867,7 @@ G_dvf = 1e4<span class="org-type">*</span>s<span class="org-type">/</span>(1<spa
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-27 jeu. 14:16</p> <p class="date">Created: 2020-02-28 ven. 17:33</p>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

370
docs/control-tracking.html Normal file
View File

@ -0,0 +1,370 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-02-28 ven. 17:37 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Tracking Control</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<script src="./js/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/jquery.stickytableheaders.min.js"></script>
<script src="./js/readtheorg.js"></script>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Stewart Platform - Tracking Control</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org4c793a2">1. First Control Architecture</a>
<ul>
<li><a href="#org49467e8">1.1. Control Schematic</a></li>
<li><a href="#org67db718">1.2. Initialize the Stewart platform</a></li>
<li><a href="#org641cba6">1.3. Identification of the plant</a></li>
<li><a href="#orgd9d7b44">1.4. Plant Analysis</a></li>
<li><a href="#orgfaf80fa">1.5. Controller Design</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org4c793a2" class="outline-2">
<h2 id="org4c793a2"><span class="section-number-2">1</span> First Control Architecture</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org49467e8" class="outline-3">
<h3 id="org49467e8"><span class="section-number-3">1.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-1-1">
<div class="figure">
<p><img src="figs/control_measure_rotating_2dof.png" alt="control_measure_rotating_2dof.png" />
</p>
</div>
</div>
</div>
<div id="outline-container-org67db718" class="outline-3">
<h3 id="org67db718"><span class="section-number-3">1.2</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-1-2">
<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>, 45e<span class="org-type">-</span>3);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart);
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, <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(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org641cba6" class="outline-3">
<h3 id="org641cba6"><span class="section-number-3">1.3</span> Identification of the plant</h3>
<div class="outline-text-3" id="text-1-3">
<p>
Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{L}\).
</p>
<div class="org-src-container">
<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>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force Inputs [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Stewart Platform'</span>], 1, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'dLm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Displacement Outputs [m]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io);
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">'L1'</span>, <span class="org-string">'L2'</span>, <span class="org-string">'L3'</span>, <span class="org-string">'L4'</span>, <span class="org-string">'L5'</span>, <span class="org-string">'L6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd9d7b44" class="outline-3">
<h3 id="orgd9d7b44"><span class="section-number-3">1.4</span> Plant Analysis</h3>
<div class="outline-text-3" id="text-1-4">
<p>
Diagonal terms
Compare to off-diagonal terms
</p>
</div>
</div>
<div id="outline-container-orgfaf80fa" class="outline-3">
<h3 id="orgfaf80fa"><span class="section-number-3">1.5</span> Controller Design</h3>
<div class="outline-text-3" id="text-1-5">
<p>
One integrator should be present in the controller.
</p>
<p>
A lead is added around the crossover frequency which is set to be around 500Hz.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% wint = 2*pi*100; % Integrate until [rad]</span>
<span class="org-comment">% wlead = 2*pi*500; % Location of the lead [rad]</span>
<span class="org-comment">% hlead = 2; % Lead strengh</span>
<span class="org-comment">% Kl = 1e6 * ... % Gain</span>
<span class="org-comment">% (s + wint)/(s) * ... % Integrator until 100Hz</span>
<span class="org-comment">% (1 + s/(wlead/hlead)/(1 + s/(wlead*hlead))); % Lead</span>
wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100;
Kl = 1<span class="org-type">/</span>abs(freqresp(G(1,1), wc)) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> 1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(3<span class="org-type">*</span>wc));
Kl = Kl <span class="org-type">*</span> eye(6);
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-28 ven. 17:37</p>
</div>
</body>
</html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-02-27 jeu. 14:16 --> <!-- 2020-02-28 ven. 17:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cubic configuration for the Stewart Platform</title> <title>Cubic configuration for the Stewart Platform</title>
@ -252,33 +252,33 @@
<li><a href="#orga88e79a">1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</a></li> <li><a href="#orga88e79a">1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center</a></li>
<li><a href="#orge02ec88">1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</a></li> <li><a href="#orge02ec88">1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center</a></li>
<li><a href="#org43fd7e4">1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</a></li> <li><a href="#org43fd7e4">1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center</a></li>
<li><a href="#orgd6c60aa">1.5. Conclusion</a></li> <li><a href="#org3e2b41c">1.5. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgd70418b">2. Configuration with the Cube&rsquo;s center above the mobile platform</a> <li><a href="#orgd70418b">2. Configuration with the Cube&rsquo;s center above the mobile platform</a>
<ul> <ul>
<li><a href="#org8afa645">2.1. Having Cube&rsquo;s center above the top platform</a></li> <li><a href="#org8afa645">2.1. Having Cube&rsquo;s center above the top platform</a></li>
<li><a href="#org78f0f9c">2.2. Conclusion</a></li> <li><a href="#orgeeac940">2.2. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgcc4ecce">3. Cubic size analysis</a> <li><a href="#orgcc4ecce">3. Cubic size analysis</a>
<ul> <ul>
<li><a href="#org0029d8c">3.1. Analysis</a></li> <li><a href="#org0029d8c">3.1. Analysis</a></li>
<li><a href="#org53a1ab8">3.2. Conclusion</a></li> <li><a href="#org991d232">3.2. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgf09da67">4. Dynamic Coupling in the Cartesian Frame</a> <li><a href="#orgf09da67">4. Dynamic Coupling in the Cartesian Frame</a>
<ul> <ul>
<li><a href="#org5fe01ec">4.1. Cube&rsquo;s center at the Center of Mass of the mobile platform</a></li> <li><a href="#org5fe01ec">4.1. Cube&rsquo;s center at the Center of Mass of the mobile platform</a></li>
<li><a href="#org4cb2a36">4.2. Cube&rsquo;s center not coincident with the Mass of the Mobile platform</a></li> <li><a href="#org4cb2a36">4.2. Cube&rsquo;s center not coincident with the Mass of the Mobile platform</a></li>
<li><a href="#orga0d81dc">4.3. Conclusion</a></li> <li><a href="#orgf0acd1f">4.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8f26dc0">5. Dynamic Coupling between actuators and sensors of each strut</a> <li><a href="#org8f26dc0">5. Dynamic Coupling between actuators and sensors of each strut</a>
<ul> <ul>
<li><a href="#org6e391c9">5.1. Coupling between the actuators and sensors - Cubic Architecture</a></li> <li><a href="#org6e391c9">5.1. Coupling between the actuators and sensors - Cubic Architecture</a></li>
<li><a href="#orgafd808d">5.2. Coupling between the actuators and sensors - Non-Cubic Architecture</a></li> <li><a href="#orgafd808d">5.2. Coupling between the actuators and sensors - Non-Cubic Architecture</a></li>
<li><a href="#org3e2b41c">5.3. Conclusion</a></li> <li><a href="#org78c4967">5.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org3044455">6. Functions</a> <li><a href="#org3044455">6. Functions</a>
@ -826,8 +826,8 @@ stewart = initializeCylindricalPlatforms(stewart, <span class="org-string">'Fpr'
</div> </div>
</div> </div>
<div id="outline-container-orgd6c60aa" class="outline-3"> <div id="outline-container-org3e2b41c" class="outline-3">
<h3 id="orgd6c60aa"><span class="section-number-3">1.5</span> Conclusion</h3> <h3 id="org3e2b41c"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5"> <div class="outline-text-3" id="text-1-5">
<div class="important"> <div class="important">
<p> <p>
@ -1164,8 +1164,8 @@ FOc = H <span class="org-type">+</span> MO_B; <span class="org-comment">% Cente
</div> </div>
</div> </div>
<div id="outline-container-org78f0f9c" class="outline-3"> <div id="outline-container-orgeeac940" class="outline-3">
<h3 id="org78f0f9c"><span class="section-number-3">2.2</span> Conclusion</h3> <h3 id="orgeeac940"><span class="section-number-3">2.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="important"> <div class="important">
<p> <p>
@ -1251,8 +1251,8 @@ We also find that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) are varyi
</div> </div>
</div> </div>
<div id="outline-container-org53a1ab8" class="outline-3"> <div id="outline-container-org991d232" class="outline-3">
<h3 id="org53a1ab8"><span class="section-number-3">3.2</span> Conclusion</h3> <h3 id="org991d232"><span class="section-number-3">3.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
<p> <p>
We observe that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) increase linearly with the cube size. We observe that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) increase linearly with the cube size.
@ -1391,6 +1391,7 @@ No flexibility below the Stewart platform and no payload.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -1535,6 +1536,7 @@ No flexibility below the Stewart platform and no payload.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -1607,8 +1609,8 @@ This was expected as the mass matrix is not diagonal (the Center of Mass of the
</div> </div>
</div> </div>
<div id="outline-container-orga0d81dc" class="outline-3"> <div id="outline-container-orgf0acd1f" class="outline-3">
<h3 id="orga0d81dc"><span class="section-number-3">4.3</span> Conclusion</h3> <h3 id="orgf0acd1f"><span class="section-number-3">4.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<div class="important"> <div class="important">
<p> <p>
@ -1693,6 +1695,7 @@ No flexibility below the Stewart platform and no payload.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -1760,6 +1763,7 @@ No flexibility below the Stewart platform and no payload.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -1790,8 +1794,8 @@ And we identify the dynamics from the actuator forces \(\tau_{i}\) to the relati
</div> </div>
</div> </div>
<div id="outline-container-org3e2b41c" class="outline-3"> <div id="outline-container-org78c4967" class="outline-3">
<h3 id="org3e2b41c"><span class="section-number-3">5.3</span> Conclusion</h3> <h3 id="org78c4967"><span class="section-number-3">5.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-3"> <div class="outline-text-3" id="text-5-3">
<div class="important"> <div class="important">
<p> <p>
@ -1962,7 +1966,7 @@ stewart.platform_M.Mb = Mb;
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-27 jeu. 14:16</p> <p class="date">Created: 2020-02-28 ven. 17:34</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-02-27 jeu. 14:16 --> <!-- 2020-02-28 ven. 17:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Dynamics Study</title> <title>Stewart Platform - Dynamics Study</title>
@ -250,13 +250,13 @@
<ul> <ul>
<li><a href="#org4509b7d">1.1. Comparison with fixed support</a></li> <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="#org8662186">1.2. Comparison with a flexible support</a></li>
<li><a href="#org03b2957">1.3. Conclusion</a></li> <li><a href="#org920d3c4">1.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org81ab204">2. Comparison of the static transfer function and the Compliance matrix</a> <li><a href="#org81ab204">2. Comparison of the static transfer function and the Compliance matrix</a>
<ul> <ul>
<li><a href="#orge7e7242">2.1. Analysis</a></li> <li><a href="#orge7e7242">2.1. Analysis</a></li>
<li><a href="#org920d3c4">2.2. Conclusion</a></li> <li><a href="#orgbb930ae">2.2. Conclusion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -299,6 +299,7 @@ We also don&rsquo;t put any payload on top of the Stewart platform.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -441,8 +442,8 @@ And thus \(\mathcal{F}_{x}\) and \(\mathcal{F}_{x,\text{ext}}\) have clearly <b>
</div> </div>
<div id="outline-container-org03b2957" class="outline-3"> <div id="outline-container-org920d3c4" class="outline-3">
<h3 id="org03b2957"><span class="section-number-3">1.3</span> Conclusion</h3> <h3 id="org920d3c4"><span class="section-number-3">1.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
<div class="important"> <div class="important">
<p> <p>
@ -489,6 +490,7 @@ No flexibility below the Stewart platform and no payload.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
@ -675,8 +677,8 @@ And now at the Compliance matrix.
</div> </div>
</div> </div>
<div id="outline-container-org920d3c4" class="outline-3"> <div id="outline-container-orgbb930ae" class="outline-3">
<h3 id="org920d3c4"><span class="section-number-3">2.2</span> Conclusion</h3> <h3 id="orgbb930ae"><span class="section-number-3">2.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="important"> <div class="important">
<p> <p>
@ -690,7 +692,7 @@ The low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathc
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-27 jeu. 14:16</p> <p class="date">Created: 2020-02-28 ven. 17:34</p>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-02-27 jeu. 14:16 --> <!-- 2020-02-28 ven. 17:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Identification of the Stewart Platform using Simscape</title> <title>Identification of the Stewart Platform using Simscape</title>
@ -257,13 +257,13 @@
</li> </li>
<li><a href="#org2891722">2. Transmissibility Analysis</a> <li><a href="#org2891722">2. Transmissibility Analysis</a>
<ul> <ul>
<li><a href="#org8c667e9">2.1. Initialize the Stewart platform</a></li> <li><a href="#orgc8e1f51">2.1. Initialize the Stewart platform</a></li>
<li><a href="#org5338f20">2.2. Transmissibility</a></li> <li><a href="#org5338f20">2.2. Transmissibility</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgc94edbd">3. Compliance Analysis</a> <li><a href="#orgc94edbd">3. Compliance Analysis</a>
<ul> <ul>
<li><a href="#orgc8e1f51">3.1. Initialize the Stewart platform</a></li> <li><a href="#org55d2544">3.1. Initialize the Stewart platform</a></li>
<li><a href="#org1177029">3.2. Compliance</a></li> <li><a href="#org1177029">3.2. Compliance</a></li>
</ul> </ul>
</li> </li>
@ -271,18 +271,18 @@
<ul> <ul>
<li><a href="#org487c4d4">4.1. Compute the Transmissibility</a> <li><a href="#org487c4d4">4.1. Compute the Transmissibility</a>
<ul> <ul>
<li><a href="#org851f84d">Function description</a></li> <li><a href="#org64fc1e2">Function description</a></li>
<li><a href="#orgf5e24cd">Optional Parameters</a></li> <li><a href="#org54cab00">Optional Parameters</a></li>
<li><a href="#org4629501">Identification of the Transmissibility Matrix</a></li> <li><a href="#org4629501">Identification of the Transmissibility Matrix</a></li>
<li><a href="#org989379a">Computation of the Frobenius norm</a></li> <li><a href="#org6f63d37">Computation of the Frobenius norm</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org50e35a6">4.2. Compute the Compliance</a> <li><a href="#org50e35a6">4.2. Compute the Compliance</a>
<ul> <ul>
<li><a href="#org64fc1e2">Function description</a></li> <li><a href="#org3cf1d13">Function description</a></li>
<li><a href="#org54cab00">Optional Parameters</a></li> <li><a href="#org726b57d">Optional Parameters</a></li>
<li><a href="#orgef06b63">Identification of the Compliance Matrix</a></li> <li><a href="#orgef06b63">Identification of the Compliance Matrix</a></li>
<li><a href="#org6f63d37">Computation of the Frobenius norm</a></li> <li><a href="#org1019eaf">Computation of the Frobenius norm</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -329,6 +329,7 @@ stewart = initializeInertialSensor(stewart);
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); 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> </pre>
</div> </div>
</div> </div>
@ -608,8 +609,8 @@ Save the movie of the mode shape.
<a id="orga989615"></a> <a id="orga989615"></a>
</p> </p>
</div> </div>
<div id="outline-container-org8c667e9" class="outline-3"> <div id="outline-container-orgc8e1f51" class="outline-3">
<h3 id="org8c667e9"><span class="section-number-3">2.1</span> Initialize the Stewart platform</h3> <h3 id="orgc8e1f51"><span class="section-number-3">2.1</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform(); <pre class="src src-matlab">stewart = initializeStewartPlatform();
@ -632,6 +633,7 @@ We set the rotation point of the ground to be at the same point at frames \(\{A\
<div class="org-src-container"> <div class="org-src-container">
<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); <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">'rigid'</span>); payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
</pre> </pre>
</div> </div>
</div> </div>
@ -729,8 +731,8 @@ plot(freqs, Gamma)
<a id="org4579374"></a> <a id="org4579374"></a>
</p> </p>
</div> </div>
<div id="outline-container-orgc8e1f51" class="outline-3"> <div id="outline-container-org55d2544" class="outline-3">
<h3 id="orgc8e1f51"><span class="section-number-3">3.1</span> Initialize the Stewart platform</h3> <h3 id="org55d2544"><span class="section-number-3">3.1</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform(); <pre class="src src-matlab">stewart = initializeStewartPlatform();
@ -753,6 +755,7 @@ We set the rotation point of the ground to be at the same point at frames \(\{A\
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <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>); payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
</pre> </pre>
</div> </div>
</div> </div>
@ -841,9 +844,9 @@ plot(freqs, C_norm)
</p> </p>
</div> </div>
<div id="outline-container-org851f84d" class="outline-4"> <div id="outline-container-org64fc1e2" class="outline-4">
<h4 id="org851f84d">Function description</h4> <h4 id="org64fc1e2">Function description</h4>
<div class="outline-text-4" id="text-org851f84d"> <div class="outline-text-4" id="text-org64fc1e2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[T, T_norm, freqs]</span> = <span class="org-function-name">computeTransmissibility</span>(<span class="org-variable-name">args</span>) <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[T, T_norm, freqs]</span> = <span class="org-function-name">computeTransmissibility</span>(<span class="org-variable-name">args</span>)
<span class="org-comment">% computeTransmissibility -</span> <span class="org-comment">% computeTransmissibility -</span>
@ -864,9 +867,9 @@ plot(freqs, C_norm)
</div> </div>
</div> </div>
<div id="outline-container-orgf5e24cd" class="outline-4"> <div id="outline-container-org54cab00" class="outline-4">
<h4 id="orgf5e24cd">Optional Parameters</h4> <h4 id="org54cab00">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgf5e24cd"> <div class="outline-text-4" id="text-org54cab00">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">arguments <pre class="src src-matlab">arguments
args.plots logical {mustBeNumericOrLogical} = <span class="org-constant">false</span> args.plots logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
@ -896,7 +899,7 @@ mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances/D_w'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Base Motion [m, rad]</span> io(io_i) = linio([mdl, <span class="org-string">'/Disturbances/D_w'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Base Motion [m, rad]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion [m, rad]</span> io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'output'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion [m, rad]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
T = linearize(mdl, io, options); T = linearize(mdl, io, options);
@ -935,17 +938,17 @@ If wanted, the 6x6 transmissibility matrix is plotted.
han = <span class="org-type">axes</span>(fig, <span class="org-string">'visible'</span>, <span class="org-string">'off'</span>); han = <span class="org-type">axes</span>(fig, <span class="org-string">'visible'</span>, <span class="org-string">'off'</span>);
han.XLabel.Visible = <span class="org-string">'on'</span>; han.XLabel.Visible = <span class="org-string">'on'</span>;
han.YLabel.Visible = <span class="org-string">'on'</span>; han.YLabel.Visible = <span class="org-string">'on'</span>;
ylabel(han, <span class="org-string">'Frequency [Hz]'</span>); xlabel(han, <span class="org-string">'Frequency [Hz]'</span>);
xlabel(han, <span class="org-string">'Transmissibility [m/m]'</span>); ylabel(han, <span class="org-string">'Transmissibility [m/m]'</span>);
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org989379a" class="outline-4"> <div id="outline-container-org6f63d37" class="outline-4">
<h4 id="org989379a">Computation of the Frobenius norm</h4> <h4 id="org6f63d37">Computation of the Frobenius norm</h4>
<div class="outline-text-4" id="text-org989379a"> <div class="outline-text-4" id="text-org6f63d37">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">T_norm = zeros(length(freqs), 1); <pre class="src src-matlab">T_norm = zeros(length(freqs), 1);
@ -982,9 +985,9 @@ If wanted, the 6x6 transmissibility matrix is plotted.
</p> </p>
</div> </div>
<div id="outline-container-org64fc1e2" class="outline-4"> <div id="outline-container-org3cf1d13" class="outline-4">
<h4 id="org64fc1e2">Function description</h4> <h4 id="org3cf1d13">Function description</h4>
<div class="outline-text-4" id="text-org64fc1e2"> <div class="outline-text-4" id="text-org3cf1d13">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[C, C_norm, freqs]</span> = <span class="org-function-name">computeCompliance</span>(<span class="org-variable-name">args</span>) <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[C, C_norm, freqs]</span> = <span class="org-function-name">computeCompliance</span>(<span class="org-variable-name">args</span>)
<span class="org-comment">% computeCompliance -</span> <span class="org-comment">% computeCompliance -</span>
@ -1005,9 +1008,9 @@ If wanted, the 6x6 transmissibility matrix is plotted.
</div> </div>
</div> </div>
<div id="outline-container-org54cab00" class="outline-4"> <div id="outline-container-org726b57d" class="outline-4">
<h4 id="org54cab00">Optional Parameters</h4> <h4 id="org726b57d">Optional Parameters</h4>
<div class="outline-text-4" id="text-org54cab00"> <div class="outline-text-4" id="text-org726b57d">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">arguments <pre class="src src-matlab">arguments
args.plots logical {mustBeNumericOrLogical} = <span class="org-constant">false</span> args.plots logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
@ -1037,7 +1040,7 @@ mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances/F_ext'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External forces [N, N*m]</span> io(io_i) = linio([mdl, <span class="org-string">'/Disturbances/F_ext'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External forces [N, N*m]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion [m, rad]</span> io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'output'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion [m, rad]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
C = linearize(mdl, io, options); C = linearize(mdl, io, options);
@ -1083,9 +1086,9 @@ If wanted, the 6x6 transmissibility matrix is plotted.
</div> </div>
</div> </div>
<div id="outline-container-org6f63d37" class="outline-4"> <div id="outline-container-org1019eaf" class="outline-4">
<h4 id="org6f63d37">Computation of the Frobenius norm</h4> <h4 id="org1019eaf">Computation of the Frobenius norm</h4>
<div class="outline-text-4" id="text-org6f63d37"> <div class="outline-text-4" id="text-org1019eaf">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">freqs = args.freqs; <pre class="src src-matlab">freqs = args.freqs;
@ -1114,7 +1117,7 @@ C_norm = zeros(length(freqs), 1);
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-27 jeu. 14:16</p> <p class="date">Created: 2020-02-28 ven. 17:34</p>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

View File

@ -93,6 +93,7 @@ To run the script, open the Simulink Project, and type =run active_damping_inert
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A); ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -323,18 +324,11 @@ We first initialize the Stewart platform without joint stiffness.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A); ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
#+end_src
#+begin_src matlab
controller = initializeController('type', 'open-loop'); controller = initializeController('type', 'open-loop');
#+end_src #+end_src
And we identify the dynamics from force actuators to force sensors. And we identify the dynamics from force actuators to force sensors.
#+begin_src matlab #+begin_src matlab
%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File %% Name of the Simulink File
mdl = 'stewart_platform_model'; mdl = 'stewart_platform_model';
@ -344,7 +338,7 @@ And we identify the dynamics from force actuators to force sensors.
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N] io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N]
%% Run the linearization %% Run the linearization
G = linearize(mdl, io, options); G = linearize(mdl, io);
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
G.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}; G.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
#+end_src #+end_src
@ -398,7 +392,7 @@ The transfer function from actuator forces to force sensors is shown in Figure [
We add some stiffness and damping in the flexible joints and we re-identify the dynamics. We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
#+begin_src matlab #+begin_src matlab
stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical'); 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.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}; Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
#+end_src #+end_src
@ -406,7 +400,7 @@ We add some stiffness and damping in the flexible joints and we re-identify the
We now use the amplified actuators and re-identify the dynamics We now use the amplified actuators and re-identify the dynamics
#+begin_src matlab #+begin_src matlab
stewart = initializeAmplifiedStrutDynamics(stewart); stewart = initializeAmplifiedStrutDynamics(stewart);
Ga = linearize(mdl, io, options); Ga = linearize(mdl, io);
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}; Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
#+end_src #+end_src
@ -596,6 +590,7 @@ We first initialize the Stewart platform without joint stiffness.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A); ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
And we identify the dynamics from force actuators to force sensors. And we identify the dynamics from force actuators to force sensors.
@ -778,6 +773,24 @@ The root locus is shown in figure [[fig:root_locus_dvf_rot_stiffness]].
Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors. Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors.
#+end_important #+end_important
* Compliance and Transmissibility Comparison * Compliance and Transmissibility Comparison
** Introduction :ignore:
** 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
** Initialization ** Initialization
We first initialize the Stewart platform without joint stiffness. We first initialize the Stewart platform without joint stiffness.
#+begin_src matlab #+begin_src matlab
@ -798,6 +811,7 @@ The rotation point of the ground is located at the origin of frame $\{A\}$.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A); ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
** Identification ** Identification
@ -811,7 +825,7 @@ Let's first identify the transmissibility and compliance in the open-loop case.
Now, let's identify the transmissibility and compliance for the Integral Force Feedback architecture. Now, let's identify the transmissibility and compliance for the Integral Force Feedback architecture.
#+begin_src matlab #+begin_src matlab
controller = initializeController('type', 'iff'); controller = initializeController('type', 'iff');
G_iff = (2e4/s)*eye(6); K_iff = (1e4/s)*eye(6);
[T_iff, T_norm_iff, ~] = computeTransmissibility(); [T_iff, T_norm_iff, ~] = computeTransmissibility();
[C_iff, C_norm_iff, ~] = computeCompliance(); [C_iff, C_norm_iff, ~] = computeCompliance();
@ -820,7 +834,7 @@ Now, let's identify the transmissibility and compliance for the Integral Force F
And for the Direct Velocity Feedback. And for the Direct Velocity Feedback.
#+begin_src matlab #+begin_src matlab
controller = initializeController('type', 'dvf'); controller = initializeController('type', 'dvf');
G_dvf = 1e4*s/(1+s/2/pi/5000)*eye(6); K_dvf = 1e4*s/(1+s/2/pi/5000)*eye(6);
[T_dvf, T_norm_dvf, ~] = computeTransmissibility(); [T_dvf, T_norm_dvf, ~] = computeTransmissibility();
[C_dvf, C_norm_dvf, ~] = computeCompliance(); [C_dvf, C_norm_dvf, ~] = computeCompliance();
@ -857,8 +871,8 @@ And for the Direct Velocity Feedback.
han = axes(fig, 'visible', 'off'); han = axes(fig, 'visible', 'off');
han.XLabel.Visible = 'on'; han.XLabel.Visible = 'on';
han.YLabel.Visible = 'on'; han.YLabel.Visible = 'on';
ylabel(han, 'Frequency [Hz]'); xlabel(han, 'Frequency [Hz]');
xlabel(han, 'Transmissibility'); ylabel(han, 'Transmissibility');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
@ -900,8 +914,8 @@ And for the Direct Velocity Feedback.
han = axes(fig, 'visible', 'off'); han = axes(fig, 'visible', 'off');
han.XLabel.Visible = 'on'; han.XLabel.Visible = 'on';
han.YLabel.Visible = 'on'; han.YLabel.Visible = 'on';
ylabel(han, 'Frequency [Hz]'); xlabel(han, 'Frequency [Hz]');
xlabel(han, 'Compliance'); ylabel(han, 'Compliance');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes

File diff suppressed because it is too large Load Diff

257
org/control-tracking.org Normal file
View File

@ -0,0 +1,257 @@
#+TITLE: Stewart Platform - Tracking Control
: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="./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>
#+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/thesis/latex/}{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:
* First Control Architecture
** Matlab Init :noexport:
#+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
** Control Schematic
#+begin_src latex :file control_measure_rotating_2dof.pdf
\begin{tikzpicture}
% Blocs
\node[block] (J) at (0, 0) {$J$};
\node[addb={+}{}{}{}{-}, right=1 of J] (subr) {};
\node[block, right=0.8 of subr] (K) {$K_{L}$};
\node[block, right=1 of K] (G) {$G_{L}$};
% Connections and labels
\draw[<-] (J.west)node[above left]{$\bm{r}_{n}$} -- ++(-1, 0);
\draw[->] (J.east) -- (subr.west) node[above left]{$\bm{r}_{L}$};
\draw[->] (subr.east) -- (K.west) node[above left]{$\bm{\epsilon}_{L}$};
\draw[->] (K.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] (G.east) node[above right]{$\bm{L}$} -| ($(G.east)+(1, -1)$) -| (subr.south);
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/control_measure_rotating_2dof.png]]
** Initialize the Stewart platform
#+begin_src matlab
stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart);
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart, 'type', 'accelerometer', 'freq', 5e3);
#+end_src
#+begin_src matlab
ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none');
#+end_src
** Identification of the plant
Let's identify the transfer function from $\bm{\tau}$ to $\bm{L}$.
#+begin_src matlab
%% 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]
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
G.OutputName = {'L1', 'L2', 'L3', 'L4', 'L5', 'L6'};
#+end_src
** Plant Analysis
Diagonal terms
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(G(i, i), freqs, 'Hz'))));
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'))));
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
Compare to off-diagonal terms
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(G(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, abs(squeeze(freqresp(G(1, 1), freqs, 'Hz'))));
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:5
for j = i+1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(G(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, 180/pi*angle(squeeze(freqresp(G(1, 1), freqs, 'Hz'))));
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
** Controller Design
One integrator should be present in the controller.
A lead is added around the crossover frequency which is set to be around 500Hz.
#+begin_src matlab
% wint = 2*pi*100; % Integrate until [rad]
% wlead = 2*pi*500; % Location of the lead [rad]
% hlead = 2; % Lead strengh
% Kl = 1e6 * ... % Gain
% (s + wint)/(s) * ... % Integrator until 100Hz
% (1 + s/(wlead/hlead)/(1 + s/(wlead*hlead))); % Lead
wc = 2*pi*100;
Kl = 1/abs(freqresp(G(1,1), wc)) * wc/s * 1/(1 + s/(3*wc));
Kl = Kl * eye(6);
#+end_src
#+begin_src matlab :exports none
freqs = logspace(1, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(freqs, abs(squeeze(freqresp(Kl(1,1)*G(1, 1), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(Kl(1,1)*G(1, 1), freqs, 'Hz'))));
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 :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(Kl(i,i)*G(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, abs(squeeze(freqresp(Kl(1,1)*G(1, 1), freqs, 'Hz'))));
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:5
for j = i+1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Kl(i, i)*G(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, 180/pi*angle(squeeze(freqresp(Kl(1,1)*G(1, 1), freqs, 'Hz'))));
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

View File

@ -695,6 +695,7 @@ No flexibility below the Stewart platform and no payload.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
The obtain geometry is shown in figure [[fig:stewart_cubic_conf_decouple_dynamics]]. The obtain geometry is shown in figure [[fig:stewart_cubic_conf_decouple_dynamics]].
@ -880,6 +881,7 @@ No flexibility below the Stewart platform and no payload.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
The obtain geometry is shown in figure [[fig:stewart_cubic_conf_mass_above]]. The obtain geometry is shown in figure [[fig:stewart_cubic_conf_mass_above]].
@ -1087,6 +1089,7 @@ No flexibility below the Stewart platform and no payload.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -1258,6 +1261,7 @@ No flexibility below the Stewart platform and no payload.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none

View File

@ -80,6 +80,7 @@ We also don't put any payload on top of the Stewart platform.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
The transfer function from actuator forces $\bm{\tau}$ to the relative displacement of the mobile platform $\mathcal{\bm{X}}$ is extracted. The transfer function from actuator forces $\bm{\tau}$ to the relative displacement of the mobile platform $\mathcal{\bm{X}}$ is extracted.
@ -327,6 +328,7 @@ No flexibility below the Stewart platform and no payload.
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
Estimation of the transfer function from $\mathcal{\bm{F}}$ to $\mathcal{\bm{X}}$: Estimation of the transfer function from $\mathcal{\bm{F}}$ to $\mathcal{\bm{X}}$:

View File

@ -83,6 +83,7 @@ In this document, we discuss the various methods to identify the behavior of the
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'none'); payload = initializePayload('type', 'none');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
** Identification ** Identification
@ -284,6 +285,7 @@ We set the rotation point of the ground to be at the same point at frames $\{A\}
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A); ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
payload = initializePayload('type', 'rigid'); payload = initializePayload('type', 'rigid');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
** Transmissibility ** Transmissibility
@ -396,6 +398,7 @@ We set the rotation point of the ground to be at the same point at frames $\{A\}
#+begin_src matlab #+begin_src matlab
ground = initializeGround('type', 'none'); ground = initializeGround('type', 'none');
payload = initializePayload('type', 'rigid'); payload = initializePayload('type', 'rigid');
controller = initializeController('type', 'open-loop');
#+end_src #+end_src
** Compliance ** Compliance
@ -517,7 +520,7 @@ We can try to use the Frobenius norm to obtain a scalar value representing the 6
%% Input/Output definition %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, '/Disturbances/D_w'], 1, 'openinput'); io_i = io_i + 1; % Base Motion [m, rad] io(io_i) = linio([mdl, '/Disturbances/D_w'], 1, 'openinput'); io_i = io_i + 1; % Base Motion [m, rad]
io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion [m, rad] io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'output'); io_i = io_i + 1; % Absolute Motion [m, rad]
%% Run the linearization %% Run the linearization
T = linearize(mdl, io, options); T = linearize(mdl, io, options);
@ -553,8 +556,8 @@ If wanted, the 6x6 transmissibility matrix is plotted.
han = axes(fig, 'visible', 'off'); han = axes(fig, 'visible', 'off');
han.XLabel.Visible = 'on'; han.XLabel.Visible = 'on';
han.YLabel.Visible = 'on'; han.YLabel.Visible = 'on';
ylabel(han, 'Frequency [Hz]'); xlabel(han, 'Frequency [Hz]');
xlabel(han, 'Transmissibility [m/m]'); ylabel(han, 'Transmissibility [m/m]');
end end
#+end_src #+end_src
@ -642,7 +645,7 @@ If wanted, the 6x6 transmissibility matrix is plotted.
%% Input/Output definition %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, '/Disturbances/F_ext'], 1, 'openinput'); io_i = io_i + 1; % External forces [N, N*m] io(io_i) = linio([mdl, '/Disturbances/F_ext'], 1, 'openinput'); io_i = io_i + 1; % External forces [N, N*m]
io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion [m, rad] io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'output'); io_i = io_i + 1; % Absolute Motion [m, rad]
%% Run the linearization %% Run the linearization
C = linearize(mdl, io, options); C = linearize(mdl, io, options);

View File

@ -30,7 +30,7 @@ mdl = 'stewart_platform_model';
%% Input/Output definition %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, '/Disturbances/F_ext'], 1, 'openinput'); io_i = io_i + 1; % External forces [N, N*m] io(io_i) = linio([mdl, '/Disturbances/F_ext'], 1, 'openinput'); io_i = io_i + 1; % External forces [N, N*m]
io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion [m, rad] io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'output'); io_i = io_i + 1; % Absolute Motion [m, rad]
%% Run the linearization %% Run the linearization
C = linearize(mdl, io, options); C = linearize(mdl, io, options);

View File

@ -30,7 +30,7 @@ mdl = 'stewart_platform_model';
%% Input/Output definition %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, '/Disturbances/D_w'], 1, 'openinput'); io_i = io_i + 1; % Base Motion [m, rad] io(io_i) = linio([mdl, '/Disturbances/D_w'], 1, 'openinput'); io_i = io_i + 1; % Base Motion [m, rad]
io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion [m, rad] io(io_i) = linio([mdl, '/Absolute Motion Sensor'], 1, 'output'); io_i = io_i + 1; % Absolute Motion [m, rad]
%% Run the linearization %% Run the linearization
T = linearize(mdl, io, options); T = linearize(mdl, io, options);
@ -63,8 +63,8 @@ if args.plots
han = axes(fig, 'visible', 'off'); han = axes(fig, 'visible', 'off');
han.XLabel.Visible = 'on'; han.XLabel.Visible = 'on';
han.YLabel.Visible = 'on'; han.YLabel.Visible = 'on';
ylabel(han, 'Frequency [Hz]'); xlabel(han, 'Frequency [Hz]');
xlabel(han, 'Transmissibility [m/m]'); ylabel(han, 'Transmissibility [m/m]');
end end
T_norm = zeros(length(freqs), 1); T_norm = zeros(length(freqs), 1);

View File

@ -7,7 +7,7 @@ function [controller] = initializeController(args)
% - args - Can have the following fields: % - args - Can have the following fields:
arguments arguments
args.type char {mustBeMember(args.type, {'open-loop', 'iff', 'dvf'})} = 'open-loop' args.type char {mustBeMember(args.type, {'open-loop', 'iff', 'dvf', 'hac-iff', 'hac-dvf'})} = 'open-loop'
end end
controller = struct(); controller = struct();
@ -19,4 +19,8 @@ switch args.type
controller.type = 1; controller.type = 1;
case 'dvf' case 'dvf'
controller.type = 2; controller.type = 2;
case 'hac-iff'
controller.type = 3;
case 'hac-dvf'
controller.type = 4;
end end