663 lines
25 KiB
HTML
663 lines
25 KiB
HTML
<?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-08-05 mer. 13:27 -->
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
<title>Stewart Platform - Decentralized Active Damping</title>
|
|
<meta name="generator" content="Org mode" />
|
|
<meta name="author" content="Dehaeze Thomas" />
|
|
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
|
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
|
<script src="./js/jquery.min.js"></script>
|
|
<script src="./js/bootstrap.min.js"></script>
|
|
<script src="./js/jquery.stickytableheaders.min.js"></script>
|
|
<script src="./js/readtheorg.js"></script>
|
|
<script>MathJax = {
|
|
tex: {
|
|
tags: 'ams',
|
|
macros: {bm: ["\\boldsymbol{#1}",1],}
|
|
}
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="org-div-home-and-up">
|
|
<a accesskey="h" href="./index.html"> UP </a>
|
|
|
|
|
<a accesskey="H" href="./index.html"> HOME </a>
|
|
</div><div id="content">
|
|
<h1 class="title">Stewart Platform - Decentralized Active Damping</h1>
|
|
<div id="table-of-contents">
|
|
<h2>Table of Contents</h2>
|
|
<div id="text-table-of-contents">
|
|
<ul>
|
|
<li><a href="#orgc22d5d6">1. Inertial Control</a>
|
|
<ul>
|
|
<li><a href="#org1671c0b">1.1. Identification of the Dynamics</a></li>
|
|
<li><a href="#orgdae44ba">1.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
|
<li><a href="#org89e2002">1.3. Obtained Damping</a></li>
|
|
<li><a href="#org3904320">1.4. Conclusion</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org89e426a">2. Integral Force Feedback</a>
|
|
<ul>
|
|
<li><a href="#orgcb85703">2.1. Identification of the Dynamics with perfect Joints</a></li>
|
|
<li><a href="#org4ca24f7">2.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
|
<li><a href="#org11e5ee2">2.3. Obtained Damping</a></li>
|
|
<li><a href="#orgca67baa">2.4. Conclusion</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org47a29be">3. Direct Velocity Feedback</a>
|
|
<ul>
|
|
<li><a href="#orgc82a6a7">3.1. Identification of the Dynamics with perfect Joints</a></li>
|
|
<li><a href="#org92d6cb1">3.2. Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</a></li>
|
|
<li><a href="#org7497409">3.3. Obtained Damping</a></li>
|
|
<li><a href="#org61c422b">3.4. Conclusion</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgc84bb75">4. Compliance and Transmissibility Comparison</a>
|
|
<ul>
|
|
<li><a href="#orgebeb03b">4.1. Initialization</a></li>
|
|
<li><a href="#orgdde930c">4.2. Identification</a></li>
|
|
<li><a href="#orgcfd0381">4.3. Results</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<p>
|
|
The following decentralized active damping techniques are briefly studied:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Inertial Control (proportional feedback of the absolute velocity): Section <a href="#orgb2aa4b3">1</a></li>
|
|
<li>Integral Force Feedback: Section <a href="#org44cadc6">2</a></li>
|
|
<li>Direct feedback of the relative velocity of each strut: Section <a href="#orgbdd1eba">3</a></li>
|
|
</ul>
|
|
|
|
<div id="outline-container-orgc22d5d6" class="outline-2">
|
|
<h2 id="orgc22d5d6"><span class="section-number-2">1</span> Inertial Control</h2>
|
|
<div class="outline-text-2" id="text-1">
|
|
<p>
|
|
<a id="orgb2aa4b3"></a>
|
|
</p>
|
|
|
|
<div class="note">
|
|
<p>
|
|
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_inertial.m">here</a>.
|
|
</p>
|
|
|
|
<p>
|
|
To run the script, open the Simulink Project, and type <code>run active_damping_inertial.m</code>.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1671c0b" class="outline-3">
|
|
<h3 id="org1671c0b"><span class="section-number-3">1.1</span> Identification of the Dynamics</h3>
|
|
<div class="outline-text-3" id="text-1-1">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
stewart = computeJointsPose(stewart);
|
|
stewart = initializeStrutDynamics(stewart);
|
|
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
|
stewart = initializeCylindricalPlatforms(stewart);
|
|
stewart = initializeCylindricalStruts(stewart);
|
|
stewart = computeJacobian(stewart);
|
|
stewart = initializeStewartPose(stewart);
|
|
stewart = initializeInertialSensor(stewart, 'type', 'accelerometer', 'freq', 5e3);
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
|
payload = initializePayload('type', 'none');
|
|
controller = initializeController('type', 'open-loop');
|
|
</pre>
|
|
</div>
|
|
|
|
<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', [], 'Vm'); io_i = io_i + 1; % Absolute velocity of each leg [m/s]
|
|
|
|
%% Run the linearization
|
|
G = linearize(mdl, io, options);
|
|
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
G.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org116ea42">1</a>.
|
|
</p>
|
|
|
|
<div id="org116ea42" class="figure">
|
|
<p><img src="figs/inertial_plant_coupling.png" alt="inertial_plant_coupling.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 1: </span>Transfer function from the Actuator force \(F_{i}\) to the absolute velocity of the same leg \(v_{m,i}\) and to the absolute velocity of the other legs \(v_{m,j}\) with \(i \neq j\) in grey (<a href="./figs/inertial_plant_coupling.png">png</a>, <a href="./figs/inertial_plant_coupling.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgdae44ba" class="outline-3">
|
|
<h3 id="orgdae44ba"><span class="section-number-3">1.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
|
<div class="outline-text-3" id="text-1-2">
|
|
<p>
|
|
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
|
Gf = linearize(mdl, io, options);
|
|
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Gf.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We now use the amplified actuators and re-identify the dynamics
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
|
Ga = linearize(mdl, io, options);
|
|
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Ga.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org620efcd">2</a>.
|
|
</p>
|
|
|
|
<div id="org620efcd" class="figure">
|
|
<p><img src="figs/inertial_plant_flexible_joint_decentralized.png" alt="inertial_plant_flexible_joint_decentralized.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 2: </span>Transfer function from the Actuator force \(F_{i}\) to the absolute velocity sensor \(v_{m,i}\) (<a href="./figs/inertial_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/inertial_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org89e2002" class="outline-3">
|
|
<h3 id="org89e2002"><span class="section-number-3">1.3</span> Obtained Damping</h3>
|
|
<div class="outline-text-3" id="text-1-3">
|
|
<p>
|
|
The control is a performed in a decentralized manner.
|
|
The \(6 \times 6\) control is a diagonal matrix with pure proportional action on the diagonal:
|
|
\[ K(s) = g
|
|
\begin{bmatrix}
|
|
1 & & 0 \\
|
|
& \ddots & \\
|
|
0 & & 1
|
|
\end{bmatrix} \]
|
|
</p>
|
|
|
|
<p>
|
|
The root locus is shown in figure <a href="#org9cabaee">3</a>.
|
|
</p>
|
|
|
|
<div id="org9cabaee" class="figure">
|
|
<p><img src="figs/root_locus_inertial_rot_stiffness.png" alt="root_locus_inertial_rot_stiffness.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 3: </span>Root Locus plot with Decentralized Inertial Control when considering the stiffness of flexible joints (<a href="./figs/root_locus_inertial_rot_stiffness.png">png</a>, <a href="./figs/root_locus_inertial_rot_stiffness.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3904320" class="outline-3">
|
|
<h3 id="org3904320"><span class="section-number-3">1.4</span> Conclusion</h3>
|
|
<div class="outline-text-3" id="text-1-4">
|
|
<div class="important">
|
|
<p>
|
|
We do not have guaranteed stability with Inertial control. This is because of the flexibility inside the internal sensor.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org89e426a" class="outline-2">
|
|
<h2 id="org89e426a"><span class="section-number-2">2</span> Integral Force Feedback</h2>
|
|
<div class="outline-text-2" id="text-2">
|
|
<p>
|
|
<a id="org44cadc6"></a>
|
|
</p>
|
|
|
|
<div class="note">
|
|
<p>
|
|
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_iff.m">here</a>.
|
|
</p>
|
|
|
|
<p>
|
|
To run the script, open the Simulink Project, and type <code>run active_damping_iff.m</code>.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcb85703" class="outline-3">
|
|
<h3 id="orgcb85703"><span class="section-number-3">2.1</span> Identification of the Dynamics with perfect Joints</h3>
|
|
<div class="outline-text-3" id="text-2-1">
|
|
<p>
|
|
We first initialize the Stewart platform without joint stiffness.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
stewart = computeJointsPose(stewart);
|
|
stewart = initializeStrutDynamics(stewart);
|
|
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
|
stewart = initializeCylindricalPlatforms(stewart);
|
|
stewart = initializeCylindricalStruts(stewart);
|
|
stewart = computeJacobian(stewart);
|
|
stewart = initializeStewartPose(stewart);
|
|
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
|
payload = initializePayload('type', 'none');
|
|
controller = initializeController('type', 'open-loop');
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
And we identify the dynamics from force actuators to force sensors.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">%% Name of the Simulink File
|
|
mdl = 'stewart_platform_model';
|
|
|
|
%% 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', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N]
|
|
|
|
%% Run the linearization
|
|
G = linearize(mdl, io);
|
|
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
G.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The transfer function from actuator forces to force sensors is shown in Figure <a href="#org8f016dc">4</a>.
|
|
</p>
|
|
|
|
<div id="org8f016dc" class="figure">
|
|
<p><img src="figs/iff_plant_coupling.png" alt="iff_plant_coupling.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 4: </span>Transfer function from the Actuator force \(F_{i}\) to the Force sensor of the same leg \(F_{m,i}\) and to the force sensor of the other legs \(F_{m,j}\) with \(i \neq j\) in grey (<a href="./figs/iff_plant_coupling.png">png</a>, <a href="./figs/iff_plant_coupling.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org4ca24f7" class="outline-3">
|
|
<h3 id="org4ca24f7"><span class="section-number-3">2.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
|
<div class="outline-text-3" id="text-2-2">
|
|
<p>
|
|
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
|
Gf = linearize(mdl, io);
|
|
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We now use the amplified actuators and re-identify the dynamics
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
|
Ga = linearize(mdl, io);
|
|
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The new dynamics from force actuator to force sensor is shown in Figure <a href="#org4a92e1b">5</a>.
|
|
</p>
|
|
|
|
<div id="org4a92e1b" class="figure">
|
|
<p><img src="figs/iff_plant_flexible_joint_decentralized.png" alt="iff_plant_flexible_joint_decentralized.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 5: </span>Transfer function from the Actuator force \(F_{i}\) to the force sensor \(F_{m,i}\) (<a href="./figs/iff_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/iff_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org11e5ee2" class="outline-3">
|
|
<h3 id="org11e5ee2"><span class="section-number-3">2.3</span> Obtained Damping</h3>
|
|
<div class="outline-text-3" id="text-2-3">
|
|
<p>
|
|
The control is a performed in a decentralized manner.
|
|
The \(6 \times 6\) control is a diagonal matrix with pure integration action on the diagonal:
|
|
\[ K(s) = g
|
|
\begin{bmatrix}
|
|
\frac{1}{s} & & 0 \\
|
|
& \ddots & \\
|
|
0 & & \frac{1}{s}
|
|
\end{bmatrix} \]
|
|
</p>
|
|
|
|
<p>
|
|
The root locus is shown in figure <a href="#orgc8981ba">6</a> and the obtained pole damping function of the control gain is shown in figure <a href="#orgd7fefc7">7</a>.
|
|
</p>
|
|
|
|
<div id="orgc8981ba" class="figure">
|
|
<p><img src="figs/root_locus_iff_rot_stiffness.png" alt="root_locus_iff_rot_stiffness.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 6: </span>Root Locus plot with Decentralized Integral Force Feedback when considering the stiffness of flexible joints (<a href="./figs/root_locus_iff_rot_stiffness.png">png</a>, <a href="./figs/root_locus_iff_rot_stiffness.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
<div id="orgd7fefc7" class="figure">
|
|
<p><img src="figs/pole_damping_gain_iff_rot_stiffness.png" alt="pole_damping_gain_iff_rot_stiffness.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 7: </span>Damping of the poles with respect to the gain of the Decentralized Integral Force Feedback when considering the stiffness of flexible joints (<a href="./figs/pole_damping_gain_iff_rot_stiffness.png">png</a>, <a href="./figs/pole_damping_gain_iff_rot_stiffness.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgca67baa" class="outline-3">
|
|
<h3 id="orgca67baa"><span class="section-number-3">2.4</span> Conclusion</h3>
|
|
<div class="outline-text-3" id="text-2-4">
|
|
<div class="important">
|
|
<p>
|
|
The joint stiffness has a huge impact on the attainable active damping performance when using force sensors.
|
|
Thus, if Integral Force Feedback is to be used in a Stewart platform with flexible joints, the rotational stiffness of the joints should be minimized.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org47a29be" class="outline-2">
|
|
<h2 id="org47a29be"><span class="section-number-2">3</span> Direct Velocity Feedback</h2>
|
|
<div class="outline-text-2" id="text-3">
|
|
<p>
|
|
<a id="orgbdd1eba"></a>
|
|
</p>
|
|
|
|
<div class="note">
|
|
<p>
|
|
The Matlab script corresponding to this section is accessible <a href="../matlab/active_damping_dvf.m">here</a>.
|
|
</p>
|
|
|
|
<p>
|
|
To run the script, open the Simulink Project, and type <code>run active_damping_dvf.m</code>.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgc82a6a7" class="outline-3">
|
|
<h3 id="orgc82a6a7"><span class="section-number-3">3.1</span> Identification of the Dynamics with perfect Joints</h3>
|
|
<div class="outline-text-3" id="text-3-1">
|
|
<p>
|
|
We first initialize the Stewart platform without joint stiffness.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
stewart = computeJointsPose(stewart);
|
|
stewart = initializeStrutDynamics(stewart);
|
|
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
|
stewart = initializeCylindricalPlatforms(stewart);
|
|
stewart = initializeCylindricalStruts(stewart);
|
|
stewart = computeJacobian(stewart);
|
|
stewart = initializeStewartPose(stewart);
|
|
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
|
payload = initializePayload('type', 'none');
|
|
controller = initializeController('type', 'open-loop');
|
|
</pre>
|
|
</div>
|
|
|
|
<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]
|
|
|
|
%% Run the linearization
|
|
G = linearize(mdl, io, options);
|
|
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
G.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The transfer function from actuator forces to relative motion sensors is shown in Figure <a href="#org6de423c">8</a>.
|
|
</p>
|
|
|
|
<div id="org6de423c" class="figure">
|
|
<p><img src="figs/dvf_plant_coupling.png" alt="dvf_plant_coupling.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 8: </span>Transfer function from the Actuator force \(F_{i}\) to the Relative Motion Sensor \(D_{m,j}\) with \(i \neq j\) (<a href="./figs/dvf_plant_coupling.png">png</a>, <a href="./figs/dvf_plant_coupling.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-org92d6cb1" class="outline-3">
|
|
<h3 id="org92d6cb1"><span class="section-number-3">3.2</span> Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics</h3>
|
|
<div class="outline-text-3" id="text-3-2">
|
|
<p>
|
|
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
|
|
Gf = linearize(mdl, io, options);
|
|
Gf.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Gf.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We now use the amplified actuators and re-identify the dynamics
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeAmplifiedStrutDynamics(stewart);
|
|
Ga = linearize(mdl, io, options);
|
|
Ga.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
|
|
Ga.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The new dynamics from force actuator to relative motion sensor is shown in Figure <a href="#org5f559a9">9</a>.
|
|
</p>
|
|
|
|
<div id="org5f559a9" class="figure">
|
|
<p><img src="figs/dvf_plant_flexible_joint_decentralized.png" alt="dvf_plant_flexible_joint_decentralized.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 9: </span>Transfer function from the Actuator force \(F_{i}\) to the relative displacement sensor \(D_{m,i}\) (<a href="./figs/dvf_plant_flexible_joint_decentralized.png">png</a>, <a href="./figs/dvf_plant_flexible_joint_decentralized.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org7497409" class="outline-3">
|
|
<h3 id="org7497409"><span class="section-number-3">3.3</span> Obtained Damping</h3>
|
|
<div class="outline-text-3" id="text-3-3">
|
|
<p>
|
|
The control is a performed in a decentralized manner.
|
|
The \(6 \times 6\) control is a diagonal matrix with pure derivative action on the diagonal:
|
|
\[ K(s) = g
|
|
\begin{bmatrix}
|
|
s & & \\
|
|
& \ddots & \\
|
|
& & s
|
|
\end{bmatrix} \]
|
|
</p>
|
|
|
|
<p>
|
|
The root locus is shown in figure <a href="#org5e168d0">10</a>.
|
|
</p>
|
|
|
|
<div id="org5e168d0" class="figure">
|
|
<p><img src="figs/root_locus_dvf_rot_stiffness.png" alt="root_locus_dvf_rot_stiffness.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 10: </span>Root Locus plot with Direct Velocity Feedback when considering the Stiffness of flexible joints (<a href="./figs/root_locus_dvf_rot_stiffness.png">png</a>, <a href="./figs/root_locus_dvf_rot_stiffness.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org61c422b" class="outline-3">
|
|
<h3 id="org61c422b"><span class="section-number-3">3.4</span> Conclusion</h3>
|
|
<div class="outline-text-3" id="text-3-4">
|
|
<div class="important">
|
|
<p>
|
|
Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgc84bb75" class="outline-2">
|
|
<h2 id="orgc84bb75"><span class="section-number-2">4</span> Compliance and Transmissibility Comparison</h2>
|
|
<div class="outline-text-2" id="text-4">
|
|
</div>
|
|
<div id="outline-container-orgebeb03b" class="outline-3">
|
|
<h3 id="orgebeb03b"><span class="section-number-3">4.1</span> Initialization</h3>
|
|
<div class="outline-text-3" id="text-4-1">
|
|
<p>
|
|
We first initialize the Stewart platform without joint stiffness.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">stewart = initializeStewartPlatform();
|
|
stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3);
|
|
stewart = generateGeneralConfiguration(stewart);
|
|
stewart = computeJointsPose(stewart);
|
|
stewart = initializeStrutDynamics(stewart);
|
|
stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
|
|
stewart = initializeCylindricalPlatforms(stewart);
|
|
stewart = initializeCylindricalStruts(stewart);
|
|
stewart = computeJacobian(stewart);
|
|
stewart = initializeStewartPose(stewart);
|
|
stewart = initializeInertialSensor(stewart, 'type', 'none');
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The rotation point of the ground is located at the origin of frame \(\{A\}\).
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">ground = initializeGround('type', 'rigid', 'rot_point', stewart.platform_F.FO_A);
|
|
payload = initializePayload('type', 'none');
|
|
controller = initializeController('type', 'open-loop');
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgdde930c" class="outline-3">
|
|
<h3 id="orgdde930c"><span class="section-number-3">4.2</span> Identification</h3>
|
|
<div class="outline-text-3" id="text-4-2">
|
|
<p>
|
|
Let’s first identify the transmissibility and compliance in the open-loop case.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">controller = initializeController('type', 'open-loop');
|
|
[T_ol, T_norm_ol, freqs] = computeTransmissibility();
|
|
[C_ol, C_norm_ol, freqs] = computeCompliance();
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Now, let’s identify the transmissibility and compliance for the Integral Force Feedback architecture.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">controller = initializeController('type', 'iff');
|
|
K_iff = (1e4/s)*eye(6);
|
|
|
|
[T_iff, T_norm_iff, ~] = computeTransmissibility();
|
|
[C_iff, C_norm_iff, ~] = computeCompliance();
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
And for the Direct Velocity Feedback.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">controller = initializeController('type', 'dvf');
|
|
K_dvf = 1e4*s/(1+s/2/pi/5000)*eye(6);
|
|
|
|
[T_dvf, T_norm_dvf, ~] = computeTransmissibility();
|
|
[C_dvf, C_norm_dvf, ~] = computeCompliance();
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcfd0381" class="outline-3">
|
|
<h3 id="orgcfd0381"><span class="section-number-3">4.3</span> Results</h3>
|
|
<div class="outline-text-3" id="text-4-3">
|
|
|
|
<div id="orgc1f4c92" class="figure">
|
|
<p><img src="figs/transmissibility_iff_dvf.png" alt="transmissibility_iff_dvf.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 11: </span>Obtained transmissibility for Open-Loop Control (Blue), Integral Force Feedback (Red) and Direct Velocity Feedback (Yellow) (<a href="./figs/transmissibility_iff_dvf.png">png</a>, <a href="./figs/transmissibility_iff_dvf.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
<div id="org2d1b516" class="figure">
|
|
<p><img src="figs/compliance_iff_dvf.png" alt="compliance_iff_dvf.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 12: </span>Obtained compliance for Open-Loop Control (Blue), Integral Force Feedback (Red) and Direct Velocity Feedback (Yellow) (<a href="./figs/compliance_iff_dvf.png">png</a>, <a href="./figs/compliance_iff_dvf.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
<div id="orgf9b6a2b" class="figure">
|
|
<p><img src="figs/frobenius_norm_T_C_iff_dvf.png" alt="frobenius_norm_T_C_iff_dvf.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 13: </span>Frobenius norm of the Transmissibility and Compliance Matrices (<a href="./figs/frobenius_norm_T_C_iff_dvf.png">png</a>, <a href="./figs/frobenius_norm_T_C_iff_dvf.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
|
<p class="date">Created: 2020-08-05 mer. 13:27</p>
|
|
</div>
|
|
</body>
|
|
</html>
|