Update html pages

This commit is contained in:
Thomas Dehaeze 2020-03-23 10:05:32 +01:00
parent 4b886c612d
commit 4431bcec8d
23 changed files with 5208 additions and 480 deletions

View File

@ -4,10 +4,10 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-03-06 ven. 15:09 --> <!-- 2020-03-20 ven. 18:52 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Control of the NASS</title> <title>Control of the Nano-Active-Stabilization-System</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" /> <meta name="author" content="Dehaeze Thomas" />
<style type="text/css"> <style type="text/css">
@ -225,6 +225,16 @@
/*]]>*///--> /*]]>*///-->
// @license-end // @license-end
</script> </script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head> </head>
<body> <body>
<div id="org-div-home-and-up"> <div id="org-div-home-and-up">
@ -232,11 +242,474 @@
| |
<a accesskey="H" href="./index.html"> HOME </a> <a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content"> </div><div id="content">
<h1 class="title">Control of the NASS</h1> <h1 class="title">Control of the Nano-Active-Stabilization-System</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org15699e9">1. Control Configuration - Introduction</a></li>
<li><a href="#orgfb6ef96">2. Tracking Control - Basic Architectures</a>
<ul>
<li><a href="#org970ab39">2.1. Control in the frame of the Legs</a></li>
<li><a href="#org82193fb">2.2. Control in the Cartesian frame</a></li>
</ul>
</li>
<li><a href="#orgbfd345b">3. Active Damping Architecture - Collocated Control</a>
<ul>
<li><a href="#org3546873">3.1. Integral Force Feedback</a></li>
<li><a href="#org722b371">3.2. Direct Relative Velocity Feedback</a></li>
</ul>
</li>
<li><a href="#orgaee8981">4. HAC-LAC Architectures</a>
<ul>
<li><a href="#orgd9c84f0">4.1. HAC-LAC using IFF and Tracking control in the frame of the Legs</a></li>
<li><a href="#orgeb80da1">4.2. HAC-LAC using IFF and Tracking control in the Cartesian frame</a></li>
</ul>
</li>
<li><a href="#org1b20de0">5. Cascade Architectures</a>
<ul>
<li><a href="#org3e5154f">5.1. Cascade Control with HAC-LAC Inner Loop and Primary Controller in the task space</a></li>
<li><a href="#org4353aca">5.2. Cascade Control with HAC-LAC Inner Loop and Primary Controller in the joint space</a></li>
</ul>
</li>
<li><a href="#org49649c2">6. Sensor Fusion Architectures</a></li>
<li><a href="#org8b94438">7. \(\mathcal{H}_\infty\) Architectures</a></li>
<li><a href="#org7311546">8. Force Control</a></li>
</ul>
</div>
</div>
<p>
The system consist of the following inputs and outputs (Figure <a href="#org2d9f6d0">1</a>):
</p>
<ul class="org-ul">
<li>\(\bm{\tau}\): Forces applied in each leg</li>
<li>\(\bm{\tau}_m\): Force sensor located in each leg</li>
<li>\(\bm{\mathcal{X}}\): Measurement of the payload position with respect to the granite</li>
<li>\(d\bm{\mathcal{L}}\): Measurement of the (small) relative motion of each leg</li>
</ul>
<div id="org2d9f6d0" class="figure">
<p><img src="figs/control_architecture_plant.png" alt="control_architecture_plant.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Block diagram with the inputs and outputs of the system</p>
</div>
<p>
In order to position the Sample with respect to the granite, we must use the measurement \(\bm{\mathcal{X}}\) in the control loop.
The wanted position of the sample with respect to the granite is represented by \(\bm{r}_\mathcal{X}\).
From \(\bm{r}_\mathcal{X}\) and \(\bm{\mathcal{X}}\), we can compute the required small change of pose of the nano-hexapod&rsquo;s top platform expressed in the frame of the nano-hexapod&rsquo;s base as shown in Figure <a href="#orgc4acef7">2</a>.
</p>
<p>
This can we considered as:
</p>
<ul class="org-ul">
<li>the position error \(\bm{\epsilon}_{\mathcal{X}_n}\) expressed in a frame attach to the base of the nano-hexapod</li>
<li>the wanted (small) pose displacement \(\bm{r}_{d\mathcal{X}_n}\) of the nano-hexapod mobile platform with respect to its base</li>
</ul>
<div id="orgc4acef7" class="figure">
<p><img src="figs/control_architecture_pos_error.png" alt="control_architecture_pos_error.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Block diagram corresponding to the computation of the position error in the frame of the nano-hexapod</p>
</div>
<p>
In this document, we see how the different outputs of the system can be used to control of position \(\bm{\mathcal{X}}\).
</p>
<div id="outline-container-org15699e9" class="outline-2">
<h2 id="org15699e9"><span class="section-number-2">1</span> Control Configuration - Introduction</h2>
<div class="outline-text-2" id="text-1">
<p>
In this section, we discuss the control configuration for the NASS.
</p>
<p>
From <a class='org-ref-reference' href="#skogestad07_multiv_feedb_contr">skogestad07_multiv_feedb_contr</a>:
</p>
<blockquote>
<p>
We define the <b>control configuration</b> to be the restrictions imposed on the overall controller \(K\) by decomposing it into a set of <b>local controllers</b> with predetermined links and with a possibly predetermined design sequence where subcontrollers are designed locally.
</p>
<p>
Some elements used to build up a specific control configuration are:
</p>
<ul class="org-ul">
<li><b>Cascade controllers</b>. The output from one controller is the input to another</li>
<li><b>Decentralized controllers</b>. The control system consists of independent feedback controllers which interconnect a subset of the output measurements with a subset of the manipulated inputs.
These subsets should not be used by any other controller</li>
<li><b>Feedforward elements</b>. Link measured disturbances and manipulated inputs</li>
<li><b>Decoupling elements</b>. Link one set of manipulated inputs with another set of manipulated inputs.
They are used to improve the performance of decentralized control systems.</li>
</ul>
</blockquote>
<p>
Decoupling elements will be used to convert quantities from the joint space to the task space and vice-versa.
</p>
<p>
Decentralized controllers will be largely used both for Tracking control (Section <a href="#org251e3c9">2</a>) and for Active Damping techniques (Section <a href="#org1b3cc21">3</a>)
</p>
<p>
Combining both can be done in an HAC-LAC topology presented in Section <a href="#org31fa800">4</a>.
</p>
<p>
The use of decentralized controllers is proposed in Section <a href="#orga038762">5</a>.
</p>
</div>
</div>
<div id="outline-container-orgfb6ef96" class="outline-2">
<h2 id="orgfb6ef96"><span class="section-number-2">2</span> Tracking Control - Basic Architectures</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="org251e3c9"></a>
</p>
<p>
In this section, we suppose that we want to track some reference position \(\bm{r}_{\mathcal{X}_n}\) corresponding to the pose of the nano-hexapod&rsquo;s mobile platform with respect to its fixed base.
</p>
<p>
To do so, we have to the use the leg&rsquo;s length measurement \(d\bm{\mathcal{L}}\).
</p>
<p>
However, thanks to the forward and inverse kinematics, the controller can either be designed in the task space or in the joint space.
</p>
<p>
These to configuration are described in the next two sections.
</p>
</div>
<div id="outline-container-org970ab39" class="outline-3">
<h3 id="org970ab39"><span class="section-number-3">2.1</span> Control in the frame of the Legs</h3>
<div class="outline-text-3" id="text-2-1">
<p>
<a id="org8583193"></a>
</p>
<p>
From the wanted small change in pose of the nano-hexapod&rsquo;s mobile platform \(\bm{r}_{d\mathcal{X}_n}\), we can use the Inverse Kinematics of the nano-hexapod to compute the corresponding small change of the leg length of the nano-hexapod \(\bm{r}_{d\mathcal{L}}\).
Then, this is subtracted by the measurement of the leg relative displacement \(d\bm{\mathcal{L}}\) to obtain to displacement error of each leg \(\bm{\epsilon}_{d\mathcal{L}}\).
Finally, a diagonal (Decentralized) controller \(\bm{K}_\mathcal{L}\) can be used.
</p>
<div id="org3211e10" class="figure">
<p><img src="figs/control_architecture_leg_frame.png" alt="control_architecture_leg_frame.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Control in the frame of the legs</p>
</div>
</div>
</div>
<div id="outline-container-org82193fb" class="outline-3">
<h3 id="org82193fb"><span class="section-number-3">2.2</span> Control in the Cartesian frame</h3>
<div class="outline-text-3" id="text-2-2">
<p>
<a id="orgbd7e263"></a>
</p>
<p>
From the relative displacement of each leg \(d\bm{\mathcal{L}}\), the pose of the nano-hexapod&rsquo;s mobile platform \(\bm{\mathcal{X}_n}\) is estimated.
It is then subtracted from reference pose of the nano-hexapod \(\bm{r}_{\mathcal{X}_n}\) to obtain the pose error \(\bm{\epsilon}_{\mathcal{X}_n}\).
A diagonal controller \(\bm{K}_\mathcal{X}\) is used to generate forces and torques applied on the payload in a frame attached to the nano-hexapod&rsquo;s base.
These forces are then converted to forces applied in each of the nano-hexapod&rsquo;s actuators by the use of the Jacobian \(\bm{J}^{-T}\).
</p>
<div id="org81b6823" class="figure">
<p><img src="figs/control_architecture_cartesian_frame.png" alt="control_architecture_cartesian_frame.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Control in the cartesian Frame (rotating frame attached to the nano-hexapod&rsquo;s base)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgbfd345b" class="outline-2">
<h2 id="orgbfd345b"><span class="section-number-2">3</span> Active Damping Architecture - Collocated Control</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org1b3cc21"></a>
</p>
<p>
From <a class='org-ref-reference' href="#preumont18_vibrat_contr_activ_struc_fourt_edition">preumont18_vibrat_contr_activ_struc_fourt_edition</a>:
</p>
<blockquote>
<p>
Active damping is very effective in reducing the settling time of transient disturbances and the effect of steady state disturbances near the resonance frequencies of the system; however, away from the resonances, the active damping is completely ineffective and leaves the closed-loop response essentially unchanged.
Such low-gain controllers are often called Low Authority Controllers (LAC), because they modify the poles of the system only slightly.
</p>
</blockquote>
<p>
Two very well known active damping techniques are <b>Integral Force Feedback</b> and <b>Direct Velocity Feedback</b>.
</p>
<p>
These two active damping techniques are collocated control techniques.
</p>
</div>
<div id="outline-container-org3546873" class="outline-3">
<h3 id="org3546873"><span class="section-number-3">3.1</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-3-1">
<p>
<a id="orgb398117"></a>
</p>
<p>
In this active damping technique, the force sensors in each leg is used.
</p>
<p>
The controller \(\bm{K}_\text{IFF}\) is a diagonal matrix, each of its diagonal element consists of:
</p>
<ul class="org-ul">
<li>an pure integrator</li>
<li>a gain \(g\) that can be tuned to achieve a maximum damping</li>
</ul>
\begin{equation}
\bm{K}_\text{IFF}(s) = \frac{g}{s} \bm{I}_{6}
\end{equation}
<p>
A lead-lag can also be used instead of a pure integrator.
</p>
<div id="org19b5f2d" class="figure">
<p><img src="figs/control_architecture_iff.png" alt="control_architecture_iff.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Integral Force Feedback</p>
</div>
</div>
</div>
<div id="outline-container-org722b371" class="outline-3">
<h3 id="org722b371"><span class="section-number-3">3.2</span> Direct Relative Velocity Feedback</h3>
<div class="outline-text-3" id="text-3-2">
<p>
<a id="orgfaf575b"></a>
</p>
<p>
The controller \(\bm{K}_\text{DVF}\) is a diagonal matrix.
Each diagonal element consists of:
</p>
<ul class="org-ul">
<li>a derivative action up to some frequency \(\omega_0\)</li>
<li>a gain \(g\) that can be tuned to achieve a maximum damping</li>
</ul>
\begin{equation}
\bm{K}_\text{DVF}(s) = \frac{g s}{\omega_0 + s} \bm{I}_{6}
\end{equation}
<div id="org402f972" class="figure">
<p><img src="figs/control_architecture_dvf.png" alt="control_architecture_dvf.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Direct Velocity Feedback</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgaee8981" class="outline-2">
<h2 id="orgaee8981"><span class="section-number-2">4</span> HAC-LAC Architectures</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org31fa800"></a>
</p>
<p>
Here we can combine Active Damping Techniques (Low authority control) with a tracking controller (high authority control).
Usually, the low authority controller is designed first, and the high authority controller is designed based on the damped plant.
</p>
<p>
From <a class='org-ref-reference' href="#preumont18_vibrat_contr_activ_struc_fourt_edition">preumont18_vibrat_contr_activ_struc_fourt_edition</a>:
</p>
<blockquote>
<p>
The HAC/LAC approach consist of combining the two approached in a dual-loop control as shown in Figure <a href="#org1b2c5c7">7</a>.
The inner loop uses a set of collocated actuator/sensor pairs for decentralized active damping with guaranteed stability ; the outer loop consists of a non-collocated HAC based on a model of the actively damped structure.
This approach has the following advantages:
</p>
<ul class="org-ul">
<li>The active damping extends outside the bandwidth of the HAC and reduces the settling time of the modes which are outsite the bandwidth</li>
<li>The active damping makes it easier to gain-stabilize the modes outside the bandwidth of the output loop (improved gain margin)</li>
<li>The larger damping of the modes within the controller bandwidth makes them more robust to the parmetric uncertainty (improved phase margin)</li>
</ul>
</blockquote>
<div id="org1b2c5c7" class="figure">
<p><img src="figs/control_architecture_hac_lac.png" alt="control_architecture_hac_lac.png" />
</p>
<p><span class="figure-number">Figure 7: </span>HAC-LAC Control Architecture</p>
</div>
<p>
If there is only one input to the system, the HAC-LAC topology can be represented as depicted in Figure <a href="#org91828a2">8</a>.
Usually, the Low Authority Controller is first design, and then the High Authority Controller is designed based on the damped plant.
</p>
<div id="org91828a2" class="figure">
<p><img src="figs/control_architecture_hac_lac_one_input.png" alt="control_architecture_hac_lac_one_input.png" />
</p>
<p><span class="figure-number">Figure 8: </span>HAC-LAC Architecture with a system having only one input</p>
</div>
</div>
<div id="outline-container-orgd9c84f0" class="outline-3">
<h3 id="orgd9c84f0"><span class="section-number-3">4.1</span> HAC-LAC using IFF and Tracking control in the frame of the Legs</h3>
<div class="outline-text-3" id="text-4-1">
<div id="orgd235561" class="figure">
<p><img src="figs/control_architecture_hac_iff_L.png" alt="control_architecture_hac_iff_L.png" />
</p>
<p><span class="figure-number">Figure 9: </span>IFF + Control in the frame of the legs</p>
</div>
</div>
</div>
<div id="outline-container-orgeb80da1" class="outline-3">
<h3 id="orgeb80da1"><span class="section-number-3">4.2</span> HAC-LAC using IFF and Tracking control in the Cartesian frame</h3>
<div class="outline-text-3" id="text-4-2">
<div id="orgb89bca0" class="figure">
<p><img src="figs/control_architecture_hac_iff_X.png" alt="control_architecture_hac_iff_X.png" />
</p>
<p><span class="figure-number">Figure 10: </span>IFF + Control in the cartesian frame</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org1b20de0" class="outline-2">
<h2 id="org1b20de0"><span class="section-number-2">5</span> Cascade Architectures</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orga038762"></a>
</p>
<p>
The principle of Cascade control is shown in Figure <a href="#org03ef231">11</a> and explained as follow:
</p>
<blockquote>
<p>
To follow <b>two objectives</b> with different properties in one control system, usually a <b>hierarchy</b> of two feedback loops is used in practice.
This kind of control topology is called <b>cascade control</b>, which is used when there are <b>several measurements and one prime control variable</b>.
Cascade control is implemented by <b>nesting</b> the control loops, as shown in Figure <a href="#org03ef231">11</a>.
The output control loop is called the <b>primary loop</b>, while the inner loop is called the secondary loop and is used to fulfill a secondary objective in the closed-loop system. &#x2013; <a class='org-ref-reference' href="#taghirad13_paral">taghirad13_paral</a>
</p>
</blockquote>
<div id="org03ef231" class="figure">
<p><img src="figs/control_architecture_cascade_control.png" alt="control_architecture_cascade_control.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Cascade Control Architecture</p>
</div>
<p>
This control topology seems adapted for the NASS, as indeed we have more inputs than outputs
</p>
<p>
In the NASS&rsquo;s case:
</p>
<ul class="org-ul">
<li>The primary objective is to position the sample with respect to the granite, thus the outer loop (and primary controller) should corresponds to a motion control loop</li>
</ul>
<p>
The inner loop can be composed of the system controlled with the HAC-LAC topology.
</p>
</div>
<div id="outline-container-org3e5154f" class="outline-3">
<h3 id="org3e5154f"><span class="section-number-3">5.1</span> Cascade Control with HAC-LAC Inner Loop and Primary Controller in the task space</h3>
<div class="outline-text-3" id="text-5-1">
<div id="orgff7dfc6" class="figure">
<p><img src="figs/control_architecture_cascade_L.png" alt="control_architecture_cascade_L.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Cascaded Control consisting of (from inner to outer loop): IFF, Linearization Loop, Tracking Control in the frame of the Legs</p>
</div>
</div>
</div>
<div id="outline-container-org4353aca" class="outline-3">
<h3 id="org4353aca"><span class="section-number-3">5.2</span> Cascade Control with HAC-LAC Inner Loop and Primary Controller in the joint space</h3>
<div class="outline-text-3" id="text-5-2">
<div id="org4bc4c4c" class="figure">
<p><img src="figs/control_architecture_cascade_X.png" alt="control_architecture_cascade_X.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Cascaded Control consisting of (from inner to outer loop): IFF, Linearization Loop, Tracking Control in the Cartesian Frame</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org49649c2" class="outline-2">
<h2 id="org49649c2"><span class="section-number-2">6</span> Sensor Fusion Architectures</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="org6e0650a"></a>
</p>
</div>
</div>
<div id="outline-container-org8b94438" class="outline-2">
<h2 id="org8b94438"><span class="section-number-2">7</span> \(\mathcal{H}_\infty\) Architectures</h2>
<div class="outline-text-2" id="text-7">
<p>
<a id="org0440352"></a>
</p>
</div>
</div>
<div id="outline-container-org7311546" class="outline-2">
<h2 id="org7311546"><span class="section-number-2">8</span> Force Control</h2>
<div class="outline-text-2" id="text-8">
<p>
Signals:
</p>
<ul class="org-ul">
<li>\(\bm{r}_\mathcal{F}\) is the wanted total force/torque to be applied to the payload</li>
<li>\(\bm{\epsilon}_\mathcal{F}\) is the force/torque errors that should be applied to the payload</li>
<li>\(\bm{\tau}\) is the force applied in each actuator</li>
</ul>
<div class="figure">
<p><img src="figs/control_architecture_force.png" alt="control_architecture_force.png" />
</p>
</div>
</div>
</div>
<p>
<h1 class='org-ref-bib-h1'>Bibliography</h1>
<ul class='org-ref-bib'><li><a id="skogestad07_multiv_feedb_contr">[skogestad07_multiv_feedb_contr]</a> <a name="skogestad07_multiv_feedb_contr"></a>Skogestad & Postlethwaite, Multivariable Feedback Control: Analysis and Design, John Wiley (2007).</li>
<li><a id="preumont18_vibrat_contr_activ_struc_fourt_edition">[preumont18_vibrat_contr_activ_struc_fourt_edition]</a> <a name="preumont18_vibrat_contr_activ_struc_fourt_edition"></a>Andre Preumont, Vibration Control of Active Structures - Fourth Edition, Springer International Publishing (2018).</li>
<li><a id="taghirad13_paral">[taghirad13_paral]</a> <a name="taghirad13_paral"></a>Taghirad, Parallel robots : mechanics and control, CRC Press (2013).</li>
</ul>
</p>
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-06 ven. 15:09</p> <p class="date">Created: 2020-03-20 ven. 18:52</p>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

