Add figures to explain the multi-body model
BIN
figs/nhexa_actuator_model.pdf
Normal file
BIN
figs/nhexa_actuator_model.png
Normal file
After Width: | Height: | Size: 16 KiB |
1017
figs/nhexa_actuator_model.svg
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
figs/nhexa_simscape_screenshot.jpg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
figs/nhexa_simscape_screenshot.png
Normal file
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 164 KiB |
BIN
figs/nhexa_stewart_model_def.pdf
Normal file
BIN
figs/nhexa_stewart_model_def.png
Normal file
After Width: | Height: | Size: 49 KiB |
3211
figs/nhexa_stewart_model_def.svg
Normal file
After Width: | Height: | Size: 250 KiB |
BIN
figs/nhexa_stewart_model_input_outputs.pdf
Normal file
BIN
figs/nhexa_stewart_model_input_outputs.png
Normal file
After Width: | Height: | Size: 28 KiB |
2910
figs/nhexa_stewart_model_input_outputs.svg
Normal file
After Width: | Height: | Size: 234 KiB |
@ -13,11 +13,11 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
|
|||||||
args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad]
|
args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad]
|
||||||
%% Actuators
|
%% Actuators
|
||||||
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
|
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
|
||||||
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 380000
|
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 1e6
|
||||||
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e4
|
||||||
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
|
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
|
||||||
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
|
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
|
||||||
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 5
|
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 50
|
||||||
args.actuator_cp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
args.actuator_cp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
||||||
args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100
|
args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100
|
||||||
args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50
|
args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50
|
||||||
|
@ -10,6 +10,18 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{stewart65_platf_with_six_degrees_freed,
|
||||||
|
author = {Stewart, Doug},
|
||||||
|
title = {A Platform With Six Degrees of Freedom},
|
||||||
|
journal = {Proceedings of the institution of mechanical engineers},
|
||||||
|
volume = 180,
|
||||||
|
number = 1,
|
||||||
|
pages = {371--386},
|
||||||
|
year = 1965,
|
||||||
|
publisher = {Sage Publications Sage UK: London, England},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@article{preumont07_six_axis_singl_stage_activ,
|
@article{preumont07_six_axis_singl_stage_activ,
|
||||||
author = {A. Preumont and M. Horodinca and I. Romanescu and B. de
|
author = {A. Preumont and M. Horodinca and I. Romanescu and B. de
|
||||||
Marneffe and M. Avraam and A. Deraemaeker and F. Bossens and
|
Marneffe and M. Avraam and A. Deraemaeker and F. Bossens and
|
||||||
|
@ -896,29 +896,41 @@ Both have no stiffness along their DoF and are mass-less.
|
|||||||
|
|
||||||
**** Actuators
|
**** Actuators
|
||||||
|
|
||||||
In its simplest form, the actuators are modelled with one prismatic joint having some internal stiffness and damping.
|
In its simplest form, the actuators are modelled with one prismatic joint having some internal stiffness $k_a$ and damping $c_a$, and a force source $f$.
|
||||||
|
|
||||||
As was shown
|
As was shown using the 3DoF rotating model, having a parallel stiffness $k_p$ with the force sensor permits to regain the guaranteed stability of decentralized IFF when the spindle is rotating.
|
||||||
|
|
||||||
- [ ] Add schematic of the 1DoF model (possibly with added parallel stiffness)
|
A force sensor with output $f_m$ is added as well as a relative motion sensor with output $d_L$.
|
||||||
- [ ] Add model parameters for the 2DoF actuator used for the model (choose something reasonable for an APA)
|
The model of the nano-hexapod actuators used during the conceptual phase are shown in Figure ref:fig:nhexa_actuator_model with the parameters summarized in Table ref:tab:nhexa_actuator_parameters.
|
||||||
|
|
||||||
|
Thanks to the flexibility of the multi-body model, the model of the actuators can later be refined.
|
||||||
|
|
||||||
- Actuators: can be modelled as wanted
|
#+attr_latex: :options [b]{0.6\linewidth}
|
||||||
- Talk about 2DoF and 1DoF
|
#+begin_minipage
|
||||||
|
#+name: fig:nhexa_actuator_model
|
||||||
|
#+caption: Model of the nano-hexapod actuators
|
||||||
During the conceptual design: Actuators = 1DoF + Encoder (mass-less)
|
#+attr_latex: :float nil :scale 1
|
||||||
- k = 1N/um
|
[[file:figs/nhexa_actuator_model.png]]
|
||||||
- Force sensor
|
#+end_minipage
|
||||||
|
\hfill
|
||||||
|
#+attr_latex: :options [b]{0.38\linewidth}
|
||||||
|
#+begin_minipage
|
||||||
|
#+begin_scriptsize
|
||||||
|
#+latex: \centering
|
||||||
|
#+attr_latex: :environment tabularx :width 0.4\linewidth :placement [b] :align Xl
|
||||||
|
#+attr_latex: :booktabs t :float nil :center nil
|
||||||
|
| | Value |
|
||||||
|
|-------+-----------------|
|
||||||
|
| $k_a$ | $1\,N/\mu m$ |
|
||||||
|
| $c_a$ | $50\,N/(m/s)$ |
|
||||||
|
| $k_p$ | $0.05\,N/\mu m$ |
|
||||||
|
#+latex: \captionof{table}{\label{tab:nhexa_actuator_parameters}Actuator parameters}
|
||||||
|
#+end_scriptsize
|
||||||
|
#+end_minipage
|
||||||
|
|
||||||
** Model Dynamics
|
** Model Dynamics
|
||||||
<<ssec:nhexa_model_dynamics>>
|
<<ssec:nhexa_model_dynamics>>
|
||||||
|
|
||||||
- [ ] Make schematic with inputs and outputs (maybe add frames {F} and {M} to connect to outside world)
|
|
||||||
- [ ] Screenshot of the obtained multi-body model ?
|
|
||||||
|
|
||||||
- If all is perfect (mass-less struts, perfect joints, etc...), maybe compare analytical model with simscape model?
|
- If all is perfect (mass-less struts, perfect joints, etc...), maybe compare analytical model with simscape model?
|
||||||
- Say something about the model order
|
- Say something about the model order
|
||||||
Model order is 12, and that we can compute modes from matrices M and K, compare with the Simscape model
|
Model order is 12, and that we can compute modes from matrices M and K, compare with the Simscape model
|
||||||
@ -926,6 +938,22 @@ During the conceptual design: Actuators = 1DoF + Encoder (mass-less)
|
|||||||
- Compare with analytical formulas (see number of states)
|
- Compare with analytical formulas (see number of states)
|
||||||
- [ ] Effect of parallel on IFF plant?
|
- [ ] Effect of parallel on IFF plant?
|
||||||
|
|
||||||
|
#+attr_latex: :options [b]{0.6\linewidth}
|
||||||
|
#+begin_minipage
|
||||||
|
#+name: fig:nhexa_stewart_model_input_outputs
|
||||||
|
#+caption: Nano-Hexapod plant with inputs and outputs. Frames $\{F\}$ and $\{M\}$ can be connected to other elements in the multi-body models.
|
||||||
|
#+attr_latex: :scale 1 :float nil
|
||||||
|
[[file:figs/nhexa_stewart_model_input_outputs.png]]
|
||||||
|
#+end_minipage
|
||||||
|
\hfill
|
||||||
|
#+attr_latex: :options [b]{0.35\linewidth}
|
||||||
|
#+begin_minipage
|
||||||
|
#+name: fig:nhexa_simscape_screenshot
|
||||||
|
#+caption: 3D representation of the multi-body model
|
||||||
|
#+attr_latex: :width 0.90\linewidth :float nil
|
||||||
|
[[file:figs/nhexa_simscape_screenshot.jpg]]
|
||||||
|
#+end_minipage
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Plant using Analytical Equations
|
%% Plant using Analytical Equations
|
||||||
% Stewart platform definition
|
% Stewart platform definition
|
||||||
@ -1088,6 +1116,105 @@ xlim([freqs(1), freqs(end)]);
|
|||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
initializeSimplifiedNanoHexapod();
|
initializeSimplifiedNanoHexapod();
|
||||||
|
initializeSample('type', 'cylindrical', 'm', 50);
|
||||||
|
initializeLoggingConfiguration('log', 'none');
|
||||||
|
initializeController('type', 'open-loop');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
% Input/Output definition
|
||||||
|
clear io; io_i = 1;
|
||||||
|
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||||
|
io(io_i) = linio([mdl, '/plant'], 2, 'openoutput', [], 'dL'); io_i = io_i + 1; % Encoders [m]
|
||||||
|
io(io_i) = linio([mdl, '/plant'], 2, 'openoutput', [], 'fn'); io_i = io_i + 1; % Force Sensors [N]
|
||||||
|
|
||||||
|
% With no payload
|
||||||
|
G = linearize(mdl, io);
|
||||||
|
G.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||||
|
G.OutputName = {'dL1', 'dL2', 'dL3', 'dL4', 'dL5', 'dL6', ...
|
||||||
|
'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
%% Diagonal elements of the FRF matrix from u to de
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||||
|
'DisplayName', '$d_{ei}/u_i$ - Model')
|
||||||
|
for i = 2:6
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-9, 1e-4]);
|
||||||
|
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
leg.ItemTokenSize(1) = 15;
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i = 1:6
|
||||||
|
plot(freqs, 180/pi*angle(squeeze(freqresp(G(i,i), freqs, 'Hz'))), 'color', [colors(2,:),0.5]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||||
|
ylim([-180, 180]);
|
||||||
|
yticks([-180, -90, 0, 90, 180]);
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([freqs(1), freqs(end)]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
%% Diagonal elements of the FRF matrix from u to de
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
ax1 = nexttile([2,1]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(6+1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||||
|
'DisplayName', '$d_{ei}/u_i$ - Model')
|
||||||
|
for i = 2:6
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(6+i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
for i = 1:5
|
||||||
|
for j = i+1:6
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(6+i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
|
||||||
|
ylim([1e-5, 1e2]);
|
||||||
|
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||||
|
leg.ItemTokenSize(1) = 15;
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
hold on;
|
||||||
|
for i = 1:6
|
||||||
|
plot(freqs, 180/pi*angle(squeeze(freqresp(G(6+i,i), freqs, 'Hz'))), 'color', [colors(2,:),0.5]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||||
|
ylim([-180, 180]);
|
||||||
|
yticks([-180, -90, 0, 90, 180]);
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([freqs(1), freqs(end)]);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Conclusion
|
** Conclusion
|
||||||
@ -1447,11 +1574,11 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
|
|||||||
args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad]
|
args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad]
|
||||||
%% Actuators
|
%% Actuators
|
||||||
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
|
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
|
||||||
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 380000
|
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 1e6
|
||||||
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e4
|
||||||
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
|
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
|
||||||
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
|
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
|
||||||
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 5
|
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 50
|
||||||
args.actuator_cp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
args.actuator_cp (1,1) double {mustBeNumeric, mustBeNonnegative} = 0
|
||||||
args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100
|
args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100
|
||||||
args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50
|
args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
% Created 2025-02-10 Mon 14:23
|
% Created 2025-02-10 Mon 17:32
|
||||||
% 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}
|
||||||
|
|
||||||
@ -235,18 +235,18 @@ Equation \eqref{eq:nhexa_loop_closure_velocity_bis} can be rearranged in a matri
|
|||||||
|
|
||||||
The matrix \(\bm{J}\) is called the Jacobian matrix, and is defined by \eqref{eq:nhexa_jacobian}, with:
|
The matrix \(\bm{J}\) is called the Jacobian matrix, and is defined by \eqref{eq:nhexa_jacobian}, with:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \(\hat{\bm{s}}_i\) the orientation of the struts expressed in \(\{A\}\)
|
\item \({}^A\hat{\bm{s}}_i\) the orientation of the struts expressed in \(\{A\}\)
|
||||||
\item \(\bm{b}_i\) the position of the joints with respect to \(O_B\) and express in \(\{A\}\)
|
\item \({}^A\bm{b}_i\) the position of the joints with respect to \(O_B\) and express in \(\{A\}\)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\begin{equation}\label{eq:nhexa_jacobian}
|
\begin{equation}\label{eq:nhexa_jacobian}
|
||||||
\bm{J} = \begin{bmatrix}
|
\bm{J} = \begin{bmatrix}
|
||||||
{\hat{\bm{s}}_1}^T & (\bm{b}_1 \times \hat{\bm{s}}_1)^T \\
|
{{}^A\hat{\bm{s}}_1}^T & ({}^A\bm{b}_1 \times {}^A\hat{\bm{s}}_1)^T \\
|
||||||
{\hat{\bm{s}}_2}^T & (\bm{b}_2 \times \hat{\bm{s}}_2)^T \\
|
{{}^A\hat{\bm{s}}_2}^T & ({}^A\bm{b}_2 \times {}^A\hat{\bm{s}}_2)^T \\
|
||||||
{\hat{\bm{s}}_3}^T & (\bm{b}_3 \times \hat{\bm{s}}_3)^T \\
|
{{}^A\hat{\bm{s}}_3}^T & ({}^A\bm{b}_3 \times {}^A\hat{\bm{s}}_3)^T \\
|
||||||
{\hat{\bm{s}}_4}^T & (\bm{b}_4 \times \hat{\bm{s}}_4)^T \\
|
{{}^A\hat{\bm{s}}_4}^T & ({}^A\bm{b}_4 \times {}^A\hat{\bm{s}}_4)^T \\
|
||||||
{\hat{\bm{s}}_5}^T & (\bm{b}_5 \times \hat{\bm{s}}_5)^T \\
|
{{}^A\hat{\bm{s}}_5}^T & ({}^A\bm{b}_5 \times {}^A\hat{\bm{s}}_5)^T \\
|
||||||
{\hat{\bm{s}}_6}^T & (\bm{b}_6 \times \hat{\bm{s}}_6)^T
|
{{}^A\hat{\bm{s}}_6}^T & ({}^A\bm{b}_6 \times {}^A\hat{\bm{s}}_6)^T
|
||||||
\end{bmatrix}
|
\end{bmatrix}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ It can be computed once at the rest position and used for both forward and inver
|
|||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/nhexa_forward_kinematics_approximate_errors.png}
|
\includegraphics[scale=1]{figs/nhexa_forward_kinematics_approximate_errors.png}
|
||||||
\caption{\label{fig:nhexa_forward_kinematics_approximate_errors}Errors associated with the use of the Jacobian matrix to solve the forward kinematic problem}
|
\caption{\label{fig:nhexa_forward_kinematics_approximate_errors}Errors associated with the use of the Jacobian matrix to solve the forward kinematic problem. A Stewart platform with an height of \(100\,mm\) was used to perform this analysis}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\paragraph{Static Forces}
|
\paragraph{Static Forces}
|
||||||
@ -425,73 +425,140 @@ While a reasonable geometric configuration will be used to validate the NASS dur
|
|||||||
|
|
||||||
\chapter{Multi-Body Model}
|
\chapter{Multi-Body Model}
|
||||||
\label{sec:nhexa_model}
|
\label{sec:nhexa_model}
|
||||||
|
\textbf{Goal}:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Study the dynamics of Stewart platform
|
\item Study the dynamics of Stewart platform
|
||||||
\item Instead of working with complex analytical models: a multi-body model is used.
|
\item Instead of working with complex analytical models: a multi-body model is used.
|
||||||
Complex because has to model the inertia of the struts.
|
Complex because has to model the inertia of the struts.
|
||||||
Cite papers that tries to model the stewart platform analytically
|
Cite papers that tries to model the stewart platform analytically
|
||||||
Advantage: it will be easily included in the model of the NASS
|
Advantage: it will be easily included in the model of the NASS
|
||||||
|
|
||||||
\item[{$\square$}] Have a table somewhere that summarizes the main characteristics of the nano-hexapod model
|
|
||||||
\begin{itemize}
|
|
||||||
\item location of joints
|
|
||||||
\item size / mass of platforms, etc\ldots{}
|
|
||||||
\end{itemize}
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\section{Model Definition}
|
\section{Model Definition}
|
||||||
\label{ssec:nhexa_model_def}
|
\label{ssec:nhexa_model_def}
|
||||||
|
\paragraph{Geometry}
|
||||||
|
|
||||||
\begin{itemize}
|
The geometry of the Stewart platform (see Figure \ref{fig:nhexa_stewart_model_def}) is defined by the position of frame \(\{F\}\) with respect to \(\{M\}\) and by the locations of the joints \({}^Fa_i\) and \({}^Mb_i\).
|
||||||
\item[{$\square$}] Make a schematic of the definition process (for instance knowing the ai, bi points + \{A\} and \{B\} allows to compute Jacobian, etc\ldots{})
|
The point of interest, indicated by frame \(\{A\}\) is located \(150\,mm\) above the top platform (i.e. above the \(\{M\}\) frame).
|
||||||
|
Parameters that defines the geometry of the nano-hexapod multi-body models are summarized in Table \ref{tab:nhexa_stewart_model_geometry}.
|
||||||
|
|
||||||
\item What is important for the model:
|
From this, the orientation \(\hat{s}_i\) and length \(l_i\) of the struts can be computed, the Jacobian matrix \(\bm{J}\) can be computed, and the kinematics of the Stewart platform can be studied.
|
||||||
\begin{itemize}
|
|
||||||
\item Inertia of plates and struts
|
|
||||||
\item Positions of joints / Orientation of struts
|
|
||||||
\item Definition of frames (for Jacobian, stiffness analysis, etc\ldots{})
|
|
||||||
\end{itemize}
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
Then, several things can be computed:
|
\begin{minipage}[b]{0.6\linewidth}
|
||||||
\begin{itemize}
|
\begin{center}
|
||||||
\item Kinematics, stiffness, platform mobility, dynamics, etc\ldots{}
|
\includegraphics[scale=1,scale=1]{figs/nhexa_stewart_model_def.png}
|
||||||
\end{itemize}
|
\captionof{figure}{\label{fig:nhexa_stewart_model_def}Geometry of the stewart platform}
|
||||||
|
\end{center}
|
||||||
|
\end{minipage}
|
||||||
|
\hfill
|
||||||
|
\begin{minipage}[b]{0.38\linewidth}
|
||||||
|
\begin{scriptsize}
|
||||||
|
\centering
|
||||||
|
\begin{tabularx}{0.75\linewidth}{Xrrr}
|
||||||
|
\toprule
|
||||||
|
& \(\bm{x}\) & \(\bm{y}\) & \(\bm{z}\)\\
|
||||||
|
\midrule
|
||||||
|
\({}^MO_B\) & \(0\) & \(0\) & \(150\)\\
|
||||||
|
\({}^FO_M\) & \(0\) & \(0\) & \(95\)\\
|
||||||
|
\({}^Fa_1\) & \(-92\) & \(-77\) & \(20\)\\
|
||||||
|
\({}^Fa_2\) & \(92\) & \(-77\) & \(20\)\\
|
||||||
|
\({}^Fa_3\) & \(113\) & \(-41\) & \(20\)\\
|
||||||
|
\({}^Fa_4\) & \(21\) & \(118\) & \(20\)\\
|
||||||
|
\({}^Fa_5\) & \(-21\) & \(118\) & \(20\)\\
|
||||||
|
\({}^Fa_6\) & \(-113\) & \(-41\) & \(20\)\\
|
||||||
|
\({}^Mb_1\) & \(-28\) & \(-106\) & \(-20\)\\
|
||||||
|
\({}^Mb_2\) & \(28\) & \(-106\) & \(-20\)\\
|
||||||
|
\({}^Mb_3\) & \(106\) & \(28\) & \(-20\)\\
|
||||||
|
\({}^Mb_4\) & \(78\) & \(78\) & \(-20\)\\
|
||||||
|
\({}^Mb_5\) & \(-78\) & \(78\) & \(-20\)\\
|
||||||
|
\({}^Mb_6\) & \(-106\) & \(28\) & \(-20\)\\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabularx}
|
||||||
|
\captionof{table}{\label{tab:nhexa_stewart_model_geometry}Parameter values in [mm]}
|
||||||
|
\end{scriptsize}
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
|
\paragraph{Inertia of Plates}
|
||||||
|
|
||||||
\begin{itemize}
|
Both the fixed base and the top platform are modelled are solid bodies.
|
||||||
\item Joints: can be 2dof to 6dof
|
The bottom plate is a cylinder with radius of \(120\,mm\) (matching the size of the micro-hexapod's top platform) and a thickness of \(15\,mm\).
|
||||||
\item Actuators: can be modelled as wanted
|
The top plate is also modelled as a cylinder with a radius of \(110\,mm\) and a thickness of \(15,mm\).
|
||||||
\end{itemize}
|
Both have a mass of \(5\,kg\).
|
||||||
|
|
||||||
\section{Nano Hexapod}
|
\paragraph{Joints}
|
||||||
\label{ssec:nhexa_model_nano_hexapod}
|
|
||||||
|
|
||||||
Start simple:
|
The top and bottom joints, different number of DoF can be considered.
|
||||||
\begin{itemize}
|
universal joint, spherical joint, with added axial stiffness and even with added lateral stiffnesses.
|
||||||
\item Perfect joints, massless actuators
|
For each DoF, stiffnesses can be added.
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
Joints: perfect 2dof/3dof (+ mass-less)
|
During the conceptual design phase, bottom joints are modelled with universal joints (2-DoF) while top joints are modelled with spherical joints (3-DoF).
|
||||||
Actuators: APA + Encoder (mass-less)
|
Both have no stiffness along their DoF and are mass-less.
|
||||||
\begin{itemize}
|
|
||||||
\item k = 1N/um
|
|
||||||
\item Force sensor
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
Definition of each part + Plant with defined inputs/outputs (force sensor, relative displacement sensor, etc\ldots{})
|
\paragraph{Actuators}
|
||||||
|
|
||||||
|
In its simplest form, the actuators are modelled with one prismatic joint having some internal stiffness \(k_a\) and damping \(c_a\), and a force source \(f\).
|
||||||
|
|
||||||
|
As was shown using the 3DoF rotating model, having a parallel stiffness \(k_p\) with the force sensor permits to regain the guaranteed stability of decentralized IFF when the spindle is rotating.
|
||||||
|
|
||||||
|
A force sensor with output \(f_m\) is added as well as a relative motion sensor with output \(d_L\).
|
||||||
|
The model of the nano-hexapod actuators used during the conceptual phase are shown in Figure \ref{fig:nhexa_actuator_model} with the parameters summarized in Table \ref{tab:nhexa_actuator_parameters}.
|
||||||
|
|
||||||
|
Thanks to the flexibility of the multi-body model, the model of the actuators can later be refined.
|
||||||
|
|
||||||
|
\begin{minipage}[b]{0.6\linewidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/nhexa_actuator_model.png}
|
||||||
|
\captionof{figure}{\label{fig:nhexa_actuator_model}Model of the nano-hexapod actuators}
|
||||||
|
\end{center}
|
||||||
|
\end{minipage}
|
||||||
|
\hfill
|
||||||
|
\begin{minipage}[b]{0.38\linewidth}
|
||||||
|
\begin{scriptsize}
|
||||||
|
\centering
|
||||||
|
\begin{tabularx}{0.4\linewidth}{Xl}
|
||||||
|
\toprule
|
||||||
|
& Value\\
|
||||||
|
\midrule
|
||||||
|
\(k_a\) & \(1\,N/\mu m\)\\
|
||||||
|
\(c_a\) & \(50\,N/(m/s)\)\\
|
||||||
|
\(k_p\) & \(0.05\,N/\mu m\)\\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabularx}
|
||||||
|
\captionof{table}{\label{tab:nhexa_actuator_parameters}Actuator parameters}
|
||||||
|
\end{scriptsize}
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
\section{Model Dynamics}
|
\section{Model Dynamics}
|
||||||
\label{ssec:nhexa_model_dynamics}
|
\label{ssec:nhexa_model_dynamics}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item[{$\square$}] Screenshot of the obtained multi-body model ?
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\begin{minipage}[b]{0.6\linewidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/nhexa_stewart_model_input_outputs.png}
|
||||||
|
\captionof{figure}{\label{fig:nhexa_stewart_model_input_outputs}Nano-Hexapod plant with inputs and outputs. Frames \(\{F\}\) and \(\{M\}\) can be connected to other elements in the multi-body models.}
|
||||||
|
\end{center}
|
||||||
|
\end{minipage}
|
||||||
|
\hfill
|
||||||
|
\begin{minipage}[b]{0.35\linewidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.90\linewidth]{figs/nhexa_simscape_screenshot.jpg}
|
||||||
|
\captionof{figure}{\label{fig:nhexa_simscape_screenshot}3D representation of the multi-body model}
|
||||||
|
\end{center}
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item If all is perfect (mass-less struts, perfect joints, etc\ldots{}), maybe compare analytical model with simscape model?
|
\item If all is perfect (mass-less struts, perfect joints, etc\ldots{}), maybe compare analytical model with simscape model?
|
||||||
\item Say something about the model order
|
\item Say something about the model order
|
||||||
Model order is 12, and that we can compute modes from matrices M and K, compare with the Simscape model
|
Model order is 12, and that we can compute modes from matrices M and K, compare with the Simscape model
|
||||||
\item 4 observed modes (due to symmetry, in reality 6 modes)
|
\item 4 observed modes (due to symmetry, in reality 6 modes)
|
||||||
\item Compare with analytical formulas (see number of states)
|
\item Compare with analytical formulas (see number of states)
|
||||||
\item Effect of 2DoF APA on IFF plant?
|
\item[{$\square$}] Effect of parallel on IFF plant?
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
\section{Nano Hexapod}
|
||||||
|
|
||||||
\section*{Conclusion}
|
\section*{Conclusion}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Validation of multi-body model in a simple case
|
\item Validation of multi-body model in a simple case
|
||||||
|