nass-simscape/org/uncertainty_optimal_stiffness.org

79 KiB

Determination of the optimal nano-hexapod's stiffness

Introduction   ignore

As shown before, many parameters other than the nano-hexapod itself do influence the plant dynamics:

  • The micro-station compliance (studied here)
  • The payload mass and dynamical properties (studied here and here)
  • The experimental conditions, mainly the spindle rotation speed (studied here)

As seen before, the stiffness of the nano-hexapod greatly influence the effect of such parameters.

We wish here to see if we can determine an optimal stiffness of the nano-hexapod such that:

The overall goal is to design a nano-hexapod that will allow the highest possible control bandwidth.

Spindle Rotation Speed

<<sec:spindle_rotation_speed>>

Introduction   ignore

In this section, we look at the effect of the spindle rotation speed on the plant dynamics.

The rotation speed will have an effect due to the Coriolis effect.

Initialization

We initialize all the stages with the default parameters.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();

We use a sample mass of 10kg.

  initializeSample('mass', 10);

We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. We however include gravity.

  initializeSimscapeConfiguration('gravity', true);
  initializeDisturbances('enable', false);
  initializeLoggingConfiguration('log', 'none');
  initializeController();

Identification when rotating at maximum speed

We identify the dynamics for the following spindle rotation speeds Rz_rpm:

  Rz_rpm = linspace(0, 60, 6);

And for the following nano-hexapod actuator stiffness Ks:

  Ks = logspace(3,9,7); % [N/m]

Change of dynamics

We plot the change of dynamics due to the change of the spindle rotation speed (from 0rpm to 60rpm):

  • Figure fig:opt_stiffness_wz_iff: from actuator force $\tau$ to force sensor $\tau_m$ (IFF plant)
  • Figure fig:opt_stiffness_wz_dvf: from actuator force $\tau$ to actuator relative displacement $d\mathcal{L}$ (Decentralized positioning plant)
  • Figure fig:opt_stiffness_wz_fx_dx: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_x$ (Centralized positioning plant)
  • Figure fig:opt_stiffness_wz_coupling: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_y$ (coupling of the centralized positioning plant)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opti_stiffness_iff_root_locus.png
