Lot of works on simscape, IFF and DVF

This commit is contained in:
Thomas Dehaeze 2020-06-10 15:32:59 +02:00
parent ee0363ee59
commit b652aebe59
18 changed files with 2480 additions and 235 deletions

1
matlab/figs-tikz Symbolic link
View File

@ -0,0 +1 @@
../tikz/figs

View File

@ -1,229 +1,27 @@
<?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-16 lun. 10:52 -->
<!-- 2020-06-10 mer. 10:17 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Matlab Computation</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>
<meta name="author" content="Thomas Dehaeze" />
<link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
<script src="../js/jquery.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/jquery.stickytableheaders.min.js"></script>
<script src="../js/readtheorg.js"></script>
<script 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: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
@ -232,11 +30,599 @@
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Matlab Computation</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org2941be5">1. System Description and Analysis</a>
<ul>
<li><a href="#org4222b45">1.1. System description</a></li>
<li><a href="#org80f8141">1.2. Equations</a></li>
<li><a href="#orgbb90994">1.3. Numerical Values</a></li>
<li><a href="#org3d04be0">1.4. Campbell Diagram</a></li>
<li><a href="#org8144360">1.5. Simscape Model</a></li>
<li><a href="#orga371e09">1.6. Comparison with the model</a></li>
</ul>
</li>
<li><a href="#org912df6c">2. Integral Force Feedback</a>
<ul>
<li><a href="#orge201c80">2.1. Numerical Values</a></li>
<li><a href="#orgbc26950">2.2. Equations</a></li>
<li><a href="#org92d4b18">2.3. Poles and Zeros</a></li>
<li><a href="#orgbb768e3">2.4. Simscape Model</a></li>
<li><a href="#orgdf8d677">2.5. IFF Plant</a></li>
<li><a href="#org3f264f4">2.6. Loop Gain</a></li>
<li><a href="#org7c25fbe">2.7. Root Locus</a></li>
<li><a href="#org82271cf">2.8. Modified IFF</a>
<ul>
<li><a href="#org60bb927">2.8.1. Control Law</a></li>
<li><a href="#org6850379">2.8.2. Loop Gain</a></li>
<li><a href="#org7314eea">2.8.3. Root Locus</a></li>
<li><a href="#orgb4641d2">2.8.4. Optimal Gain</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orgbdc5c77">3. Direct Velocity Feedback</a>
<ul>
<li><a href="#org3f7448e">3.1. Equations</a></li>
<li><a href="#org84263dc">3.2. Numerical Values</a></li>
<li><a href="#orgbdad8de">3.3. Simscape Model</a></li>
<li><a href="#orge253615">3.4. DVF Plant</a></li>
<li><a href="#orgd61ece4">3.5. Loop Gain</a></li>
<li><a href="#orgce2b090">3.6. Root Locus</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
Notations:
</p>
<ul class="org-ul">
<li>\(k\): Actuator&rsquo;s Stiffness [N/m]</li>
<li>\(c\): Actuator&rsquo;s Damping [N/(m/s)]</li>
<li>\(m\): Payload&rsquo;s mass [kg]</li>
<li>\(\omega_0 = \sqrt{\frac{k}{m}}\): Resonance of the (non-rotating) mass-spring system [rad/s]</li>
<li>\(\Omega = \dot{\theta}\): rotation speed [rad/s]</li>
</ul>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">Mathematical Notation</th>
<th scope="col" class="org-left">Matlab</th>
<th scope="col" class="org-left">Unit</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Actuator Stiffness</td>
<td class="org-left">\(k\)</td>
<td class="org-left"><code>k</code></td>
<td class="org-left">N/m</td>
</tr>
<tr>
<td class="org-left">Actuator Damping</td>
<td class="org-left">\(c\)</td>
<td class="org-left"><code>c</code></td>
<td class="org-left">N/(m/s)</td>
</tr>
</tbody>
</table>
<div id="outline-container-org2941be5" class="outline-2">
<h2 id="org2941be5"><span class="section-number-2">1</span> System Description and Analysis</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org72741bf"></a>
</p>
</div>
<div id="outline-container-org4222b45" class="outline-3">
<h3 id="org4222b45"><span class="section-number-3">1.1</span> System description</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure <a href="#org3ee83a5">1</a>).
</p>
<p>
<a href="figs/rotating_xy_platform.pdf">figs/rotating_xy_platform.pdf</a>
</p>
<p>
The control inputs are the forces applied by the actuators of the translation stage (\(F_u\) and \(F_v\)).
As the translation stage is rotating around the Z axis due to the spindle, the forces are applied along \(u\) and \(v\).
</p>
<p>
The measurement is either the \(x-y\) displacement of the object located on top of the translation stage or the \(u-v\) displacement of the sample with respect to a fixed reference frame.
</p>
</div>
</div>
<div id="outline-container-org80f8141" class="outline-3">
<h3 id="org80f8141"><span class="section-number-3">1.2</span> Equations</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Based on the Figure <a href="#org3ee83a5">1</a>.
</p>
\begin{equation}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} =
\frac{\frac{1}{k}}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} & 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
-2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
</div>
<div id="outline-container-orgbb90994" class="outline-3">
<h3 id="orgbb90994"><span class="section-number-3">1.3</span> Numerical Values</h3>
<div class="outline-text-3" id="text-1-3">
<div class="org-src-container">
<pre class="src src-matlab">k = 2;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3d04be0" class="outline-3">
<h3 id="org3d04be0"><span class="section-number-3">1.4</span> Campbell Diagram</h3>
<div class="outline-text-3" id="text-1-4">
<p>
Compute the poles
</p>
<div class="org-src-container">
<pre class="src src-matlab">wrs = linspace(0, 2, 51); % [rad/s]
polesvc = zeros(4, length(wrs));
for i = 1:length(wrs)
wr = wrs(i);
polei = pole(1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wrs(i)^2)/(w0^2))^2 + (2*wrs(i)*s/(w0^2))^2));
[~, i_sort] = sort(imag(polei));
polesvc(:, i) = polei(i_sort);
end
</pre>
</div>
</div>
</div>
<div id="outline-container-org8144360" class="outline-3">
<h3 id="org8144360"><span class="section-number-3">1.5</span> Simscape Model</h3>
<div class="outline-text-3" id="text-1-5">
<div class="org-src-container">
<pre class="src src-matlab">open('rotating_frame.slx');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">k = 2;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
wr = 0.1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 2, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G = linearize(mdl, io, 0);
%% Input/Output definition
G.InputName = {'Fu', 'Fv'};
G.OutputName = {'du', 'dv'};
</pre>
</div>
</div>
</div>
<div id="outline-container-orga371e09" class="outline-3">
<h3 id="orga371e09"><span class="section-number-3">1.6</span> Comparison with the model</h3>
<div class="outline-text-3" id="text-1-6">
<div class="org-src-container">
<pre class="src src-matlab">Ga = (1/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(G, 'k-', Ga, 'r--')
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org912df6c" class="outline-2">
<h2 id="org912df6c"><span class="section-number-2">2</span> Integral Force Feedback</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-orge201c80" class="outline-3">
<h3 id="orge201c80"><span class="section-number-3">2.1</span> Numerical Values</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">k = 1;
m = 1;
xi = 0.01;
c = 2*xi*sqrt(k*m);
w0 = sqrt(k/m);
wr = 0.1*w0;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbc26950" class="outline-3">
<h3 id="orgbc26950"><span class="section-number-3">2.2</span> Equations</h3>
<div class="outline-text-3" id="text-2-2">
<p>
The sensed forces are equal to:
</p>
\begin{equation}
\begin{bmatrix} F_{um} \\ F_{vm} \end{bmatrix} =
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix} - (c s + k)
\begin{bmatrix} d_u \\ d_v \end{bmatrix}
\end{equation}
<div class="important">
\begin{equation}
\begin{bmatrix} F_{um} \\ F_{vm} \end{bmatrix} =
\frac{1}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
(\frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2}) (\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2}) + (2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0})^2 & - (2 \xi \frac{s}{\omega_0} + 1) 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
(2 \xi \frac{s}{\omega_0} + 1) 2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & (\frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2}) (\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2}) + (2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0})^2 \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
<div class="org-src-container">
<pre class="src src-matlab">Giffa = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2/w0^2 - wr^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)) + (2*wr*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*wr*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*wr*s/(w0^2), (s^2/w0^2 - wr^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))+ (2*wr*s/(w0^2))^2];
</pre>
</div>
</div>
</div>
<div id="outline-container-org92d4b18" class="outline-3">
<h3 id="org92d4b18"><span class="section-number-3">2.3</span> Poles and Zeros</h3>
<div class="outline-text-3" id="text-2-3">
<div class="org-src-container">
<pre class="src src-matlab">syms wr w0 xi positive
assumealso(w0 &gt; wr)
syms x
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">z = (x^2/w0^2 - wr^2/w0^2)*((x^2)/(w0^2) + 1 - (wr^2)/(w0^2)) + (2*wr*x/(w0^2))^2 == 0
p = ((x^2)/(w0^2) + 1 - (wr^2)/(w0^2))^2 + (2*wr*x/(w0^2))^2 == 0
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">solve(p, x)
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">solve(z, x)
</pre>
</div>
<p>
The zeros are the roots of:
</p>
\begin{equation}
\left( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} \right) \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2 = 0
\end{equation}
<p>
Poles (without damping)
</p>
\begin{equation}
\left(\begin{array}{c} -w_{0}\,1{}\mathrm{i}-\mathrm{wr}\,1{}\mathrm{i}\\ -w_{0}\,1{}\mathrm{i}+\mathrm{wr}\,1{}\mathrm{i}\\ w_{0}\,1{}\mathrm{i}-\mathrm{wr}\,1{}\mathrm{i}\\ w_{0}\,1{}\mathrm{i}+\mathrm{wr}\,1{}\mathrm{i} \end{array}\right)
\end{equation}
<p>
Zeros (without damping)
</p>
\begin{equation}
\left(\begin{array}{c} -\sqrt{-\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ -\sqrt{\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ \sqrt{-\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ \sqrt{\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2} \end{array}\right)
\end{equation}
</div>
</div>
<div id="outline-container-orgbb768e3" class="outline-3">
<h3 id="orgbb768e3"><span class="section-number-3">2.4</span> Simscape Model</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 5, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 6, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Giff = linearize(mdl, io, 0);
%% Input/Output definition
Giff.InputName = {'Fu', 'Fv'};
Giff.OutputName = {'Fmu', 'Fmv'};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(Giff, Giffa)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdf8d677" class="outline-3">
<h3 id="orgdf8d677"><span class="section-number-3">2.5</span> IFF Plant</h3>
</div>
<div id="outline-container-org3f264f4" class="outline-3">
<h3 id="org3f264f4"><span class="section-number-3">2.6</span> Loop Gain</h3>
<div class="outline-text-3" id="text-2-6">
<p>
Let&rsquo;s take \(\Omega = \frac{\omega_0}{10}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">ws = 0.1*w0;
G_iff = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))^2 + (2*ws*s/(w0^2))^2) * ...
[(s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2)) + (2*ws*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*ws*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*ws*s/(w0^2), (s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))+ (2*ws*s/(w0^2))^2];
</pre>
</div>
</div>
</div>
<div id="outline-container-org7c25fbe" class="outline-3">
<h3 id="org7c25fbe"><span class="section-number-3">2.7</span> Root Locus</h3>
</div>
<div id="outline-container-org82271cf" class="outline-3">
<h3 id="org82271cf"><span class="section-number-3">2.8</span> Modified IFF</h3>
<div class="outline-text-3" id="text-2-8">
</div>
<div id="outline-container-org60bb927" class="outline-4">
<h4 id="org60bb927"><span class="section-number-4">2.8.1</span> Control Law</h4>
<div class="outline-text-4" id="text-2-8-1">
<p>
Let&rsquo;s take the integral feedback controller as a low pass filter (pseudo integrator):
</p>
\begin{equation}
K_{\text{IFF}} = \begin{bmatrix}
g\frac{\omega_i}{\omega_i + s} & 0 \\
0 & g\frac{\omega_i}{\omega_i + s}
\end{bmatrix}
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">xi = 0.005;
w0 = 1;
ws = 0.1*w0;
G_iff = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))^2 + (2*ws*s/(w0^2))^2) * ...
[(s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2)) + (2*ws*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*ws*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*ws*s/(w0^2), (s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))+ (2*ws*s/(w0^2))^2];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">g = 100;
wi = ws;
K_iff = (g/(1+s/wi))*eye(2);
</pre>
</div>
</div>
</div>
<div id="outline-container-org6850379" class="outline-4">
<h4 id="org6850379"><span class="section-number-4">2.8.2</span> Loop Gain</h4>
</div>
<div id="outline-container-org7314eea" class="outline-4">
<h4 id="org7314eea"><span class="section-number-4">2.8.3</span> Root Locus</h4>
</div>
<div id="outline-container-orgb4641d2" class="outline-4">
<h4 id="orgb4641d2"><span class="section-number-4">2.8.4</span> Optimal Gain</h4>
<div class="outline-text-4" id="text-2-8-4">
<p>
The DC gain for Giff is (for \(\Omega < \omega_0\)):
</p>
\begin{equation}
G_{\text{IFF}}(\omega = 0) = \frac{1}{1 - \frac{{\omega_0}^2}{\Omega^2}} \begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\end{equation}
<p>
The maximum gain where is system is still stable is
</p>
\begin{equation}
g_\text{max} = \frac{{\omega_0}^2}{\Omega^2} - 1
\end{equation}
<p>
Let&rsquo;s find the gain that maximize the simultaneous damping of the two modes.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K_opt = (opt_gain/(1+s/wi))*eye(2);
G_cl = feedback(G_iff, K_opt);
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-orgbdc5c77" class="outline-2">
<h2 id="orgbdc5c77"><span class="section-number-2">3</span> Direct Velocity Feedback</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org3f7448e" class="outline-3">
<h3 id="org3f7448e"><span class="section-number-3">3.1</span> Equations</h3>
<div class="outline-text-3" id="text-3-1">
<p>
The sensed relative velocity are equal to:
</p>
<div class="important">
\begin{equation}
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
\frac{s \frac{1}{k}}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} & 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
-2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
</div>
</div>
<div id="outline-container-org84263dc" class="outline-3">
<h3 id="org84263dc"><span class="section-number-3">3.2</span> Numerical Values</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">k = 1;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Ga = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbdad8de" class="outline-3">
<h3 id="orgbdad8de"><span class="section-number-3">3.3</span> Simscape Model</h3>
<div class="outline-text-3" id="text-3-3">
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 3, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 4, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G = linearize(mdl, io, 0);
%% Input/Output definition
G.InputName = {'Fu', 'Fv'};
G.OutputName = {'Vu', 'Vv'};
</pre>
</div>
</div>
</div>
<div id="outline-container-orge253615" class="outline-3">
<h3 id="orge253615"><span class="section-number-3">3.4</span> DVF Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(G, Ga)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd61ece4" class="outline-3">
<h3 id="orgd61ece4"><span class="section-number-3">3.5</span> Loop Gain</h3>
<div class="outline-text-3" id="text-3-5">
<p>
Let&rsquo;s take \(\Omega = \frac{\omega_0}{10}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">ws = 0.1*w0;
G_dvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
</div>
</div>
<div id="outline-container-orgce2b090" class="outline-3">
<h3 id="orgce2b090"><span class="section-number-3">3.6</span> Root Locus</h3>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-16 lun. 10:52</p>
<p class="author">Author: Thomas Dehaeze</p>
<p class="date">Created: 2020-06-10 mer. 10:17</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
matlab/rotating_frame.slxc Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<MF0 version="1.1" packageUris="http://schema.mathworks.com/mf0/SlCache/19700101">
<slcache.FileAttributes type="slcache.FileAttributes" uuid="15bc2eb6-a155-4074-be73-5774ec44e8b6">
<checksum>VGJCKM9/+mTYcitIBBt14A==</checksum>
</slcache.FileAttributes>
</MF0>

Binary file not shown.

View File

@ -3,13 +3,13 @@
(lambda ()
(TeX-add-to-alist 'LaTeX-provided-package-options
'(("inputenc" "utf8") ("fontenc" "T1") ("ulem" "normalem") ("tcolorbox" "most") ("babel" "USenglish" "english")))
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "href")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperref")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperimage")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperbaseurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "nolinkurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "url")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "path")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "url")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "nolinkurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperbaseurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperimage")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperref")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "href")
(add-to-list 'LaTeX-verbatim-macros-with-delims-local "path")
(TeX-run-style-hooks
"latex2e"
@ -42,13 +42,20 @@
"import"
"babel")
(LaTeX-add-labels
"sec:org8c48899"
"sec:org335669b"
"sec:introduction"
"sec:org60f23e3"
"sec:org8b756e7"
"sec:theory"
"sec:orgd677659"
"sec:orgbf4a596"
"fig:rotating_xy_platform"
"sec:orgaa8880a"
"eq:energy_inertial_frame"
"eq:lagrangian_inertial_frame"
"sec:org754b644"
"sec:org9cbf82a"
"sec:org8d24de3"
"sec:conclusion"
"sec:orgf333899")
"sec:orgb252937")
(LaTeX-add-bibliographies
"ref"))
:latex)

