Update the "positioning_error" computation file
Removed unused analysis
This commit is contained in:
parent
6af5593c16
commit
7b5f932ece
Binary file not shown.
@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- 2019-12-12 jeu. 13:17 -->
|
<!-- 2019-12-12 jeu. 13:46 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>Computation of the Positioning Error with respect to the nano-hexapod</title>
|
<title>Computation of the Positioning Error with respect to the nano-hexapod</title>
|
||||||
@ -283,32 +283,31 @@ for the JavaScript code in this tag.
|
|||||||
<h2>Table of Contents</h2>
|
<h2>Table of Contents</h2>
|
||||||
<div id="text-table-of-contents">
|
<div id="text-table-of-contents">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org063baa6">1. Verify that the function to compute the reference pose is correct</a>
|
<li><a href="#org05554ac">1. Verify that the function to compute the reference pose is correct</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org0e8368a">1.1. Prepare the Simulation</a></li>
|
<li><a href="#org615b133">1.1. Prepare the Simulation</a></li>
|
||||||
<li><a href="#orgf8068b5">1.2. Verify that the pose of the sample is the same as the computed one</a></li>
|
<li><a href="#org218866c">1.2. Verify that the pose of the sample is the same as the computed one</a></li>
|
||||||
<li><a href="#org48dc703">1.3. Conclusion</a></li>
|
<li><a href="#org9fdab3a">1.3. Conclusion</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org5998e7b">2. Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working</a>
|
<li><a href="#org6581a39">2. Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgb013c86">2.1. Prepare the Simulation</a></li>
|
<li><a href="#org7b48080">2.1. Prepare the Simulation</a></li>
|
||||||
<li><a href="#orgcc5a377">2.2. Compute the wanted pose of the sample in the NASS Base from the metrology and the reference</a></li>
|
<li><a href="#orgab016c7">2.2. Compute the wanted pose of the sample in the NASS Base from the metrology and the reference</a></li>
|
||||||
<li><a href="#orgb86542e">2.3. Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end</a></li>
|
<li><a href="#org8defab7">2.3. Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end</a></li>
|
||||||
<li><a href="#org0336147">2.4. Conclusion</a></li>
|
<li><a href="#orgc0eac97">2.4. Conclusion</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org91e7b22">3. Verify that we are able to compensate the errors using the nano-hexapod</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The global measurement and control schematic is shown in figure <a href="#orgc057460">1</a>.
|
The global measurement and control schematic is shown in figure <a href="#org98c141e">1</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgc057460" class="figure">
|
<div id="org98c141e" class="figure">
|
||||||
<p><img src="figs/control-schematic-nass.png" alt="control-schematic-nass.png" />
|
<p><img src="figs/control-schematic-nass.png" alt="control-schematic-nass.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 1: </span>Global Control Schematic for the Station</p>
|
<p><span class="figure-number">Figure 1: </span>Global Control Schematic for the Station</p>
|
||||||
@ -330,28 +329,28 @@ Also, all the stages can be perfectly positioned.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In section <a href="#orgc8a514e">1</a>, we verify that the function developed to compute the wanted pose (translation and orientation) of the sample with respect to the granite can be determined from the wanted position of each stage (translation stage, tilt stage, spindle and micro-hexapod). This corresponds to the bloc "Compute Wanted Sample Position w.r.t. Granite" in figure <a href="#orgc057460">1</a>.
|
In section <a href="#org9f71d9e">1</a>, we verify that the function developed to compute the wanted pose (translation and orientation) of the sample with respect to the granite can be determined from the wanted position of each stage (translation stage, tilt stage, spindle and micro-hexapod). This corresponds to the bloc "Compute Wanted Sample Position w.r.t. Granite" in figure <a href="#org98c141e">1</a>.
|
||||||
To do so, we impose a perfect displacement and all the stage, we perfectly measure the position of the sample with respect to the granite, and we verify that this measured position corresponds to the computed wanted pose of the sample.
|
To do so, we impose a perfect displacement and all the stage, we perfectly measure the position of the sample with respect to the granite, and we verify that this measured position corresponds to the computed wanted pose of the sample.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Then, in section <a href="#org87c9e04">2</a>, we introduce some positioning error in the micro-station's stages.
|
Then, in section <a href="#orgff651b1">2</a>, we introduce some positioning error in the micro-station's stages.
|
||||||
The positioning error of the sample expressed with respect to the granite frame (the one measured) is expressed in a frame connected to the NASS top platform (corresponding to the green bloc "Compute Sample Position Error w.r.t. NASS" in figure <a href="#orgc057460">1</a>).
|
The positioning error of the sample expressed with respect to the granite frame (the one measured) is expressed in a frame connected to the NASS top platform (corresponding to the green bloc "Compute Sample Position Error w.r.t. NASS" in figure <a href="#org98c141e">1</a>).
|
||||||
Then, we move the NASS such that it compensate for the positioning error that are expressed in the frame of the NASS, and we verify that the positioning error of the sample is well compensated.
|
Then, we move the NASS such that it compensate for the positioning error that are expressed in the frame of the NASS, and we verify that the positioning error of the sample is well compensated.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id="outline-container-org063baa6" class="outline-2">
|
<div id="outline-container-org05554ac" class="outline-2">
|
||||||
<h2 id="org063baa6"><span class="section-number-2">1</span> Verify that the function to compute the reference pose is correct</h2>
|
<h2 id="org05554ac"><span class="section-number-2">1</span> Verify that the function to compute the reference pose is correct</h2>
|
||||||
<div class="outline-text-2" id="text-1">
|
<div class="outline-text-2" id="text-1">
|
||||||
<p>
|
<p>
|
||||||
<a id="orgc8a514e"></a>
|
<a id="org9f71d9e"></a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
The goal here is to perfectly move the station and verify that there is no mismatch between the metrology measurement and the computation of the reference pose.
|
The goal here is to perfectly move the station and verify that there is no mismatch between the metrology measurement and the computation of the reference pose.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org0e8368a" class="outline-3">
|
<div id="outline-container-org615b133" class="outline-3">
|
||||||
<h3 id="org0e8368a"><span class="section-number-3">1.1</span> Prepare the Simulation</h3>
|
<h3 id="org615b133"><span class="section-number-3">1.1</span> Prepare the Simulation</h3>
|
||||||
<div class="outline-text-3" id="text-1-1">
|
<div class="outline-text-3" id="text-1-1">
|
||||||
<p>
|
<p>
|
||||||
We load the configuration.
|
We load the configuration.
|
||||||
@ -437,8 +436,8 @@ And we run the simulation.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgf8068b5" class="outline-3">
|
<div id="outline-container-org218866c" class="outline-3">
|
||||||
<h3 id="orgf8068b5"><span class="section-number-3">1.2</span> Verify that the pose of the sample is the same as the computed one</h3>
|
<h3 id="org218866c"><span class="section-number-3">1.2</span> Verify that the pose of the sample is the same as the computed one</h3>
|
||||||
<div class="outline-text-3" id="text-1-2">
|
<div class="outline-text-3" id="text-1-2">
|
||||||
<p>
|
<p>
|
||||||
Let's denote:
|
Let's denote:
|
||||||
@ -514,8 +513,8 @@ ans =
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org48dc703" class="outline-3">
|
<div id="outline-container-org9fdab3a" class="outline-3">
|
||||||
<h3 id="org48dc703"><span class="section-number-3">1.3</span> Conclusion</h3>
|
<h3 id="org9fdab3a"><span class="section-number-3">1.3</span> Conclusion</h3>
|
||||||
<div class="outline-text-3" id="text-1-3">
|
<div class="outline-text-3" id="text-1-3">
|
||||||
<div class="important">
|
<div class="important">
|
||||||
<p>
|
<p>
|
||||||
@ -528,11 +527,11 @@ Both the measurement and the theory gives the same result.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org5998e7b" class="outline-2">
|
<div id="outline-container-org6581a39" class="outline-2">
|
||||||
<h2 id="org5998e7b"><span class="section-number-2">2</span> Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working</h2>
|
<h2 id="org6581a39"><span class="section-number-2">2</span> Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working</h2>
|
||||||
<div class="outline-text-2" id="text-2">
|
<div class="outline-text-2" id="text-2">
|
||||||
<p>
|
<p>
|
||||||
<a id="org87c9e04"></a>
|
<a id="orgff651b1"></a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
We now introduce some positioning error in the stage.
|
We now introduce some positioning error in the stage.
|
||||||
@ -543,8 +542,8 @@ This will induce a global positioning error of the sample with respect to the de
|
|||||||
We want to verify that we are able to measure this positioning error and convert it in the frame attached to the Nano-hexapod.
|
We want to verify that we are able to measure this positioning error and convert it in the frame attached to the Nano-hexapod.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orgb013c86" class="outline-3">
|
<div id="outline-container-org7b48080" class="outline-3">
|
||||||
<h3 id="orgb013c86"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
|
<h3 id="org7b48080"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
|
||||||
<div class="outline-text-3" id="text-2-1">
|
<div class="outline-text-3" id="text-2-1">
|
||||||
<p>
|
<p>
|
||||||
We load the configuration.
|
We load the configuration.
|
||||||
@ -611,7 +610,6 @@ Now we introduce some positioning error.
|
|||||||
Rye = <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">4</span>; <span class="org-comment">% [rad]</span>
|
Rye = <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">4</span>; <span class="org-comment">% [rad]</span>
|
||||||
Rze = <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">5</span>; <span class="org-comment">% [rad]</span>
|
Rze = <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">5</span>; <span class="org-comment">% [rad]</span>
|
||||||
Dhe = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span>,<span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
Dhe = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span>,<span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
% Dne = [<span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span> ; <span class="org-highlight-numbers-number">0</span> ; <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span> ; <span class="org-highlight-numbers-number">0</span> ; <span class="org-highlight-numbers-number">3e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span> ; <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span>]; % [m,rad]
|
|
||||||
Dhle = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">3e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-type">-</span><span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">]</span>; <span class="org-comment">% [m]</span>
|
Dhle = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">3e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-type">-</span><span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span> ; <span class="org-highlight-numbers-number">2e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">]</span>; <span class="org-comment">% [m]</span>
|
||||||
Dne = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span>,<span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
Dne = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span>,<span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
@ -627,8 +625,8 @@ And we run the simulation.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgcc5a377" class="outline-3">
|
<div id="outline-container-orgab016c7" class="outline-3">
|
||||||
<h3 id="orgcc5a377"><span class="section-number-3">2.2</span> Compute the wanted pose of the sample in the NASS Base from the metrology and the reference</h3>
|
<h3 id="orgab016c7"><span class="section-number-3">2.2</span> Compute the wanted pose of the sample in the NASS Base from the metrology and the reference</h3>
|
||||||
<div class="outline-text-3" id="text-2-2">
|
<div class="outline-text-3" id="text-2-2">
|
||||||
<p>
|
<p>
|
||||||
Now that we have introduced some positioning error, the computed wanted pose and the measured pose will not be the same.
|
Now that we have introduced some positioning error, the computed wanted pose and the measured pose will not be the same.
|
||||||
@ -763,8 +761,8 @@ Rz = <span class="org-rainbow-delimiters-depth-1">[</span>cos<span class="org-ra
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgb86542e" class="outline-3">
|
<div id="outline-container-org8defab7" class="outline-3">
|
||||||
<h3 id="orgb86542e"><span class="section-number-3">2.3</span> Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end</h3>
|
<h3 id="org8defab7"><span class="section-number-3">2.3</span> Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end</h3>
|
||||||
<div class="outline-text-3" id="text-2-3">
|
<div class="outline-text-3" id="text-2-3">
|
||||||
<p>
|
<p>
|
||||||
We now keep the wanted pose but we impose a displacement of the nano hexapod corresponding to the measured position error.
|
We now keep the wanted pose but we impose a displacement of the nano hexapod corresponding to the measured position error.
|
||||||
@ -858,8 +856,8 @@ Verify that the pose error is small.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org0336147" class="outline-3">
|
<div id="outline-container-orgc0eac97" class="outline-3">
|
||||||
<h3 id="org0336147"><span class="section-number-3">2.4</span> Conclusion</h3>
|
<h3 id="orgc0eac97"><span class="section-number-3">2.4</span> Conclusion</h3>
|
||||||
<div class="outline-text-3" id="text-2-4">
|
<div class="outline-text-3" id="text-2-4">
|
||||||
<div class="important">
|
<div class="important">
|
||||||
<p>
|
<p>
|
||||||
@ -870,14 +868,10 @@ Indeed, we are able to convert the position error in the frame of the NASS and t
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org91e7b22" class="outline-2">
|
|
||||||
<h2 id="org91e7b22"><span class="section-number-2">3</span> Verify that we are able to compensate the errors using the nano-hexapod</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="postamble" class="status">
|
<div id="postamble" class="status">
|
||||||
<p class="author">Author: Dehaeze Thomas</p>
|
<p class="author">Author: Dehaeze Thomas</p>
|
||||||
<p class="date">Created: 2019-12-12 jeu. 13:17</p>
|
<p class="date">Created: 2019-12-12 jeu. 13:46</p>
|
||||||
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -289,7 +289,6 @@ Now we introduce some positioning error.
|
|||||||
Rye = 2e-4; % [rad]
|
Rye = 2e-4; % [rad]
|
||||||
Rze = 1e-5; % [rad]
|
Rze = 1e-5; % [rad]
|
||||||
Dhe = zeros(6,1);
|
Dhe = zeros(6,1);
|
||||||
% Dne = [1e-3 ; 0 ; 2e-3 ; 0 ; 3e-3 ; 1e-3]; % [m,rad]
|
|
||||||
Dhle = [1e-6 ; 2e-6 ; 3e-6 ; -2e-6 ; 1e-6 ; 2e-6]; % [m]
|
Dhle = [1e-6 ; 2e-6 ; 3e-6 ; -2e-6 ; 1e-6 ; 2e-6]; % [m]
|
||||||
Dne = zeros(6,1);
|
Dne = zeros(6,1);
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -441,261 +440,3 @@ Verify that the pose error is small.
|
|||||||
#+begin_important
|
#+begin_important
|
||||||
Indeed, we are able to convert the position error in the frame of the NASS and then compensate these errors with the NASS.
|
Indeed, we are able to convert the position error in the frame of the NASS and then compensate these errors with the NASS.
|
||||||
#+end_important
|
#+end_important
|
||||||
|
|
||||||
* Verify that we are able to compensate the errors using the nano-hexapod
|
|
||||||
* Tests on the transformation from reference to wanted position :noexport:
|
|
||||||
** Introduction :ignore:
|
|
||||||
#+begin_quote
|
|
||||||
Rx = [1 0 0;
|
|
||||||
0 cos(t) -sin(t);
|
|
||||||
0 sin(t) cos(t)];
|
|
||||||
|
|
||||||
Ry = [ cos(t) 0 sin(t);
|
|
||||||
0 1 0;
|
|
||||||
-sin(t) 0 cos(t)];
|
|
||||||
|
|
||||||
Rz = [cos(t) -sin(t) 0;
|
|
||||||
sin(t) cos(t) 0;
|
|
||||||
0 0 1];
|
|
||||||
#+end_quote
|
|
||||||
|
|
||||||
Let's define the following frames:
|
|
||||||
- $\{W\}$ the frame that is *fixed to the granite* and its origin at the theoretical meeting point between the X-ray and the spindle axis.
|
|
||||||
- $\{S\}$ the frame *attached to the sample* (in reality attached to the top platform of the nano-hexapod) with its origin at 175mm above the top platform of the nano-hexapod.
|
|
||||||
Its origin is $O_S$.
|
|
||||||
- $\{T\}$ the theoretical wanted frame that correspond to the wanted pose of the frame $\{S\}$.
|
|
||||||
$\{T\}$ is computed from the wanted position of each stage. It is thus theoretical and does not correspond to a real position.
|
|
||||||
The origin of $T$ is $O_T$ and is the wanted position of the sample.
|
|
||||||
|
|
||||||
Thus:
|
|
||||||
- the *measurement* of the position of the sample corresponds to ${}^W O_S = \begin{bmatrix} {}^WP_{x,m} & {}^WP_{y,m} & {}^WP_{z,m} \end{bmatrix}^T$ in translation and to $\theta_m {}^W\bm{s}_m = \theta_m \cdot \begin{bmatrix} {}^Ws_{x,m} & {}^Ws_{y,m} & {}^Ws_{z,m} \end{bmatrix}^T$ in rotations
|
|
||||||
- the *wanted position* of the sample expressed w.r.t. the granite is ${}^W O_T = \begin{bmatrix} {}^WP_{x,r} & {}^WP_{y,r} & {}^WP_{z,r} \end{bmatrix}^T$ in translation and to $\theta_r {}^W\bm{s}_r = \theta_r \cdot \begin{bmatrix} {}^Ws_{x,r} & {}^Ws_{y,r} & {}^Ws_{z,r} \end{bmatrix}^T$ in rotations
|
|
||||||
|
|
||||||
** Matlab Init :noexport:ignore:
|
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
|
||||||
<<matlab-dir>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none :results silent :noweb yes
|
|
||||||
<<matlab-init>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no
|
|
||||||
simulinkproject('../');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
open('positioning_error/matlab/sim_nano_station_metrology.slx')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Wanted Position of the Sample with respect to the Granite
|
|
||||||
Let's define the wanted position of each stage.
|
|
||||||
#+begin_src matlab
|
|
||||||
Ty = 0; % [m]
|
|
||||||
Ry = 3*pi/180; % [rad]
|
|
||||||
Rz = 180*pi/180; % [rad]
|
|
||||||
|
|
||||||
% Hexapod (first consider only translations)
|
|
||||||
Thx = 0; % [m]
|
|
||||||
Thy = 0; % [m]
|
|
||||||
Thz = 0; % [m]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Now, we compute the corresponding wanted translation and rotation of the sample with respect to the granite frame $\{W\}$.
|
|
||||||
This corresponds to ${}^WO_T$ and $\theta_m {}^Ws_m$.
|
|
||||||
|
|
||||||
To do so, we have to define the homogeneous transformation for each stage.
|
|
||||||
#+begin_src matlab
|
|
||||||
% Translation Stage
|
|
||||||
Rty = [1 0 0 0;
|
|
||||||
0 1 0 Ty;
|
|
||||||
0 0 1 0;
|
|
||||||
0 0 0 1];
|
|
||||||
|
|
||||||
% Tilt Stage - Pure rotating aligned with Ob
|
|
||||||
Rry = [ cos(Ry) 0 sin(Ry) 0;
|
|
||||||
0 1 0 0;
|
|
||||||
-sin(Ry) 0 cos(Ry) 0;
|
|
||||||
0 0 0 1];
|
|
||||||
|
|
||||||
% Spindle - Rotation along the Z axis
|
|
||||||
Rrz = [cos(Rz) -sin(Rz) 0 0 ;
|
|
||||||
sin(Rz) cos(Rz) 0 0 ;
|
|
||||||
0 0 1 0 ;
|
|
||||||
0 0 0 1 ];
|
|
||||||
|
|
||||||
% Micro-Hexapod (only rotations first)
|
|
||||||
Rh = [1 0 0 Thx ;
|
|
||||||
0 1 0 Thy ;
|
|
||||||
0 0 1 Thz ;
|
|
||||||
0 0 0 1 ];
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We combine the individual homogeneous transformations into one homogeneous transformation for all the station.
|
|
||||||
#+begin_src matlab
|
|
||||||
Ttot = Rty*Rry*Rrz*Rh;
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Using this homogeneous transformation, we can compute the wanted position and orientation of the sample with respect to the granite.
|
|
||||||
|
|
||||||
Translation.
|
|
||||||
#+begin_src matlab
|
|
||||||
WOr = Ttot*[0;0;0;1];
|
|
||||||
WOr = WOr(1:3);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Rotation.
|
|
||||||
#+begin_src matlab
|
|
||||||
thetar = acos((trace(Ttot(1:3, 1:3))-1)/2)
|
|
||||||
if thetar == 0
|
|
||||||
WSr = [0; 0; 0];
|
|
||||||
else
|
|
||||||
[V, D] = eig(Ttot(1:3, 1:3));
|
|
||||||
WSr = thetar*V(:, abs(diag(D) - 1) < eps(1));
|
|
||||||
end
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
WPr = [WOr ; WSr];
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Measured Position of the Sample with respect to the Granite
|
|
||||||
The measurement of the position of the sample using the metrology system gives the position and orientation of the sample with respect to the granite.
|
|
||||||
#+begin_src matlab
|
|
||||||
% Measurements: Xm, Ym, Zm, Rx, Ry, Rz
|
|
||||||
Dxm = 0; % [m]
|
|
||||||
Dym = 0; % [m]
|
|
||||||
Dzm = 0; % [m]
|
|
||||||
|
|
||||||
Rxm = 0*pi/180; % [rad]
|
|
||||||
Rym = 0*pi/180; % [rad]
|
|
||||||
Rzm = 180*pi/180; % [rad]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Let's compute the corresponding orientation using screw axis.
|
|
||||||
#+begin_src matlab
|
|
||||||
Trxm = [1 0 0;
|
|
||||||
0 cos(Rxm) -sin(Rxm);
|
|
||||||
0 sin(Rxm) cos(Rxm)];
|
|
||||||
Trym = [ cos(Rym) 0 sin(Rym);
|
|
||||||
0 1 0;
|
|
||||||
-sin(Rym) 0 cos(Rym)];
|
|
||||||
Trzm = [cos(Rzm) -sin(Rzm) 0;
|
|
||||||
sin(Rzm) cos(Rzm) 0;
|
|
||||||
0 0 1];
|
|
||||||
|
|
||||||
STw = [[ Trym*Trxm*Trzm , [Dxm; Dym; Dzm]]; 0 0 0 1];
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We then obtain the orientation measurement in the form of screw coordinate $\theta_m ({}^Ws_{x,m},\ {}^Ws_{y,m},\ {}^Ws_{z,m})^T$ where:
|
|
||||||
- $\theta_m = \cos^{-1} \frac{\text{Tr}(R) - 1}{2}$
|
|
||||||
- ${}^W\bm{s}_m$ is the eigen vector of the rotation matrix $R$ corresponding to the eigen value $\lambda = 1$
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
thetam = acos((trace(STw(1:3, 1:3))-1)/2); % [rad]
|
|
||||||
if thetam == 0
|
|
||||||
WSm = [0; 0; 0];
|
|
||||||
else
|
|
||||||
[V, D] = eig(STw(1:3, 1:3));
|
|
||||||
WSm = thetam*V(:, abs(diag(D) - 1) < eps(1));
|
|
||||||
end
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
WPm = [Dxm ; Dym ; Dzm ; WSm];
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Positioning Error with respect to the Granite
|
|
||||||
The wanted position expressed with respect to the granite is ${}^WO_T$ and the measured position with respect to the granite is ${}^WO_S$, thus the *position error* expressed in $\{W\}$ is
|
|
||||||
\[ {}^W E = {}^W O_T - {}^W O_S \]
|
|
||||||
The same is true for rotations:
|
|
||||||
\[ \theta_\epsilon {}^W\bm{s}_\epsilon = \theta_r {}^W\bm{s}_r - \theta_m {}^W\bm{s}_m \]
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
WPe = WPr - WPm;
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_quote
|
|
||||||
Now we want to express this error in a frame attached to the *base of the nano-hexapod* with its origin at the same point where the Jacobian of the nano-hexapod is computed (175mm above the top platform + 90mm of total height of the nano-hexapod).
|
|
||||||
|
|
||||||
Or maybe should we want to express this error with respect to the *top platform of the nano-hexapod*?
|
|
||||||
We are measuring the position of the top-platform, and we don't know exactly the position of the bottom platform.
|
|
||||||
We could compute the position of the bottom platform in two ways:
|
|
||||||
- from the encoders of each stage
|
|
||||||
- from the measurement of the nano-hexapod top platform + the internal metrology in the nano-hexapod (capacitive sensors e.g)
|
|
||||||
|
|
||||||
A third option is to say that the maximum stroke of the nano-hexapod is so small that the error should no change to much by the change of base.
|
|
||||||
#+end_quote
|
|
||||||
|
|
||||||
** Position Error Expressed in the Nano-Hexapod Frame
|
|
||||||
We now want the position error to be expressed in $\{S\}$ (the frame attach to the sample) for control:
|
|
||||||
\[ {}^S E = {}^S T_W \cdot {}^W E \]
|
|
||||||
|
|
||||||
Thus we need to compute the homogeneous transformation ${}^ST_W$.
|
|
||||||
Fortunately, this homogeneous transformation can be computed from the measurement of the sample position and orientation with respect to the granite.
|
|
||||||
#+begin_src matlab
|
|
||||||
Trxm = [1 0 0;
|
|
||||||
0 cos(Rxm) -sin(Rxm);
|
|
||||||
0 sin(Rxm) cos(Rxm)];
|
|
||||||
Trym = [ cos(Rym) 0 sin(Rym);
|
|
||||||
0 1 0;
|
|
||||||
-sin(Rym) 0 cos(Rym)];
|
|
||||||
Trzm = [cos(Rzm) -sin(Rzm) 0;
|
|
||||||
sin(Rzm) cos(Rzm) 0;
|
|
||||||
0 0 1];
|
|
||||||
|
|
||||||
STw = [[ Trym*Trxm*Trzm , [Dxm; Dym; Dzm]]; 0 0 0 1];
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Translation Error.
|
|
||||||
#+begin_src matlab
|
|
||||||
SEm = STw * [WPe(1:3); 0];
|
|
||||||
SEm = SEm(1:3);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Rotation Error.
|
|
||||||
#+begin_src matlab
|
|
||||||
SEr = STw * [WPe(4:6); 0];
|
|
||||||
SEr = SEr(1:3);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
Etot = [SEm ; SEr]
|
|
||||||
#+end_src
|
|
||||||
** Another try => seems better
|
|
||||||
Let's denote:
|
|
||||||
- $\{W\}$ the initial fixed frame
|
|
||||||
- $\{R\}$ the reference frame corresponding to the wanted pose of the sample
|
|
||||||
- $\{M\}$ the frame corresponding to the measured pose of the sample
|
|
||||||
|
|
||||||
We have then computed:
|
|
||||||
- ${}^WT_R$
|
|
||||||
- ${}^WT_M$
|
|
||||||
|
|
||||||
We have:
|
|
||||||
\begin{align}
|
|
||||||
{}^MT_R &= {}^MT_W {}^WT_R \\
|
|
||||||
&= {}^W{T_M}^{-1} {}^WT_R
|
|
||||||
\end{align}
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
MTr = STw'*Ttot;
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Position error:
|
|
||||||
#+begin_src matlab
|
|
||||||
MTr(1:3, 1:4)*[0; 0; 0; 1]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Orientation error:
|
|
||||||
#+begin_src matlab
|
|
||||||
MTr(1:3, 1:3)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Verification
|
|
||||||
How can we verify that the computation is correct?
|
|
||||||
Options:
|
|
||||||
- Test with simscape multi-body
|
|
||||||
- Impose motion on each stage
|
|
||||||
- Measure the position error w.r.t. the NASS
|
|
||||||
- Compare with the computation
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user