Tomography Experiment
+Table of Contents
+ +1 Initialize Experiment
++We first initialize all the stages. +
++initializeGround();+initializeGranite();+initializeTy();+initializeRy();+initializeRz();+initializeMicroHexapod();+initializeAxisc();+initializeMirror();+initializeNanoHexapod(struct('actuator', 'piezo'));+initializeSample(struct('mass', 1));+
+We initialize the reference path for all the stages. +
+initializeReferences(struct('Rz_type', 'rotating', 'Rz_period', 1));
+
++And we initialize the disturbances. +
+initDisturbances();
+
+2 Run the Tomography Experiment
++We first load the simulation configuration +
+load('simscape/conf_simscape.mat');
+
+set_param(conf_simscape, 'StopTime', '1');
+
+set_param('sim_nano_station_tomo', 'SimulationCommand', 'start');
+
+3 TODO Tests on the transformation from reference to wanted position
+-
+
[X]Are the rotation matrix commutable? => no
+[X]How to express the measured rotation errors? => screw axis coordinate seems nice (used in Taghirad's book)
+[ ]Should ask Veijo how he specifies the position of the Symetrie Hexapod
+[ ]Create functions for all distinct part and then include that in Simulink
+[ ]How the express the orientation error?
+[ ]If we use screw coordinate, can we add/subtract them?
+[ ]Do some simple tests to verify that the algorithm is working fine
+
++ ++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]; +
+
+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 +
3.1 Wanted Position of the Sample with respect to the Granite
++Let's define the wanted position of each stage. +
++Ty = 1; % [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]+
+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. +
++% 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 ];+
+We combine the individual homogeneous transformations into one homogeneous transformation for all the station. +
+Ttot = Rty*Rry*Rrz*Rh;
+
++Using this homogeneous transformation, we can compute the wanted position and orientation of the sample with respect to the granite. +
++WOr = Ttot*[0;0;0;1];+WOr = WOr(1:3);+
+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+
WPr = [WOr ; WSr];
+
+3.2 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. +
++% Measurements: Xm, Ym, Zm, Rx, Ry, Rz+Dxm = 0; % [m]+Dym = 1; % [m]+Dzm = 0; % [m]++Rxm = 0*pi/180; % [rad]+Rym = 3*pi/180; % [rad]+Rzm = 0*pi/180; % [rad]+
+Let's compute the corresponding orientation using screw axis. +
++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];+
+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\) +
+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+
WPm = [Dxm ; Dym ; Dzm ; WSm];
+
+3.3 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 \] +
+ +WPe = WPr - WPm;
+
++++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. +
+
3.4 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): +\[ {}^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. +
++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];+
+Translation Error. +
++SEm = STw * [WPe(1:3); 1];+SEm = SEm(1:3);+
+Rotation Error. +
++SEr = STw * [WPe(4:6); 0];+SEr = SEr(1:3);+
Etot = [SEm ; SEr]
+
+