Root Locus plot for IFF control when not rotating (in red) and when rotating at 60rpm (in blue) for 4 different nano-hexapod stiffnesses (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_wz_iff.png
Change of dynamics from actuator $\tau$ to actuator force sensor $\tau_m$ for a spindle rotation speed from 0rpm to 60rpm (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_wz_dvf.png
Change of dynamics from actuator force $\tau$ to actuator displacement $d\mathcal{L}$ for a spindle rotation speed from 0rpm to 60rpm (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_wz_fx_dx.png
Change of dynamics from force $\mathcal{F}_x$ to displacement $\mathcal{X}_x$ for a spindle rotation speed from 0rpm to 60rpm (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_wz_coupling.png
Change of Coupling from force $\mathcal{F}_x$ to displacement $\mathcal{X}_y$ for a spindle rotation speed from 0rpm to 60rpm (png, pdf)

Conclusion   ignore

The leg stiffness should be at higher than $k_i = 10^4\ [N/m]$ such that the main resonance frequency does not shift too much when rotating. For the coupling, it is more difficult to conclude about the minimum required leg stiffness.

Note that we can use very soft nano-hexapod if we limit the spindle rotating speed.

Micro-Station Compliance Effect

<<sec:micro_station_compliance>>

Introduction   ignore

  • take the 6dof compliance of the micro-station
  • simple model + uncertainty

Identification of the micro-station compliance

We initialize all the stages with the default parameters.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod('type', 'compliance');

We put nothing on top of the micro-hexapod.

  initializeAxisc('type', 'none');
  initializeMirror('type', 'none');
  initializeNanoHexapod('type', 'none');
  initializeSample('type', 'none');

And we identify the dynamics from forces/torques applied on the micro-hexapod top platform to the motion of the micro-hexapod top platform at the same point.

The diagonal element of the identified Micro-Station compliance matrix are shown in Figure fig:opt_stiff_micro_station_compliance.

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiff_micro_station_compliance.png
Identified Compliance of the Micro-Station (png, pdf)

Identification of the dynamics with a rigid micro-station

We now identify the dynamics when the micro-station is rigid. This is equivalent of identifying the dynamics of the nano-hexapod when fixed to a rigid ground.

We also choose the sample to be rigid and to have a mass of 10kg.

  initializeSample('type', 'rigid', 'mass', 10);

As before, we identify the dynamics for the following actuator stiffnesses:

  Ks = logspace(3,9,7); % [N/m]

Identification of the dynamics with a flexible micro-station

We now initialize all the micro-station stages to be flexible. And we identify the dynamics of the nano-hexapod.

Obtained Dynamics

We plot the change of dynamics due to the compliance of the Micro-Station. The solid curves are corresponding to the nano-hexapod without the micro-station, and the dashed curves with the micro-station:

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_micro_station_iff.png
Change of dynamics from actuator $\tau$ to actuator force sensor $\tau_m$ due to the micro-station compliance (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_micro_station_dvf.png
Change of dynamics from actuator force $\tau$ to actuator displacement $d\mathcal{L}$ due to the micro-station compliance (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_micro_station_fx_dx.png
Change of dynamics from force $\mathcal{F}_x$ to displacement $\mathcal{X}_x$ due to the micro-station compliance (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_micro_station_fz_dz.png
Change of dynamics from force $\mathcal{F}_z$ to displacement $\mathcal{X}_z$ due to the micro-station compliance (png, pdf)

Conclusion   ignore

The dynamics of the nano-hexapod is not affected by the micro-station dynamics (compliance) when the stiffness of the legs is less than $10^6\ [N/m]$. When the nano-hexapod is stiff ($k>10^7\ [N/m]$), the compliance of the micro-station appears in the primary plant.

Payload "Impedance" Effect

<<sec:payload_impedance>>

Introduction   ignore

Initialization

We initialize all the stages with the default parameters.

We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none

  initializeDisturbances('enable', false);

We set the controller type to Open-Loop, and we do not need to log any signal.

  initializeSimscapeConfiguration('gravity', true);
  initializeController();
  initializeLoggingConfiguration('log', 'none');
  initializeReferences();

Identification of the dynamics while change the payload dynamics

We make the following change of payload dynamics:

  • Change of mass: from 1kg to 50kg
  • Change of resonance frequency: from 50Hz to 500Hz
  • The damping ratio of the payload is fixed to $\xi = 0.2$

We identify the dynamics for the following payload masses Ms and nano-hexapod leg's stiffnesses Ks:

  Ms = [1, 20, 50]; % [Kg]
  Ks = logspace(3,9,7); % [N/m]

We then identify the dynamics for the following payload resonance frequencies Fs:

  Fs = [50, 200, 500]; % [Hz]

Change of dynamics for the primary controller

Frequency variation

We here compare the dynamics for the same payload mass, but different stiffness resulting in different resonance frequency of the payload:

We can see two mass lines for the soft nano-hexapod (Figure fig:opt_stiffness_payload_freq_fz_dz):

  • The first mass line corresponds to $\frac{1}{(m_n + m_p)s^2}$ where $m_p = 10\ [kg]$ is the mass of the payload and $m_n = 15\ [Kg]$ is the mass of the nano-hexapod top platform and attached mirror
  • The second mass line corresponds to $\frac{1}{m_n s^2}$
  • The zero corresponds to the resonance of the payload alone (fixed nano-hexapod's top platform)

/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_freq_fz_dz.png

Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload resonance frequency, both for a soft nano-hexapod and a stiff nano-hexapod
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_freq_all.png
Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload resonance frequency (png, pdf)

Mass variation

We here compare the dynamics for different payload mass with the same resonance frequency (100Hz):

We can see here that for the soft nano-hexapod:

  • the first resonance $\omega_n$ is changing with the mass of the payload as $\omega_n = \sqrt{\frac{k_n}{m_p + m_n}}$ with $k_p$ the stiffness of the nano-hexapod, $m_p$ the payload's mass and $m_n$ the mass of the nano-hexapod top platform
  • the first mass line corresponding to $\frac{1}{(m_p + m_n)s^2}$ is changing with the payload mass
  • the zero at 100Hz is not changing as it corresponds to the resonance of the payload itself
  • the second mass line does not change

/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_mass_fz_dz.png

Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload mass, both for a soft nano-hexapod and a stiff nano-hexapod
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_mass_all.png
Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload mass (png, pdf)

Total variation

We now plot the total change of dynamics due to change of the payload (Figures fig:opt_stiffness_payload_impedance_all_fz_dz and fig:opt_stiffness_payload_impedance_fz_dz):

  • mass from 1kg to 50kg
  • main resonance from 50Hz to 500Hz
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_impedance_all_fz_dz.png
Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload dynamics, both for a soft nano-hexapod and a stiff nano-hexapod (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_payload_impedance_fz_dz.png
Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload dynamics, both for a soft nano-hexapod and a stiff nano-hexapod (png, pdf)

Conclusion   ignore

Total Change of dynamics

We now consider the total change of nano-hexapod dynamics due to:

  • Gk_wz_err - Change of spindle rotation speed
  • Gf_err and Gm_err - Change of payload resonance
  • Gmf_err and Gmr_err - Micro-Station compliance

The obtained dynamics are shown:

And finally, in Figures fig:opt_stiffness_plant_dynamics_task_space and fig:opt_stiffness_plant_dynamics_task_space_colors are shown an animation of the change of dynamics with the nano-hexapod's stiffness.

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png
Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^3\ [N/m]$ (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png
Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^5\ [N/m]$ (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png
Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^7\ [N/m]$ (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png
Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^9\ [N/m]$ (png, pdf)
  h = figure;
  filename = 'figs/opt_stiffness_plant_dynamics_task_space.gif';

  for i = 1:length(Ks)
      clf(h)
      ax1 = subplot(2, 1, 1);
      hold on;
      for j = 1:length(Fs)
        plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-');
      end
      for j = 1:length(Ms)
        plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-');
      end
      for j = 1:length(Rz_rpm)
        plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-');
      end
      plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-');
      plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-');
      hold off;
      set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
      ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
      ylim([1e-10, 1e-1]);
      title(sprintf('$k = %.0e$ [N/m]', Ks(i)))

      ax2 = subplot(2, 1, 2);
      hold on;
      for j = 1:length(Rz_rpm)
        plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-');
      end
      for j = 1:length(Fs)
        plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-');
      end
      for j = 1:length(Ms)
        plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-');
      end
      plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-');
      plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-');
      hold off;
      set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
      ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
      ylim([-270, 90]);
      yticks([-360:90:360]);

      linkaxes([ax1,ax2],'x');
      xlim([freqs(1), freqs(end)]);

      set(h, 'visible', 'off');
      set(h, 'pos', [0, 0, 1200, 800]);
      drawnow;

      % Capture the plot as an image
      frame = getframe(h);
      im = frame2im(frame);
      [imind,cm] = rgb2ind(im,256);

      % Write to the GIF File
      if i == 1
          imwrite(imind,cm,filename,'gif','DelayTime',1.0,'Loopcount',inf);
      else
          imwrite(imind,cm,filename,'gif','DelayTime',1.0,'WriteMode','append');
      end
  end

  set(h, 'visible', 'on');
  ans = filename;

/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_task_space.gif

Variability of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$ with varying nano-hexapod stiffness
  h = figure;
  filename = 'figs/opt_stiffness_plant_dynamics_task_space_colors.gif';

  for i = 1:length(Ks)
      clf(h)
      ax1 = subplot(2, 1, 1);
      hold on;
      for j = 1:length(Fs)
          set(gca,'ColorOrderIndex',1);
          plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-');
      end
      for j = 1:length(Ms)
          set(gca,'ColorOrderIndex',2);
          plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-');
      end
      for j = 2:length(Rz_rpm)
          set(gca,'ColorOrderIndex',3);
          plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-');
      end
      set(gca,'ColorOrderIndex',4);
      plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-');
      plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-');
      hold off;
      set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
      ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
      ylim([1e-10, 1e-1]);
      title(sprintf('$k = %.0e$ [N/m]', Ks(i)))

      ax2 = subplot(2, 1, 2);
      hold on;
      for j = 1:length(Fs)
          set(gca,'ColorOrderIndex',1);
          plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-');
      end
      for j = 1:length(Ms)
          set(gca,'ColorOrderIndex',2);
          plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-');
      end
      for j = 1:length(Rz_rpm)
          set(gca,'ColorOrderIndex',3);
          plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-');
      end
      set(gca,'ColorOrderIndex',4);
      plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-');
      plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-');
      hold off;
      set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
      ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
      ylim([-270, 90]);
      yticks([-360:90:360]);

      linkaxes([ax1,ax2],'x');
      xlim([freqs(1), freqs(end)]);

      set(h, 'visible', 'off');
      set(h, 'pos', [0, 0, 1200, 800]);
      drawnow;

      % Capture the plot as an image
      frame = getframe(h);
      im = frame2im(frame);
      [imind,cm] = rgb2ind(im,256);

      % Write to the GIF File
      if i == 1
          imwrite(imind,cm,filename,'gif','DelayTime',1.0,'Loopcount',inf);
      else
          imwrite(imind,cm,filename,'gif','DelayTime',1.0,'WriteMode','append');
      end
  end

  set(h, 'visible', 'on');
  ans = filename;

/tdehaeze/nass-simscape/media/commit/2389e6ba8e0d035d92f9713e72288fb5bb25613d/org/figs/opt_stiffness_plant_dynamics_task_space_colors.gif

Variability of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$ with varying nano-hexapod stiffness