Update html pages
This commit is contained in:
parent
4b886c612d
commit
4431bcec8d
@ -4,10 +4,10 @@
|
||||
"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-06 ven. 15:09 -->
|
||||
<!-- 2020-03-20 ven. 18:52 -->
|
||||
<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</title>
|
||||
<title>Control of the Nano-Active-Stabilization-System</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<style type="text/css">
|
||||
@ -225,6 +225,16 @@
|
||||
/*]]>*///-->
|
||||
// @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">
|
||||
@ -232,11 +242,474 @@
|
||||
|
|
||||
<a accesskey="H" href="./index.html"> HOME </a>
|
||||
</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’s top platform expressed in the frame of the nano-hexapod’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’s mobile platform with respect to its fixed base.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To do so, we have to the use the leg’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’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’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’s base.
|
||||
These forces are then converted to forces applied in each of the nano-hexapod’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’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. – <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’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 id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
1900
docs/control_active_damping.html
Normal file
1900
docs/control_active_damping.html
Normal file
File diff suppressed because it is too large
Load Diff
704
docs/control_cascade.html
Normal file
704
docs/control_cascade.html
Normal 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’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>
|
769
docs/control_decentralized.html
Normal file
769
docs/control_decentralized.html
Normal 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’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’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’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
562
docs/control_hac_lac.html
Normal 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’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>
|
265
docs/control_voice_coil.html
Normal file
265
docs/control_voice_coil.html
Normal 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>
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-03-06 ven. 15:09 -->
|
||||
<!-- 2020-03-17 mar. 17:28 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Matlab Functions used for the NASS Project</title>
|
||||
@ -251,7 +251,7 @@
|
||||
</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>
|
||||
|
||||
<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 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>
|
||||
<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>
|
||||
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>
|
||||
|
||||
<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 id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-03-06 ven. 15:09 -->
|
||||
<!-- 2020-03-17 mar. 17:30 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<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="#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="#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>
|
||||
</ul>
|
||||
</div>
|
||||
@ -365,8 +365,8 @@ Active damping techniques are applied to the Uniaxial Simscape model.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9fe426f" 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>
|
||||
<div id="outline-container-org14a10e8" class="outline-2">
|
||||
<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">
|
||||
<p>
|
||||
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 id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -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"?>
|
||||
<!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-13 ven. 17:39 -->
|
||||
<!-- 2020-03-17 mar. 17:28 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Motion and Force Requirements for the Nano-Hexapod</title>
|
||||
@ -250,7 +249,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org70e526c" class="outline-2">
|
||||
<h2 id="org70e526c"><span class="section-number-2">1</span> Soft Hexapod</h2>
|
||||
<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 id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
BIN
mat/cascade_hac_lac.mat
Normal file
BIN
mat/cascade_hac_lac.mat
Normal file
Binary file not shown.
BIN
mat/conf_log.mat
BIN
mat/conf_log.mat
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mat/stages.mat
BIN
mat/stages.mat
Binary file not shown.
BIN
mat/tomo_exp_decentalized.mat
Normal file
BIN
mat/tomo_exp_decentalized.mat
Normal file
Binary file not shown.
Binary file not shown.
44
org/control_voice_coil.org
Normal file
44
org/control_voice_coil.org
Normal 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:
|
@ -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 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.
|
||||
|
||||
* Useful Matlab Functions ([[./functions.org][link]])
|
||||
|
@ -1,6 +1,5 @@
|
||||
#+TITLE: Motion and Force Requirements for the Nano-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.
|
||||
|
||||
|
@ -1458,8 +1458,7 @@ The =sample= structure is saved.
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
arguments
|
||||
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf'})} = 'open-loop'
|
||||
args.K (6,6) = ss(zeros(6, 6))
|
||||
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac'})} = 'open-loop'
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@ -1486,17 +1485,15 @@ First, we initialize the =controller= structure.
|
||||
controller.type = 3;
|
||||
case 'hac-dvf'
|
||||
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_src
|
||||
|
||||
** Control Law
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
#+begin_src matlab
|
||||
controller.K = args.K;
|
||||
#+end_src
|
||||
|
||||
** Save the Structure
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
|
Loading…
Reference in New Issue
Block a user