From 98555355d394a45a628d0e4d135c129bd1f13dea Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Wed, 11 Dec 2019 09:43:30 +0100 Subject: [PATCH] Verified the function that converts the error in the NASS base --- metrology/index.html | 142 ++++++++++-------- metrology/index.org | 37 +++-- simscape/sim_nano_station_metrology.slx | Bin 35899 -> 35972 bytes .../micro_hexapod_rigid_legs.slx | Bin 0 -> 37350 bytes src/inverseKinematicsHexapod.m | 31 ++++ 5 files changed, 137 insertions(+), 73 deletions(-) create mode 100644 simscape_subsystems/micro_hexapod_rigid_legs.slx create mode 100644 src/inverseKinematicsHexapod.m diff --git a/metrology/index.html b/metrology/index.html index 5292ab0..f8808b1 100644 --- a/metrology/index.html +++ b/metrology/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Metrology @@ -283,25 +283,25 @@ for the JavaScript code in this tag.

Table of Contents

@@ -314,25 +314,25 @@ Also, all the stages can be perfectly positioned.

-First, in section 1, is explained how the measurement of the position of the sample with respect to the granite is performed. +First, in section 1, is explained how the measurement of the position of the sample with respect to the granite is performed.

-In section 2, 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). +In section 2, 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). 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.

-Then, in section 3, we introduce some positioning error in the position stages. +Then, in section 3, we introduce some positioning error in the position 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. Finally, 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.

-
-

1 How do we measure the position of the sample with respect to the granite

+
+

1 How do we measure the position of the sample with respect to the granite

- + A transform sensor block gives the translation and orientation of the follower frame with respect to the base frame.

@@ -358,18 +358,18 @@ We can then determine extract other orientation conventions such that Euler angl
-
-

2 Verify that the function to compute the reference pose is correct

+
+

2 Verify that the function to compute the reference pose is correct

- +

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.

-
-

2.1 Prepare the Simulation

+
+

2.1 Prepare the Simulation

We load the configuration. @@ -439,6 +439,7 @@ No position error for now (perfect positioning). Rye = 0; % [rad] Rze = 0; % [rad] Dhe = zeros(6,1); % [m,rad] +Dhle = zeros(6,1); % [m] Dne = zeros(6,1); % [m,rad]

@@ -453,8 +454,8 @@ And we run the simulation.
-
-

2.2 Verify that the pose of the sample is the same as the computed one

+
+

2.2 Verify that the pose of the sample is the same as the computed one

Let's denote: @@ -530,8 +531,8 @@ ans =

-
-

2.3 Conclusion

+
+

2.3 Conclusion

@@ -544,11 +545,11 @@ Both the measurement and the theory gives the same result.

-
-

3 Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working

+
+

3 Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working

- +

We now introduce some positioning error in the stage. @@ -559,8 +560,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.

-
-

3.1 Prepare the Simulation

+
+

3.1 Prepare the Simulation

We load the configuration. @@ -578,6 +579,23 @@ We set a small StopTime.

+

+We initialize all the stages. +

+
+
initializeGround();
+initializeGranite();
+initializeTy();
+initializeRy();
+initializeRz();
+initializeMicroHexapod();
+initializeAxisc();
+initializeMirror();
+initializeNanoHexapod(struct('actuator', 'piezo'));
+initializeSample(struct('mass', 50));
+
+
+

We setup the reference path to be constant.

@@ -606,12 +624,12 @@ initializeReferences(opts
-
Dye = 0; % [m]
-Rye = 0; % [rad]
-Rze = 0; % [rad]
-Dhe = [1e-3 ; 0 ; 2e-3 ; 1e-3 ; 0 ; 3e-3]; % [m,rad]
-% Dhe = zeros(6,1);
+
Dye = 1e-6; % [m]
+Rye = 2e-4; % [rad]
+Rze = 1e-5; % [rad]
+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]
 Dne = zeros(6,1);
 
@@ -626,8 +644,8 @@ And we run the simulation.
-
-

3.2 Compute the wanted pose of the sample in the NASS Base from the metrology and the reference

+
+

3.2 Compute the wanted pose of the sample in the NASS Base from the metrology and the reference

