2020-08-05 13:28:14 +02:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
|
|
|
<head>
|
2020-11-03 08:50:54 +01:00
|
|
|
<!-- 2020-09-07 lun. 23:16 -->
|
2020-08-05 13:28:14 +02:00
|
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
|
|
<title>Stewart Platform with Flexible Elements</title>
|
|
|
|
<meta name="generator" content="Org mode" />
|
|
|
|
<meta name="author" content="Dehaeze Thomas" />
|
|
|
|
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
|
|
|
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
|
|
|
<script src="./js/jquery.min.js"></script>
|
|
|
|
<script src="./js/bootstrap.min.js"></script>
|
|
|
|
<script src="./js/jquery.stickytableheaders.min.js"></script>
|
|
|
|
<script src="./js/readtheorg.js"></script>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="org-div-home-and-up">
|
|
|
|
<a accesskey="h" href="./index.html"> UP </a>
|
|
|
|
|
|
|
|
|
<a accesskey="H" href="./index.html"> HOME </a>
|
|
|
|
</div><div id="content">
|
|
|
|
<h1 class="title">Stewart Platform with Flexible Elements</h1>
|
|
|
|
<div id="table-of-contents">
|
|
|
|
<h2>Table of Contents</h2>
|
|
|
|
<div id="text-table-of-contents">
|
|
|
|
<ul>
|
|
|
|
<li><a href="#orgbdb2a68">1. Simscape Model</a>
|
|
|
|
<ul>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#org17a6e21">1.1. Flexible APA</a></li>
|
2020-08-05 13:28:14 +02:00
|
|
|
<li><a href="#org3650a90">1.2. Flexible Joint</a></li>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#org1a49c82">1.3. Identification</a></li>
|
2020-08-05 13:28:14 +02:00
|
|
|
<li><a href="#org52d500c">1.4. No Flexible Elements</a></li>
|
|
|
|
<li><a href="#org6800cf5">1.5. Flexible joints</a></li>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#org896571b">1.6. Flexible APA</a></li>
|
2020-08-05 13:28:14 +02:00
|
|
|
<li><a href="#org1609aa1">1.7. Flexible Joints and APA</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#orgbddb83e">1.12. Conclusion</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
</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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#orgeebd547">2.2. Identification</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#org36b0a8e">3.1. Stewart Platform Initialization</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#orgcb2d2af">3.6. Comparison of perfect joint and worst specified joint</a></li>
|
|
|
|
<li><a href="#orgbeb611a">3.7. Conclusion</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li><a href="#org0017658">4. Flexible Joint Specifications with the APA300ML</a>
|
|
|
|
<ul>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#orgbd1d5a4">4.1. Stewart Platform Initialization</a></li>
|
|
|
|
<li><a href="#org512c6e0">4.2. Comparison of perfect joint and worst specified joint</a></li>
|
2020-09-01 13:19:26 +02:00
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li><a href="#org649a6c9">5. Relative Motion Sensors</a>
|
|
|
|
<ul>
|
2020-11-03 08:50:54 +01:00
|
|
|
<li><a href="#org9530a70">5.1. Stewart Platform Initialization</a></li>
|
2020-08-05 13:28:14 +02:00
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="outline-container-orgbdb2a68" class="outline-2">
|
|
|
|
<h2 id="orgbdb2a68"><span class="section-number-2">1</span> Simscape Model</h2>
|
|
|
|
<div class="outline-text-2" id="text-1">
|
|
|
|
</div>
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org17a6e21" class="outline-3">
|
|
|
|
<h3 id="org17a6e21"><span class="section-number-3">1.1</span> Flexible APA</h3>
|
2020-08-05 13:28:14 +02:00
|
|
|
<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');
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
|
|
|
|
|
|
<colgroup>
|
|
|
|
<col class="org-left" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Total number of Nodes</td>
|
|
|
|
<td class="org-right">7</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Number of interface Nodes</td>
|
|
|
|
<td class="org-right">7</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Number of Modes</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">120</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Size of M and K matrices</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">162</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
<caption class="t-above"><span class="table-number">Table 1:</span> Coordinates of the interface nodes</caption>
|
|
|
|
|
|
|
|
<colgroup>
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
</colgroup>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th scope="col" class="org-right">Node i</th>
|
|
|
|
<th scope="col" class="org-right">Node Number</th>
|
|
|
|
<th scope="col" class="org-right">x [m]</th>
|
|
|
|
<th scope="col" class="org-right">y [m]</th>
|
|
|
|
<th scope="col" class="org-right">z [m]</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">1.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697783.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">-0.015</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">2.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697784.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">0.015</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">3.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697785.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">-0.0325</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">4.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697786.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">-0.0125</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">5.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697787.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">-0.0075</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">6.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697788.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0125</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">7.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">697789.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0325</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="outline-container-org3650a90" class="outline-3">
|
|
|
|
<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">
|
2020-09-01 13:19:26 +02:00
|
|
|
<pre class="src src-matlab">flex_joint = load('./mat/flexor_025.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
2020-08-05 13:28:14 +02:00
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
|
|
|
|
|
|
<colgroup>
|
|
|
|
<col class="org-left" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Total number of Nodes</td>
|
|
|
|
<td class="org-right">2</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Number of interface Nodes</td>
|
|
|
|
<td class="org-right">2</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Number of Modes</td>
|
|
|
|
<td class="org-right">6</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Size of M and K matrices</td>
|
|
|
|
<td class="org-right">18</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
<caption class="t-above"><span class="table-number">Table 2:</span> Coordinates of the interface nodes</caption>
|
|
|
|
|
|
|
|
<colgroup>
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
</colgroup>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th scope="col" class="org-right">Node i</th>
|
|
|
|
<th scope="col" class="org-right">Node Number</th>
|
|
|
|
<th scope="col" class="org-right">x [m]</th>
|
|
|
|
<th scope="col" class="org-right">y [m]</th>
|
|
|
|
<th scope="col" class="org-right">z [m]</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">1.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">528875.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-right">2.0</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">528876.0</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">0.0</td>
|
|
|
|
<td class="org-right">-0.0</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
|
|
|
|
|
|
<colgroup>
|
|
|
|
<col class="org-left" />
|
|
|
|
|
|
|
|
<col class="org-right" />
|
|
|
|
</colgroup>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th scope="col" class="org-left"><b>Caracteristic</b></th>
|
|
|
|
<th scope="col" class="org-right"><b>Value</b></th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Axial Stiffness [N/um]</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">94</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Bending Stiffness [Nm/rad]</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">5</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Bending Stiffness [Nm/rad]</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">5</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Torsion Stiffness [Nm/rad]</td>
|
2020-09-01 13:19:26 +02:00
|
|
|
<td class="org-right">260</td>
|
2020-08-05 13:28:14 +02:00
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org1a49c82" class="outline-3">
|
|
|
|
<h3 id="org1a49c82"><span class="section-number-3">1.3</span> Identification</h3>
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="outline-text-3" id="text-1-3">
|
|
|
|
<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]
|
|
|
|
io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensors [N]
|
|
|
|
</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>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="outline-container-org52d500c" class="outline-3">
|
|
|
|
<h3 id="org52d500c"><span class="section-number-3">1.4</span> No Flexible Elements</h3>
|
|
|
|
<div class="outline-text-3" id="text-1-4">
|
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
|
|
stewart = initializeFramesPositions(stewart);
|
|
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
|
|
stewart = computeJointsPose(stewart);
|
2020-09-01 13:19:26 +02:00
|
|
|
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));
|
2020-08-05 13:28:14 +02:00
|
|
|
stewart = initializeCylindricalPlatforms(stewart);
|
|
|
|
stewart = initializeCylindricalStruts(stewart);
|
|
|
|
stewart = computeJacobian(stewart);
|
|
|
|
stewart = initializeStewartPose(stewart);
|
|
|
|
stewart = initializeInertialSensor(stewart);
|
2020-08-07 09:56:49 +02:00
|
|
|
|
|
|
|
references = initializeReferences(stewart);
|
2020-08-05 13:28:14 +02:00
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">%% Run the linearization
|
|
|
|
G = linearize(mdl, io, options);
|
|
|
|
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
|
|
G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<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">
|
2020-08-07 09:56:49 +02:00
|
|
|
|
|
|
|
<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>
|
|
|
|
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
|
|
stewart = initializeFramesPositions(stewart);
|
|
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
|
|
stewart = computeJointsPose(stewart);
|
2020-09-01 13:19:26 +02:00
|
|
|
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 40.5e6*ones(6,1), 'K1', 0.4e6*ones(6,1));
|
2020-08-05 13:28:14 +02:00
|
|
|
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);
|
|
|
|
stewart = computeJacobian(stewart);
|
|
|
|
stewart = initializeStewartPose(stewart);
|
|
|
|
stewart = initializeInertialSensor(stewart);
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">%% Run the linearization
|
|
|
|
Gj = linearize(mdl, io, options);
|
|
|
|
Gj.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
|
|
Gj.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org896571b" class="outline-3">
|
|
|
|
<h3 id="org896571b"><span class="section-number-3">1.6</span> Flexible APA</h3>
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="outline-text-3" id="text-1-6">
|
2020-08-07 09:56:49 +02:00
|
|
|
|
|
|
|
<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>
|
|
|
|
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
|
|
stewart = initializeFramesPositions(stewart);
|
|
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
|
|
stewart = computeJointsPose(stewart);
|
2020-09-01 13:19:26 +02:00
|
|
|
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));
|
2020-08-05 13:28:14 +02:00
|
|
|
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">%% Run the linearization
|
|
|
|
Ga = -linearize(mdl, io, options);
|
|
|
|
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
|
|
Ga.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<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">
|
2020-08-07 09:56:49 +02:00
|
|
|
|
|
|
|
<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>
|
|
|
|
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="org-src-container">
|
|
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
|
|
stewart = initializeFramesPositions(stewart);
|
|
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
|
|
stewart = computeJointsPose(stewart);
|
2020-09-01 13:19:26 +02:00
|
|
|
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');
|
2020-08-05 13:28:14 +02:00
|
|
|
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">Gf = -linearize(mdl, io, options);
|
|
|
|
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
|
|
Gf.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
|
|
</pre>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2020-09-01 13:19:26 +02:00
|
|
|
<div id="outline-container-org238cd25" class="outline-3">
|
|
|
|
<h3 id="org238cd25"><span class="section-number-3">1.8</span> Save</h3>
|
2020-08-05 13:28:14 +02:00
|
|
|
<div class="outline-text-3" id="text-1-8">
|
2020-09-01 13:19:26 +02:00
|
|
|
<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">
|
2020-08-05 13:28:14 +02:00
|
|
|
|
|
|
|
<div id="org2d35259" class="figure">
|
|
|
|
<p><img src="figs/flexible_elements_effect_dvf.png" alt="flexible_elements_effect_dvf.png" />
|
|
|
|
</p>
|
2020-08-07 09:56:49 +02:00
|
|
|
<p><span class="figure-number">Figure 4: </span>Change of the DVF plant dynamics with the added flexible elements</p>
|
2020-08-05 13:28:14 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="outline-container-org265a0a3" class="outline-3">
|
2020-09-01 13:19:26 +02:00
|
|
|
<h3 id="org265a0a3"><span class="section-number-3">1.10</span> Integral Force Feedback</h3>
|
|
|
|
<div class="outline-text-3" id="text-1-10">
|
2020-08-05 13:28:14 +02:00
|
|
|
|
|
|
|
<div id="org81cc646" class="figure">
|
|
|
|
<p><img src="figs/flexible_elements_effect_iff.png" alt="flexible_elements_effect_iff.png" />
|
|
|
|
</p>
|
2020-08-07 09:56:49 +02:00
|
|
|
<p><span class="figure-number">Figure 5: </span>Change of the IFF plant dynamics with the added flexible elements</p>
|
2020-08-05 13:28:14 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2020-09-01 13:19:26 +02:00
|
|
|
|
|
|
|
<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>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-orgbddb83e" class="outline-3">
|
|
|
|
<h3 id="orgbddb83e"><span class="section-number-3">1.12</span> Conclusion</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-orgeebd547" class="outline-3">
|
|
|
|
<h3 id="orgeebd547"><span class="section-number-3">2.2</span> Identification</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org36b0a8e" class="outline-3">
|
|
|
|
<h3 id="org36b0a8e"><span class="section-number-3">3.1</span> Stewart Platform Initialization</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-orgcb2d2af" class="outline-3">
|
|
|
|
<h3 id="orgcb2d2af"><span class="section-number-3">3.6</span> Comparison of perfect joint and worst specified joint</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
</div>
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-orgbeb611a" class="outline-3">
|
|
|
|
<h3 id="orgbeb611a"><span class="section-number-3">3.7</span> Conclusion</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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"> </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"> </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"> </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"> </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">> 200 [N/um]</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Shear Stiffness</td>
|
|
|
|
<td class="org-left">> 1 [N/um]</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Bending Stiffness</td>
|
|
|
|
<td class="org-left">< 100 [Nm/rad]</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td class="org-left">Torsion Stiffness</td>
|
|
|
|
<td class="org-left">< 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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-orgbd1d5a4" class="outline-3">
|
|
|
|
<h3 id="orgbd1d5a4"><span class="section-number-3">4.1</span> Stewart Platform Initialization</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<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>
|
|
|
|
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org512c6e0" class="outline-3">
|
|
|
|
<h3 id="org512c6e0"><span class="section-number-3">4.2</span> Comparison of perfect joint and worst specified joint</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
</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>
|
2020-11-03 08:50:54 +01:00
|
|
|
<div id="outline-container-org9530a70" class="outline-3">
|
|
|
|
<h3 id="org9530a70"><span class="section-number-3">5.1</span> Stewart Platform Initialization</h3>
|
2020-09-01 13:19:26 +02:00
|
|
|
<div class="outline-text-3" id="text-5-1">
|
|
|
|
<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">
|
2020-11-03 08:50:54 +01:00
|
|
|
<pre class="src src-matlab">apa = load('./mat/APA300ML.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
|
|
|
stewart = initializeAmplifiedStrutDynamics(stewart, 'Ke', 1.5e6*ones(6,1), 'Ka', 40.5e6*ones(6,1), 'K1', 0.4e6*ones(6,1));
|
2020-09-01 13:19:26 +02:00
|
|
|
% 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">
|
2020-11-03 08:50:54 +01:00
|
|
|
<pre class="src src-matlab">flex_joint = load('./mat/flexor_025.mat', 'int_xyz', 'int_i', 'n_xyz', 'n_i', 'nodes', 'M', 'K');
|
|
|
|
stewart = initializeJointDynamics(stewart, 'type_M', 'spherical_3dof', ...
|
|
|
|
'Kr_M', flex_joint.K(1,1)*ones(6,1), ...
|
|
|
|
'Ka_M', flex_joint.K(3,3)*ones(6,1), ...
|
|
|
|
'Kf_M', flex_joint.K(4,4)*ones(6,1), ...
|
|
|
|
'Kt_M', flex_joint.K(6,6)*ones(6,1), ...
|
|
|
|
'type_F', 'universal_3dof', ...
|
|
|
|
'Kr_F', flex_joint.K(1,1)*ones(6,1), ...
|
|
|
|
'Ka_F', flex_joint.K(3,3)*ones(6,1), ...
|
|
|
|
'Kf_F', flex_joint.K(4,4)*ones(6,1), ...
|
|
|
|
'Kt_F', flex_joint.K(6,6)*ones(6,1));
|
2020-09-01 13:19:26 +02:00
|
|
|
</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);
|
|
|
|
</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>
|
|
|
|
</div>
|
2020-08-05 13:28:14 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="postamble" class="status">
|
|
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
2020-11-03 08:50:54 +01:00
|
|
|
<p class="date">Created: 2020-09-07 lun. 23:16</p>
|
2020-08-05 13:28:14 +02:00
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|