Compare commits

..

No commits in common. "0faaef06e60fbab1389851f7ce9e75bed55bbb72" and "009481ff75312bd300f26c465866aba6f30204f0" have entirely different histories.

18 changed files with 1570 additions and 3136 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 205 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

View File

@ -3,7 +3,7 @@
"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-09-01 mar. 13:18 -->
<!-- 2020-08-05 mer. 13:27 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Stewart Platform with Flexible Elements</title>
<meta name="generator" content="Org mode" />
@ -28,48 +28,15 @@
<ul>
<li><a href="#orgbdb2a68">1. Simscape Model</a>
<ul>
<li><a href="#org1a0f3d5">1.1. Flexible APA</a></li>
<li><a href="#org6768ff7">1.1. Flexible APA</a></li>
<li><a href="#org3650a90">1.2. Flexible Joint</a></li>
<li><a href="#org75c496c">1.3. Identification</a></li>
<li><a href="#org52d500c">1.4. No Flexible Elements</a></li>
<li><a href="#org6800cf5">1.5. Flexible joints</a></li>
<li><a href="#org17a6e21">1.6. Flexible APA</a></li>
<li><a href="#orgd80e541">1.6. Flexible APA</a></li>
<li><a href="#org1609aa1">1.7. Flexible Joints and APA</a></li>
<li><a href="#org238cd25">1.8. Save</a></li>
<li><a href="#orge9b9e81">1.9. Direct Velocity Feedback</a></li>
<li><a href="#org265a0a3">1.10. Integral Force Feedback</a></li>
<li><a href="#org15aa3b2">1.11. Procedure to include flexible elements into Simscape</a></li>
<li><a href="#org0b65066">1.12. Conclusion</a></li>
</ul>
</li>
<li><a href="#org90432f4">2. Control with flexible elements</a>
<ul>
<li><a href="#org1697b6a">2.1. Flexible APA and Flexible Joint</a></li>
<li><a href="#org1a49c82">2.2. Identification</a></li>
<li><a href="#org353e7e4">2.3. Decentralized Direct Velocity Feedback</a></li>
<li><a href="#orgf84ea43">2.4. HAC</a></li>
</ul>
</li>
<li><a href="#orge8b5f65">3. Flexible Joint Specifications</a>
<ul>
<li><a href="#orgfb150a0">3.1. Stewart Platform Initialization</a></li>
<li><a href="#orga01758c">3.2. Effect of the Bending Stiffness</a></li>
<li><a href="#orga98637e">3.3. Effect of the Torsion Stiffness</a></li>
<li><a href="#org4f5ee79">3.4. Effect of the Axial Stiffness</a></li>
<li><a href="#org4a85ef8">3.5. Effect of the Radial (Shear) Stiffness</a></li>
<li><a href="#orgd0fd2ec">3.6. Comparison of perfect joint and worst specified joint</a></li>
<li><a href="#orgbddb83e">3.7. Conclusion</a></li>
</ul>
</li>
<li><a href="#org0017658">4. Flexible Joint Specifications with the APA300ML</a>
<ul>
<li><a href="#org96b5fde">4.1. Stewart Platform Initialization</a></li>
<li><a href="#orgcb2d2af">4.2. Comparison of perfect joint and worst specified joint</a></li>
</ul>
</li>
<li><a href="#org649a6c9">5. Relative Motion Sensors</a>
<ul>
<li><a href="#org36b0a8e">5.1. Stewart Platform Initialization</a></li>
<li><a href="#orge9b9e81">1.8. Direct Velocity Feedback</a></li>
<li><a href="#org265a0a3">1.9. Integral Force Feedback</a></li>
</ul>
</li>
</ul>
@ -80,8 +47,8 @@
<h2 id="orgbdb2a68"><span class="section-number-2">1</span> Simscape Model</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org1a0f3d5" class="outline-3">
<h3 id="org1a0f3d5"><span class="section-number-3">1.1</span> Flexible APA</h3>
<div id="outline-container-org6768ff7" class="outline-3">
<h3 id="org6768ff7"><span class="section-number-3">1.1</span> Flexible APA</h3>
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
<pre class="src src-matlab">apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
@ -109,12 +76,12 @@
<tr>
<td class="org-left">Number of Modes</td>
<td class="org-right">120</td>
<td class="org-right">6</td>
</tr>
<tr>
<td class="org-left">Size of M and K matrices</td>
<td class="org-right">162</td>
<td class="org-right">48</td>
</tr>
</tbody>
</table>
@ -145,23 +112,23 @@
<tbody>
<tr>
<td class="org-right">1.0</td>
<td class="org-right">697783.0</td>
<td class="org-right">0.0</td>
<td class="org-right">53917.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.015</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">2.0</td>
<td class="org-right">697784.0</td>
<td class="org-right">0.0</td>
<td class="org-right">53918.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.015</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">3.0</td>
<td class="org-right">697785.0</td>
<td class="org-right">53919.0</td>
<td class="org-right">-0.0325</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -169,7 +136,7 @@
<tr>
<td class="org-right">4.0</td>
<td class="org-right">697786.0</td>
<td class="org-right">53920.0</td>
<td class="org-right">-0.0125</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -177,7 +144,7 @@
<tr>
<td class="org-right">5.0</td>
<td class="org-right">697787.0</td>
<td class="org-right">53921.0</td>
<td class="org-right">-0.0075</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -185,7 +152,7 @@
<tr>
<td class="org-right">6.0</td>
<td class="org-right">697788.0</td>
<td class="org-right">53922.0</td>
<td class="org-right">0.0125</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -193,7 +160,7 @@
<tr>
<td class="org-right">7.0</td>
<td class="org-right">697789.0</td>
<td class="org-right">53923.0</td>
<td class="org-right">0.0325</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -207,7 +174,7 @@
<h3 id="org3650a90"><span class="section-number-3">1.2</span> Flexible Joint</h3>
<div class="outline-text-3" id="text-1-2">
<div class="org-src-container">
<pre class="src src-matlab">flex_joint = load('./mat/flexor_025.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
<pre class="src src-matlab">flex_joint = load('./mat/flexor_ID16.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
</pre>
</div>
@ -268,7 +235,7 @@
<tbody>
<tr>
<td class="org-right">1.0</td>
<td class="org-right">528875.0</td>
<td class="org-right">181278.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
@ -276,7 +243,7 @@
<tr>
<td class="org-right">2.0</td>
<td class="org-right">528876.0</td>
<td class="org-right">181279.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.0</td>
@ -301,22 +268,22 @@
<tbody>
<tr>
<td class="org-left">Axial Stiffness [N/um]</td>
<td class="org-right">94</td>
<td class="org-right">119</td>
</tr>
<tr>
<td class="org-left">Bending Stiffness [Nm/rad]</td>
<td class="org-right">5</td>
<td class="org-right">33</td>
</tr>
<tr>
<td class="org-left">Bending Stiffness [Nm/rad]</td>
<td class="org-right">5</td>
<td class="org-right">33</td>
</tr>
<tr>
<td class="org-left">Torsion Stiffness [Nm/rad]</td>
<td class="org-right">260</td>
<td class="org-right">236</td>
</tr>
</tbody>
</table>
@ -354,6 +321,7 @@ controller = initializeController('type', 'open-loop');
<div class="org-src-container">
<pre class="src src-matlab">disturbances = initializeDisturbances();
references = initializeReferences(stewart);
</pre>
</div>
</div>
@ -367,24 +335,14 @@ controller = initializeController('type', 'open-loop');
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 40.5e6*ones(6,1), 'K1', 0.4e6*ones(6,1));
stewart = initializeJointDynamics(stewart, 'type_M', 'spherical_3dof', ...
'Kr_M', flex_joint.K(1,1)*ones(6,1), ...
'Ka_M', flex_joint.K(3,3)*ones(6,1), ...
'Kf_M', flex_joint.K(4,4)*ones(6,1), ...
'Kt_M', flex_joint.K(6,6)*ones(6,1), ...
'type_F', 'universal_3dof', ...
'Kr_F', flex_joint.K(1,1)*ones(6,1), ...
'Ka_F', flex_joint.K(3,3)*ones(6,1), ...
'Kf_F', flex_joint.K(4,4)*ones(6,1), ...
'Kt_F', flex_joint.K(6,6)*ones(6,1));
% stewart = initializeStrutDynamics(stewart, 'K', 1.8e6*ones(6,1));
stewart = initializeAmplifiedStrutDynamics(stewart, 'Kr', 0.9e6*ones(6,1), 'Ka', 0.9e6*ones(6,1));
stewart = initializeJointDynamics(stewart, 'Kf_M', 33*ones(6,1), 'Kt_M', 235*ones(6,1), 'Kf_F', 33*ones(6,1), 'Kt_F', 235*ones(6,1));
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart);
references = initializeReferences(stewart);
</pre>
</div>
@ -401,19 +359,12 @@ G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3', '
<div id="outline-container-org6800cf5" class="outline-3">
<h3 id="org6800cf5"><span class="section-number-3">1.5</span> Flexible joints</h3>
<div class="outline-text-3" id="text-1-5">
<div id="orga4a49db" class="figure">
<p><img src="figs/simscape_flex_joints.png" alt="simscape_flex_joints.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Figure caption</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 40.5e6*ones(6,1), 'K1', 0.4e6*ones(6,1));
stewart = initializeAmplifiedStrutDynamics(stewart, 'Kr', 0.9e6*ones(6,1), 'Ka', 0.9e6*ones(6,1));
stewart = initializeJointDynamics(stewart, 'type_F', 'flexible', 'K_F', flex_joint.K, 'M_F', flex_joint.M, 'n_xyz_F', flex_joint.n_xyz, 'xi_F', 0.1, 'step_file_F', 'mat/flexor_ID16.STEP', 'type_M', 'flexible', 'K_M', flex_joint.K, 'M_M', flex_joint.M, 'n_xyz_M', flex_joint.n_xyz, 'xi_M', 0.1, 'step_file_M', 'mat/flexor_ID16.STEP');
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
@ -433,32 +384,16 @@ Gj.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3',
</div>
</div>
<div id="outline-container-org17a6e21" class="outline-3">
<h3 id="org17a6e21"><span class="section-number-3">1.6</span> Flexible APA</h3>
<div id="outline-container-orgd80e541" class="outline-3">
<h3 id="orgd80e541"><span class="section-number-3">1.6</span> Flexible APA</h3>
<div class="outline-text-3" id="text-1-6">
<div id="org774a034" class="figure">
<p><img src="figs/simscape_flex_apa.png" alt="simscape_flex_apa.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Figure caption</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'Gf', -2.65e7, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeJointDynamics(stewart, 'type_M', 'spherical_3dof', ...
'Kr_M', flex_joint.K(1,1)*ones(6,1), ...
'Ka_M', flex_joint.K(3,3)*ones(6,1), ...
'Kf_M', flex_joint.K(4,4)*ones(6,1), ...
'Kt_M', flex_joint.K(6,6)*ones(6,1), ...
'type_F', 'universal_3dof', ...
'Kr_F', flex_joint.K(1,1)*ones(6,1), ...
'Ka_F', flex_joint.K(3,3)*ones(6,1), ...
'Kf_F', flex_joint.K(4,4)*ones(6,1), ...
'Kt_F', flex_joint.K(6,6)*ones(6,1));
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeJointDynamics(stewart, 'Kf_M', 33*ones(6,1), 'Kt_M', 235, 'Kf_F', 33*ones(6,1), 'Kt_F', 235);
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
stewart = computeJacobian(stewart);
@ -480,19 +415,12 @@ Ga.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3',
<div id="outline-container-org1609aa1" class="outline-3">
<h3 id="org1609aa1"><span class="section-number-3">1.7</span> Flexible Joints and APA</h3>
<div class="outline-text-3" id="text-1-7">
<div id="orga828b5f" class="figure">
<p><img src="figs/simscape_flexible.png" alt="simscape_flexible.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Figure caption</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'Gf', -2.65e7, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeJointDynamics(stewart, 'type_F', 'flexible', 'K_F', flex_joint.K, 'M_F', flex_joint.M, 'n_xyz_F', flex_joint.n_xyz, 'xi_F', 0.1, 'step_file_F', 'mat/flexor_ID16.STEP', 'type_M', 'flexible', 'K_M', flex_joint.K, 'M_M', flex_joint.M, 'n_xyz_M', flex_joint.n_xyz, 'xi_M', 0.1, 'step_file_M', 'mat/flexor_ID16.STEP');
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
@ -511,517 +439,26 @@ Gf.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3',
</div>
</div>
<div id="outline-container-org238cd25" class="outline-3">
<h3 id="org238cd25"><span class="section-number-3">1.8</span> Save</h3>
<div class="outline-text-3" id="text-1-8">
<div class="org-src-container">
<pre class="src src-matlab">save('./mat/flexible_stewart_platform.mat', 'G', 'Gj', 'Ga', 'Gf');
</pre>
</div>
</div>
</div>
<div id="outline-container-orge9b9e81" class="outline-3">
<h3 id="orge9b9e81"><span class="section-number-3">1.9</span> Direct Velocity Feedback</h3>
<div class="outline-text-3" id="text-1-9">
<h3 id="orge9b9e81"><span class="section-number-3">1.8</span> Direct Velocity Feedback</h3>
<div class="outline-text-3" id="text-1-8">
<div id="org2d35259" class="figure">
<p><img src="figs/flexible_elements_effect_dvf.png" alt="flexible_elements_effect_dvf.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Change of the DVF plant dynamics with the added flexible elements</p>
<p><span class="figure-number">Figure 1: </span>Change of the DVF plant dynamics with the added flexible elements</p>
</div>
</div>
</div>
<div id="outline-container-org265a0a3" class="outline-3">
<h3 id="org265a0a3"><span class="section-number-3">1.10</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-1-10">
<h3 id="org265a0a3"><span class="section-number-3">1.9</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-1-9">
<div id="org81cc646" class="figure">
<p><img src="figs/flexible_elements_effect_iff.png" alt="flexible_elements_effect_iff.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Change of the IFF plant dynamics with the added flexible elements</p>
</div>
</div>
</div>
<div id="outline-container-org15aa3b2" class="outline-3">
<h3 id="org15aa3b2"><span class="section-number-3">1.11</span> Procedure to include flexible elements into Simscape</h3>
<div class="outline-text-3" id="text-1-11">
<p>
In order to model a flexible element with only few mass-spring-damper elements:
</p>
<ul class="org-ul">
<li>FEM of the flexible element</li>
<li>Super-Element extraction</li>
<li>Parameters to extract
<ul class="org-ul">
<li>For the flexible joint: axial, shear, bending and torsion stiffnesses</li>
<li>For the APA: k1, ka, ke, c1</li>
</ul></li>
<li>This can be done directly from the Stiffness matrix or using identification from a simple Simscape model</li>
</ul>
</div>
</div>
<div id="outline-container-org0b65066" class="outline-3">
<h3 id="org0b65066"><span class="section-number-3">1.12</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-12">
<div class="important">
<p>
The results seems to indicate that the model is well represented with only few degrees of freedom.
This permit to have a relatively sane number of states for the model.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org90432f4" class="outline-2">
<h2 id="org90432f4"><span class="section-number-2">2</span> Control with flexible elements</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-org1697b6a" class="outline-3">
<h3 id="org1697b6a"><span class="section-number-3">2.1</span> Flexible APA and Flexible Joint</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
flex_joint = load('./mat/flexor_ID16.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeJointDynamics(stewart, 'type_F', 'flexible', 'K_F', flex_joint.K, 'M_F', flex_joint.M, 'n_xyz_F', flex_joint.n_xyz, 'xi_F', 0.1, 'step_file_F', 'mat/flexor_ID16.STEP', 'type_M', 'flexible', 'K_M', flex_joint.K, 'M_M', flex_joint.M, 'n_xyz_M', flex_joint.n_xyz, 'xi_M', 0.1, 'step_file_M', 'mat/flexor_ID16.STEP');
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround('type', 'none');
payload = initializePayload('type', 'rigid', 'm', 50);
controller = initializeController('type', 'open-loop');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">disturbances = initializeDisturbances();
references = initializeReferences(stewart);
</pre>
</div>
</div>
</div>
<div id="outline-container-org1a49c82" class="outline-3">
<h3 id="org1a49c82"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
And we identify the dynamics from force actuators to force sensors.
</p>
<div class="org-src-container">
<pre class="src src-matlab">%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File
mdl = 'stewart_platform_model';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N]
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m]
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G = -linearize(mdl, io, options);
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
</pre>
</div>
</div>
</div>
<div id="outline-container-org353e7e4" class="outline-3">
<h3 id="org353e7e4"><span class="section-number-3">2.3</span> Decentralized Direct Velocity Feedback</h3>
<div class="outline-text-3" id="text-2-3">
<p>
Controller Design
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kl = -1e5*s/(1 + s/2/pi/2e2)/(1 + s/2/pi/5e2) * eye(6);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(G(1:6,1:6)*Kl, eye(6), -1))
</pre>
</div>
<pre class="example">
1
</pre>
</div>
</div>
<div id="outline-container-orgf84ea43" class="outline-3">
<h3 id="orgf84ea43"><span class="section-number-3">2.4</span> HAC</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
controller = initializeController('type', 'ref-track-hac-dvf');
</pre>
</div>
<div class="org-src-container">
<pre class="src 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, 'input'); io_i = io_i + 1; % Actuator Force Inputs [N]
io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); 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 = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Gl = -stewart.kinematics.J*G;
Gl.OutputName = {'D1', 'D2', 'D3', 'D4', 'D5', 'D6'};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2*pi*300;
Kl = diag(1./diag(abs(freqresp(Gl, wc)))) * wc/s * 1/(1 + s/3/wc);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orge8b5f65" class="outline-2">
<h2 id="orge8b5f65"><span class="section-number-2">3</span> Flexible Joint Specifications</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-orgfb150a0" class="outline-3">
<h3 id="orgfb150a0"><span class="section-number-3">3.1</span> Stewart Platform Initialization</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 43e6*ones(6,1), 'K1', 0.4e6*ones(6,1), 'C1', 10*ones(6,1));
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart);
references = initializeReferences(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround('type', 'none');
payload = initializePayload('type', 'rigid', 'm', 50);
controller = initializeController('type', 'open-loop');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">disturbances = initializeDisturbances();
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">open('stewart_platform_model.slx')
</pre>
</div>
</div>
</div>
<div id="outline-container-orga01758c" class="outline-3">
<h3 id="orga01758c"><span class="section-number-3">3.2</span> Effect of the Bending Stiffness</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">Kfs = [1, 10, 100, 1000]; % [Nm/rad]
</pre>
</div>
</div>
</div>
<div id="outline-container-orga98637e" class="outline-3">
<h3 id="orga98637e"><span class="section-number-3">3.3</span> Effect of the Torsion Stiffness</h3>
<div class="outline-text-3" id="text-3-3">
<div class="org-src-container">
<pre class="src src-matlab">Kts = [10, 100, 500, 1000]; % [Nm/rad]
</pre>
</div>
</div>
</div>
<div id="outline-container-org4f5ee79" class="outline-3">
<h3 id="org4f5ee79"><span class="section-number-3">3.4</span> Effect of the Axial Stiffness</h3>
<div class="outline-text-3" id="text-3-4">
<div class="org-src-container">
<pre class="src src-matlab">Kas = [1e6, 1e7, 1e8, 5e8, 1e9]; % [N/m]
</pre>
</div>
</div>
</div>
<div id="outline-container-org4a85ef8" class="outline-3">
<h3 id="org4a85ef8"><span class="section-number-3">3.5</span> Effect of the Radial (Shear) Stiffness</h3>
<div class="outline-text-3" id="text-3-5">
<div class="org-src-container">
<pre class="src src-matlab">Krs = [1e4, 1e5, 1e6, 1e7]; % [N/m]
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd0fd2ec" class="outline-3">
<h3 id="orgd0fd2ec"><span class="section-number-3">3.6</span> Comparison of perfect joint and worst specified joint</h3>
</div>
<div id="outline-container-orgbddb83e" class="outline-3">
<h3 id="orgbddb83e"><span class="section-number-3">3.7</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-7">
<p>
Qualitatively:
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left"><b>Specification</b></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Axial Stiffness</td>
<td class="org-left">Much larger than the Actuator axial stiffness</td>
</tr>
<tr>
<td class="org-left">Shear Stiffness</td>
<td class="org-left">&#xa0;</td>
</tr>
<tr>
<td class="org-left">Bending Stiffness</td>
<td class="org-left">Much smaller than the Actuator bending stiffness</td>
</tr>
<tr>
<td class="org-left">Torsion Stiffness</td>
<td class="org-left">&#xa0;</td>
</tr>
</tbody>
</table>
<p>
Quantitatively:
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left"><b>Specification</b></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Axial Stiffness</td>
<td class="org-left">&gt; 200 [N/um]</td>
</tr>
<tr>
<td class="org-left">Shear Stiffness</td>
<td class="org-left">&gt; 1 [N/um]</td>
</tr>
<tr>
<td class="org-left">Bending Stiffness</td>
<td class="org-left">&lt; 100 [Nm/rad]</td>
</tr>
<tr>
<td class="org-left">Torsion Stiffness</td>
<td class="org-left">&lt; 500 [Nm/rad]</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-org0017658" class="outline-2">
<h2 id="org0017658"><span class="section-number-2">4</span> Flexible Joint Specifications with the APA300ML</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-org96b5fde" class="outline-3">
<h3 id="org96b5fde"><span class="section-number-3">4.1</span> Stewart Platform Initialization</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart);
references = initializeReferences(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround('type', 'none');
payload = initializePayload('type', 'rigid', 'm', 50);
controller = initializeController('type', 'open-loop');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">disturbances = initializeDisturbances();
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">open('stewart_platform_model.slx')
</pre>
</div>
</div>
</div>
<div id="outline-container-orgcb2d2af" class="outline-3">
<h3 id="orgcb2d2af"><span class="section-number-3">4.2</span> Comparison of perfect joint and worst specified joint</h3>
</div>
</div>
<div id="outline-container-org649a6c9" class="outline-2">
<h2 id="org649a6c9"><span class="section-number-2">5</span> Relative Motion Sensors</h2>
<div class="outline-text-2" id="text-5">
</div>
<div id="outline-container-org36b0a8e" class="outline-3">
<h3 id="org36b0a8e"><span class="section-number-3">5.1</span> Stewart Platform Initialization</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 43e6*ones(6,1), 'K1', 0.4e6*ones(6,1), 'C1', 10*ones(6,1));
% stewart = initializeFlexibleStrutDynamics(stewart, 'H', 0.03, 'K', apa.K, 'M', apa.M, 'n_xyz', apa.n_xyz, 'xi', 0.1, 'step_file', 'mat/APA300ML.STEP');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal_3dof', ...
'type_M', 'spherical_3dof', ...
'Kf_M', 100*ones(6,1), ...
'Kt_M', 500*ones(6,1), ...
'Kf_F', 100*ones(6,1), ...
'Kt_F', 500*ones(6,1), ...
'Ka_M', 200e6*ones(6,1), ...
'Kr_M', 1e6*ones(6,1), ...
'Ka_F', 200e6*ones(6,1), ...
'Kr_F', 1e6*ones(6,1));
% stewart = initializeJointDynamics(stewart, 'type_F', 'universal_3dof', ...
% 'type_M', 'spherical_3dof', ...
% 'Kf_M', 100*ones(6,1), ...
% 'Kt_M', 500*ones(6,1), ...
% 'Kf_F', 100*ones(6,1), ...
% 'Kt_F', 500*ones(6,1), ...
% 'Ka_M', 1e6*ones(6,1), ...
% 'Kr_M', 1e6*ones(6,1), ...
% 'Ka_F', 1e6*ones(6,1), ...
% 'Kr_F', 1e6*ones(6,1));
% stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalPlatforms(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeCylindricalStruts(stewart);
% stewart = initializeCylindricalStruts(stewart, 'type_F', 'none', 'type_M', 'none');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart);
references = initializeReferences(stewart);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround('type', 'none');
payload = initializePayload('type', 'rigid', 'm', 50);
controller = initializeController('type', 'open-loop');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">disturbances = initializeDisturbances();
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">open('stewart_platform_model.slx')
</pre>
<p><span class="figure-number">Figure 2: </span>Change of the IFF plant dynamics with the added flexible elements</p>
</div>
</div>
</div>
@ -1029,7 +466,7 @@ controller = initializeController('type', 'open-loop');
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-09-01 mar. 13:18</p>
<p class="date">Created: 2020-08-05 mer. 13:27</p>
</div>
</body>
</html>

