Finish metrology and open-loop plant sections
757
backup.org
@ -10809,6 +10809,762 @@ data2orgtable(data_results, {'Tomography ($R_z$ 1rpm)', 'Tomography ($R_z$ 6rpm)
|
|||||||
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 0.1mm/s) | 75 | 9 | 118 |
|
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 0.1mm/s) | 75 | 9 | 118 |
|
||||||
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 1mm/s) | 428 | 11 | 169 |
|
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 1mm/s) | 428 | 11 | 169 |
|
||||||
|
|
||||||
|
* TODO SRI Figures :noexport:
|
||||||
|
** Open Loop Figure / Effect of mass
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
%% Save Identified Plants
|
||||||
|
load('G_ol.mat', 'G_int_m0', 'G_int_m1', 'G_int_m2', 'G_int_m3', 'f');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
t = tiledlayout(6, 6, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
for i = 1:6
|
||||||
|
for j = 1:6
|
||||||
|
nexttile();
|
||||||
|
if i == j
|
||||||
|
plot(f, abs(G_int_m0(:, i, j)), 'color', [colors(1,:), 1]);
|
||||||
|
else
|
||||||
|
plot(f, abs(G_int_m0(:, i, j)), 'color', [colors(1,:), 0.5]);
|
||||||
|
end
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
set(gca, 'YTickLabel',[]);
|
||||||
|
if j == 1
|
||||||
|
ylabel(sprintf('$dL_{%i}$', i))
|
||||||
|
end
|
||||||
|
if i == 6
|
||||||
|
xlabel(sprintf('$u_{%i}$', j))
|
||||||
|
end
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylim([1e-7, 2e-4]);
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_6x6_plant.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_6x6_plant.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_int_m0(:, i, j)), 'color', [colors(1,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_int_m0(:,1, 1)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 0$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m0(:,i, i)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m0(:,i, i)), f), 'color', [colors(1,:), 1.0]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_plant_m0.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_plant_m0.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_int_m0(:, i, j)), 'color', [colors(1,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_int_m0(:,1, 1)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 0$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m0(:,i, i)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_int_m1(:, i, j)), 'color', [colors(2,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_int_m1(:,1, 1)), 'color', [colors(2,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 15$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m1(:,i, i)), 'color', [colors(2,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_int_m2(:, i, j)), 'color', [colors(3,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_int_m2(:,1, 1)), 'color', [colors(3,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 30$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m2(:,i, i)), 'color', [colors(3,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_int_m3(:, i, j)), 'color', [colors(4,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_int_m3(:,1, 1)), 'color', [colors(4,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 45$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m3(:,i, i)), 'color', [colors(4,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m0(:,i, i)), f), 'color', [colors(1,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m1(:,i, i)), f), 'color', [colors(2,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m2(:,i, i)), f), 'color', [colors(3,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m3(:,i, i)), f), 'color', [colors(4,:), 1.0]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_plant_m3.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_plant_m3.png]]
|
||||||
|
|
||||||
|
** Effect of Active Damping
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
%% Save Identified Plants
|
||||||
|
load('G_hac.mat', 'G_hac_m0', 'G_hac_m1', 'G_hac_m2', 'G_hac_m3', 'f');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% description
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
plot(f, abs(G_int_m0(:, 1, 1)), 'color', [colors(1,:)], ...
|
||||||
|
'DisplayName', '$m = 0$ - OL');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_int_m0(:,i, i)), 'color', [colors(1,:)], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m0(:, 1, 1)), 'color', [colors(2,:)], ...
|
||||||
|
'DisplayName', '$m = 0$ - Damped');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m0(:,i, i)), 'color', [colors(2,:)], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m0(:,i, i)), f), 'color', [colors(1,:)]);
|
||||||
|
end
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m0(:,i, i)), f), 'color', [colors(2,:)]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_plant_m0_comp_damped.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_plant_m0_comp_damped.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_hac_m0(:, i, j)), 'color', [colors(1,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m0(:,1, 1)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 0$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m0(:,i, i)), 'color', [colors(1,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_hac_m1(:, i, j)), 'color', [colors(2,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m1(:,1, 1)), 'color', [colors(2,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 15$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m1(:,i, i)), 'color', [colors(2,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_hac_m2(:, i, j)), 'color', [colors(3,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m2(:,1, 1)), 'color', [colors(3,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 30$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m2(:,i, i)), 'color', [colors(3,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(f, abs(G_hac_m3(:, i, j)), 'color', [colors(4,:), 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m3(:,1, 1)), 'color', [colors(4,:), 1.0], ...
|
||||||
|
'DisplayName', '$m = 45$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m3(:,i, i)), 'color', [colors(4,:), 1.0], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m0(:,i, i)), f), 'color', [colors(1,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m1(:,i, i)), f), 'color', [colors(2,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m2(:,i, i)), f), 'color', [colors(3,:), 1.0]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m3(:,i, i)), f), 'color', [colors(4,:), 1.0]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_plant_m3_damped.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_plant_m3_damped.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
plot(f, abs(G_int_m0(:,1,1)), 'color', [colors(1,:), 0.5], 'DisplayName', 'Undamped');
|
||||||
|
plot(f, abs(G_hac_m0(:,1,1)), 'color', [colors(2,:), 0.5], 'DisplayName', 'damped');
|
||||||
|
for i = 1:6
|
||||||
|
plot(f, abs(G_int_m0(:,i, i)), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_int_m1(:,i, i)), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_int_m2(:,i, i)), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_int_m3(:,i, i)), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:6
|
||||||
|
plot(f, abs(G_hac_m0(:,i, i)), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_hac_m1(:,i, i)), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_hac_m2(:,i, i)), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
plot(f, abs(G_hac_m3(:,i, i)), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i =1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m0(:,i, i)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m1(:,i, i)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m2(:,i, i)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(-G_int_m3(:,i, i)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
end
|
||||||
|
for i = 1:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m0(:,i, i)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m1(:,i, i)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m2(:,i, i)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m3(:,i, i)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_plant_comp_damped_undamped.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_plant_comp_damped_undamped.png]]
|
||||||
|
|
||||||
|
** Comparison with the Model
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Save Damped Plants
|
||||||
|
load('Gm.mat', 'Gm_hac_m0', 'Gm_hac_m1', 'Gm_hac_m2', 'Gm_hac_m3');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
All elements:
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
t = tiledlayout(6, 6, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
for i = 1:6
|
||||||
|
for j = 1:6
|
||||||
|
nexttile();
|
||||||
|
hold on;
|
||||||
|
if i == j
|
||||||
|
plot(f, abs(G_hac_m0(:, i, j)), 'color', [colors(i,:), 0.5]);
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m0(sprintf('eL%i', i), sprintf('u%i', j)), freqs, 'Hz'))), '--', 'color', colors(i,:));
|
||||||
|
else
|
||||||
|
plot(f, abs(G_hac_m0(:, i, j)), 'color', [0, 0, 0, 0.5]);
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m0(sprintf('eL%i', i), sprintf('u%i', j)), freqs, 'Hz'))), '--', 'color', [0, 0, 0, 1]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
set(gca, 'YTickLabel',[]);
|
||||||
|
if j == 1
|
||||||
|
ylabel(sprintf('$dL_{%i}$', i))
|
||||||
|
end
|
||||||
|
if i == 6
|
||||||
|
xlabel(sprintf('$u_{%i}$', j))
|
||||||
|
end
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylim([1e-7, 1e-4]);
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Measured transfer function from generated voltages to measured voltage on the force sensors
|
||||||
|
figure;
|
||||||
|
t = tiledlayout(6, 6, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
for i = 1:6
|
||||||
|
for j = 1:6
|
||||||
|
nexttile();
|
||||||
|
hold on;
|
||||||
|
if i == j
|
||||||
|
plot(f, abs(G_hac_m0(:, i, j)), 'color', [colors(1,:), 1]);
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m0(sprintf('eL%i', i), sprintf('u%i', j)), freqs, 'Hz'))), 'k-');
|
||||||
|
else
|
||||||
|
plot(f, abs(G_hac_m0(:, i, j)), 'color', [colors(1,:), 0.5]);
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m0(sprintf('eL%i', i), sprintf('u%i', j)), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.5]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
set(gca, 'YTickLabel',[]);
|
||||||
|
if j == 1
|
||||||
|
ylabel(sprintf('$dL_{%i}$', i))
|
||||||
|
end
|
||||||
|
if i == 6
|
||||||
|
xlabel(sprintf('$u_{%i}$', j))
|
||||||
|
end
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylim([1e-7, 2e-4]);
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_comp_plant_model_6x6.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_comp_plant_model_6x6.png]]
|
||||||
|
|
||||||
|
Diagonal elements:
|
||||||
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Comparison of the identified HAC plant and the HAC plant extracted from the simscape model
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
plot(f, abs(G_hac_m0(:, 1, 1)), 'color', [colors(1,:), 0.5], ...
|
||||||
|
'DisplayName', '$m = 0$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m0(:,i, i)), 'color', [colors(1,:), 0.5], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m1(:, 1, 1)), 'color', [colors(2,:), 0.5], ...
|
||||||
|
'DisplayName', '$m = 15$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m1(:,i, i)), 'color', [colors(2,:), 0.5], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m2(:, 1, 1)), 'color', [colors(3,:), 0.5], ...
|
||||||
|
'DisplayName', '$m = 30$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m2(:,i, i)), 'color', [colors(3,:), 0.5], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
plot(f, abs(G_hac_m3(:, 1, 1)), 'color', [colors(4,:), 0.5], ...
|
||||||
|
'DisplayName', '$m = 45$ kg');
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, abs(G_hac_m3(:,i, i)), 'color', [colors(4,:), 0.5], ...
|
||||||
|
'HandleVisibility', 'off')
|
||||||
|
end
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m0('eL1', 'u1'), freqs, 'Hz'))), '--', 'color', colors(1,:), ...
|
||||||
|
'DisplayName', '$m = 0$ kg (model)');
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m1('eL1', 'u1'), freqs, 'Hz'))), '--', 'color', colors(2,:), ...
|
||||||
|
'DisplayName', '$m = 15$ kg (model)');
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m2('eL1', 'u1'), freqs, 'Hz'))), '--', 'color', colors(3,:), ...
|
||||||
|
'DisplayName', '$m = 30$ kg (model)');
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm_hac_m3('eL1', 'u1'), freqs, 'Hz'))), '--', 'color', colors(4,:), ...
|
||||||
|
'DisplayName', '$m = 45$ kg (model)');
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-8, 2e-4]);
|
||||||
|
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m0(:,1,1)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m0(:,i, i)), f), 'color', [colors(1,:), 0.5]);
|
||||||
|
end
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m1(:,1,1)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m1(:,i, i)), f), 'color', [colors(2,:), 0.5]);
|
||||||
|
end
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m2(:,1,1)), f), 'color', [colors(3,:), 0.5]);
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m2(:,i, i)), f), 'color', [colors(3,:), 0.5]);
|
||||||
|
end
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m3(:,1,1)), f), 'color', [colors(4,:), 0.5]);
|
||||||
|
for i = 2:6
|
||||||
|
plot(f, 180/pi*unwrapphase(angle(G_hac_m3(:,i, i)), f), 'color', [colors(4,:), 0.5]);
|
||||||
|
end
|
||||||
|
plot(freqs, 180/pi*unwrapphase(angle(squeeze(freqresp(exp(-3e-4*s)*Gm_hac_m0('eL1', 'u1'), freqs, 'Hz'))), f), '--', 'color', colors(1,:));
|
||||||
|
plot(freqs, 180/pi*unwrapphase(angle(squeeze(freqresp(exp(-3e-4*s)*Gm_hac_m1('eL1', 'u1'), freqs, 'Hz'))), f), '--', 'color', colors(2,:));
|
||||||
|
plot(freqs, 180/pi*unwrapphase(angle(squeeze(freqresp(exp(-3e-4*s)*Gm_hac_m2('eL1', 'u1'), freqs, 'Hz'))), f), '--', 'color', colors(3,:));
|
||||||
|
plot(freqs, 180/pi*unwrapphase(angle(squeeze(freqresp(exp(-3e-4*s)*Gm_hac_m3('eL1', 'u1'), freqs, 'Hz'))), f), '--', 'color', colors(4,:));
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
hold off;
|
||||||
|
yticks(-360:90:360);
|
||||||
|
ylim([-270, 20])
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 1e3]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_comp_plant_model_damped_diag.pdf', 'width', 1000, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_comp_plant_model_damped_diag.png]]
|
||||||
|
|
||||||
|
** Tomography scans
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
data_tomo_30rpm_m0 = load(sprintf("%s/scans/2023-08-17_15-26_tomography_30rpm_m0_robust.mat", mat_dir));
|
||||||
|
data_tomo_30rpm_m0.time = Ts*[0:length(data_tomo_30rpm_m0.Rz)-1];
|
||||||
|
yztomographymoviesri('movies/sri2024_tomography_30rpm_m0_robust', data_tomo_30rpm_m0, 'xlim_ax1', [-3, 3], 'ylim_ax1', [-1.5, 1.5])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Dy scan
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Slow Ty scan (10um/s)
|
||||||
|
data_ty_ol_slow = load(sprintf("%s/scans/2023-08-21_20-05_ty_scan_m1_open_loop_slow.mat", mat_dir));
|
||||||
|
data_ty_ol_slow.time = Ts*[0:length(data_ty_ol_slow.Dy_int)-1];
|
||||||
|
data_ty_ol_slow.e_dy = detrend(data_ty_ol_slow.e_dy, 0);
|
||||||
|
data_ty_ol_slow.e_dz = detrend(data_ty_ol_slow.e_dz, 0);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
fig = figure;
|
||||||
|
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(ax1, 1e6*data_ty_ol_slow.Ty, 1e6*data_ty_ol_slow.e_dy, '-', 'color', [colors(1,:)],'LineWidth',1);
|
||||||
|
% plot(ax1, 1e6*data_ty_cl_slow.Ty, 1e6*data_ty_cl_slow.e_dy, '-', 'color', [colors(2,:)],'LineWidth',1);
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel("$D_y$ error [$\mu m$]");
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(ax2, 1e6*data_ty_ol_slow.Ty, 1e6*data_ty_ol_slow.e_dz, '-', 'color', [colors(1,:)],'LineWidth',1);
|
||||||
|
% plot(ax2, 1e6*data_ty_cl_slow.Ty, 1e6*data_ty_cl_slow.e_dz, '-', 'color', [colors(2,:)],'LineWidth',1);
|
||||||
|
hold off;
|
||||||
|
xlabel("$D_y$ setpoint [$\mu m$]");
|
||||||
|
ylabel("Z motion [$\mu m$]");
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([-100, 100])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_ty_scan_ol.pdf', 'width', 600, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:sri2024_ty_scan_ol
|
||||||
|
#+caption: description
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_ty_scan_ol.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
fig = figure;
|
||||||
|
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(ax1, 1e6*data_ty_ol_slow.Ty, 1e6*data_ty_ol_slow.e_dy, '-', 'color', [colors(1,:)],'LineWidth',1, 'DisplayName', 'OL');
|
||||||
|
plot(ax1, 1e6*data_ty_cl_slow.Ty, 1e6*data_ty_cl_slow.e_dy, '-', 'color', [colors(2,:)],'LineWidth',1, 'DisplayName', sprintf('CL $\\epsilon_y = %.1f$ nm', 1e9*rms(data_ty_cl_slow.e_dy)));
|
||||||
|
hold off;
|
||||||
|
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel("$D_y$ error [$\mu m$]");
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(ax2, 1e6*data_ty_ol_slow.Ty, 1e6*data_ty_ol_slow.e_dz, '-', 'color', [colors(1,:)],'LineWidth',1, 'DisplayName', 'OL');
|
||||||
|
plot(ax2, 1e6*data_ty_cl_slow.Ty, 1e6*data_ty_cl_slow.e_dz, '-', 'color', [colors(2,:)],'LineWidth',1, 'DisplayName', sprintf('CL $\\epsilon_z = %.1f$ nm', 1e9*rms(data_ty_cl_slow.e_dz)));
|
||||||
|
hold off;
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
xlabel("$D_y$ setpoint [$\mu m$]");
|
||||||
|
ylabel("Z motion [$\mu m$]");
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([-100, 100])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_ty_scan_cl.pdf', 'width', 600, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:sri2024_ty_scan_cl
|
||||||
|
#+caption: description
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_ty_scan_cl.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
fig = figure;
|
||||||
|
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
hold([ax1,ax2], 'on');
|
||||||
|
plot(ax1, 1e6*data_ol.Ty, 1e6*data_ol.e_dy, '-', 'color', [colors(1,:)],'LineWidth',1);
|
||||||
|
plot(ax1, 1e6*data_cl.Ty, 1e6*data_cl.e_dy, '-', 'color', [colors(2,:)],'LineWidth',1);
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel("$D_y$ error [$\mu m$]");
|
||||||
|
ax2 = nexttile;
|
||||||
|
plot(ax2, 1e6*data_cl.Ty, 1e6*data_cl.e_dz, '-', 'color', [colors(2,:)],'LineWidth',1);
|
||||||
|
plot(ax2, 1e6*data_ol.Ty, 1e6*data_ol.e_dz, '-', 'color', [colors(1,:)],'LineWidth',1);
|
||||||
|
xlabel("$D_y$ setpoint [$\mu m$]");
|
||||||
|
ylabel("Z motion [$\mu m$]");
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dyscanmoviesri('movies/sri2024_ty_ol_slow', data_ty_ol_slow, 'xlim_ax1', [-100, 100], 'ylim_ax1', [-1.5, 1.5], 'xlim_ax2', [-100, 100], 'ylim_ax2', [-1, 1])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Slow Ty scan (10um/s) - CL
|
||||||
|
data_ty_cl_slow = load(sprintf("%s/scans/2023-08-21_20-07_ty_scan_m1_cf_closed_loop_slow.mat", mat_dir));
|
||||||
|
data_ty_cl_slow.time = Ts*[0:length(data_ty_cl_slow.Dy_int)-1];
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dyscanclmoviesri('movies/sri2024_ty_cl_slow', data_ty_ol_slow, data_ty_cl_slow, 'xlim_ax1', [-100, 100], 'ylim_ax1', [-1.5, 1.5], 'xlim_ax2', [-100, 100], 'ylim_ax2', [-0.5, 0.5])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Ry (reflectivity) scan
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Load data for the reflectivity scan
|
||||||
|
data_ry = load(sprintf("%s/scans/2023-08-18_15-24_first_reflectivity_m0.mat", mat_dir));
|
||||||
|
data_ry.time = Ts*[0:length(data_ry.Ry_int)-1];
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
fig = figure;
|
||||||
|
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(data_ry.time, 1e6*data_ry.Ry_int, 'color', colors(2,:), 'DisplayName', sprintf('$\\epsilon R_y = %.2f$ $\\mu$rad RMS', 1e6*rms(data_ry.e_ry)))
|
||||||
|
plot(data_ry.time, 1e6*data_ry.m_hexa_ry, 'k--', 'DisplayName', '$R_y$ setpoint')
|
||||||
|
hold off;
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel("$R_y$ motion [$\mu$rad]");
|
||||||
|
ylim([-310, 310])
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(data_ry.time, 1e9*data_ry.e_dy, 'DisplayName', sprintf('$\\epsilon D_y = %.0f$ nm RMS', 1e9*rms(data_ry.e_dy)))
|
||||||
|
plot(data_ry.time, 1e9*data_ry.e_dz, 'DisplayName', sprintf('$\\epsilon D_z = %.0f$ nm RMS', 1e9*rms(data_ry.e_dz)))
|
||||||
|
hold off;
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
xlabel("Time [s]");
|
||||||
|
ylabel("$D_y$, $D_z$ motion [nm]");
|
||||||
|
ylim([-150, 150])
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([0, 6.2]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_ry_scan_cl.pdf', 'width', 600, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:sri2024_ry_scan_cl
|
||||||
|
#+caption: description
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_ry_scan_cl.png]]
|
||||||
|
|
||||||
|
|
||||||
|
** Dz scans
|
||||||
|
#+begin_src matlab
|
||||||
|
data_dz_10ums = load(sprintf("%s/scans/2023-08-18_15-33_dirty_layer_m0_small.mat", mat_dir));
|
||||||
|
data_dz_10ums.time = Ts*[0:length(data_dz_10ums.Dz_int)-1];
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
data_dz_100ums = load(sprintf("%s/scans/2023-08-18_15-32_dirty_layer_m0.mat", mat_dir));
|
||||||
|
data_dz_100ums.time = Ts*[0:length(data_dz_100ums.Dz_int)-1];
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
fig = figure;
|
||||||
|
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(data_dz_10ums.time, 1e6*data_dz_10ums.e_ry, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon R_y = %.2f$ $\\mu$rad RMS', 1e6*rms(data_dz_10ums.e_ry)))
|
||||||
|
plot(data_dz_10ums.time, 1e6*data_dz_10ums.e_dy, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon D_y = %.0f$ nm RMS', 1e9*rms(data_dz_10ums.e_dy)))
|
||||||
|
plot(data_dz_10ums.time, 1e6*data_dz_10ums.Dz_int, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon D_z = %.0f$ nm RMS', 1e9*rms(data_dz_10ums.e_dz)))
|
||||||
|
plot(data_dz_10ums.time, 1e6*data_dz_10ums.m_hexa_dz, 'k--', ...
|
||||||
|
'DisplayName', 'Setpoint, $10\mu$m/s')
|
||||||
|
hold off;
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
xlabel("Time [s]");
|
||||||
|
ylabel("Measured motion [$\mu$m, $\mu$rad]");
|
||||||
|
ylim([-11, 11])
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(data_dz_100ums.time, 1e6*data_dz_100ums.e_ry, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon R_y = %.2f$ $\\mu$rad RMS', 1e6*rms(data_dz_100ums.e_ry)))
|
||||||
|
plot(data_dz_100ums.time, 1e6*data_dz_100ums.e_dy, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon D_y = %.0f$ nm RMS', 1e9*rms(data_dz_100ums.e_dy)))
|
||||||
|
plot(data_dz_100ums.time, 1e6*data_dz_100ums.Dz_int, ...
|
||||||
|
'DisplayName', sprintf('$\\epsilon D_z = %.0f$ nm RMS', 1e9*rms(data_dz_100ums.e_dz)))
|
||||||
|
plot(data_dz_100ums.time, 1e6*data_dz_100ums.m_hexa_dz, 'k--', ...
|
||||||
|
'DisplayName', 'Setpoint, $10\mu$m/s')
|
||||||
|
hold off;
|
||||||
|
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
xlabel("Time [s]");
|
||||||
|
ylabel("Measured motion [$\mu$m, $\mu$rad]");
|
||||||
|
ylim([-110, 110])
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([0, 2.2])
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/sri2024_tz_scan_cl.pdf', 'width', 600, 'height', 1000, 'transparent', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:sri2024_tz_scan_cl
|
||||||
|
#+caption: description
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/sri2024_tz_scan_cl.png]]
|
||||||
|
|
||||||
* Helping Functions :noexport:
|
* Helping Functions :noexport:
|
||||||
** =unwrapphase=
|
** =unwrapphase=
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
@ -13135,6 +13891,7 @@ lion.J_int_to_X = [ 0 0 -0.787401574803149 -0.212
|
|||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
save('./mat/stages.mat', 'lion', '-append');
|
save('./mat/stages.mat', 'lion', '-append');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Initialize Disturbances
|
** Initialize Disturbances
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle ./matlab/src/initializeDisturbances.m
|
:header-args:matlab+: :tangle ./matlab/src/initializeDisturbances.m
|
||||||
|
BIN
figs/test_id31_Rz_align_correct.pdf
Normal file
BIN
figs/test_id31_Rz_align_correct.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
figs/test_id31_Rz_align_error.pdf
Normal file
BIN
figs/test_id31_Rz_align_error.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
figs/test_id31_comp_simscape_iff_diag_masses.pdf
Normal file
BIN
figs/test_id31_comp_simscape_iff_diag_masses.png
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
figs/test_id31_comp_simscape_int_diag_masses.pdf
Normal file
BIN
figs/test_id31_comp_simscape_int_diag_masses.png
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
figs/test_id31_effect_rotation_coupling.pdf
Normal file
BIN
figs/test_id31_effect_rotation_coupling.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
figs/test_id31_effect_rotation_direct.pdf
Normal file
BIN
figs/test_id31_effect_rotation_direct.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
figs/test_id31_first_id_iff.pdf
Normal file
BIN
figs/test_id31_first_id_iff.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
figs/test_id31_first_id_int.pdf
Normal file
BIN
figs/test_id31_first_id_int.png
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
figs/test_id31_first_id_int_better_rz_align.pdf
Normal file
BIN
figs/test_id31_first_id_int_better_rz_align.png
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
figs/test_id31_picture_mass_m0.jpg
Normal file
After Width: | Height: | Size: 532 KiB |
BIN
figs/test_id31_picture_mass_m1.jpg
Normal file
After Width: | Height: | Size: 501 KiB |
BIN
figs/test_id31_picture_mass_m2.jpg
Normal file
After Width: | Height: | Size: 525 KiB |
BIN
figs/test_id31_picture_mass_m3.jpg
Normal file
After Width: | Height: | Size: 472 KiB |
134
preamble_extra.tex
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
\usepackage{float}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
|
||||||
|
\usepackage{caption,tabularx,booktabs}
|
||||||
|
\usepackage{bm}
|
||||||
|
|
||||||
|
\usepackage{xpatch} % Recommanded for biblatex
|
||||||
|
\usepackage[ % use biblatex for bibliography
|
||||||
|
backend=biber, % use biber backend (bibtex replacement) or bibtex
|
||||||
|
style=ieee, % bib style
|
||||||
|
hyperref=true, % activate hyperref support
|
||||||
|
backref=true, % activate backrefs
|
||||||
|
isbn=false, % don't show isbn tags
|
||||||
|
url=false, % don't show url tags
|
||||||
|
doi=false, % don't show doi tags
|
||||||
|
urldate=long, % display type for dates
|
||||||
|
maxnames=3, %
|
||||||
|
minnames=1, %
|
||||||
|
maxbibnames=5, %
|
||||||
|
minbibnames=3, %
|
||||||
|
maxcitenames=2, %
|
||||||
|
mincitenames=1 %
|
||||||
|
]{biblatex}
|
||||||
|
|
||||||
|
\setlength\bibitemsep{1.1\itemsep}
|
||||||
|
|
||||||
|
\usepackage{caption}
|
||||||
|
\usepackage{subcaption}
|
||||||
|
|
||||||
|
\captionsetup[figure]{labelfont=bf}
|
||||||
|
\captionsetup[subfigure]{labelfont=bf}
|
||||||
|
\captionsetup[listing]{labelfont=bf}
|
||||||
|
\captionsetup[table]{labelfont=bf}
|
||||||
|
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
\definecolor{my-blue}{HTML}{6b7adb}
|
||||||
|
\definecolor{my-pale-blue}{HTML}{e6e9f9}
|
||||||
|
\definecolor{my-red}{HTML}{db6b6b}
|
||||||
|
\definecolor{my-pale-red}{HTML}{f9e6e6}
|
||||||
|
\definecolor{my-green}{HTML}{6bdbb6}
|
||||||
|
\definecolor{my-pale-green}{HTML}{e6f9f3}
|
||||||
|
\definecolor{my-yellow}{HTML}{dbd26b}
|
||||||
|
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
|
||||||
|
\definecolor{my-orange}{HTML}{dba76b}
|
||||||
|
\definecolor{my-pale-orange}{HTML}{f9f0e6}
|
||||||
|
\definecolor{my-grey}{HTML}{a3a3a3}
|
||||||
|
\definecolor{my-pale-grey}{HTML}{f0f0f0}
|
||||||
|
\definecolor{my-turq}{HTML}{6bc7db}
|
||||||
|
\definecolor{my-pale-turq}{HTML}{e6f6f9}
|
||||||
|
|
||||||
|
\usepackage{inconsolata}
|
||||||
|
|
||||||
|
\usepackage[newfloat=true, chapter]{minted}
|
||||||
|
\usemintedstyle{autumn}
|
||||||
|
|
||||||
|
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
|
||||||
|
\setminted[matlab]{label=Matlab}
|
||||||
|
\setminted[latex]{label=LaTeX}
|
||||||
|
\setminted[bash]{label=Bash}
|
||||||
|
\setminted[python]{label=Python}
|
||||||
|
\setminted[text]{label=Results}
|
||||||
|
\setminted[md]{label=Org Mode}
|
||||||
|
|
||||||
|
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
|
||||||
|
|
||||||
|
\usepackage[most]{tcolorbox}
|
||||||
|
|
||||||
|
\tcbuselibrary{minted}
|
||||||
|
|
||||||
|
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
|
||||||
|
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
|
||||||
|
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
|
||||||
|
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
|
||||||
|
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
|
||||||
|
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
|
||||||
|
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
|
||||||
|
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
|
||||||
|
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
|
||||||
|
\newtcolorbox{note}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Note}
|
||||||
|
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
|
||||||
|
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
|
||||||
|
|
||||||
|
\newtcolorbox{my-quote}[1]{%
|
||||||
|
colback=my-pale-grey,
|
||||||
|
grow to right by=-10mm,
|
||||||
|
grow to left by=-10mm,
|
||||||
|
boxrule=0pt,
|
||||||
|
boxsep=0pt,
|
||||||
|
breakable,
|
||||||
|
enhanced jigsaw,
|
||||||
|
borderline west={4pt}{0pt}{my-grey}}
|
||||||
|
|
||||||
|
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
|
||||||
|
|
||||||
|
\newtcolorbox{my-verse}[1]{%
|
||||||
|
colback=my-pale-grey,
|
||||||
|
grow to right by=-10mm,
|
||||||
|
grow to left by=-10mm,
|
||||||
|
boxrule=0pt,
|
||||||
|
boxsep=0pt,
|
||||||
|
breakable,
|
||||||
|
enhanced jigsaw,
|
||||||
|
borderline west={4pt}{0pt}{my-grey}}
|
||||||
|
|
||||||
|
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
|
||||||
|
|
||||||
|
\usepackage{environ}% http://ctan.org/pkg/environ
|
||||||
|
\NewEnviron{aside}{%
|
||||||
|
\marginpar{\BODY}
|
||||||
|
}
|
||||||
|
|
||||||
|
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
|
||||||
|
|
||||||
|
\usepackage{soul}
|
||||||
|
\sethlcolor{my-pale-grey}
|
||||||
|
|
||||||
|
\let\OldTexttt\texttt
|
||||||
|
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\preto\Gin@extensions{png,}
|
||||||
|
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
|
||||||
|
\preto\Gin@extensions{gif,}
|
||||||
|
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
allcolors = my-blue
|
||||||
|
}
|
||||||
|
|
||||||
|
\usepackage{hypcap}
|
4424
test-bench-id31.org
@ -1,4 +1,4 @@
|
|||||||
% Created 2024-11-13 Wed 10:25
|
% Created 2024-11-13 Wed 17:06
|
||||||
% Intended LaTeX compiler: pdflatex
|
% Intended LaTeX compiler: pdflatex
|
||||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||||
|
|
||||||
@ -54,6 +54,7 @@ High authority control is then applied
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\chapter{Short Stroke Metrology System}
|
\chapter{Short Stroke Metrology System}
|
||||||
|
\label{sec:org598c753}
|
||||||
\label{sec:test_id31_metrology}
|
\label{sec:test_id31_metrology}
|
||||||
The control of the nano-hexapod requires an external metrology system measuring the relative position of the nano-hexapod top platform with respect to the granite.
|
The control of the nano-hexapod requires an external metrology system measuring the relative position of the nano-hexapod top platform with respect to the granite.
|
||||||
As the long-stroke (\(\approx 1 \,cm^3\)) metrology system was not developed yet, a stroke stroke (\(> 100\,\mu m^3\)) was used instead to validate the nano-hexapod control.
|
As the long-stroke (\(\approx 1 \,cm^3\)) metrology system was not developed yet, a stroke stroke (\(> 100\,\mu m^3\)) was used instead to validate the nano-hexapod control.
|
||||||
@ -91,6 +92,7 @@ This way, the gap between the sensor and the reference sphere is much larger (he
|
|||||||
|
|
||||||
Nevertheless, the metrology system still has limited measurement range, as when the spheres are moving perpendicularly to the beam axis, the reflected light does not coincide with the incident light, and for some perpendicular displacement, the interference is too small to be detected.
|
Nevertheless, the metrology system still has limited measurement range, as when the spheres are moving perpendicularly to the beam axis, the reflected light does not coincide with the incident light, and for some perpendicular displacement, the interference is too small to be detected.
|
||||||
\section{Metrology Kinematics}
|
\section{Metrology Kinematics}
|
||||||
|
\label{sec:org1981747}
|
||||||
\label{ssec:test_id31_metrology_kinematics}
|
\label{ssec:test_id31_metrology_kinematics}
|
||||||
|
|
||||||
The developed short-stroke metrology system is schematically shown in Figure \ref{fig:test_id31_metrology_kinematics}.
|
The developed short-stroke metrology system is schematically shown in Figure \ref{fig:test_id31_metrology_kinematics}.
|
||||||
@ -133,6 +135,7 @@ The five equations \eqref{eq:test_id31_metrology_kinematics} can be written in a
|
|||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\section{Rough alignment of the reference spheres}
|
\section{Rough alignment of the reference spheres}
|
||||||
|
\label{sec:orgd2560a6}
|
||||||
\label{ssec:test_id31_metrology_sphere_rought_alignment}
|
\label{ssec:test_id31_metrology_sphere_rought_alignment}
|
||||||
|
|
||||||
The two reference spheres are aligned with the rotation axis of the spindle.
|
The two reference spheres are aligned with the rotation axis of the spindle.
|
||||||
@ -147,6 +150,7 @@ This is probably limited due to the poor coaxiality between the cylinders and th
|
|||||||
However, the alignment precision should be enough to stay in the acceptance of the interferometers.
|
However, the alignment precision should be enough to stay in the acceptance of the interferometers.
|
||||||
|
|
||||||
\section{Tip-Tilt adjustment of the interferometers}
|
\section{Tip-Tilt adjustment of the interferometers}
|
||||||
|
\label{sec:orgb663f66}
|
||||||
\label{ssec:test_id31_metrology_alignment}
|
\label{ssec:test_id31_metrology_alignment}
|
||||||
|
|
||||||
The short stroke metrology system is placed on top of the main granite using a gantry made of granite blocs to have good vibration and thermal stability (Figure \ref{fig:short_stroke_metrology_overview}).
|
The short stroke metrology system is placed on top of the main granite using a gantry made of granite blocs to have good vibration and thermal stability (Figure \ref{fig:short_stroke_metrology_overview}).
|
||||||
@ -165,6 +169,7 @@ This is equivalent as to optimize the perpendicularity between the interferomete
|
|||||||
The lateral sensor heads (i.e. all except the top one), which are each fixed to a custom tip-tilt adjustment mechanism, are individually oriented such that the coupling efficient is maximized.
|
The lateral sensor heads (i.e. all except the top one), which are each fixed to a custom tip-tilt adjustment mechanism, are individually oriented such that the coupling efficient is maximized.
|
||||||
|
|
||||||
\section{Fine Alignment of reference spheres using interferometers}
|
\section{Fine Alignment of reference spheres using interferometers}
|
||||||
|
\label{sec:orgde2bc57}
|
||||||
\label{ssec:test_id31_metrology_sphere_fine_alignment}
|
\label{ssec:test_id31_metrology_sphere_fine_alignment}
|
||||||
|
|
||||||
Thanks to the good alignment of the two reference spheres with the spindle axis and to the fine adjustment of the interferometers orientations, the interferometer measurement is made possible during complete spindle rotation.
|
Thanks to the good alignment of the two reference spheres with the spindle axis and to the fine adjustment of the interferometers orientations, the interferometer measurement is made possible during complete spindle rotation.
|
||||||
@ -196,6 +201,7 @@ Remaining error after alignment is in the order of \(\pm5\,\mu\text{rad}\) for a
|
|||||||
|
|
||||||
|
|
||||||
\section{Estimated measurement volume}
|
\section{Estimated measurement volume}
|
||||||
|
\label{sec:org88488f3}
|
||||||
\label{ssec:test_id31_metrology_acceptance}
|
\label{ssec:test_id31_metrology_acceptance}
|
||||||
|
|
||||||
Because the interferometers are pointing to spheres and not flat surfaces, the lateral acceptance is limited.
|
Because the interferometers are pointing to spheres and not flat surfaces, the lateral acceptance is limited.
|
||||||
@ -222,6 +228,7 @@ The obtained lateral acceptance for pure displacements in any direction is estim
|
|||||||
|
|
||||||
|
|
||||||
\section{Estimated measurement errors}
|
\section{Estimated measurement errors}
|
||||||
|
\label{sec:org9791179}
|
||||||
\label{ssec:test_id31_metrology_errors}
|
\label{ssec:test_id31_metrology_errors}
|
||||||
|
|
||||||
When using the NASS, the accuracy of the sample's positioning is linked to the accuracy of the external metrology.
|
When using the NASS, the accuracy of the sample's positioning is linked to the accuracy of the external metrology.
|
||||||
@ -236,6 +243,7 @@ As the interferometer is pointing to a sphere and not to a plane, lateral motion
|
|||||||
Then, the reference spheres have some deviations with respect to an ideal sphere.
|
Then, the reference spheres have some deviations with respect to an ideal sphere.
|
||||||
They are meant to be used with capacitive sensors which are integrating the shape errors over large surfaces.
|
They are meant to be used with capacitive sensors which are integrating the shape errors over large surfaces.
|
||||||
When using interferometers, the size of the ``light spot'' on the sphere surface is a circle with a diameter \(\approx 50\,\mu m\), therefore the system is more sensitive to shape errors with small features.
|
When using interferometers, the size of the ``light spot'' on the sphere surface is a circle with a diameter \(\approx 50\,\mu m\), therefore the system is more sensitive to shape errors with small features.
|
||||||
|
|
||||||
As the interferometer light is travelling in air, the measured distance is sensitive to any variation in the refractive index of the air.
|
As the interferometer light is travelling in air, the measured distance is sensitive to any variation in the refractive index of the air.
|
||||||
Therefore, any variation of air temperature, pressure or humidity will induce measurement errors.
|
Therefore, any variation of air temperature, pressure or humidity will induce measurement errors.
|
||||||
For a measurement length of \(40\,mm\), a temperature variation of \(0.1\,{}^oC\) induces an errors in the distance measurement of \(\approx 4\,nm\).
|
For a measurement length of \(40\,mm\), a temperature variation of \(0.1\,{}^oC\) induces an errors in the distance measurement of \(\approx 4\,nm\).
|
||||||
@ -259,5 +267,164 @@ The effect of the noise on the translation and rotation measurements is estimate
|
|||||||
\caption{\label{fig:test_id31_metrology_errors}Estimated measurement errors of the metrology. Cross-coupling between lateral motion and vertical measurement is shown in (\subref{fig:test_id31_xy_map_sphere}). Effect of interferometer noise on the measured translations and rotations is shown in (\subref{fig:test_id31_interf_noise}).}
|
\caption{\label{fig:test_id31_metrology_errors}Estimated measurement errors of the metrology. Cross-coupling between lateral motion and vertical measurement is shown in (\subref{fig:test_id31_xy_map_sphere}). Effect of interferometer noise on the measured translations and rotations is shown in (\subref{fig:test_id31_interf_noise}).}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
\chapter{Identified Open Loop Plant}
|
||||||
|
\label{sec:org7b9ff96}
|
||||||
|
\label{sec:test_id31_open_loop_plant}
|
||||||
|
\section{First Open-Loop Plant Identification}
|
||||||
|
\label{sec:orgd1bd080}
|
||||||
|
\label{ssec:test_id31_open_loop_plant_first_id}
|
||||||
|
|
||||||
|
The plant dynamics is first identified for a fixed spindle angle (at \(0\,\text{deg}\)) and without any payload.
|
||||||
|
The model dynamics is also identified in the same conditions.
|
||||||
|
|
||||||
|
A first comparison between the model and the measured dynamics is done in Figure \ref{fig:test_id31_first_id}.
|
||||||
|
A good match can be observed for the diagonal dynamics (except the high frequency modes which are not modeled).
|
||||||
|
However, the coupling for the transfer function from command signals \(\mathbf{u}\) to estimated strut motion from the external metrology \(e\mathbf{\mathcal{L}}\) is larger than expected (Figure \ref{fig:test_id31_first_id_int}).
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_first_id_int.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_first_id_int}External Metrology}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_first_id_iff.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_first_id_iff}Force Sensors}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:test_id31_first_id}Comparison between the measured dynamics and the multi-body model dynamics. Both for the external metrology (\subref{fig:test_id31_first_id_int}) and force sensors (\subref{fig:test_id31_first_id_iff}).}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Better Angular Alignment}
|
||||||
|
\label{sec:org205ba5e}
|
||||||
|
\label{ssec:test_id31_open_loop_plant_rz_alignment}
|
||||||
|
|
||||||
|
One possible explanation of the increased coupling observed in Figure \ref{fig:test_id31_first_id_int} is the poor alignment between the external metrology axes (i.e. the interferometer supports) and the nano-hexapod axes.
|
||||||
|
To estimate this alignment, a decentralized low-bandwidth feedback controller based on the nano-hexapod encoders is implemented.
|
||||||
|
This allowed to perform two straight movements of the nano-hexapod along the \(x\) and \(y\) axes in the frame of the nano-hexapod.
|
||||||
|
During these two movements, the external metrology measurement is recorded and shown in Figure \ref{fig:test_id31_Rz_align_error}.
|
||||||
|
It was found that there is a misalignment of 2.7 degrees (rotation along the vertical axis) between the interferometer axes and nano-hexapod axes.
|
||||||
|
This was corrected by adding an offset to the spindle angle.
|
||||||
|
To check that the alignment has improved, the same movement was performed using the nano-hexapod while recording the signal of the external metrology.
|
||||||
|
Results shown in Figure \ref{fig:test_id31_Rz_align_correct} are indeed indicating much better alignment.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/test_id31_Rz_align_error.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_Rz_align_error}Before alignment}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/test_id31_Rz_align_correct.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_Rz_align_correct}After alignment}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:test_id31_Rz_align_error}Measurement of the Nano-Hexapod axes in the frame of the external metrology. Before alignment (\subref{fig:test_id31_Rz_align_error}) and after alignment (\subref{fig:test_id31_Rz_align_correct}).}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Open-Loop Identification after alignment}
|
||||||
|
\label{sec:orgcb4c885}
|
||||||
|
\label{ssec:test_id31_open_loop_plant_after_alignment}
|
||||||
|
|
||||||
|
The plant dynamics is identified after the fine alignment and is compared with the model dynamics in Figure \ref{fig:test_id31_first_id_int_better_rz_align}.
|
||||||
|
Compared to the initial identification shown in Figure \ref{fig:test_id31_first_id_int}, the obtained coupling has decreased and is close to the coupling obtained with the multi-body model.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/test_id31_first_id_int_better_rz_align.png}
|
||||||
|
\caption{\label{fig:test_id31_first_id_int_better_rz_align}Decrease of the coupling with better Rz alignment}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Effect of Payload Mass}
|
||||||
|
\label{sec:org497746b}
|
||||||
|
\label{ssec:test_id31_open_loop_plant_mass}
|
||||||
|
|
||||||
|
The system dynamics was identified with four payload conditions that are shown in Figure \ref{fig:test_id31_picture_masses}.
|
||||||
|
The obtained direct terms are compared with the model dynamics in Figure \ref{fig:test_nhexa_comp_simscape_diag_masses}.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.24\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_id31_picture_mass_m0.jpg}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_picture_mass_m0}$m=0\,\text{kg}$}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.24\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_id31_picture_mass_m1.jpg}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_picture_mass_m1}$m=13\,\text{kg}$}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.24\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_id31_picture_mass_m2.jpg}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_picture_mass_m2}$m=26\,\text{kg}$}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.24\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_id31_picture_mass_m3.jpg}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_picture_mass_m3}$m=39\,\text{kg}$}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:test_id31_picture_masses}The four tested payload conditions. (\subref{fig:test_id31_picture_mass_m0}) without payload. (\subref{fig:test_id31_picture_mass_m1}) with \(13\,\text{kg}\) payload. (\subref{fig:test_id31_picture_mass_m2}) with \(26\,\text{kg}\) payload. (\subref{fig:test_id31_picture_mass_m3}) with \(39\,\text{kg}\) payload.}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_comp_simscape_int_diag_masses.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_comp_simscape_int_diag_masses}from $u$ to $d_e$}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_comp_simscape_iff_diag_masses.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_comp_simscape_iff_diag_masses}from $u$ to $V_s$}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:test_nhexa_comp_simscape_diag_masses}Comparison of the diagonal elements (i.e. ``direct'' terms) of the measured FRF matrix and the dynamics identified from the Simscape model. Both for the dynamics from \(u\) to \(e\mathcal{L}\) (\subref{fig:test_id31_comp_simscape_int_diag_masses}) and from \(u\) to \(V_s\) (\subref{fig:test_id31_comp_simscape_iff_diag_masses})}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Effect of Rotation}
|
||||||
|
\label{sec:orgff15d08}
|
||||||
|
\label{ssec:test_id31_open_loop_plant_rotation}
|
||||||
|
|
||||||
|
The dynamics was then identified while the Spindle was rotating at constant velocity.
|
||||||
|
Three identification experiments were performed: no spindle rotation, spindle rotation at \(36\,\text{deg}/s\) and at \(180\,\text{deg}/s\).
|
||||||
|
|
||||||
|
The comparison of the obtained dynamics from command signal \(u\) to estimated strut error \(e\mathcal{L}\) is done in Figure \ref{fig:test_id31_effect_rotation}.
|
||||||
|
Both direct terms (Figure \ref{fig:test_id31_effect_rotation_direct}) and coupling terms (Figure \ref{fig:test_id31_effect_rotation_coupling}) are unaffected by the rotation.
|
||||||
|
The same can be observed for the dynamics from the command signal to the encoders and to the force sensors.
|
||||||
|
This confirms that the rotation has no significant effect on the plant dynamics.
|
||||||
|
This also indicates that the metrology kinematics is correct and is working in real time.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_effect_rotation_direct.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_effect_rotation_direct}Direct terms}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_id31_effect_rotation_coupling.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:test_id31_effect_rotation_coupling}Coupling terms}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:test_id31_effect_rotation}Effect of the spindle rotation on the plant dynamics from \(u\) to \(e\mathcal{L}\). Three rotational velocities are tested (\(0\,\text{deg}/s\), \(36\,\text{deg}/s\) and \(180\,\text{deg}/s\)). Both direct terms (\subref{fig:test_id31_effect_rotation_direct}) and coupling terms (\subref{fig:test_id31_effect_rotation_coupling}) are displayed.}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Conclusion}
|
||||||
|
\label{sec:orgd703c88}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Good match between the model and experiment
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\printbibliography[heading=bibintoc,title={Bibliography}]
|
\printbibliography[heading=bibintoc,title={Bibliography}]
|
||||||
\end{document}
|
\end{document}
|
||||||
|