View File

@ -58,11 +58,145 @@
* Theory
<<sec:theory>>
** Rotating Positioning Stage
# Description of the system
- $k$: Actuator's Stiffness [N/m]
- $m$: Payload's mass [kg]
- $\omega_0 = \sqrt{\frac{k}{m}}$: Resonance of the (non-rotating) mass-spring system [rad/s]
- $\omega_r = \dot{\theta}$: rotation speed [rad/s]
#+name: fig:rotating_xy_platform
#+caption: Figure caption
#+attr_latex: :scale 1
[[file:figs/rotating_xy_platform.pdf]]
** Equation of Motion
Let's express the kinetic energy $T$ and the potential energy $V$ of the mass $m$ (neglecting the rotational energy):
#+name: eq:energy_inertial_frame
\begin{subequations}
\begin{align}
T & = \frac{1}{2} m \left( \dot{x}^2 + \dot{y}^2 \right) \\
R & = \frac{1}{2} c \left( \dot{x}^2 + \dot{y}^2 \right) \\
V & = \frac{1}{2} k \left( x^2 + y^2 \right)
\end{align}
\end{subequations}
The Lagrangian is the kinetic energy minus the potential energy:
#+name: eq:lagrangian_inertial_frame
\begin{equation}
L = T-V = \frac{1}{2} m \left( \dot{x}^2 + \dot{y}^2 \right) - \frac{1}{2} k \left( x^2 + y^2 \right)
\end{equation}
The external forces applied to the mass are:
\begin{subequations}
\begin{align}
F_{\text{ext}, x} &= F_u \cos{\theta} - F_v \sin{\theta}\\
F_{\text{ext}, y} &= F_u \sin{\theta} + F_v \cos{\theta}
\end{align}
\end{subequations}
From the Lagrange's equations of the second kind eqref:eq:lagrange_second_kind, the equation of motion eqref:eq:eom_mixed is obtained.
#+name: eq:lagrange_second_kind
\begin{equation}
\frac{d}{dt} \left( \frac{\partial L}{\partial \dot{q}_j} \right) = \frac{\partial L}{\partial q_j}
\end{equation}
#+name: eq:eom_mixed
\begin{subequations}
\begin{align}
m\ddot{x} + kx = F_u \cos{\theta} - F_v \sin{\theta}\\
m\ddot{y} + ky = F_u \sin{\theta} + F_v \cos{\theta}
\end{align}
\end{subequations}
Performing the change coordinates from $(x, y)$ to $(d_x, d_y, \theta)$:
\begin{subequations}
\begin{align}
x & = d_u \cos{\theta} - d_v \sin{\theta}\\
y & = d_u \sin{\theta} + d_v \cos{\theta}
\end{align}
\end{subequations}
Gives
#+name: eq:oem_coupled
\begin{subequations}
\begin{align}
m \ddot{d_u} + (k - m\dot{\theta}^2) d_u &= F_u + 2 m\dot{d_v}\dot{\theta} + m d_v\ddot{\theta} \label{eq:du_coupled} \\
m \ddot{d_v} + (k \underbrace{-\ m\dot{\theta}^2}_{\text{Centrif.}}) d_v &= F_v \underbrace{-\ 2 m\dot{d_u}\dot{\theta}}_{\text{Coriolis}} \underbrace{-\ m d_u\ddot{\theta}}_{\text{Euler}} \label{eq:dv_coupled}
\end{align}
\end{subequations}
We obtain two differential equations that are coupled through:
- *Euler forces*: $m d_v \ddot{\theta}$
- *Coriolis forces*: $2 m \dot{d_v} \dot{\theta}$
Without the coupling terms, each equation is the equation of a one degree of freedom mass-spring system with mass $m$ and stiffness $k- m\dot{\theta}^2$.
Thus, the term $- m\dot{\theta}^2$ acts like a negative stiffness (due to *centrifugal forces*).
** Constant Rotating Speed
To simplify, let's consider a constant rotating speed $\dot{\theta} = \omega_r$ and thus $\ddot{\theta} = 0$.
#+NAME: eq:coupledplant
\begin{equation}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} =
\frac{1}{(m s^2 + (k - m{\omega_0}^2))^2 + (2 m {\omega_0} s)^2}
\begin{bmatrix}
ms^2 + (k-m{\omega_0}^2) & 2 m \omega_0 s \\
-2 m \omega_0 s & ms^2 + (k-m{\omega_0}^2) \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
#+NAME: eq:coupled_plant
\begin{equation}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} =
\frac{\frac{1}{k}}{\left( \frac{s^2}{{\omega_0}^2} + (1 - \frac{{\omega_r}^2}{{\omega_0}^2}) \right)^2 + \left( 2 \frac{{\omega_r} s}{{\omega_0}^2} \right)^2}
\begin{bmatrix}
\frac{s^2}{{\omega_0}^2} + 1 - \frac{{\omega_r}^2}{{\omega_0}^2} & 2 \frac{\omega_r s}{{\omega_0}^2} \\
-2 \frac{\omega_r s}{{\omega_0}^2} & \frac{s^2}{{\omega_0}^2} + 1 - \frac{{\omega_r}^2}{{\omega_0}^2} \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
When the rotation speed is null, the coupling terms are equal to zero and the diagonal terms corresponds to one degree of freedom mass spring system.
#+NAME: eq:coupled_plant_no_rot
\begin{equation}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} =
\frac{\frac{1}{k}}{\frac{s^2}{{\omega_0}^2} + 1}
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
# Campbell Diagram
When the rotation speed in not null, the resonance frequency is duplicated into two pairs of complex conjugate poles.
As the rotation speed increases, one of the two resonant frequency goes to lower frequencies as the other one goes to higher frequencies (Figure [[fig:campbell_diagram]]).
#+name: fig:campbell_diagram
#+caption: Campbell Diagram
[[file:figs/campbell_diagram.pdf]]
# Bode Plots for different ratio wr/w0
The magnitude of the coupling terms are increasing with the rotation speed.
** Integral Force Feedback
** Direct Velocity Feedback
* Conclusion
<<sec:conclusion>>