View File

@ -3,7 +3,7 @@
"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-09-01 mar. 13:18 -->
<!-- 2020-08-05 mer. 16:23 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Stewart Platform - Definition of the Architecture</title>
<meta name="generator" content="Org mode" />
@ -63,94 +63,94 @@
<ul>
<li><a href="#orgd89f0e1">5.1. <code>initializeStewartPlatform</code>: Initialize the Stewart Platform structure</a>
<ul>
<li><a href="#orgb291f1f">Documentation</a></li>
<li><a href="#orgcf374f3">Function description</a></li>
<li><a href="#orgd9476c2">Documentation</a></li>
<li><a href="#orgd5f2c51">Function description</a></li>
<li><a href="#orgd567fc1">Initialize the Stewart structure</a></li>
</ul>
</li>
<li><a href="#orgb11894c">5.2. <code>initializeFramesPositions</code>: Initialize the positions of frames {A}, {B}, {F} and {M}</a>
<ul>
<li><a href="#org4135d2d">Documentation</a></li>
<li><a href="#org66f1ebb">Function description</a></li>
<li><a href="#orgd50a826">Optional Parameters</a></li>
<li><a href="#orge1df9c8">Documentation</a></li>
<li><a href="#org3913fad">Function description</a></li>
<li><a href="#org84462af">Optional Parameters</a></li>
<li><a href="#org458592e">Compute the position of each frame</a></li>
<li><a href="#org51c0261">Populate the <code>stewart</code> structure</a></li>
<li><a href="#org1c152b9">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org9057387">5.3. <code>generateGeneralConfiguration</code>: Generate a Very General Configuration</a>
<ul>
<li><a href="#org967b04c">Documentation</a></li>
<li><a href="#orge721b0e">Function description</a></li>
<li><a href="#orgfe31977">Optional Parameters</a></li>
<li><a href="#org2b8fb20">Documentation</a></li>
<li><a href="#orga75f162">Function description</a></li>
<li><a href="#org8c0fa82">Optional Parameters</a></li>
<li><a href="#org232e4c2">Compute the pose</a></li>
<li><a href="#org7ee3958">Populate the <code>stewart</code> structure</a></li>
<li><a href="#org7d2bd07">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org861f6de">5.4. <code>computeJointsPose</code>: Compute the Pose of the Joints</a>
<ul>
<li><a href="#orgc1c4d18">Documentation</a></li>
<li><a href="#orgc7c8a40">Function description</a></li>
<li><a href="#orga2673d1">Optional Parameters</a></li>
<li><a href="#org772540a">Check the <code>stewart</code> structure elements</a></li>
<li><a href="#orga2f43b2">Documentation</a></li>
<li><a href="#orge08cff0">Function description</a></li>
<li><a href="#org80cc25e">Optional Parameters</a></li>
<li><a href="#orge80fdc3">Check the <code>stewart</code> structure elements</a></li>
<li><a href="#org52b0d4c">Compute the position of the Joints</a></li>
<li><a href="#org4b76b0f">Compute the strut length and orientation</a></li>
<li><a href="#orgd621d5e">Compute the orientation of the Joints</a></li>
<li><a href="#org0e8aa0a">Populate the <code>stewart</code> structure</a></li>
<li><a href="#org6b7e5e3">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org329bef9">5.5. <code>initializeStewartPose</code>: Determine the initial stroke in each leg to have the wanted pose</a>
<ul>
<li><a href="#org609919f">Function description</a></li>
<li><a href="#orgb26889a">Optional Parameters</a></li>
<li><a href="#orgf36d5d7">Function description</a></li>
<li><a href="#orgdf77824">Optional Parameters</a></li>
<li><a href="#org3d3ef62">Use the Inverse Kinematic function</a></li>
<li><a href="#org8df3429">Populate the <code>stewart</code> structure</a></li>
<li><a href="#orge1d36d3">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org6ff5b31">5.6. <code>initializeCylindricalPlatforms</code>: Initialize the geometry of the Fixed and Mobile Platforms</a>
<ul>
<li><a href="#orgcffde44">Function description</a></li>
<li><a href="#org017553c">Optional Parameters</a></li>
<li><a href="#org3f08708">Function description</a></li>
<li><a href="#orgc95505f">Optional Parameters</a></li>
<li><a href="#org25a390a">Compute the Inertia matrices of platforms</a></li>
<li><a href="#org943c8fa">Populate the <code>stewart</code> structure</a></li>
<li><a href="#orga790eb3">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org60aa215">5.7. <code>initializeCylindricalStruts</code>: Define the inertia of cylindrical struts</a>
<ul>
<li><a href="#org4d297c7">Function description</a></li>
<li><a href="#org2a5dca5">Optional Parameters</a></li>
<li><a href="#org9ef7d35">Function description</a></li>
<li><a href="#orgf9adc42">Optional Parameters</a></li>
<li><a href="#orgc056498">Compute the properties of the cylindrical struts</a></li>
<li><a href="#orge3443c7">Populate the <code>stewart</code> structure</a></li>
<li><a href="#orgd6e7b8e">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org3ad0cd1">5.8. <code>initializeStrutDynamics</code>: Add Stiffness and Damping properties of each strut</a>
<ul>
<li><a href="#orgd6ed57c">Documentation</a></li>
<li><a href="#orgab544d8">Function description</a></li>
<li><a href="#org972382f">Optional Parameters</a></li>
<li><a href="#orgb41c182">Documentation</a></li>
<li><a href="#org7469459">Function description</a></li>
<li><a href="#orgd6e68a1">Optional Parameters</a></li>
<li><a href="#orgadb8327">Add Stiffness and Damping properties of each strut</a></li>
</ul>
</li>
<li><a href="#orgd8d403e">5.9. <code>initializeAmplifiedStrutDynamics</code>: Add Stiffness and Damping properties of each strut for an amplified piezoelectric actuator</a>
<ul>
<li><a href="#org4003bdd">Documentation</a></li>
<li><a href="#org4439879">Function description</a></li>
<li><a href="#org2078010">Optional Parameters</a></li>
<li><a href="#orgb291f1f">Documentation</a></li>
<li><a href="#org98773bb">Function description</a></li>
<li><a href="#orgbf25719">Optional Parameters</a></li>
<li><a href="#org9b435e8">Compute the total stiffness and damping</a></li>
<li><a href="#org072dfc3">Populate the <code>stewart</code> structure</a></li>
<li><a href="#orgab1a3e9">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org65c17b2">5.10. <code>initializeFlexibleStrutDynamics</code>: Model each strut with a flexible element</a>
<ul>
<li><a href="#orgf23e693">Function description</a></li>
<li><a href="#org72115e7">Optional Parameters</a></li>
<li><a href="#org1558b41">Function description</a></li>
<li><a href="#org9943987">Optional Parameters</a></li>
<li><a href="#orge6e22da">Compute the axial offset</a></li>
<li><a href="#org70de463">Populate the <code>stewart</code> structure</a></li>
<li><a href="#orgaa827a8">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#orgeb6173a">5.11. <code>initializeJointDynamics</code>: Add Stiffness and Damping properties for spherical joints</a>
<ul>
<li><a href="#orgf0f39ef">Function description</a></li>
<li><a href="#org8d19d2d">Optional Parameters</a></li>
<li><a href="#org631a17c">Function description</a></li>
<li><a href="#org7757d0a">Optional Parameters</a></li>
<li><a href="#orgc6d4183">Add Actuator Type</a></li>
<li><a href="#orgc0e613c">Add Stiffness and Damping in Translation of each strut</a></li>
<li><a href="#org04698fc">Add Stiffness and Damping in Rotation of each strut</a></li>
@ -161,17 +161,17 @@
<ul>
<li><a href="#orgd667bbb">Geophone - Working Principle</a></li>
<li><a href="#orgca7729f">Accelerometer - Working Principle</a></li>
<li><a href="#orgc4ffbf6">Function description</a></li>
<li><a href="#org6b45828">Optional Parameters</a></li>
<li><a href="#org51c5de0">Function description</a></li>
<li><a href="#org0d6b1bf">Optional Parameters</a></li>
<li><a href="#org463075d">Compute the properties of the sensor</a></li>
<li><a href="#orga292b49">Populate the <code>stewart</code> structure</a></li>
<li><a href="#org51c0261">Populate the <code>stewart</code> structure</a></li>
</ul>
</li>
<li><a href="#org5266e9d">5.13. <code>displayArchitecture</code>: 3D plot of the Stewart platform architecture</a>
<ul>
<li><a href="#org1619f14">Function description</a></li>
<li><a href="#orgf9184d1">Optional Parameters</a></li>
<li><a href="#org441ed7f">Check the <code>stewart</code> structure elements</a></li>
<li><a href="#orge68732a">Function description</a></li>
<li><a href="#orgd45485c">Optional Parameters</a></li>
<li><a href="#org772540a">Check the <code>stewart</code> structure elements</a></li>
<li><a href="#orgc088b18">Figure Creation, Frames and Homogeneous transformations</a></li>
<li><a href="#orgc25a979">Fixed Base elements</a></li>
<li><a href="#org8417772">Mobile Platform elements</a></li>
@ -182,8 +182,8 @@
</li>
<li><a href="#org3db8668">5.14. <code>describeStewartPlatform</code>: Display some text describing the current defined Stewart Platform</a>
<ul>
<li><a href="#org93d2ee5">Function description</a></li>
<li><a href="#org4587f8f">Optional Parameters</a></li>
<li><a href="#orgcf374f3">Function description</a></li>
<li><a href="#orgd50a826">Optional Parameters</a></li>
<li><a href="#org0ad0d00">5.14.1. Geometry</a></li>
<li><a href="#org3d00e31">5.14.2. Actuators</a></li>
<li><a href="#org0933fe4">5.14.3. Joints</a></li>
@ -674,11 +674,11 @@ This Matlab function is accessible <a href="../src/initializeStewartPlatform.m">
</p>
</div>
<div id="outline-container-orgb291f1f" class="outline-4">
<h4 id="orgb291f1f">Documentation</h4>
<div class="outline-text-4" id="text-orgb291f1f">
<div id="outline-container-orgd9476c2" class="outline-4">
<h4 id="orgd9476c2">Documentation</h4>
<div class="outline-text-4" id="text-orgd9476c2">
<div id="orgda43da5" class="figure">
<div id="orgd1429c3" class="figure">
<p><img src="figs/stewart-frames-position.png" alt="stewart-frames-position.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Definition of the position of the frames</p>
@ -686,9 +686,9 @@ This Matlab function is accessible <a href="../src/initializeStewartPlatform.m">
</div>
</div>
<div id="outline-container-orgcf374f3" class="outline-4">
<h4 id="orgcf374f3">Function description</h4>
<div class="outline-text-4" id="text-orgcf374f3">
<div id="outline-container-orgd5f2c51" class="outline-4">
<h4 id="orgd5f2c51">Function description</h4>
<div class="outline-text-4" id="text-orgd5f2c51">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeStewartPlatform()
% initializeStewartPlatform - Initialize the stewart structure
@ -747,11 +747,11 @@ This Matlab function is accessible <a href="../src/initializeFramesPositions.m">
</p>
</div>
<div id="outline-container-org4135d2d" class="outline-4">
<h4 id="org4135d2d">Documentation</h4>
<div class="outline-text-4" id="text-org4135d2d">
<div id="outline-container-orge1df9c8" class="outline-4">
<h4 id="orge1df9c8">Documentation</h4>
<div class="outline-text-4" id="text-orge1df9c8">
<div id="orgc3e1d9c" class="figure">
<div id="orgda43da5" class="figure">
<p><img src="figs/stewart-frames-position.png" alt="stewart-frames-position.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Definition of the position of the frames</p>
@ -759,9 +759,9 @@ This Matlab function is accessible <a href="../src/initializeFramesPositions.m">
</div>
</div>
<div id="outline-container-org66f1ebb" class="outline-4">
<h4 id="org66f1ebb">Function description</h4>
<div class="outline-text-4" id="text-org66f1ebb">
<div id="outline-container-org3913fad" class="outline-4">
<h4 id="org3913fad">Function description</h4>
<div class="outline-text-4" id="text-org3913fad">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeFramesPositions(stewart, args)
% initializeFramesPositions - Initialize the positions of frames {A}, {B}, {F} and {M}
@ -784,9 +784,9 @@ This Matlab function is accessible <a href="../src/initializeFramesPositions.m">
</div>
</div>
<div id="outline-container-orgd50a826" class="outline-4">
<h4 id="orgd50a826">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgd50a826">
<div id="outline-container-org84462af" class="outline-4">
<h4 id="org84462af">Optional Parameters</h4>
<div class="outline-text-4" id="text-org84462af">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -814,9 +814,9 @@ FO_A = MO_B + FO_M; % Position of {A} with respect to {F} [m]
</div>
</div>
<div id="outline-container-org51c0261" class="outline-4">
<h4 id="org51c0261">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org51c0261">
<div id="outline-container-org1c152b9" class="outline-4">
<h4 id="org1c152b9">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org1c152b9">
<div class="org-src-container">
<pre class="src src-matlab">stewart.geometry.H = H;
stewart.geometry.FO_M = FO_M;
@ -840,9 +840,9 @@ This Matlab function is accessible <a href="../src/generateGeneralConfiguration.
</p>
</div>
<div id="outline-container-org967b04c" class="outline-4">
<h4 id="org967b04c">Documentation</h4>
<div class="outline-text-4" id="text-org967b04c">
<div id="outline-container-org2b8fb20" class="outline-4">
<h4 id="org2b8fb20">Documentation</h4>
<div class="outline-text-4" id="text-org2b8fb20">
<p>
Joints are positions on a circle centered with the Z axis of {F} and {M} and at a chosen distance from {F} and {M}.
The radius of the circles can be chosen as well as the angles where the joints are located (see Figure <a href="#org4c354b6">9</a>).
@ -857,9 +857,9 @@ The radius of the circles can be chosen as well as the angles where the joints a
</div>
</div>
<div id="outline-container-orge721b0e" class="outline-4">
<h4 id="orge721b0e">Function description</h4>
<div class="outline-text-4" id="text-orge721b0e">
<div id="outline-container-orga75f162" class="outline-4">
<h4 id="orga75f162">Function description</h4>
<div class="outline-text-4" id="text-orga75f162">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = generateGeneralConfiguration(stewart, args)
% generateGeneralConfiguration - Generate a Very General Configuration
@ -884,9 +884,9 @@ The radius of the circles can be chosen as well as the angles where the joints a
</div>
</div>
<div id="outline-container-orgfe31977" class="outline-4">
<h4 id="orgfe31977">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgfe31977">
<div id="outline-container-org8c0fa82" class="outline-4">
<h4 id="org8c0fa82">Optional Parameters</h4>
<div class="outline-text-4" id="text-org8c0fa82">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -921,9 +921,9 @@ end
</div>
</div>
<div id="outline-container-org7ee3958" class="outline-4">
<h4 id="org7ee3958">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org7ee3958">
<div id="outline-container-org7d2bd07" class="outline-4">
<h4 id="org7d2bd07">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org7d2bd07">
<div class="org-src-container">
<pre class="src src-matlab">stewart.platform_F.Fa = Fa;
stewart.platform_M.Mb = Mb;
@ -945,9 +945,9 @@ This Matlab function is accessible <a href="../src/computeJointsPose.m">here</a>
</p>
</div>
<div id="outline-container-orgc1c4d18" class="outline-4">
<h4 id="orgc1c4d18">Documentation</h4>
<div class="outline-text-4" id="text-orgc1c4d18">
<div id="outline-container-orga2f43b2" class="outline-4">
<h4 id="orga2f43b2">Documentation</h4>
<div class="outline-text-4" id="text-orga2f43b2">
<div id="org8ffb841" class="figure">
<p><img src="figs/stewart-struts.png" alt="stewart-struts.png" />
@ -957,9 +957,9 @@ This Matlab function is accessible <a href="../src/computeJointsPose.m">here</a>
</div>
</div>
<div id="outline-container-orgc7c8a40" class="outline-4">
<h4 id="orgc7c8a40">Function description</h4>
<div class="outline-text-4" id="text-orgc7c8a40">
<div id="outline-container-orge08cff0" class="outline-4">
<h4 id="orge08cff0">Function description</h4>
<div class="outline-text-4" id="text-orge08cff0">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = computeJointsPose(stewart, args)
% computeJointsPose -
@ -995,9 +995,9 @@ This Matlab function is accessible <a href="../src/computeJointsPose.m">here</a>
</div>
</div>
<div id="outline-container-orga2673d1" class="outline-4">
<h4 id="orga2673d1">Optional Parameters</h4>
<div class="outline-text-4" id="text-orga2673d1">
<div id="outline-container-org80cc25e" class="outline-4">
<h4 id="org80cc25e">Optional Parameters</h4>
<div class="outline-text-4" id="text-org80cc25e">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1009,9 +1009,9 @@ end
</div>
</div>
<div id="outline-container-org772540a" class="outline-4">
<h4 id="org772540a">Check the <code>stewart</code> structure elements</h4>
<div class="outline-text-4" id="text-org772540a">
<div id="outline-container-orge80fdc3" class="outline-4">
<h4 id="orge80fdc3">Check the <code>stewart</code> structure elements</h4>
<div class="outline-text-4" id="text-orge80fdc3">
<div class="org-src-container">
<pre class="src src-matlab">assert(isfield(stewart.platform_F, 'Fa'), 'stewart.platform_F should have attribute Fa')
Fa = stewart.platform_F.Fa;
@ -1097,9 +1097,9 @@ end
</div>
</div>
<div id="outline-container-org0e8aa0a" class="outline-4">
<h4 id="org0e8aa0a">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org0e8aa0a">
<div id="outline-container-org6b7e5e3" class="outline-4">
<h4 id="org6b7e5e3">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org6b7e5e3">
<div class="org-src-container">
<pre class="src src-matlab">stewart.geometry.Aa = Aa;
stewart.geometry.Ab = Ab;
@ -1132,9 +1132,9 @@ This Matlab function is accessible <a href="../src/initializeStewartPose.m">here
</p>
</div>
<div id="outline-container-org609919f" class="outline-4">
<h4 id="org609919f">Function description</h4>
<div class="outline-text-4" id="text-org609919f">
<div id="outline-container-orgf36d5d7" class="outline-4">
<h4 id="orgf36d5d7">Function description</h4>
<div class="outline-text-4" id="text-orgf36d5d7">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeStewartPose(stewart, args)
% initializeStewartPose - Determine the initial stroke in each leg to have the wanted pose
@ -1158,9 +1158,9 @@ This Matlab function is accessible <a href="../src/initializeStewartPose.m">here
</div>
</div>
<div id="outline-container-orgb26889a" class="outline-4">
<h4 id="orgb26889a">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgb26889a">
<div id="outline-container-orgdf77824" class="outline-4">
<h4 id="orgdf77824">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgdf77824">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1182,9 +1182,9 @@ end
</div>
</div>
<div id="outline-container-org8df3429" class="outline-4">
<h4 id="org8df3429">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org8df3429">
<div id="outline-container-orge1d36d3" class="outline-4">
<h4 id="orge1d36d3">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orge1d36d3">
<div class="org-src-container">
<pre class="src src-matlab">stewart.actuators.Leq = dLi;
</pre>
@ -1205,9 +1205,9 @@ This Matlab function is accessible <a href="../src/initializeCylindricalPlatform
</p>
</div>
<div id="outline-container-orgcffde44" class="outline-4">
<h4 id="orgcffde44">Function description</h4>
<div class="outline-text-4" id="text-orgcffde44">
<div id="outline-container-org3f08708" class="outline-4">
<h4 id="org3f08708">Function description</h4>
<div class="outline-text-4" id="text-org3f08708">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeCylindricalPlatforms(stewart, args)
% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
@ -1241,9 +1241,9 @@ This Matlab function is accessible <a href="../src/initializeCylindricalPlatform
</div>
</div>
<div id="outline-container-org017553c" class="outline-4">
<h4 id="org017553c">Optional Parameters</h4>
<div class="outline-text-4" id="text-org017553c">
<div id="outline-container-orgc95505f" class="outline-4">
<h4 id="orgc95505f">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgc95505f">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1278,9 +1278,9 @@ end
</div>
</div>
<div id="outline-container-org943c8fa" class="outline-4">
<h4 id="org943c8fa">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org943c8fa">
<div id="outline-container-orga790eb3" class="outline-4">
<h4 id="orga790eb3">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orga790eb3">
<div class="org-src-container">
<pre class="src src-matlab">stewart.platform_F.type = 1;
@ -1316,9 +1316,9 @@ This Matlab function is accessible <a href="../src/initializeCylindricalStruts.m
</p>
</div>
<div id="outline-container-org4d297c7" class="outline-4">
<h4 id="org4d297c7">Function description</h4>
<div class="outline-text-4" id="text-org4d297c7">
<div id="outline-container-org9ef7d35" class="outline-4">
<h4 id="org9ef7d35">Function description</h4>
<div class="outline-text-4" id="text-org9ef7d35">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeCylindricalStruts(stewart, args)
% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts
@ -1351,9 +1351,9 @@ This Matlab function is accessible <a href="../src/initializeCylindricalStruts.m
</div>
</div>
<div id="outline-container-org2a5dca5" class="outline-4">
<h4 id="org2a5dca5">Optional Parameters</h4>
<div class="outline-text-4" id="text-org2a5dca5">
<div id="outline-container-orgf9adc42" class="outline-4">
<h4 id="orgf9adc42">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgf9adc42">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1403,9 +1403,9 @@ end
</div>
</div>
<div id="outline-container-orge3443c7" class="outline-4">
<h4 id="orge3443c7">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orge3443c7">
<div id="outline-container-orgd6e7b8e" class="outline-4">
<h4 id="orgd6e7b8e">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orgd6e7b8e">
<div class="org-src-container">
<pre class="src src-matlab">switch args.type_M
case 'cylindrical'
@ -1451,9 +1451,9 @@ This Matlab function is accessible <a href="../src/initializeStrutDynamics.m">he
</p>
</div>
<div id="outline-container-orgd6ed57c" class="outline-4">
<h4 id="orgd6ed57c">Documentation</h4>
<div class="outline-text-4" id="text-orgd6ed57c">
<div id="outline-container-orgb41c182" class="outline-4">
<h4 id="orgb41c182">Documentation</h4>
<div class="outline-text-4" id="text-orgb41c182">
<div id="orgbbfb204" class="figure">
<p><img src="figs/piezoelectric_stack.jpg" alt="piezoelectric_stack.jpg" width="500px" />
@ -1482,9 +1482,9 @@ A simplistic model of such amplified actuator is shown in Figure <a href="#org62
</div>
</div>
<div id="outline-container-orgab544d8" class="outline-4">
<h4 id="orgab544d8">Function description</h4>
<div class="outline-text-4" id="text-orgab544d8">
<div id="outline-container-org7469459" class="outline-4">
<h4 id="org7469459">Function description</h4>
<div class="outline-text-4" id="text-org7469459">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeStrutDynamics(stewart, args)
% initializeStrutDynamics - Add Stiffness and Damping properties of each strut
@ -1506,9 +1506,9 @@ A simplistic model of such amplified actuator is shown in Figure <a href="#org62
</div>
</div>
<div id="outline-container-org972382f" class="outline-4">
<h4 id="org972382f">Optional Parameters</h4>
<div class="outline-text-4" id="text-org972382f">
<div id="outline-container-orgd6e68a1" class="outline-4">
<h4 id="orgd6e68a1">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgd6e68a1">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1546,9 +1546,9 @@ This Matlab function is accessible <a href="../src/initializeAmplifiedStrutDynam
</p>
</div>
<div id="outline-container-org4003bdd" class="outline-4">
<h4 id="org4003bdd">Documentation</h4>
<div class="outline-text-4" id="text-org4003bdd">
<div id="outline-container-orgb291f1f" class="outline-4">
<h4 id="orgb291f1f">Documentation</h4>
<div class="outline-text-4" id="text-orgb291f1f">
<p>
An amplified piezoelectric actuator is shown in Figure <a href="#org9e7e9ad">13</a>.
</p>
@ -1561,58 +1561,29 @@ An amplified piezoelectric actuator is shown in Figure <a href="#org9e7e9ad">13<
</div>
<p>
A simplistic model of such amplified actuator is shown in Figure <a href="#org0fd7540">14</a> where the parameters are described in Table <a href="#org9030eaa">1</a>.
A simplistic model of such amplified actuator is shown in Figure <a href="#orgcf4c3de">14</a> where:
</p>
<table id="org9030eaa" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Parameters used for the model of the APA 100M</caption>
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(k_e\)</td>
<td class="org-left">Stiffness used to adjust the pole of the isolator</td>
</tr>
<tr>
<td class="org-left">\(k_1\)</td>
<td class="org-left">Stiffness of the metallic suspension when the stack is removed</td>
</tr>
<tr>
<td class="org-left">\(k_a\)</td>
<td class="org-left">Stiffness of the actuator</td>
</tr>
<tr>
<td class="org-left">\(c_1\)</td>
<td class="org-left">Added viscous damping</td>
</tr>
</tbody>
</table>
<ul class="org-ul">
<li>\(K_{r}\) represent the vertical stiffness when the piezoelectric stack is removed</li>
<li>\(K_{a}\) is the vertical stiffness contribution of the piezoelectric stack</li>
<li>\(F_{i}\) represents the part of the piezoelectric stack that is used as a force actuator</li>
<li>\(F_{m,i}\) represents the remaining part of the piezoelectric stack that is used as a force sensor</li>
<li>\(v_{m,i}\) represents the absolute velocity of the top part of the actuator</li>
<li>\(d_{m,i}\) represents the total relative displacement of the actuator</li>
</ul>
<div id="org0fd7540" class="figure">
<p><img src="./figs/souleille18_model_piezo.png" alt="souleille18_model_piezo.png" />
<div id="orgcf4c3de" class="figure">
<p><img src="figs/iff_1dof.png" alt="iff_1dof.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator</p>
<p><span class="figure-number">Figure 14: </span>Model of an amplified actuator</p>
</div>
</div>
</div>
<div id="outline-container-org4439879" class="outline-4">
<h4 id="org4439879">Function description</h4>
<div class="outline-text-4" id="text-org4439879">
<div id="outline-container-org98773bb" class="outline-4">
<h4 id="org98773bb">Function description</h4>
<div class="outline-text-4" id="text-org98773bb">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeAmplifiedStrutDynamics(stewart, args)
% initializeAmplifiedStrutDynamics - Add Stiffness and Damping properties of each strut
@ -1621,35 +1592,35 @@ A simplistic model of such amplified actuator is shown in Figure <a href="#org0f
%
% Inputs:
% - args - Structure with the following fields:
% - Ka [6x1] - Stiffness of the actuator [N/m]
% - Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - C1 [6x1] - Added viscous damping [N/(m/s)]
% - Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - Kr [6x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - Cr [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
% - actuators.type = 2
% - actuators.K [6x1] - Total Stiffness of each strut [N/m]
% - actuators.C [6x1] - Total Damping of each strut [N/(m/s)]
% - actuators.Ka [6x1] - Stiffness of the actuator [N/m]
% - actuators.Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - actuators.K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - actuators.C1 [6x1] - Added viscous damping [N/(m/s)]
% - actuators.Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - actuators.Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - actuators.Kr [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m]
% - actuators.Cr [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)]
</pre>
</div>
</div>
</div>
<div id="outline-container-org2078010" class="outline-4">
<h4 id="org2078010">Optional Parameters</h4>
<div class="outline-text-4" id="text-org2078010">
<div id="outline-container-orgbf25719" class="outline-4">
<h4 id="orgbf25719">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgbf25719">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
args.Ke (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.5e6*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 43e6*ones(6,1)
args.K1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 0.4e6*ones(6,1)
args.C1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 10*ones(6,1)
args.Kr (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1)
args.Cr (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1)
args.Ca (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
end
</pre>
</div>
@ -1660,23 +1631,24 @@ end
<h4 id="org9b435e8">Compute the total stiffness and damping</h4>
<div class="outline-text-4" id="text-org9b435e8">
<div class="org-src-container">
<pre class="src src-matlab">K = args.K1 + args.Ka.*args.Ke./(args.Ka + args.Ke);
C = args.C1;
<pre class="src src-matlab">K = args.Ka + args.Kr;
C = args.Ca + args.Cr;
</pre>
</div>
</div>
</div>
<div id="outline-container-org072dfc3" class="outline-4">
<h4 id="org072dfc3">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org072dfc3">
<div id="outline-container-orgab1a3e9" class="outline-4">
<h4 id="orgab1a3e9">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orgab1a3e9">
<div class="org-src-container">
<pre class="src src-matlab">stewart.actuators.type = 2;
stewart.actuators.Ka = args.Ka;
stewart.actuators.Ke = args.Ke;
stewart.actuators.K1 = args.K1;
stewart.actuators.C1 = args.C1;
stewart.actuators.Ca = args.Ca;
stewart.actuators.Kr = args.Kr;
stewart.actuators.Cr = args.Cr;
stewart.actuators.K = K;
stewart.actuators.C = C;
@ -1698,9 +1670,9 @@ This Matlab function is accessible <a href="../src/initializeFlexibleStrutDynami
</p>
</div>
<div id="outline-container-orgf23e693" class="outline-4">
<h4 id="orgf23e693">Function description</h4>
<div class="outline-text-4" id="text-orgf23e693">
<div id="outline-container-org1558b41" class="outline-4">
<h4 id="org1558b41">Function description</h4>
<div class="outline-text-4" id="text-org1558b41">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeFlexibleStrutDynamics(stewart, args)
% initializeFlexibleStrutDynamics - Add Stiffness and Damping properties of each strut
@ -1713,7 +1685,6 @@ This Matlab function is accessible <a href="../src/initializeFlexibleStrutDynami
% - M [nxn] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - xi [1x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - step_file [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
% - Gf [6x1] - Gain from strain in [m] to measured [N] such that it matches
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
@ -1722,9 +1693,9 @@ This Matlab function is accessible <a href="../src/initializeFlexibleStrutDynami
</div>
</div>
<div id="outline-container-org72115e7" class="outline-4">
<h4 id="org72115e7">Optional Parameters</h4>
<div class="outline-text-4" id="text-org72115e7">
<div id="outline-container-org9943987" class="outline-4">
<h4 id="org9943987">Optional Parameters</h4>
<div class="outline-text-4" id="text-org9943987">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -1733,7 +1704,6 @@ This Matlab function is accessible <a href="../src/initializeFlexibleStrutDynami
args.H double {mustBeNumeric} = 0
args.n_xyz double {mustBeNumeric} = zeros(2,3)
args.xi double {mustBeNumeric} = 0.1
args.Gf double {mustBeNumeric} = 1
args.step_file char {} = ''
end
</pre>
@ -1751,9 +1721,9 @@ end
</div>
</div>
<div id="outline-container-org70de463" class="outline-4">
<h4 id="org70de463">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org70de463">
<div id="outline-container-orgaa827a8" class="outline-4">
<h4 id="orgaa827a8">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orgaa827a8">
<div class="org-src-container">
<pre class="src src-matlab">stewart.actuators.type = 3;
@ -1766,8 +1736,6 @@ stewart.actuators.xi = args.xi;
stewart.actuators.step_file = args.step_file;
stewart.actuators.K = args.K(3,3); % Axial Stiffness
stewart.actuators.Gf = args.Gf;
</pre>
</div>
</div>
@ -1786,9 +1754,9 @@ This Matlab function is accessible <a href="../src/initializeJointDynamics.m">he
</p>
</div>
<div id="outline-container-orgf0f39ef" class="outline-4">
<h4 id="orgf0f39ef">Function description</h4>
<div class="outline-text-4" id="text-orgf0f39ef">
<div id="outline-container-org631a17c" class="outline-4">
<h4 id="org631a17c">Function description</h4>
<div class="outline-text-4" id="text-org631a17c">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeJointDynamics(stewart, args)
% initializeJointDynamics - Add Stiffness and Damping properties for the spherical joints
@ -1823,30 +1791,22 @@ This Matlab function is accessible <a href="../src/initializeJointDynamics.m">he
</div>
</div>
<div id="outline-container-org8d19d2d" class="outline-4">
<h4 id="org8d19d2d">Optional Parameters</h4>
<div class="outline-text-4" id="text-org8d19d2d">
<div id="outline-container-org7757d0a" class="outline-4">
<h4 id="org7757d0a">Optional Parameters</h4>
<div class="outline-text-4" id="text-org7757d0a">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Ka_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.K_M double {mustBeNumeric} = zeros(6,6)
args.M_M double {mustBeNumeric} = zeros(6,6)
args.n_xyz_M double {mustBeNumeric} = zeros(2,3)
@ -1878,10 +1838,6 @@ end
stewart.joints_F.type = 4;
case 'flexible'
stewart.joints_F.type = 5;
case 'universal_3dof'
stewart.joints_F.type = 6;
case 'spherical_3dof'
stewart.joints_F.type = 7;
end
switch args.type_M
@ -1895,10 +1851,6 @@ switch args.type_M
stewart.joints_M.type = 4;
case 'flexible'
stewart.joints_M.type = 5;
case 'universal_3dof'
stewart.joints_M.type = 6;
case 'spherical_3dof'
stewart.joints_M.type = 7;
end
</pre>
</div>
@ -1909,14 +1861,16 @@ end
<h4 id="orgc0e613c">Add Stiffness and Damping in Translation of each strut</h4>
<div class="outline-text-4" id="text-orgc0e613c">
<p>
Axial and Radial (shear) Stiffness
Translation Stiffness
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.joints_M.Ka = args.Ka_M;
stewart.joints_M.Kr = args.Kr_M;
<pre class="src src-matlab">stewart.joints_M.Kx = zeros(6,1);
stewart.joints_M.Ky = zeros(6,1);
stewart.joints_M.Kz = zeros(6,1);
stewart.joints_F.Ka = args.Ka_F;
stewart.joints_F.Kr = args.Kr_F;
stewart.joints_F.Kx = zeros(6,1);
stewart.joints_F.Ky = zeros(6,1);
stewart.joints_F.Kz = zeros(6,1);
</pre>
</div>
@ -1924,11 +1878,13 @@ stewart.joints_F.Kr = args.Kr_F;
Translation Damping
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.joints_M.Ca = args.Ca_M;
stewart.joints_M.Cr = args.Cr_M;
<pre class="src src-matlab">stewart.joints_M.Cx = zeros(6,1);
stewart.joints_M.Cy = zeros(6,1);
stewart.joints_M.Cz = zeros(6,1);
stewart.joints_F.Ca = args.Ca_F;
stewart.joints_F.Cr = args.Cr_F;
stewart.joints_F.Cx = zeros(6,1);
stewart.joints_F.Cy = zeros(6,1);
stewart.joints_F.Cz = zeros(6,1);
</pre>
</div>
</div>
@ -1942,10 +1898,10 @@ Rotational Stiffness
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.joints_M.Kf = args.Kf_M;
stewart.joints_M.Kt = args.Kt_M;
stewart.joints_M.Kt = args.Kf_M;
stewart.joints_F.Kf = args.Kf_F;
stewart.joints_F.Kt = args.Kt_F;
stewart.joints_F.Kt = args.Kf_F;
</pre>
</div>
@ -1954,10 +1910,10 @@ Rotational Damping
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart.joints_M.Cf = args.Cf_M;
stewart.joints_M.Ct = args.Ct_M;
stewart.joints_M.Ct = args.Cf_M;
stewart.joints_F.Cf = args.Cf_F;
stewart.joints_F.Ct = args.Ct_F;
stewart.joints_F.Ct = args.Cf_F;
</pre>
</div>
</div>
@ -2071,9 +2027,9 @@ Note that there is trade-off between:
</div>
</div>
<div id="outline-container-orgc4ffbf6" class="outline-4">
<h4 id="orgc4ffbf6">Function description</h4>
<div class="outline-text-4" id="text-orgc4ffbf6">
<div id="outline-container-org51c5de0" class="outline-4">
<h4 id="org51c5de0">Function description</h4>
<div class="outline-text-4" id="text-org51c5de0">
<div class="org-src-container">
<pre class="src src-matlab">function [stewart] = initializeInertialSensor(stewart, args)
% initializeInertialSensor - Initialize the inertial sensor in each strut
@ -2099,9 +2055,9 @@ Note that there is trade-off between:
</div>
</div>
<div id="outline-container-org6b45828" class="outline-4">
<h4 id="org6b45828">Optional Parameters</h4>
<div class="outline-text-4" id="text-org6b45828">
<div id="outline-container-org0d6b1bf" class="outline-4">
<h4 id="org0d6b1bf">Optional Parameters</h4>
<div class="outline-text-4" id="text-org0d6b1bf">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -2142,9 +2098,9 @@ end
</div>
</div>
<div id="outline-container-orga292b49" class="outline-4">
<h4 id="orga292b49">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-orga292b49">
<div id="outline-container-org51c0261" class="outline-4">
<h4 id="org51c0261">Populate the <code>stewart</code> structure</h4>
<div class="outline-text-4" id="text-org51c0261">
<div class="org-src-container">
<pre class="src src-matlab">stewart.sensors.inertial = sensor;
</pre>
@ -2165,9 +2121,9 @@ This Matlab function is accessible <a href="../src/displayArchitecture.m">here</
</p>
</div>
<div id="outline-container-org1619f14" class="outline-4">
<h4 id="org1619f14">Function description</h4>
<div class="outline-text-4" id="text-org1619f14">
<div id="outline-container-orge68732a" class="outline-4">
<h4 id="orge68732a">Function description</h4>
<div class="outline-text-4" id="text-orge68732a">
<div class="org-src-container">
<pre class="src src-matlab">function [] = displayArchitecture(stewart, args)
% displayArchitecture - 3D plot of the Stewart platform architecture
@ -2196,9 +2152,9 @@ This Matlab function is accessible <a href="../src/displayArchitecture.m">here</
</div>
</div>
<div id="outline-container-orgf9184d1" class="outline-4">
<h4 id="orgf9184d1">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgf9184d1">
<div id="outline-container-orgd45485c" class="outline-4">
<h4 id="orgd45485c">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgd45485c">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -2219,9 +2175,9 @@ end
</div>
</div>
<div id="outline-container-org441ed7f" class="outline-4">
<h4 id="org441ed7f">Check the <code>stewart</code> structure elements</h4>
<div class="outline-text-4" id="text-org441ed7f">
<div id="outline-container-org772540a" class="outline-4">
<h4 id="org772540a">Check the <code>stewart</code> structure elements</h4>
<div class="outline-text-4" id="text-org772540a">
<div class="org-src-container">
<pre class="src src-matlab">assert(isfield(stewart.platform_F, 'FO_A'), 'stewart.platform_F should have attribute FO_A')
FO_A = stewart.platform_F.FO_A;
@ -2559,9 +2515,9 @@ This Matlab function is accessible <a href="../src/describeStewartPlatform.m">he
</p>
</div>
<div id="outline-container-org93d2ee5" class="outline-4">
<h4 id="org93d2ee5">Function description</h4>
<div class="outline-text-4" id="text-org93d2ee5">
<div id="outline-container-orgcf374f3" class="outline-4">
<h4 id="orgcf374f3">Function description</h4>
<div class="outline-text-4" id="text-orgcf374f3">
<div class="org-src-container">
<pre class="src src-matlab">function [] = describeStewartPlatform(stewart)
% describeStewartPlatform - Display some text describing the current defined Stewart Platform
@ -2577,9 +2533,9 @@ This Matlab function is accessible <a href="../src/describeStewartPlatform.m">he
</div>
</div>
<div id="outline-container-org4587f8f" class="outline-4">
<h4 id="org4587f8f">Optional Parameters</h4>
<div class="outline-text-4" id="text-org4587f8f">
<div id="outline-container-orgd50a826" class="outline-4">
<h4 id="orgd50a826">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgd50a826">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
@ -2728,7 +2684,7 @@ end
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-09-01 mar. 13:18</p>
<p class="date">Created: 2020-08-05 mer. 16:23</p>
</div>
</body>
</html>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1168,20 +1168,45 @@ An amplified piezoelectric actuator is shown in Figure [[fig:cedrat_apa95ml]].
#+caption: Example of an Amplified piezoelectric actuator with an integrated displacement sensor (Cedrat Technologies)
[[file:figs/amplified_piezo_with_displacement_sensor.jpg]]
A simplistic model of such amplified actuator is shown in Figure [[fig:souleille18_model_piezo]] where the parameters are described in Table [[tab:parameters_amplified_piezo]].
A simplistic model of such amplified actuator is shown in Figure [[fig:amplified_piezo_model]] where:
- $K_{r}$ represent the vertical stiffness when the piezoelectric stack is removed
- $K_{a}$ is the vertical stiffness contribution of the piezoelectric stack
- $F_{i}$ represents the part of the piezoelectric stack that is used as a force actuator
- $F_{m,i}$ represents the remaining part of the piezoelectric stack that is used as a force sensor
- $v_{m,i}$ represents the absolute velocity of the top part of the actuator
- $d_{m,i}$ represents the total relative displacement of the actuator
#+name: tab:parameters_amplified_piezo
#+caption: Parameters used for the model of the APA 100M
| | Meaning |
|-------+----------------------------------------------------------------|
| $k_e$ | Stiffness used to adjust the pole of the isolator |
| $k_1$ | Stiffness of the metallic suspension when the stack is removed |
| $k_a$ | Stiffness of the actuator |
| $c_1$ | Added viscous damping |
#+begin_src latex :file iff_1dof.pdf
\begin{tikzpicture}
% Ground
\draw (-1.2, 0) -- (1, 0);
#+name: fig:souleille18_model_piezo
#+caption: Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator
[[file:./figs/souleille18_model_piezo.png]]
% Mass
\draw (-1.2, 1.4) -- ++(2.2, 0);
\node[forcesensor={0.4}{0.4}] (fsensn) at (0, 1){};
\draw[] (-0.4, 1) -- (0.4, 1);
\node[right] at (fsensn.east) {$F_{m}$};
% Spring, Damper, and Actuator
\draw[spring] (-0.4, 0) -- (-0.4, 1) node[midway, right=0.1]{$K_{a}$};
\draw[actuator={0.4}{0.2}] (0.4, 0) -- (0.4, 1) node[midway, right=0.1]{$F$};
\draw[spring] (-1, 0) -- (-1, 1.4) node[midway, left=0.1]{$K_{r}$};
\draw[dashed] (1, 0) -- ++(0.4, 0);
\draw[dashed] (1, 1.4) -- ++(0.4, 0);
\draw[->] (0, 1.4)node[]{$\bullet$} -- ++(0, 0.5) node[right]{$v_{m}$};
\draw[<->] (1.4, 0) -- ++(0, 1.4) node[midway, right]{$d_{m}$};
\end{tikzpicture}
#+end_src
#+name: fig:amplified_piezo_model
#+caption: Model of an amplified actuator
#+RESULTS:
[[file:figs/iff_1dof.png]]
*** Function description
:PROPERTIES:
@ -1195,20 +1220,20 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:souleille
%
% Inputs:
% - args - Structure with the following fields:
% - Ka [6x1] - Stiffness of the actuator [N/m]
% - Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - C1 [6x1] - Added viscous damping [N/(m/s)]
% - Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - Kr [6x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - Cr [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
% - actuators.type = 2
% - actuators.K [6x1] - Total Stiffness of each strut [N/m]
% - actuators.C [6x1] - Total Damping of each strut [N/(m/s)]
% - actuators.Ka [6x1] - Stiffness of the actuator [N/m]
% - actuators.Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - actuators.K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - actuators.C1 [6x1] - Added viscous damping [N/(m/s)]
% - actuators.Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - actuators.Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - actuators.Kr [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m]
% - actuators.Cr [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)]
#+end_src
*** Optional Parameters
@ -1218,10 +1243,10 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:souleille
#+begin_src matlab
arguments
stewart
args.Ke (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.5e6*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 43e6*ones(6,1)
args.K1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 0.4e6*ones(6,1)
args.C1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 10*ones(6,1)
args.Kr (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1)
args.Cr (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1)
args.Ca (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
end
#+end_src
@ -1230,8 +1255,8 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:souleille
:UNNUMBERED: t
:END:
#+begin_src matlab
K = args.K1 + args.Ka.*args.Ke./(args.Ka + args.Ke);
C = args.C1;
K = args.Ka + args.Kr;
C = args.Ca + args.Cr;
#+end_src
*** Populate the =stewart= structure
@ -1242,9 +1267,10 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:souleille
stewart.actuators.type = 2;
stewart.actuators.Ka = args.Ka;
stewart.actuators.Ke = args.Ke;
stewart.actuators.K1 = args.K1;
stewart.actuators.C1 = args.C1;
stewart.actuators.Ca = args.Ca;
stewart.actuators.Kr = args.Kr;
stewart.actuators.Cr = args.Cr;
stewart.actuators.K = K;
stewart.actuators.C = C;
@ -1275,7 +1301,6 @@ This Matlab function is accessible [[file:../src/initializeFlexibleStrutDynamics
% - M [nxn] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - xi [1x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - step_file [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
% - Gf [6x1] - Gain from strain in [m] to measured [N] such that it matches
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
@ -1293,7 +1318,6 @@ This Matlab function is accessible [[file:../src/initializeFlexibleStrutDynamics
args.H double {mustBeNumeric} = 0
args.n_xyz double {mustBeNumeric} = zeros(2,3)
args.xi double {mustBeNumeric} = 0.1
args.Gf double {mustBeNumeric} = 1
args.step_file char {} = ''
end
#+end_src
@ -1323,8 +1347,6 @@ This Matlab function is accessible [[file:../src/initializeFlexibleStrutDynamics
stewart.actuators.step_file = args.step_file;
stewart.actuators.K = args.K(3,3); % Axial Stiffness
stewart.actuators.Gf = args.Gf;
#+end_src
** TODO =initializeJointDynamics=: Add Stiffness and Damping properties for spherical joints
@ -1378,24 +1400,16 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
#+begin_src matlab
arguments
stewart
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Ka_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.K_M double {mustBeNumeric} = zeros(6,6)
args.M_M double {mustBeNumeric} = zeros(6,6)
args.n_xyz_M double {mustBeNumeric} = zeros(2,3)
@ -1425,10 +1439,6 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
stewart.joints_F.type = 4;
case 'flexible'
stewart.joints_F.type = 5;
case 'universal_3dof'
stewart.joints_F.type = 6;
case 'spherical_3dof'
stewart.joints_F.type = 7;
end
switch args.type_M
@ -1442,10 +1452,6 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
stewart.joints_M.type = 4;
case 'flexible'
stewart.joints_M.type = 5;
case 'universal_3dof'
stewart.joints_M.type = 6;
case 'spherical_3dof'
stewart.joints_M.type = 7;
end
#+end_src
@ -1453,22 +1459,26 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
:PROPERTIES:
:UNNUMBERED: t
:END:
Axial and Radial (shear) Stiffness
Translation Stiffness
#+begin_src matlab
stewart.joints_M.Ka = args.Ka_M;
stewart.joints_M.Kr = args.Kr_M;
stewart.joints_M.Kx = zeros(6,1);
stewart.joints_M.Ky = zeros(6,1);
stewart.joints_M.Kz = zeros(6,1);
stewart.joints_F.Ka = args.Ka_F;
stewart.joints_F.Kr = args.Kr_F;
stewart.joints_F.Kx = zeros(6,1);
stewart.joints_F.Ky = zeros(6,1);
stewart.joints_F.Kz = zeros(6,1);
#+end_src
Translation Damping
#+begin_src matlab
stewart.joints_M.Ca = args.Ca_M;
stewart.joints_M.Cr = args.Cr_M;
stewart.joints_M.Cx = zeros(6,1);
stewart.joints_M.Cy = zeros(6,1);
stewart.joints_M.Cz = zeros(6,1);
stewart.joints_F.Ca = args.Ca_F;
stewart.joints_F.Cr = args.Cr_F;
stewart.joints_F.Cx = zeros(6,1);
stewart.joints_F.Cy = zeros(6,1);
stewart.joints_F.Cz = zeros(6,1);
#+end_src
*** Add Stiffness and Damping in Rotation of each strut
@ -1478,19 +1488,19 @@ Translation Damping
Rotational Stiffness
#+begin_src matlab
stewart.joints_M.Kf = args.Kf_M;
stewart.joints_M.Kt = args.Kt_M;
stewart.joints_M.Kt = args.Kf_M;
stewart.joints_F.Kf = args.Kf_F;
stewart.joints_F.Kt = args.Kt_F;
stewart.joints_F.Kt = args.Kf_F;
#+end_src
Rotational Damping
#+begin_src matlab
stewart.joints_M.Cf = args.Cf_M;
stewart.joints_M.Ct = args.Ct_M;
stewart.joints_M.Ct = args.Cf_M;
stewart.joints_F.Cf = args.Cf_F;
stewart.joints_F.Ct = args.Ct_F;
stewart.joints_F.Ct = args.Cf_F;
#+end_src
*** Stiffness and Mass matrices for flexible joint

View File

@ -5,38 +5,39 @@ function [stewart] = initializeAmplifiedStrutDynamics(stewart, args)
%
% Inputs:
% - args - Structure with the following fields:
% - Ka [6x1] - Stiffness of the actuator [N/m]
% - Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - C1 [6x1] - Added viscous damping [N/(m/s)]
% - Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - Kr [6x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - Cr [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
% - actuators.type = 2
% - actuators.K [6x1] - Total Stiffness of each strut [N/m]
% - actuators.C [6x1] - Total Damping of each strut [N/(m/s)]
% - actuators.Ka [6x1] - Stiffness of the actuator [N/m]
% - actuators.Ke [6x1] - Stiffness used to adjust the pole of the isolator [N/m]
% - actuators.K1 [6x1] - Stiffness of the metallic suspension when the stack is removed [N/m]
% - actuators.C1 [6x1] - Added viscous damping [N/(m/s)]
% - actuators.Ka [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
% - actuators.Ca [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - actuators.Kr [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m]
% - actuators.Cr [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)]
arguments
stewart
args.Ke (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.5e6*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 43e6*ones(6,1)
args.K1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 0.4e6*ones(6,1)
args.C1 (6,1) double {mustBeNumeric, mustBeNonnegative} = 10*ones(6,1)
args.Kr (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1)
args.Cr (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1)
args.Ca (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
end
K = args.K1 + args.Ka.*args.Ke./(args.Ka + args.Ke);
C = args.C1;
K = args.Ka + args.Kr;
C = args.Ca + args.Cr;
stewart.actuators.type = 2;
stewart.actuators.Ka = args.Ka;
stewart.actuators.Ke = args.Ke;
stewart.actuators.K1 = args.K1;
stewart.actuators.C1 = args.C1;
stewart.actuators.Ca = args.Ca;
stewart.actuators.Kr = args.Kr;
stewart.actuators.Cr = args.Cr;
stewart.actuators.K = K;
stewart.actuators.C = C;

View File

@ -9,7 +9,6 @@ function [stewart] = initializeFlexibleStrutDynamics(stewart, args)
% - M [nxn] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
% - xi [1x1] - Vertical (residual) stiffness when the piezoelectric stack is removed [N/m]
% - step_file [6x1] - Vertical (residual) damping when the piezoelectric stack is removed [N/(m/s)]
% - Gf [6x1] - Gain from strain in [m] to measured [N] such that it matches
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
@ -21,7 +20,6 @@ arguments
args.H double {mustBeNumeric} = 0
args.n_xyz double {mustBeNumeric} = zeros(2,3)
args.xi double {mustBeNumeric} = 0.1
args.Gf double {mustBeNumeric} = 1
args.step_file char {} = ''
end
@ -38,5 +36,3 @@ stewart.actuators.xi = args.xi;
stewart.actuators.step_file = args.step_file;
stewart.actuators.K = args.K(3,3); % Axial Stiffness
stewart.actuators.Gf = args.Gf;

View File

@ -29,24 +29,16 @@ function [stewart] = initializeJointDynamics(stewart, args)
arguments
stewart
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof', 'spherical_3dof', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'flexible'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 33*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 236*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Ka_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Ka_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.2e8*ones(6,1)
args.Ca_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.Kr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.1e7*ones(6,1)
args.Cr_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
args.K_M double {mustBeNumeric} = zeros(6,6)
args.M_M double {mustBeNumeric} = zeros(6,6)
args.n_xyz_M double {mustBeNumeric} = zeros(2,3)
@ -70,10 +62,6 @@ switch args.type_F
stewart.joints_F.type = 4;
case 'flexible'
stewart.joints_F.type = 5;
case 'universal_3dof'
stewart.joints_F.type = 6;
case 'spherical_3dof'
stewart.joints_F.type = 7;
end
switch args.type_M
@ -87,35 +75,35 @@ switch args.type_M
stewart.joints_M.type = 4;
case 'flexible'
stewart.joints_M.type = 5;
case 'universal_3dof'
stewart.joints_M.type = 6;
case 'spherical_3dof'
stewart.joints_M.type = 7;
end
stewart.joints_M.Ka = args.Ka_M;
stewart.joints_M.Kr = args.Kr_M;
stewart.joints_M.Kx = zeros(6,1);
stewart.joints_M.Ky = zeros(6,1);
stewart.joints_M.Kz = zeros(6,1);
stewart.joints_F.Ka = args.Ka_F;
stewart.joints_F.Kr = args.Kr_F;
stewart.joints_F.Kx = zeros(6,1);
stewart.joints_F.Ky = zeros(6,1);
stewart.joints_F.Kz = zeros(6,1);
stewart.joints_M.Ca = args.Ca_M;
stewart.joints_M.Cr = args.Cr_M;
stewart.joints_M.Cx = zeros(6,1);
stewart.joints_M.Cy = zeros(6,1);
stewart.joints_M.Cz = zeros(6,1);
stewart.joints_F.Ca = args.Ca_F;
stewart.joints_F.Cr = args.Cr_F;
stewart.joints_F.Cx = zeros(6,1);
stewart.joints_F.Cy = zeros(6,1);
stewart.joints_F.Cz = zeros(6,1);
stewart.joints_M.Kf = args.Kf_M;
stewart.joints_M.Kt = args.Kt_M;
stewart.joints_M.Kt = args.Kf_M;
stewart.joints_F.Kf = args.Kf_F;
stewart.joints_F.Kt = args.Kt_F;
stewart.joints_F.Kt = args.Kf_F;
stewart.joints_M.Cf = args.Cf_M;
stewart.joints_M.Ct = args.Ct_M;
stewart.joints_M.Ct = args.Cf_M;
stewart.joints_F.Cf = args.Cf_F;
stewart.joints_F.Ct = args.Ct_F;
stewart.joints_F.Ct = args.Cf_F;
stewart.joints_F.M = args.M_F;
stewart.joints_F.K = args.K_F;