Now that we have introduced some positioning error, the computed wanted pose and the measured pose will not be the same. @@ -750,20 +768,20 @@ Rz = [cosError --1.0e-03 -1.0e-06 --2.0e-03 --1.0e-03 -3.0e-06 --3.0e-03 +2.8e-06 +-2.0e-06 +-1.3e-06 +-5.1e-06 +-1.8e-04 +4.2e-07

-
-

3.3 Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end

+
+

3.3 Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end

We now keep the wanted pose but we impose a displacement of the nano hexapod corresponding to the measured position error. @@ -845,20 +863,20 @@ Verify that the pose error is small. Error --3.0e-09 --1.0e-09 -3.0e-09 -2.0e-09 --1.0e-09 -3.0e-09 +1.0e-16 +-1.1e-18 +3.3e-20 +1.5e-16 +5.8e-17 +-6.1e-16

-
-

3.4 Conclusion

+
+

3.4 Conclusion

@@ -870,15 +888,15 @@ Indeed, we are able to convert the position error in the frame of the NASS and t

-
-

4 Functions

+
+

4 Functions

-
-

4.1 computeReferencePose

+
+

4.1 computeReferencePose

- +

@@ -971,7 +989,7 @@ This Matlab function is accessible here

Author: Dehaeze Thomas

-

Created: 2019-12-11 mer. 09:33

+

Created: 2019-12-11 mer. 09:43

Validate

diff --git a/metrology/index.org b/metrology/index.org index 45f9388..93a3e4b 100644 --- a/metrology/index.org +++ b/metrology/index.org @@ -145,6 +145,7 @@ No position error for now (perfect positioning). Rye = 0; % [rad] Rze = 0; % [rad] Dhe = zeros(6,1); % [m,rad] + Dhle = zeros(6,1); % [m] Dne = zeros(6,1); % [m,rad] #+end_src @@ -250,6 +251,20 @@ We set a small =StopTime=. set_param(conf_simscape, 'StopTime', '0.5'); #+end_src +We initialize all the stages. +#+begin_src matlab + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); + initializeNanoHexapod(struct('actuator', 'piezo')); + initializeSample(struct('mass', 50)); +#+end_src + We setup the reference path to be constant. #+begin_src matlab opts = struct( ... @@ -273,12 +288,12 @@ We setup the reference path to be constant. Now we introduce some positioning error. #+begin_src matlab - Dye = 0; % [m] - Rye = 0; % [rad] - Rze = 0; % [rad] - Dhe = [1e-3 ; 0 ; 2e-3 ; 1e-3 ; 0 ; 3e-3]; % [m,rad] - % Dhe = zeros(6,1); + Dye = 1e-6; % [m] + Rye = 2e-4; % [rad] + Rze = 1e-5; % [rad] + 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] Dne = zeros(6,1); #+end_src @@ -370,9 +385,9 @@ Verify that the pose error corresponds to the positioning error of the stages. #+end_src #+RESULTS: -| | Edx [m] | Edy [m] | Edz [m] | Erx [rad] | Ery [rad] | Erz [rad] | -|-------+----------+---------+----------+-----------+-----------+-----------| -| Error | -1.0e-03 | 1.0e-06 | -2.0e-03 | -1.0e-03 | 3.0e-06 | -3.0e-03 | +| | Edx [m] | Edy [m] | Edz [m] | Erx [rad] | Ery [rad] | Erz [rad] | +|-------+---------+----------+----------+-----------+-----------+-----------| +| Error | 2.8e-06 | -2.0e-06 | -1.3e-06 | -5.1e-06 | -1.8e-04 | 4.2e-07 | ** Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end We now keep the wanted pose but we impose a displacement of the nano hexapod corresponding to the measured position error. @@ -421,9 +436,9 @@ Verify that the pose error is small. #+end_src #+RESULTS: -| | Edx [m] | Edy [m] | Edz [m] | Erx [rad] | Ery [rad] | Erz [rad] | -|-------+----------+----------+---------+-----------+-----------+-----------| -| Error | -3.0e-09 | -1.0e-09 | 3.0e-09 | 2.0e-09 | -1.0e-09 | 3.0e-09 | +| | Edx [m] | Edy [m] | Edz [m] | Erx [rad] | Ery [rad] | Erz [rad] | +|-------+---------+----------+---------+-----------+-----------+-----------| +| Error | 1.0e-16 | -1.1e-18 | 3.3e-20 | 1.5e-16 | 5.8e-17 | -6.1e-16 | ** Conclusion #+begin_important diff --git a/simscape/sim_nano_station_metrology.slx b/simscape/sim_nano_station_metrology.slx index 04b879ad4f0064aa466447802be0c49ce6530f44..32af8b0d53ad5e30d05617cecd2225297969c553 100644 GIT binary patch delta 11553 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 diff --git a/simscape_subsystems/micro_hexapod_rigid_legs.slx b/simscape_subsystems/micro_hexapod_rigid_legs.slx new file mode 100644 index 0000000000000000000000000000000000000000..1e18e31f770d9b91a6e1648406dc828416ff7cd7 GIT binary patch literal 37350 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 jf!=&am~plh$$@B%`2cTLV0{A`xR+vB2COBtx> + +% This Matlab function is accessible [[file:src/inverseKinematicsHexapod.m][here]]. + + +function [L] = inverseKinematicsHexapod(hexapod, AP, ARB) +% inverseKinematicsHexapod - Compute the initial position of each leg to have the wanted Hexapod's position +% +% Syntax: inverseKinematicsHexapod(hexapod, AP, ARB) +% +% Inputs: +% - hexapod - Hexapod object containing the geometry of the hexapod +% - AP - Position vector of point OB expressed in frame {A} in [m] +% - ARB - Rotation Matrix expressed in frame {A} + + % Wanted Length of the hexapod's legs [m] + L = zeros(6, 1); + + for i = 1:length(L) + Bbi = hexapod.pos_top_tranform(i, :)' - 1e-3*[0 ; 0 ; hexapod.TP.thickness+hexapod.Leg.sphere.top+hexapod.SP.thickness.top+hexapod.jacobian]; % [m] + Aai = hexapod.pos_base(i, :)' + 1e-3*[0 ; 0 ; hexapod.BP.thickness+hexapod.Leg.sphere.bottom+hexapod.SP.thickness.bottom-hexapod.h-hexapod.jacobian]; % [m] + + L(i) = sqrt(AP'*AP + Bbi'*Bbi + Aai'*Aai - 2*AP'*Aai + 2*AP'*(ARB*Bbi) - 2*(ARB*Bbi)'*Aai); + end +end