View File

@ -1,4 +1,4 @@
% Created 2020-06-08 lun. 11:15
% Created 2020-06-08 lun. 11:40
% Intended LaTeX compiler: pdflatex
\documentclass{ISMA_USD2020}
\usepackage[utf8]{inputenc}
@ -49,27 +49,56 @@
}
\section{Introduction}
\label{sec:orgd787473}
\label{sec:org335669b}
\label{sec:introduction}
\section{Theory}
\label{sec:org808f338}
\label{sec:org8b756e7}
\label{sec:theory}
\subsection{Rotating Positioning Stage}
\label{sec:orgbf4a596}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/rotating_xy_platform.pdf}
\caption{\label{fig:figure_name}Figure caption}
\caption{\label{fig:rotating_xy_platform}Figure caption}
\end{figure}
\subsection{Equation of Motion}
\label{sec:orgaa8880a}
Let's express the kinetic energy \(T\) and the potential energy \(V\) of the mass \(m\):
\begin{align}
\label{eq:energy_inertial_frame}
T & = \frac{1}{2} m \left( \dot{x}^2 + \dot{y}^2 \right) \\
V & = \frac{1}{2} k \left( x^2 + y^2 \right)
\end{align}
The Lagrangian is the kinetic energy minus the potential energy.
\begin{equation}
\label{eq:lagrangian_inertial_frame}
L = T-V = \frac{1}{2} m \left( \dot{x}^2 + \dot{y}^2 \right) - \frac{1}{2} k \left( x^2 + y^2 \right)
\end{equation}
\subsection{Integral Force Feedback}
\label{sec:org754b644}
\subsection{Direct Velocity Feedback}
\label{sec:org9cbf82a}
\section{Conclusion}
\label{sec:orgab2ddd2}
\label{sec:org8d24de3}
\label{sec:conclusion}
\section{Acknowledgment}
\label{sec:orga63f041}
\label{sec:orgb252937}
\bibliography{ref}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -58,11 +58,11 @@ Configuration file is accessible [[file:config.org][here]].
% Force Sensors
\draw[fill=white] ($(au) + (-0.2, -0.5)$) rectangle ($(au) + (0, 0.5)$);
\draw[] ($(au) + (-0.2, -0.5)$)coordinate(actu) -- ($(au) + (0, 0.5)$);
\draw[] ($(au) + (-0.2, 0.5)$)coordinate(ku) -- ($(au) + (0, -0.5)$);
\draw[] ($(au) + (-0.2, 0.5)$)coordinate(ku) node[above=0.1, rotate=\thetau]{$f_{u}$} -- ($(au) + (0, -0.5)$);
\draw[fill=white] ($(av) + (-0.5, -0.2)$) rectangle ($(av) + (0.5, 0)$);
\draw[] ($(av) + ( 0.5, -0.2)$)coordinate(actv) -- ($(av) + (-0.5, 0)$);
\draw[] ($(av) + (-0.5, -0.2)$)coordinate(kv) -- ($(av) + ( 0.5, 0)$);
\draw[] ($(av) + (-0.5, -0.2)$)coordinate(kv) node[left=0.1, rotate=\thetau]{$f_{v}$} -- ($(av) + ( 0.5, 0)$);
% Spring and Actuator for U
\draw[actuator={0.6}{0.2}] (actu) -- node[above=0.1, rotate=\thetau]{$F_u$} (actu-|-2.6,0);
@ -70,6 +70,10 @@ Configuration file is accessible [[file:config.org][here]].
\draw[actuator={0.6}{0.2}] (actv) -- node[left, rotate=\thetau]{$F_v$} (actv|-0,-2.6);
\draw[spring=0.2] (kv) -- node[left, rotate=\thetau]{$k_v$} (kv|-0,-2.6);
% Displacement measurement
\draw[<->, dashed] (-2.6, -0.8) --node[midway, below, rotate=\thetau]{$d_u$} (-1 , -0.8);
\draw[<->, dashed] ( 0.8, -2.6) --node[midway, right, rotate=\thetau]{$d_v$} ( 0.8, -1);
\end{scope}
% Inertial Frame
@ -85,11 +89,144 @@ Configuration file is accessible [[file:config.org][here]].
\node[] at (0,0) {$\bullet$};
\node[left] at (0,0) {$(x, y)$};
% \draw[->] (-4, -4) -- ++(\thetau:2) node[above]{$\vec{i}_u$};
% \draw[->] (-4, -4) -- ++(\thetau+90:2) node[left]{$\vec{i}_u$};
% \draw[] (-2.5, -4) arc (0:\thetau:1.5) node[midway, right]{$\theta$};
\draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$};
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/rotating_xy_platform.png]]
* X-Y Rotating Positioning Platform with Springs in parallel
#+begin_src latex :file rotating_xy_platform_springs.pdf
\begin{tikzpicture}
% Angle
\def\thetau{25}
% Rotational Stage
\draw[fill=black!40!white] (0, 0) circle (4);
% Label
\node[anchor=north west, rotate=\thetau] at (-2.8, 2.8) {\small Rotating Stage};
% Rotating Scope
\begin{scope}[rotate=\thetau]
% Rotating Frame
\draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6);
% Label
\node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small X-Y Stage};
% Mass
\draw[fill=white] (-1, -1) rectangle (1, 1);
% Label
\node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload};
% Attached Points
\draw[] (-1, 0) -- ++(-0.2, 0) coordinate(au);
\draw[] (0, -1) -- ++(0, -0.2) coordinate(av);
% Force Sensors
\draw[fill=white] ($(au) + (-0.2, -0.5)$) rectangle ($(au) + (0, 0.5)$);
\draw[] ($(au) + (-0.2, -0.5)$)coordinate(actu) -- ($(au) + (0, 0.5)$);
\draw[] ($(au) + (-0.2, 0.5)$)coordinate(ku) -- ($(au) + (0, -0.5)$);
\draw[fill=white] ($(av) + (-0.5, -0.2)$) rectangle ($(av) + (0.5, 0)$);
\draw[] ($(av) + ( 0.5, -0.2)$)coordinate(actv) -- ($(av) + (-0.5, 0)$);
\draw[] ($(av) + (-0.5, -0.2)$)coordinate(kv) -- ($(av) + ( 0.5, 0)$);
% Spring and Actuator for U
\draw[actuator={0.6}{0.2}] (actu) -- (actu-|-2.6,0);
\draw[spring=0.2] (ku) -- (ku-|-2.6,0);
\draw[spring=0.2] (-1, 0.8) -- (-1, 0.8-|-2.6,0);
\draw[actuator={0.6}{0.2}] (actv) -- (actv|-0,-2.6);
\draw[spring=0.2] (kv) -- (kv|-0,-2.6);
\draw[spring=0.2] (-0.8, -1) -- (-0.8, -1|-0,-2.6);
% Displacement measurement
\draw[<->, dashed] (-2.6, -0.8) --node[midway, below, rotate=\thetau]{$d_u$} (-1 , -0.8);
\draw[<->, dashed] ( 0.8, -2.6) --node[midway, right, rotate=\thetau]{$d_v$} ( 0.8, -1);
\end{scope}
% Inertial Frame
\draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$};
\draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$};
\draw[fill, color=black] (-4, -4) circle (0.06);
\node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){};
\draw[->] (0, 0) -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$};
\draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$};
\draw[dashed] (0, 0) -- ++(2, 0);
\draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$};
\node[] at (0,0) {$\bullet$};
\node[left] at (0,0) {$(x, y)$};
\draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$};
\end{tikzpicture}
#+end_src
#+begin_src latex :file rotating_xy_platform_springs.pdf
\begin{tikzpicture}
% Angle
\def\thetau{25}
% Rotational Stage
\draw[fill=black!40!white] (0, 0) circle (4);
% Label
\node[anchor=north west, rotate=\thetau] at (-2.8, 2.8) {\small Rotating Stage};
% Rotating Scope
\begin{scope}[rotate=\thetau]
% Rotating Frame
\draw[fill=black!20!white] (-2.6, -2.6) rectangle (2.6, 2.6);
% Label
\node[anchor=north west, rotate=\thetau] at (-2.6, 2.6) {\small X-Y Stage};
% Mass
\draw[fill=white] (-1, -1) rectangle (1, 1);
% Label
\node[anchor=south west, rotate=\thetau] at (-1, -1) {\small Payload};
% Attached Points
\draw[] (-1, 0) -- ++(-0.2, 0) coordinate(au);
\draw[] (0, -1) -- ++(0, -0.2) coordinate(av);
\draw[] ($(au) + (0, -0.8)$) -- ($(au) + (0, 0.8)$)coordinate(kpu);
% Force Sensors
\draw[fill=white] ($(au) + (-0.2, -0.8)$) rectangle (au);
\draw[] ($(au) + (-0.2, -0.8)$)coordinate(actu) -- (au);
\draw[] ($(au) + (-0.2, 0)$)coordinate(ku) -- ($(au) + (0, -0.8)$);
\draw[fill=white] ($(av) + (-0.5, -0.2)$) rectangle ($(av) + (0.5, 0)$);
\draw[] ($(av) + ( 0.5, -0.2)$)coordinate(actv) -- ($(av) + (-0.5, 0)$);
\draw[] ($(av) + (-0.5, -0.2)$)coordinate(kv) -- ($(av) + ( 0.5, 0)$);
% Spring and Actuator for U
\draw[actuator={0.6}{0.2}] (actu) -- (actu-|-2.6,0);
\draw[spring=0.2] (ku) -- (ku-|-2.6,0);
\draw[spring=0.2] (kpu) -- (kpu-|-2.6,0);
\draw[actuator={0.6}{0.2}] (actv) -- (actv|-0,-2.6);
\draw[spring=0.2] (kv) -- (kv|-0,-2.6);
\draw[spring=0.2] (-0.8, -1) -- (-0.8, -1|-0,-2.6);
\end{scope}
% Inertial Frame
\draw[->] (-4, -4) -- ++(2, 0) node[below]{$\vec{i}_x$};
\draw[->] (-4, -4) -- ++(0, 2) node[left]{$\vec{i}_y$};
\draw[fill, color=black] (-4, -4) circle (0.06);
\node[draw, circle, inner sep=0pt, minimum size=0.3cm, label=left:$\vec{i}_z$] at (-4, -4){};
\draw[->] (0, 0) -- ++(\thetau:2) node[above, rotate=\thetau]{$\vec{i}_u$};
\draw[->] (0, 0) -- ++(\thetau+90:2) node[left, rotate=\thetau]{$\vec{i}_v$};
\draw[dashed] (0, 0) -- ++(2, 0);
\draw[] (1.5, 0) arc (0:\thetau:1.5) node[midway, right]{$\theta$};
\node[] at (0,0) {$\bullet$};
\node[left] at (0,0) {$(x, y)$};
\draw[->] (3.5, 0) arc (0:40:3.5) node[midway, left]{$\Omega$};
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/rotating_xy_platform_springs.png]]