704
docs/control_cascade.html Normal file
View File

@ -0,0 +1,704 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-23 lun. 10:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cascade Control applied on the Simscape Model</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Cascade Control applied on the Simscape Model</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org143e6e7">1. Initialization</a></li>
<li><a href="#orga3bd04c">2. Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</a>
<ul>
<li><a href="#org702c612">2.1. Identification</a></li>
<li><a href="#org1eda739">2.2. Plant</a></li>
<li><a href="#orgf33a40f">2.3. Root Locus</a></li>
<li><a href="#orgd895b21">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org101bfbc">3. High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#org259240d">3.1. Identification of the damped plant</a></li>
<li><a href="#orgb8ba0cc">3.2. Obtained Plant</a></li>
<li><a href="#orgdea5e17">3.3. Controller Design and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org58f9f32">4. Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#org82ca884">4.1. Identification of the linearized plant</a></li>
<li><a href="#org878cff7">4.2. Obtained Plant</a></li>
<li><a href="#org839cdb3">4.3. Controller Design</a></li>
</ul>
</li>
<li><a href="#org3300911">5. Simulation</a></li>
<li><a href="#org2943496">6. Results</a></li>
</ul>
</div>
</div>
<p>
The control architecture we wish here to study is shown in Figure <a href="#org19741db">1</a>.
</p>
<div id="org19741db" class="figure">
<p><img src="figs/cascade_control_architecture.png" alt="cascade_control_architecture.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Cascaded Control consisting of (from inner to outer loop): IFF, Linearization Loop, Tracking Control in the frame of the Legs</p>
</div>
<p>
This cascade control is designed in three steps:
</p>
<ul class="org-ul">
<li>In section <a href="#orga20c211">2</a>: an active damping controller is designed.
This is based on the Integral Force Feedback and applied in a decentralized way</li>
<li>In section <a href="#org9367d49">3</a>: a decentralized tracking control is designed in the frame of the legs.
This controller is based on the displacement of each of the legs</li>
<li>In section <a href="#orgdd883a0">4</a>: a controller is designed in the task space in order to follow the wanted reference path corresponding to the sample position with respect to the granite</li>
</ul>
<div id="outline-container-org143e6e7" class="outline-2">
<h2 id="org143e6e7"><span class="section-number-2">1</span> Initialization</h2>
<div class="outline-text-2" id="text-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<p>
Open Loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'cascade-hac-lac'</span>);
</pre>
</div>
<p>
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
<p>
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
Kl = tf(zeros(6));
Kiff = tf(zeros(6));
</pre>
</div>
</div>
</div>
<div id="outline-container-orga3bd04c" class="outline-2">
<h2 id="orga3bd04c"><span class="section-number-2">2</span> Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orga20c211"></a>
</p>
</div>
<div id="outline-container-org702c612" class="outline-3">
<h3 id="org702c612"><span class="section-number-3">2.1</span> Identification</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Let&rsquo;s first identify the plant for the IFF controller.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io, 0);
G_iff.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org1eda739" class="outline-3">
<h3 id="org1eda739"><span class="section-number-3">2.2</span> Plant</h3>
<div class="outline-text-3" id="text-2-2">
<div id="org366ff26" class="figure">
<p><img src="figs/cascade_iff_plant.png" alt="cascade_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 2: </span>IFF Plant (<a href="./figs/cascade_iff_plant.png">png</a>, <a href="./figs/cascade_iff_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgf33a40f" class="outline-3">
<h3 id="orgf33a40f"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3">
<div id="orgdf7a93e" class="figure">
<p><img src="figs/cascade_iff_root_locus.png" alt="cascade_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Root Locus for the IFF control (<a href="./figs/cascade_iff_root_locus.png">png</a>, <a href="./figs/cascade_iff_root_locus.pdf">pdf</a>)</p>
</div>
<p>
The maximum damping is obtained for a control gain of \(\approx 3000\).
</p>
</div>
</div>
<div id="outline-container-orgd895b21" class="outline-3">
<h3 id="orgd895b21"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div class="outline-text-3" id="text-2-4">
<p>
We create the \(6 \times 6\) diagonal Integral Force Feedback controller.
The obtained loop gain is shown in Figure <a href="#org7aaed92">4</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50;
Kiff = <span class="org-type">-</span>3000<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
</pre>
</div>
<div id="org7aaed92" class="figure">
<p><img src="figs/cascade_iff_loop_gain.png" alt="cascade_iff_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Obtained Loop gain the IFF Control (<a href="./figs/cascade_iff_loop_gain.png">png</a>, <a href="./figs/cascade_iff_loop_gain.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org101bfbc" class="outline-2">
<h2 id="org101bfbc"><span class="section-number-2">3</span> High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org9367d49"></a>
</p>
</div>
<div id="outline-container-org259240d" class="outline-3">
<h3 id="org259240d"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We now identify the transfer function from \(\tau^\prime\) to \(d\bm{\mathcal{L}}\) as shown in Figure <a href="#org19741db">1</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'output'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg Displacement</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gl = linearize(mdl, io, 0);
Gl.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
Gl.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>};
</pre>
</div>
<p>
There are some unstable poles in the Plant with very small imaginary parts.
These unstable poles are probably not physical, and they disappear when taking the minimum realization of the plant.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gl)
Gl = minreal(Gl);
isstable(Gl)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb8ba0cc" class="outline-3">
<h3 id="orgb8ba0cc"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The obtain plant is shown in Figure <a href="#org455eb07">5</a>.
</p>
<p>
We can see that the plant is quite well decoupled.
</p>
<div id="org455eb07" class="figure">
<p><img src="figs/cascade_hac_joint_plant.png" alt="cascade_hac_joint_plant.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Plant for the High Authority Control in the Joint Space (<a href="./figs/cascade_hac_joint_plant.png">png</a>, <a href="./figs/cascade_hac_joint_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgdea5e17" class="outline-3">
<h3 id="orgdea5e17"><span class="section-number-3">3.3</span> Controller Design and Loop Gain</h3>
<div class="outline-text-3" id="text-3-3">
<p>
The controller consists of:
</p>
<ul class="org-ul">
<li>A pure integrator</li>
<li>A Second integrator up to half the wanted bandwidth</li>
<li>A Lead around the cross-over frequency</li>
<li>A low pass filter with a cut-off equal to two times the wanted bandwidth</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>400; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
<span class="org-comment">% Kl = (1/h) * (1 + s/wc*h)/(1 + s/wc/h) * wc/s * ((s/wc*2 + 1)/(s/wc*2)) * (1/(1 + s/wc/2));</span>
Kl = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s;
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kl = Kl<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gl<span class="org-type">*</span>Kl, wc))));
</pre>
</div>
<div id="org3dd0142" class="figure">
<p><img src="figs/cascade_hac_joint_loop_gain.png" alt="cascade_hac_joint_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Loop Gain for the High Autority Control in the joint space (<a href="./figs/cascade_hac_joint_loop_gain.png">png</a>, <a href="./figs/cascade_hac_joint_loop_gain.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org58f9f32" class="outline-2">
<h2 id="org58f9f32"><span class="section-number-2">4</span> Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orgdd883a0"></a>
</p>
</div>
<div id="outline-container-org82ca884" class="outline-3">
<h3 id="org82ca884"><span class="section-number-3">4.1</span> Identification of the linearized plant</h3>
<div class="outline-text-3" id="text-4-1">
<p>
We know identify the dynamics between \(\bm{r}_{\mathcal{X}_n}\) and \(\bm{r}_\mathcal{X}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Cascade-HAC-LAC/Kx'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gx = linearize(mdl, io, 0);
Gx.InputName = {<span class="org-string">'rL1'</span>, <span class="org-string">'rL2'</span>, <span class="org-string">'rL3'</span>, <span class="org-string">'rL4'</span>, <span class="org-string">'rL5'</span>, <span class="org-string">'rL6'</span>};
Gx.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
</pre>
</div>
<p>
As before, we take the minimum realization.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gx)
Gx = minreal(Gx);
isstable(Gx)
</pre>
</div>
</div>
</div>
<div id="outline-container-org878cff7" class="outline-3">
<h3 id="org878cff7"><span class="section-number-3">4.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-4-2">
<div id="orge364e46" class="figure">
<p><img src="figs/cascade_primary_plant.png" alt="cascade_primary_plant.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Plant for the Primary Controller (<a href="./figs/cascade_primary_plant.png">png</a>, <a href="./figs/cascade_primary_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org839cdb3" class="outline-3">
<h3 id="org839cdb3"><span class="section-number-3">4.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
Kx = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> (s <span class="org-type">+</span> 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">/</span>s <span class="org-type">*</span> 1<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>20);
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kx, wc))));
</pre>
</div>
<div id="orgb9d3971" class="figure">
<p><img src="figs/cascade_primary_loop_gain.png" alt="cascade_primary_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Loop Gain for the primary controller (outer loop) (<a href="./figs/cascade_primary_loop_gain.png">png</a>, <a href="./figs/cascade_primary_loop_gain.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org3300911" class="outline-2">
<h2 id="org3300911"><span class="section-number-2">5</span> Simulation</h2>
<div class="outline-text-2" id="text-5">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
<p>
And we simulate the system.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">cascade_hac_lac = simout;
save(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org2943496" class="outline-2">
<h2 id="org2943496"><span class="section-number-2">6</span> Results</h2>
<div class="outline-text-2" id="text-6">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
</pre>
</div>
<div id="org0151895" class="figure">
<p><img src="figs/cascade_hac_lac_tomography.png" alt="cascade_hac_lac_tomography.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Results of the Tomography Experiment (<a href="./figs/cascade_hac_lac_tomography.png">png</a>, <a href="./figs/cascade_hac_lac_tomography.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
</div>
</body>
</html>

View File

@ -0,0 +1,769 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-20 ven. 16:35 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Control in the Frame of the Legs applied on the Simscape Model</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Control in the Frame of the Legs applied on the Simscape Model</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org1f22cdb">1. Decentralized Control</a>
<ul>
<li><a href="#orgf7b3c37">1.1. Control Schematic</a></li>
<li><a href="#org15ed002">1.2. Initialize the Simscape Model</a></li>
<li><a href="#org42afc36">1.3. Identification of the plant</a></li>
<li><a href="#org871560e">1.4. Plant Analysis</a></li>
<li><a href="#orgb0aa319">1.5. Controller Design</a></li>
<li><a href="#org564e3b0">1.6. Simulation</a></li>
<li><a href="#org0f36edb">1.7. Results</a></li>
</ul>
</li>
<li><a href="#orgfa4be92">2. HAC-LAC (IFF) Decentralized Control</a>
<ul>
<li><a href="#orgcd58f5e">2.1. Control Schematic</a></li>
<li><a href="#org4318f13">2.2. Initialize the Simscape Model</a></li>
<li><a href="#org0903106">2.3. Initialization</a></li>
<li><a href="#orge739f61">2.4. Identification for IFF</a></li>
<li><a href="#org08b6a99">2.5. Integral Force Feedback Controller</a></li>
<li><a href="#org06b5c75">2.6. Identification of the damped plant</a></li>
<li><a href="#orgdf3c9aa">2.7. Controller Design</a></li>
<li><a href="#org753f2c4">2.8. Simulation</a></li>
<li><a href="#orgd8c14ee">2.9. Results</a></li>
</ul>
</li>
<li><a href="#org21a9294">3. Conclusion</a></li>
</ul>
</div>
</div>
<p>
In this document, we apply some decentralized control to the NASS and see what level of performance can be obtained.
</p>
<div id="outline-container-org1f22cdb" class="outline-2">
<h2 id="org1f22cdb"><span class="section-number-2">1</span> Decentralized Control</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-orgf7b3c37" class="outline-3">
<h3 id="orgf7b3c37"><span class="section-number-3">1.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The control architecture is shown in Figure <a href="#org7503773">1</a>.
</p>
<p>
The signals are:
</p>
<ul class="org-ul">
<li>\(\bm{r}_\mathcal{X}\): wanted position of the sample with respect to the granite</li>
<li>\(\bm{r}_{\mathcal{X}_n}\): wanted position of the sample with respect to the nano-hexapod</li>
<li>\(\bm{r}_\mathcal{L}\): wanted length of each of the nano-hexapod&rsquo;s legs</li>
<li>\(\bm{\tau}\): forces applied in each actuator</li>
<li>\(\bm{\mathcal{L}}\): measured displacement of each leg</li>
<li>\(\bm{\mathcal{X}}\): measured position of the sample with respect to the granite</li>
</ul>
<div id="org7503773" class="figure">
<p><img src="figs/decentralized_reference_tracking_L.png" alt="decentralized_reference_tracking_L.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Decentralized control for reference tracking</p>
</div>
</div>
</div>
<div id="outline-container-org15ed002" class="outline-3">
<h3 id="org15ed002"><span class="section-number-3">1.2</span> Initialize the Simscape Model</h3>
<div class="outline-text-3" id="text-1-2">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<p>
Open Loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'ref-track-L'</span>);
Kl = tf(zeros(6));
</pre>
</div>
<p>
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
<p>
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org42afc36" class="outline-3">
<h3 id="org42afc36"><span class="section-number-3">1.3</span> Identification of the plant</h3>
<div class="outline-text-3" id="text-1-3">
<p>
Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{\mathcal{L}}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Reference-Tracking-L/Sum'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg length error</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G.OutputName = {<span class="org-string">'El1'</span>, <span class="org-string">'El2'</span>, <span class="org-string">'El3'</span>, <span class="org-string">'El4'</span>, <span class="org-string">'El5'</span>, <span class="org-string">'El6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org871560e" class="outline-3">
<h3 id="org871560e"><span class="section-number-3">1.4</span> Plant Analysis</h3>
<div class="outline-text-3" id="text-1-4">
<p>
The diagonal and off-diagonal terms of the plant are shown in Figure <a href="#org68ea839">2</a>.
</p>
<p>
We can see that:
</p>
<ul class="org-ul">
<li>the diagonal terms have similar dynamics</li>
<li>the plant is decoupled at low frequency</li>
</ul>
<div id="org68ea839" class="figure">
<p><img src="figs/decentralized_control_plant_L.png" alt="decentralized_control_plant_L.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Transfer Functions from forces applied in each actuator \(\tau_i\) to the relative motion of each leg \(d\mathcal{L}_i\) (<a href="./figs/decentralized_control_plant_L.png">png</a>, <a href="./figs/decentralized_control_plant_L.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgb0aa319" class="outline-3">
<h3 id="orgb0aa319"><span class="section-number-3">1.5</span> Controller Design</h3>
<div class="outline-text-3" id="text-1-5">
<p>
The controller consists of:
</p>
<ul class="org-ul">
<li>A pure integrator</li>
<li>An integrator up to little before the crossover</li>
<li>A lead around the crossover</li>
<li>A low pass filter with a cut-off frequency 3 times the crossover to increase the gain margin</li>
</ul>
<p>
The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#org3bd29d4">3</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>20;
h = 1.5;
Kl = diag(1<span class="org-type">./</span>diag(abs(freqresp(G, wc)))) <span class="org-type">*</span> ...
wc<span class="org-type">/</span>s <span class="org-type">*</span> ...<span class="org-comment"> % Pure Integrator</span>
((s<span class="org-type">/</span>wc<span class="org-type">*</span>2 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>wc<span class="org-type">*</span>2)) <span class="org-type">*</span> ...<span class="org-comment"> % Integrator up to wc/2</span>
1<span class="org-type">/</span>h <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> ...<span class="org-comment"> % Lead</span>
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>3<span class="org-type">/</span>wc) <span class="org-type">*</span> ...<span class="org-comment"> % Low pass Filter</span>
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>3<span class="org-type">/</span>wc);
</pre>
</div>
<div id="org3bd29d4" class="figure">
<p><img src="figs/decentralized_control_L_loop_gain.png" alt="decentralized_control_L_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Obtained Loop Gain (<a href="./figs/decentralized_control_L_loop_gain.png">png</a>, <a href="./figs/decentralized_control_L_loop_gain.pdf">pdf</a>)</p>
</div>
<p>
We add a minus sign to the controller as it is not included in the Simscape model.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kl = <span class="org-type">-</span>Kl;
</pre>
</div>
</div>
</div>
<div id="outline-container-org564e3b0" class="outline-3">
<h3 id="org564e3b0"><span class="section-number-3">1.6</span> Simulation</h3>
<div class="outline-text-3" id="text-1-6">
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'ref-track-L'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">decentralized_L = simout;
save(<span class="org-string">'./mat/tomo_exp_decentalized.mat'</span>, <span class="org-string">'decentralized_L'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org0f36edb" class="outline-3">
<h3 id="org0f36edb"><span class="section-number-3">1.7</span> Results</h3>
<div class="outline-text-3" id="text-1-7">
<p>
The reference path and the position of the mobile platform are shown in Figure <a href="#org247b3a0">4</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/tomo_exp_decentalized.mat'</span>, <span class="org-string">'decentralized_L'</span>);
</pre>
</div>
<div id="org247b3a0" class="figure">
<p><img src="figs/decentralized_L_position_errors.png" alt="decentralized_L_position_errors.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Position Errors when using the Decentralized Control Architecture (<a href="./figs/decentralized_L_position_errors.png">png</a>, <a href="./figs/decentralized_L_position_errors.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgfa4be92" class="outline-2">
<h2 id="orgfa4be92"><span class="section-number-2">2</span> HAC-LAC (IFF) Decentralized Control</h2>
<div class="outline-text-2" id="text-2">
<p>
We here add an Active Damping Loop (Integral Force Feedback) prior to using the Decentralized control architecture using \(\bm{\mathcal{L}}\).
</p>
</div>
<div id="outline-container-orgcd58f5e" class="outline-3">
<h3 id="orgcd58f5e"><span class="section-number-3">2.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-2-1">
<p>
The control architecture is shown in Figure <a href="#org7503773">1</a>.
</p>
<p>
The signals are:
</p>
<ul class="org-ul">
<li>\(\bm{r}_\mathcal{X}\): wanted position of the sample with respect to the granite</li>
<li>\(\bm{r}_{\mathcal{X}_n}\): wanted position of the sample with respect to the nano-hexapod</li>
<li>\(\bm{r}_\mathcal{L}\): wanted length of each of the nano-hexapod&rsquo;s legs</li>
<li>\(\bm{\tau}\): forces applied in each actuator</li>
<li>\(\bm{\mathcal{L}}\): measured displacement of each leg</li>
<li>\(\bm{\mathcal{X}}\): measured position of the sample with respect to the granite</li>
</ul>
<div id="org5b991df" class="figure">
<p><img src="figs/decentralized_reference_tracking_L.png" alt="decentralized_reference_tracking_L.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Decentralized control for reference tracking</p>
</div>
</div>
</div>
<div id="outline-container-org4318f13" class="outline-3">
<h3 id="org4318f13"><span class="section-number-3">2.2</span> Initialize the Simscape Model</h3>
<div class="outline-text-3" id="text-2-2">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<p>
Open Loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'ref-track-L'</span>);
Kl = tf(zeros(6));
</pre>
</div>
<p>
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
<p>
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org0903106" class="outline-3">
<h3 id="org0903106"><span class="section-number-3">2.3</span> Initialization</h3>
<div class="outline-text-3" id="text-2-3">
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'ref-track-iff-L'</span>);
K_iff = tf(zeros(6));
Kl = tf(zeros(6));
</pre>
</div>
</div>
</div>
<div id="outline-container-orge739f61" class="outline-3">
<h3 id="orge739f61"><span class="section-number-3">2.4</span> Identification for IFF</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io, 0);
G_iff.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org08b6a99" class="outline-3">
<h3 id="org08b6a99"><span class="section-number-3">2.5</span> Integral Force Feedback Controller</h3>
<div class="outline-text-3" id="text-2-5">
<div class="org-src-container">
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50;
K_iff = <span class="org-type">-</span>5000<span class="org-type">/</span>s <span class="org-type">*</span> (s<span class="org-type">/</span>w0)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>w0) <span class="org-type">*</span> eye(6);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K_iff = <span class="org-type">-</span>K_iff;
</pre>
</div>
</div>
</div>
<div id="outline-container-org06b5c75" class="outline-3">
<h3 id="org06b5c75"><span class="section-number-3">2.6</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-2-6">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink DehaezeFile</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Reference-Tracking-IFF-L/Sum'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg length error</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gd = linearize(mdl, io, 0);
Gd.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
Gd.OutputName = {<span class="org-string">'El1'</span>, <span class="org-string">'El2'</span>, <span class="org-string">'El3'</span>, <span class="org-string">'El4'</span>, <span class="org-string">'El5'</span>, <span class="org-string">'El6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdf3c9aa" class="outline-3">
<h3 id="orgdf3c9aa"><span class="section-number-3">2.7</span> Controller Design</h3>
<div class="outline-text-3" id="text-2-7">
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>300;
h = 3;
Kl = diag(1<span class="org-type">./</span>diag(abs(freqresp(Gd, wc)))) <span class="org-type">*</span> ...
((s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>20) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>20))) <span class="org-type">*</span> ...<span class="org-comment"> % Pure Integrator</span>
((s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50))) <span class="org-type">*</span> ...<span class="org-comment"> % Integrator up to wc/2</span>
1<span class="org-type">/</span>h <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> ...
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span>wc)) <span class="org-type">*</span> ...
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(3<span class="org-type">*</span>wc));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(Gd<span class="org-type">*</span>Kl, eye(6), <span class="org-type">-</span>1))
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kl = <span class="org-type">-</span>Kl;
</pre>
</div>
</div>
</div>
<div id="outline-container-org753f2c4" class="outline-3">
<h3 id="org753f2c4"><span class="section-number-3">2.8</span> Simulation</h3>
<div class="outline-text-3" id="text-2-8">
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'ref-track-iff-L'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">decentralized_iff_L = simout;
save(<span class="org-string">'./mat/tomo_exp_decentalized.mat'</span>, <span class="org-string">'decentralized_iff_L'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd8c14ee" class="outline-3">
<h3 id="orgd8c14ee"><span class="section-number-3">2.9</span> Results</h3>
</div>
</div>
<div id="outline-container-org21a9294" class="outline-2">
<h2 id="org21a9294"><span class="section-number-2">3</span> Conclusion</h2>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-20 ven. 16:35</p>
</div>
</body>
</html>

562
docs/control_hac_lac.html Normal file
View File

@ -0,0 +1,562 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-23 lun. 10:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>HAC-LAC applied on the Simscape Model</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">HAC-LAC applied on the Simscape Model</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org1fe8594">1. Initialization</a></li>
<li><a href="#orgfd54447">2. Low Authority Control - Direct Velocity Feedback \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#orga860160">2.1. Identification</a></li>
<li><a href="#org7a2c131">2.2. Plant</a></li>
<li><a href="#org46eb79b">2.3. Root Locus</a></li>
<li><a href="#orgafbd7d0">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#orged12a17">3. High Authority Control - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#orgc22e2f2">3.1. Identification of the damped plant</a></li>
<li><a href="#org6bca8e2">3.2. Controller Design</a></li>
</ul>
</li>
<li><a href="#orgb7ffa65">4. Simulation</a></li>
<li><a href="#org448f335">5. Results</a></li>
</ul>
</div>
</div>
<p>
The position \(\bm{\mathcal{X}}\) of the Sample with respect to the granite is measured.
</p>
<p>
It is then compare to the wanted position of the Sample \(\bm{r}_\mathcal{X}\) in order to obtain the position error \(\bm{\epsilon}_\mathcal{X}\) of the Sample with respect to a frame attached to the Stewart top platform.
</p>
<div id="orgb987aa6" class="figure">
<p><img src="figs/hac_lac_control_schematic.png" alt="hac_lac_control_schematic.png" />
</p>
<p><span class="figure-number">Figure 1: </span>HAC-LAC Control Architecture used for the Control of the NASS</p>
</div>
<div id="outline-container-org1fe8594" class="outline-2">
<h2 id="org1fe8594"><span class="section-number-2">1</span> Initialization</h2>
<div class="outline-text-2" id="text-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<p>
Open Loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
</pre>
</div>
<p>
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
<p>
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfd54447" class="outline-2">
<h2 id="orgfd54447"><span class="section-number-2">2</span> Low Authority Control - Direct Velocity Feedback \(\bm{K}_\mathcal{L}\)</h2>
<div class="outline-text-2" id="text-2">
<p>
The first loop closed corresponds to a direct velocity feedback loop.
</p>
<p>
The design of the associated decentralized controller is explained in <a href="control_active_damping.html">this</a> file.
</p>
</div>
<div id="outline-container-orga860160" class="outline-3">
<h3 id="orga860160"><span class="section-number-3">2.1</span> Identification</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_dvf = linearize(mdl, io, 0);
G_dvf.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_dvf.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org7a2c131" class="outline-3">
<h3 id="org7a2c131"><span class="section-number-3">2.2</span> Plant</h3>
</div>
<div id="outline-container-org46eb79b" class="outline-3">
<h3 id="org46eb79b"><span class="section-number-3">2.3</span> Root Locus</h3>
</div>
<div id="outline-container-orgafbd7d0" class="outline-3">
<h3 id="orgafbd7d0"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">K_dvf = s<span class="org-type">*</span>15000<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10000);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">K_dvf = <span class="org-type">-</span>K_dvf<span class="org-type">*</span>eye(6);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orged12a17" class="outline-2">
<h2 id="orged12a17"><span class="section-number-2">3</span> High Authority Control - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-orgc22e2f2" class="outline-3">
<h3 id="orgc22e2f2"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
</pre>
</div>
<p>
The minus sine is put here because there is already a minus sign included due to the computation of the position error.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>);
Gx = <span class="org-type">-</span>G<span class="org-type">*</span>inv(nano_hexapod.J<span class="org-type">'</span>);
Gx.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org6bca8e2" class="outline-3">
<h3 id="org6bca8e2"><span class="section-number-3">3.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The controller consists of:
</p>
<ul class="org-ul">
<li>A pure integrator</li>
<li>A Second integrator up to half the wanted bandwidth</li>
<li>A Lead around the cross-over frequency</li>
<li>A low pass filter with a cut-off equal to two times the wanted bandwidth</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>15; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 1.5; <span class="org-comment">% Lead parameter</span>
Kx = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> ((s<span class="org-type">/</span>wc<span class="org-type">*</span>2 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>wc<span class="org-type">*</span>2)) <span class="org-type">*</span> (1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>2));
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kx, wc))));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(Gx<span class="org-type">*</span>Kx, eye(6), <span class="org-type">-</span>1))
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kx = inv(nano_hexapod.J<span class="org-type">'</span>)<span class="org-type">*</span>Kx;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(G<span class="org-type">*</span>Kx, eye(6), 1))
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb7ffa65" class="outline-2">
<h2 id="orgb7ffa65"><span class="section-number-2">4</span> Simulation</h2>
<div class="outline-text-2" id="text-4">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
<p>
And we simulate the system.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">hac_dvf = simout;
save(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'hac_dvf'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org448f335" class="outline-2">
<h2 id="org448f335"><span class="section-number-2">5</span> Results</h2>
<div class="outline-text-2" id="text-5">
<p>
Let&rsquo;s load the simulation when no control is applied.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'hac_dvf'</span>);
</pre>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
</div>
</body>
</html>

View File

@ -0,0 +1,265 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-23 lun. 10:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Control of the NASS with Voice coil actuators</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</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">Control of the NASS with Voice coil actuators</h1>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
</div>
</body>
</html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-03-06 ven. 15:09 --> <!-- 2020-03-17 mar. 17:28 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Matlab Functions used for the NASS Project</title> <title>Matlab Functions used for the NASS Project</title>
@ -251,7 +251,7 @@
</p> </p>
<p> <p>
This Matlab function is accessible <a href="src/computeReferencePose.m">here</a>. This Matlab function is accessible <a href="..//src/computeReferencePose.m">here</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -336,6 +336,7 @@ This Matlab function is accessible <a href="src/computeReferencePose.m">here</a>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org493ab7f" class="outline-2"> <div id="outline-container-org493ab7f" class="outline-2">
<h2 id="org493ab7f"><span class="section-number-2">2</span> Compute the Sample Position Error w.r.t. the NASS</h2> <h2 id="org493ab7f"><span class="section-number-2">2</span> Compute the Sample Position Error w.r.t. the NASS</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
@ -344,7 +345,7 @@ This Matlab function is accessible <a href="src/computeReferencePose.m">here</a>
</p> </p>
<p> <p>
This Matlab function is accessible <a href="src/computeSampleError.m">here</a>. This Matlab function is accessible <a href="..//src/computeSampleError.m">here</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -375,7 +376,7 @@ MTr = [WTm(1<span class="org-type">:</span>3,1<span class="org-type">:</span>3)<
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-06 ven. 15:09</p> <p class="date">Created: 2020-03-17 mar. 17:28</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-03-06 ven. 15:09 --> <!-- 2020-03-17 mar. 17:30 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Model of the Nano-Active-Stabilization-System</title> <title>Simscape Model of the Nano-Active-Stabilization-System</title>
@ -246,7 +246,7 @@
<li><a href="#org4dd191b">7. Disturbances (link)</a></li> <li><a href="#org4dd191b">7. Disturbances (link)</a></li>
<li><a href="#org6d7e868">8. Tomography Experiment (link)</a></li> <li><a href="#org6d7e868">8. Tomography Experiment (link)</a></li>
<li><a href="#org3b8f596">9. Active Damping Techniques on the Uni-axial Model (link)</a></li> <li><a href="#org3b8f596">9. Active Damping Techniques on the Uni-axial Model (link)</a></li>
<li><a href="#org9fe426f">10. Active Damping Techniques on the full Simscape Model (link)</a></li> <li><a href="#org14a10e8">10. Active Damping Techniques on the full Simscape Model (link)</a></li>
<li><a href="#org361f405">11. Useful Matlab Functions (link)</a></li> <li><a href="#org361f405">11. Useful Matlab Functions (link)</a></li>
</ul> </ul>
</div> </div>
@ -365,8 +365,8 @@ Active damping techniques are applied to the Uniaxial Simscape model.
</div> </div>
</div> </div>
<div id="outline-container-org9fe426f" class="outline-2"> <div id="outline-container-org14a10e8" class="outline-2">
<h2 id="org9fe426f"><span class="section-number-2">10</span> Active Damping Techniques on the full Simscape Model (<a href="./active_damping.html">link</a>)</h2> <h2 id="org14a10e8"><span class="section-number-2">10</span> Active Damping Techniques on the full Simscape Model (<a href="control_active_damping.html">link</a>)</h2>
<div class="outline-text-2" id="text-10"> <div class="outline-text-2" id="text-10">
<p> <p>
Active damping techniques are applied to the full Simscape model. Active damping techniques are applied to the full Simscape model.
@ -389,7 +389,7 @@ These functions are all defined <a href="./functions.html">here</a>.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-06 ven. 15:09</p> <p class="date">Created: 2020-03-17 mar. 17:30</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-03-13 ven. 17:39 --> <!-- 2020-03-17 mar. 17:28 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Motion and Force Requirements for the Nano-Hexapod</title> <title>Motion and Force Requirements for the Nano-Hexapod</title>
@ -250,7 +249,6 @@
</div> </div>
</div> </div>
<div id="outline-container-org70e526c" class="outline-2"> <div id="outline-container-org70e526c" class="outline-2">
<h2 id="org70e526c"><span class="section-number-2">1</span> Soft Hexapod</h2> <h2 id="org70e526c"><span class="section-number-2">1</span> Soft Hexapod</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
@ -362,7 +360,7 @@ F = m<span class="org-type">*</span>d<span class="org-type">*</span>w<span class
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-13 ven. 17:39</p> <p class="date">Created: 2020-03-17 mar. 17:28</p>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

BIN
mat/cascade_hac_lac.mat Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,44 @@
#+TITLE: Control of the NASS with Voice coil actuators
:DRAWER:
#+STARTUP: overview
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+HTML_LINK_HOME: ./index.html
#+HTML_LINK_UP: ./index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
#+HTML_MATHJAX: align: center tagside: right font: TeX
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :tangle no
#+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
#+PROPERTY: header-args:latex+ :results file raw replace
#+PROPERTY: header-args:latex+ :buffer no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:

View File

@ -85,7 +85,7 @@ Tomography experiments are simulated and the results are presented [[./experimen
* Active Damping Techniques on the Uni-axial Model ([[./active_damping_uniaxial.org][link]]) * Active Damping Techniques on the Uni-axial Model ([[./active_damping_uniaxial.org][link]])
Active damping techniques are applied to the Uniaxial Simscape model. Active damping techniques are applied to the Uniaxial Simscape model.
* Active Damping Techniques on the full Simscape Model ([[./active_damping.org][link]]) * Active Damping Techniques on the full Simscape Model ([[file:control_active_damping.org][link]])
Active damping techniques are applied to the full Simscape model. Active damping techniques are applied to the full Simscape model.
* Useful Matlab Functions ([[./functions.org][link]]) * Useful Matlab Functions ([[./functions.org][link]])

View File

@ -1,6 +1,5 @@
#+TITLE: Motion and Force Requirements for the Nano-Hexapod #+TITLE: Motion and Force Requirements for the Nano-Hexapod
* Soft Hexapod * Soft Hexapod
As the nano-hexapod is in series with the other stages, it must apply all the force required to move the sample. As the nano-hexapod is in series with the other stages, it must apply all the force required to move the sample.

View File

@ -1458,8 +1458,7 @@ The =sample= structure is saved.
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments arguments
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf'})} = 'open-loop' args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac'})} = 'open-loop'
args.K (6,6) = ss(zeros(6, 6))
end end
#+end_src #+end_src
@ -1486,17 +1485,15 @@ First, we initialize the =controller= structure.
controller.type = 3; controller.type = 3;
case 'hac-dvf' case 'hac-dvf'
controller.type = 4; controller.type = 4;
case 'ref-track-L'
controller.type = 5;
case 'ref-track-iff-L'
controller.type = 6;
case 'cascade-hac-lac'
controller.type = 7;
end end
#+end_src #+end_src
** Control Law
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
controller.K = args.K;
#+end_src
** Save the Structure ** Save the Structure
:PROPERTIES: :PROPERTIES:
:UNNUMBERED: t :UNNUMBERED: t