diff --git a/figs/detail_kinematics_cubic_schematic.pdf b/figs/detail_kinematics_cubic_schematic.pdf index 4fa0570..0d999e5 100644 Binary files a/figs/detail_kinematics_cubic_schematic.pdf and b/figs/detail_kinematics_cubic_schematic.pdf differ diff --git a/figs/detail_kinematics_cubic_schematic.png b/figs/detail_kinematics_cubic_schematic.png index 8381eaf..755cfbe 100644 Binary files a/figs/detail_kinematics_cubic_schematic.png and b/figs/detail_kinematics_cubic_schematic.png differ diff --git a/figs/detail_kinematics_cubic_schematic.svg b/figs/detail_kinematics_cubic_schematic.svg index 6143885..c477cc4 100644 --- a/figs/detail_kinematics_cubic_schematic.svg +++ b/figs/detail_kinematics_cubic_schematic.svg @@ -1,5 +1,5 @@ - + @@ -15,219 +15,171 @@ - + - + - + - + - + - + - + - + - - + + - + - - - - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - + - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/figs/detail_kinematics_cubic_schematic_full.pdf b/figs/detail_kinematics_cubic_schematic_full.pdf index 6f427ea..f1b162c 100644 Binary files a/figs/detail_kinematics_cubic_schematic_full.pdf and b/figs/detail_kinematics_cubic_schematic_full.pdf differ diff --git a/figs/detail_kinematics_cubic_schematic_full.png b/figs/detail_kinematics_cubic_schematic_full.png index 1980e43..cd8c580 100644 Binary files a/figs/detail_kinematics_cubic_schematic_full.png and b/figs/detail_kinematics_cubic_schematic_full.png differ diff --git a/figs/detail_kinematics_cubic_schematic_full.svg b/figs/detail_kinematics_cubic_schematic_full.svg index 6f0108d..670231d 100644 --- a/figs/detail_kinematics_cubic_schematic_full.svg +++ b/figs/detail_kinematics_cubic_schematic_full.svg @@ -48,6 +48,9 @@ + + + @@ -73,9 +76,6 @@ - - - @@ -300,26 +300,38 @@ - - - + + + - + - + - - - - + + + + + + + + + + + + + + + + - + diff --git a/figs/detail_kinematics_uw_gsp.jpg b/figs/detail_kinematics_uw_gsp.jpg index dfde30d..b37c7f8 100644 Binary files a/figs/detail_kinematics_uw_gsp.jpg and b/figs/detail_kinematics_uw_gsp.jpg differ diff --git a/nass-geometry.org b/nass-geometry.org index d39c456..d00bc5a 100644 --- a/nass-geometry.org +++ b/nass-geometry.org @@ -117,87 +117,227 @@ Optimal geometry? - [X] [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/kinematic-study.org::*Estimation of the Joint required Stroke][Estimation of the Joint required Stroke]] ** Not used -#+begin_src latex :file detail_kinematics_cubic_schematic.pdf - \begin{tikzpicture} - \begin{scope}[rotate={45}, shift={(0, 0, -4)}] - % We first define the coordinate of the points of the Cube - \coordinate[] (bot) at (0,0,4); - \coordinate[] (top) at (4,4,0); - \coordinate[] (A1) at (0,0,0); - \coordinate[] (A2) at (4,0,4); - \coordinate[] (A3) at (0,4,4); - \coordinate[] (B1) at (4,0,0); - \coordinate[] (B2) at (4,4,4); - \coordinate[] (B3) at (0,4,0); +*** Dynamic isotropy - % Center of the Cube - \node[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$){$\bullet$}; - % \node[above right] at (cubecenter){$C$}; +[[cite:&afzali-far16_vibrat_dynam_isotr_hexap_analy_studies]]: +- proposes an architecture where the CoM can be above the top platform +- [ ] Try to find a stewart platform an a payload for witch all resonances are equal. + Massless struts and plates. + Cylindrical payload tuned to obtained such property. + Show that all modes can be optimally damped? + Compare with Stewart platform with different resonance frequencies. Also need to have parallel stiffness with the struts +- Same resonance frequencies for suspension modes? + Maybe in one case: sphere at the CoM? + Could be nice to show that. + Say that this can be nice for optimal damping for instance (link to paper explaining that) - % We draw parts of the cube that corresponds to the Stewart platform - \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); - \draw[opacity=0.5] (bot) -- (A1); - \draw[opacity=0.5] (bot) -- (A2); - \draw[opacity=0.5] (bot) -- (A3); - \draw[opacity=0.5] (top) -- (B1); - \draw[opacity=0.5] (top) -- (B2); - \draw[opacity=0.5] (top) -- (B3); - % ai and bi are computed - \def\lfrom{0.1} - \def\lto{0.9} +- Show examples where the dynamics can indeed be decoupled in the cartesian frame (i.e. decoupled K and M matrices) - \coordinate(a1) at ($(A1) - \lfrom*(A1) + \lfrom*(B1)$); - \coordinate(b1) at ($(A1) - \lto*(A1) + \lto*(B1)$); - \coordinate(a2) at ($(A2) - \lfrom*(A2) + \lfrom*(B1)$); - \coordinate(b2) at ($(A2) - \lto*(A2) + \lto*(B1)$); - \coordinate(a3) at ($(A2) - \lfrom*(A2) + \lfrom*(B2)$); - \coordinate(b3) at ($(A2) - \lto*(A2) + \lto*(B2)$); - \coordinate(a4) at ($(A3) - \lfrom*(A3) + \lfrom*(B2)$); - \coordinate(b4) at ($(A3) - \lto*(A3) + \lto*(B2)$); - \coordinate(a5) at ($(A3) - \lfrom*(A3) + \lfrom*(B3)$); - \coordinate(b5) at ($(A3) - \lto*(A3) + \lto*(B3)$); - \coordinate(a6) at ($(A1) - \lfrom*(A1) + \lfrom*(B3)$); - \coordinate(b6) at ($(A1) - \lto*(A1) + \lto*(B3)$); - % Center of the Stewart Platform - % \node[color=colorblue] at ($0.25*(a1) + 0.25*(a6) + 0.25*(b3) + 0.25*(b4)$){$\bullet$}; +- [ ] Try to find a stewart platform an a payload for witch all resonances are equal. + It is not possible for a cubic architecture and a cylinder. + But maybe we can propose to not use a cubic architecture and still have dynamic isotropy? + For instance, let's consider a specific payload => give some rules to obtain dynamic isotropy: - % We draw the fixed and mobiles platforms - \path[fill=colorblue, opacity=0.2] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \path[fill=colorblue, opacity=0.2] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - \draw[color=colorblue, dashed] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \draw[color=colorblue, dashed] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - % The legs of the hexapod are drawn - \draw[color=colorblue] (a1)node{$\bullet$} -- (b1)node{$\bullet$}; - \draw[color=colorblue] (a2)node{$\bullet$} -- (b2)node{$\bullet$}; - \draw[color=colorblue] (a3)node{$\bullet$} -- (b3)node{$\bullet$}; - \draw[color=colorblue] (a4)node{$\bullet$} -- (b4)node{$\bullet$}; - \draw[color=colorblue] (a5)node{$\bullet$} -- (b5)node{$\bullet$}; - \draw[color=colorblue] (a6)node{$\bullet$} -- (b6)node{$\bullet$}; - \end{scope} + Inertia of a cylinder: + Iz = 1/2mr^2 + Ix = Iy = 1/12 m (3r^2 + h^2) - % Height of the Hexapod - \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); - \coordinate[] (origin) at (0,0,0); - % \draw[<->, dashed] (a2-|sizepos) -- node[midway, right]{$H$} (b2-|sizepos); - % Height offset - % \draw[<->, dashed] (a2-|sizepos) -- node[midway, right]{$H_0$} (origin-|sizepos); +We want M = alpha K - % \draw[<->, dashed] (0.5,2,0) --node[near end, right]{${}^{F}O_{C}$} ++(0,2,0); - % \draw[<->, dashed] (-2,2,0) --node[midway, right]{${}^{F}H_{A}$} ++(0,1,0); - % \draw[<->, dashed] (-2,6,0) --node[midway, right]{${}^{M}H_{B}$} ++(0,-1.5,0); +2k = alpha m - % Useful part of the cube - % \draw[<->, dashed] ($(A2)+(0.5,0)$) -- node[midway, right]{$H_{C}$} ($(B1)+(0.5,0)$); - \end{tikzpicture} +alpha = 2k/m + +Krx = 3/2 k H^2 = Ix = 1/12 m + +#+begin_src matlab +%% Cubic Stewart platform with payload above the top platform +H = 200e-3; +MO_B = -100e-3; % Position {B} with respect to {M} [m] + +stewart = initializeStewartPlatform(); +stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); +stewart = generateCubicConfiguration(stewart, 'Hc', H, 'FOc', H/2, 'FHa', 25e-3, 'MHb', 25e-3); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'k', 1e6, 'c', 1e1); +stewart = initializeJointDynamics(stewart, 'type_F', '2dof', 'type_M', '3dof'); +stewart = computeJacobian(stewart); +stewart = initializeStewartPose(stewart); +stewart = initializeCylindricalPlatforms(stewart, ... + 'Mpm', 1e-6, ... % Massless platform + 'Fpm', 1e-6, ... % Massless platform + 'Mph', 20e-3, ... % Thin platform + 'Fph', 20e-3, ... % Thin platform + 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)), ... + 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa))); +stewart = initializeCylindricalStruts(stewart, ... + 'Fsm', 1e-6, ... % Massless strut + 'Msm', 1e-6, ... % Massless strut + 'Fsh', stewart.geometry.l(1)/2, ... + 'Msh', stewart.geometry.l(1)/2 ... +); + +% Sample at the Center of the cube +sample = initializeSample('type', 'cylindrical', 'm', 10, 'H', 1/9*H, 'H_offset', -H/2-1/9*H/2, 'R', sqrt(6)*H); + +% Run the linearization +G_CoM_CoK = linearize(mdl, io)*inv(stewart.kinematics.J.'); +G_CoM_CoK.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; +G_CoM_CoK.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}; #+end_src -#+name: fig:detail_kinematics_cubic_schematic -#+caption: Stewart platform Cubic architecture. The struts are aligned with the sides of a cube. -#+RESULTS: -[[file:figs/detail_kinematics_cubic_schematic.png]] +#+begin_src matlab :exports none +freqs = logspace(0, 4, 1000); +figure; +tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); +ax1 = nexttile(); +hold on; +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(1, 1), freqs, 'Hz'))), 'color', colors(1,:), ... + 'DisplayName', '$D_x/F_x$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(2, 2), freqs, 'Hz'))), 'color', colors(2,:), ... + 'DisplayName', '$D_y/F_y$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(3, 3), freqs, 'Hz'))), 'color', colors(3,:), ... + 'DisplayName', '$D_z/F_z$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(4, 4), freqs, 'Hz'))), 'color', colors(4,:), ... + 'DisplayName', '$R_x/M_x$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(5, 5), freqs, 'Hz'))), 'color', colors(5,:), ... + 'DisplayName', '$R_y/M_y$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(6, 6), freqs, 'Hz'))), 'color', colors(6,:), ... + 'DisplayName', '$R_z/M_z$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(4, 2), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... + 'DisplayName', '$R_x/F_y$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(5, 1), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... + 'DisplayName', '$R_y/F_x$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(1, 5), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... + 'DisplayName', '$D_x/M_y$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(2, 4), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... + 'DisplayName', '$D_y/M_x$'); +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Amplitude [m/V]'); +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); +leg.ItemTokenSize(1) = 15; +xlim([1, 1e4]); +ylim([1e-10, 2e-3]) +#+end_src + +*** Cubic with centered payload :noexport: + +It seems having the payload at the center of the cube makes things worst for decentralized control. + +#+begin_src matlab +%% Cubic Stewart platform with payload above the top platform +H = 200e-3; +MO_B = -100e-3; % Position {B} with respect to {M} [m] + +stewart = initializeStewartPlatform(); +stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); +stewart = generateCubicConfiguration(stewart, 'Hc', H, 'FOc', H/2, 'FHa', 25e-3, 'MHb', 25e-3); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'k', 1e6, 'c', 1e1); +stewart = initializeJointDynamics(stewart, 'type_F', '2dof', 'type_M', '3dof'); +stewart = computeJacobian(stewart); +stewart = initializeStewartPose(stewart); +stewart = initializeCylindricalPlatforms(stewart, ... + 'Mpm', 1e-6, ... % Massless platform + 'Fpm', 1e-6, ... % Massless platform + 'Mph', 20e-3, ... % Thin platform + 'Fph', 20e-3, ... % Thin platform + 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)), ... + 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa))); +stewart = initializeCylindricalStruts(stewart, ... + 'Fsm', 1e-6, ... % Massless strut + 'Msm', 1e-6, ... % Massless strut + 'Fsh', stewart.geometry.l(1)/2, ... + 'Msh', stewart.geometry.l(1)/2 ... +); + +% Sample at the Center of the cube +sample = initializeSample('type', 'cylindrical', 'm', 10, 'H', 100e-3, 'H_offset', -H/2-50e-3); + +% Run the linearization +G_CoM_CoK = linearize(mdl, io)*inv(stewart.kinematics.J.'); +G_CoM_CoK.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'}; +G_CoM_CoK.OutputName = {'dL1', 'dL2', 'dL3', 'dL4', 'dL5', 'dL6', ... + 'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'}; +#+end_src + +#+begin_src matlab :exports none :results none +%% Coupling in the cartesian frame for a Non_cubic Stewart platform - Frame {B} is at the center of mass of the payload +freqs = logspace(0, 4, 1000); +figure; +tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); +ax1 = nexttile(); +hold on; +for i = 1:5 + for j = i+1:6 + plot(freqs, abs(squeeze(freqresp(G_non_cubic(sprintf('fn%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... + 'HandleVisibility', 'off'); + plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(sprintf('fn%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... + 'HandleVisibility', 'off'); + end +end +plot(freqs, abs(squeeze(freqresp(G_non_cubic('fn1', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:)], 'linewidth', 2.5, ... + 'DisplayName', '$L_i/F_i$'); +plot(freqs, abs(squeeze(freqresp(G_non_cubic('fn2', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... + 'DisplayName', '$L_i/F_j$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('fn1', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:)], 'linewidth', 2.5, ... + 'DisplayName', '$L_i/F_i$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('fn2', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... + 'DisplayName', '$L_i/F_j$'); +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Amplitude [N/N]'); +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); +leg.ItemTokenSize(1) = 15; +xlim([1, 1e4]); +ylim([1e-3, 1e2]) +#+end_src + +#+begin_src matlab :exports none :results none +%% Coupling in the cartesian frame for a Non_cubic Stewart platform - Frame {B} is at the center of mass of the payload +freqs = logspace(0, 4, 1000); +figure; +tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); +ax1 = nexttile(); +hold on; +for i = 1:5 + for j = i+1:6 + plot(freqs, abs(squeeze(freqresp(G_non_cubic(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ... + 'HandleVisibility', 'off'); + plot(freqs, abs(squeeze(freqresp(G_cubic(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... + 'HandleVisibility', 'off'); + plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... + 'HandleVisibility', 'off'); + end +end +plot(freqs, abs(squeeze(freqresp(G_non_cubic('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(1,:)], 'linewidth', 2.5, ... + 'DisplayName', '$L_i/F_i$'); +plot(freqs, abs(squeeze(freqresp(G_non_cubic('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ... + 'DisplayName', '$L_i/F_j$'); +plot(freqs, abs(squeeze(freqresp(G_cubic('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:)], 'linewidth', 2.5, ... + 'DisplayName', '$L_i/F_i$'); +plot(freqs, abs(squeeze(freqresp(G_cubic('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... + 'DisplayName', '$L_i/F_j$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:)], 'linewidth', 2.5, ... + 'DisplayName', '$L_i/F_i$'); +plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... + 'DisplayName', '$L_i/F_j$'); +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]'); +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); +leg.ItemTokenSize(1) = 15; +xlim([1, 1e4]); +ylim([1e-10, 2e-3]) +#+end_src + + +** DONE [#B] Read everything again and check figures +CLOSED: [2025-04-01 Tue 18:17] SCHEDULED: <2025-04-01 Tue> ** DONE [#A] Copy relevant parts of reports CLOSED: [2025-04-01 Tue 15:09] @@ -815,14 +955,14 @@ Arguments: - In the conceptual design phase, the geometry of the Stewart platform was chosen arbitrarily and not optimized - In the detail design phase, we want to see if the geometry can be optimized to improve the overall performances -- Optimization criteria: mobility, stiffness, dynamical decoupling, more performance / bandwidth +- Optimization criteria: mobility, stiffness, decoupling between the struts for decentralized control, dynamical decoupling in the cartesian frame Outline: - Review of Stewart platform (Section ref:sec:detail_kinematics_stewart_review) Geometry, Actuators, Sensors, Joints - Effect of geometry on the Stewart platform characteristics (Section ref:sec:detail_kinematics_geometry) -- Cubic configuration: benefits? (Section ref:sec:detail_kinematics_cubic) -- Obtained geometry for the nano hexapod (Section ref:sec:detail_kinematics_nano_hexapod) +- Cubic configuration: special architecture that received many attention in the literature. We want to see the special properties of this architecture and if this can be applied for the nano hexapod (Section ref:sec:detail_kinematics_cubic) +- Presentation of the obtained geometry for the nano hexapod (Section ref:sec:detail_kinematics_nano_hexapod) * Review of Stewart platforms <> @@ -844,14 +984,17 @@ Outline: - Most of stewart platforms are using voice coil actuators or piezoelectric actuators. The actuators used for the Stewart platform will be chosen in the next section. # TODO - Add reference to the section -- Depending on the application, various sensors are integrated in the struts or on the plates. +- Depending on the application, various sensors are integrated in the struts or on the plates such as force sensors, inertial sensors or relative displacement sensors. The choice of sensor for the nano-hexapod will be described in the next section. # TODO - Add reference to the section -- There are two categories of Stewart platform geometry: +- Flexible joints can also have various implementations. This will be discussed in the next section. +- There are two main categories of Stewart platform geometry: - Cubic architecture (Figure ref:fig:detail_kinematics_stewart_examples_cubic). Struts are positioned along 6 sides of a cubic (and are therefore orthogonal to each other). Such specific architecture has some special properties that will be studied in Section ref:sec:detail_kinematics_cubic. - Non-cubic architecture (Figure ref:fig:detail_kinematics_stewart_examples_non_cubic) + The orientation of the struts and position of the joints are chosen based on performances criteria. + Some of which are presented in Section ref:sec:detail_kinematics_geometry #+name: fig:detail_kinematics_stewart_examples_cubic #+caption: Some examples of developped Stewart platform with Cubic geometry. (\subref{fig:detail_kinematics_jpl}), (\subref{fig:detail_kinematics_uw_gsp}), (\subref{fig:detail_kinematics_ulb_pz}), (\subref{fig:detail_kinematics_uqp}) @@ -949,7 +1092,7 @@ Conclusion: - Lot's have a "cubic" architecture that will be discussed in Section ref:sec:detail_kinematics_cubic - actuator types - various sensors - - flexible joints (discussed in next chapter) + - flexible joints - The effect of geometry on the properties of the Stewart platform is studied in section ref:sec:detail_kinematics_geometry - It is determined what is the optimal geometry for the NASS @@ -963,7 +1106,7 @@ Conclusion: # Section ref:sec:nhexa_stewart_platform (page pageref:sec:nhexa_stewart_platform), - As was shown during the conceptual phase, the geometry of the Stewart platform influences: - the stiffness and compliance properties - - the mobility + - the mobility or workspace - the force authority - the dynamics of the manipulator - It is therefore important to understand how the geometry impact these properties, and to be able to optimize the geometry for a specific application. @@ -1001,7 +1144,12 @@ The choice of frames ($\{A\}$ and $\{B\}$), independently of the physical Stewar The mobility of the Stewart platform (or any manipulator) is here defined as the range of motion that it can perform. It corresponds to the set of possible pose (i.e. combined translation and rotation) of frame {B} with respect to frame {A}. -It should therefore be represented in a six dimensional space. +It is therefore a six dimensional property which is difficult to represent. +Depending on the applications, only the translation mobility (i.e. fixed orientation workspace) or the rotation mobility may be represented. +This is equivalent as to project the six dimensional value into a 3 dimensional space, easier to represent. + +Mobility of parallel manipulators are inherently difficult to study as the translational and orientation workspace are coupled [[cite:&merlet02_still]]. +Things are getting much more simpler when considering small motions as the Jacobian matrix can be considered constant and the equations are linear. As was shown during the conceptual phase, for small displacements, the Jacobian matrix can be used to link the strut motion to the motion of frame B with respect to A through equation eqref:eq:detail_kinematics_jacobian. # Section ref:ssec:nhexa_stewart_platform_jacobian (page pageref:ssec:nhexa_stewart_platform_jacobian). @@ -1025,33 +1173,17 @@ More specifically: - the XYZ mobility only depends on the si (orientation of struts) - the mobility in rotation depends on bi (position of top joints) -As will be shown in Section ref:sec:detail_kinematics_cubic, there are some geometry that gives same stroke in X, Y and Z directions. - -As the mobility is of dimension six, it is difficult to represent. -Depending on the applications, only the translation mobility or the rotation mobility may be represented. - -#+begin_quote -Although there is no human readable way to represent the complete workspace, some projections of the full workspace can be drawn. -#+end_quote - -Difficulty of studying workspace of parallel manipulators. - **** Mobility in translation -Here, for simplicity, only translations are first considered: +Here, for simplicity, only translations are first considered (i.e. fixed orientation of the Stewart platform): - Let's consider a general Stewart platform geometry shown in Figure ref:fig:detail_kinematics_mobility_trans_arch. - In the general case: the translational mobility can be represented by a 3D shape with 12 faces (each actuator limits the stroke along its orientation in positive and negative directions). The faces are therefore perpendicular to the strut direction. - The obtained mobility is shown in Figure ref:fig:detail_kinematics_mobility_trans_result. + The obtained mobility for the considered stewart platform geometry is shown in Figure ref:fig:detail_kinematics_mobility_trans_result. + In reality, the workspace boundaries are portion of spheres, but they are well approximated by flat surfaces for short stroke hexapods - Considering an actuator stroke of $\pm d$, the mobile platform can be translated in any direction with a stroke of $d$ - A circle with radius $d$ can be contained in the general shape. - It will touch the shape along six lines defined by the strut axes. - The sphere with radius $d$ is shown in Figure ref:fig:detail_kinematics_mobility_trans_result. -- Therefore, for any (small stroke) Stewart platform with actuator stroke $\pm d$, it is possible to move the top platform in any direction by at least a distance $d$. - Note that no platform angular motion is here considered. When combining angular motion, the linear stroke decreases. -- When considering some symmetry in the system (as typically the case), the shape becomes a Trigonal trapezohedron whose height and width depends on the orientation of the struts. - We only get 6 faces as usually the Stewart platform consists of 3 sets of 2 parallels struts. -- In reality, portion of spheres, but well approximated by flat surfaces for short stroke hexapods. + This means that a sphere with radius $d$ is contained in the general shape as illustrated in Figure ref:fig:detail_kinematics_mobility_trans_result. + The sphere will touch the shape along six lines defined by the strut axes. #+begin_src matlab :exports none :results none %% Example of one Stewart platform and associated translational mobility @@ -1139,9 +1271,14 @@ exportFig('figs/detail_kinematics_mobility_trans_result.pdf', 'width', 'normal', #+end_figure To better understand how the geometry of the Stewart platform impacts the translational mobility, two configurations are compared: -- Struts oriented horizontally (Figure ref:fig:detail_kinematics_stewart_mobility_vert_struts) => more stroke in horizontal direction -- Struts oriented vertically (Figure ref:fig:detail_kinematics_stewart_mobility_hori_struts) => more stroke in vertical direction -- Corresponding mobility shown in Figure ref:fig:detail_kinematics_mobility_translation_strut_orientation +- Struts oriented horizontally (Figure ref:fig:detail_kinematics_stewart_mobility_vert_struts). + This leads to having more stroke in the horizontal direction and less stroke in the vertical direction (Figure ref:fig:detail_kinematics_mobility_translation_strut_orientation). +- Struts oriented vertically (Figure ref:fig:detail_kinematics_stewart_mobility_hori_struts). + More stroke in vertical direction + +It can be counter intuitive to have less stroke in the direction of the struts. +This is because the struts are forming a lever mechanism that amplifies the motion. +The amplification factor increases when the struts have an high angle with the direction and motion and is equal to one when it is aligned with the direction of motion. #+begin_src matlab :exports none :results none %% Stewart platform with Vertically oriented struts @@ -1425,15 +1562,15 @@ It will be done in Section ref:sec:detail_kinematics_nano_hexapod to estimate th Stiffness matrix: - defines how the nano-hexapod deforms (frame $\{B\}$ with respect to frame $\{A\}$) due to static forces/torques applied on $\{B\}$. -- Depends on the Jacobian matrix (i.e. the geometry) and the strut axial stiffness eqref:eq:detail_kinematics_stiffness_matrix -- Contribution of joints stiffness is here not considered [[cite:&mcinroy00_desig_contr_flexur_joint_hexap;&mcinroy02_model_desig_flexur_joint_stewar]] +- It depends on the Jacobian matrix (i.e. the geometry) and the strut axial stiffness eqref:eq:detail_kinematics_stiffness_matrix +- The contribution of joints stiffness is here not considered [[cite:&mcinroy00_desig_contr_flexur_joint_hexap;&mcinroy02_model_desig_flexur_joint_stewar]] \begin{equation}\label{eq:detail_kinematics_stiffness_matrix} \bm{K} = \bm{J}^T \bm{\mathcal{K}} \bm{J} \end{equation} It is assumed that the stiffness of all strut is the same: $\bm{\mathcal{K}} = k \cdot \mathbf{I}_6$. -Obtained stiffness matrix linearly depends on the strut stiffness $k$ eqref:eq:detail_kinematics_stiffness_matrix_simplified. +Obtained stiffness matrix linearly depends on the strut stiffness $k$, and is structured as shown in eqref:eq:detail_kinematics_stiffness_matrix_simplified. \begin{equation}\label{eq:detail_kinematics_stiffness_matrix_simplified} \bm{K} = k \bm{J}^T \bm{J} = @@ -1448,12 +1585,12 @@ Obtained stiffness matrix linearly depends on the strut stiffness $k$ eqref:eq:d **** Translation Stiffness -XYZ stiffnesses: +As shown by eqref:eq:detail_kinematics_stiffness_matrix_simplified, the translation stiffnesses (the 3x3 top left terms of the stiffness matrix): - Only depends on the orientation of the struts and not their location: $\hat{\bm{s}}_i \cdot \hat{\bm{s}}_i^T$ - Extreme case: all struts are vertical $s_i = [0,\ 0,\ 1]$ => vertical stiffness of $6 k$, but null stiffness in X and Y directions - If two struts along X, two struts along Y, and two struts along Z => $\hat{\bm{s}}_i \cdot \hat{\bm{s}}_i^T = 2 \bm{I}_3$ Stiffness is well distributed along directions. - This corresponds to the cubic architecture. + This corresponds to the cubic architecture presented in Section ref:sec:detail_kinematics_cubic. If struts more vertical (Figure ref:fig:detail_kinematics_stewart_mobility_vert_struts): - increase vertical stiffness @@ -1465,22 +1602,16 @@ Opposite conclusions if struts are not horizontal (Figure ref:fig:detail_kinemat **** Rotational Stiffness -Rotational stiffnesses: -- Same orientation but increased distances (bi) by a factor 2 => rotational stiffness increased by factor 4 - Figure ref:fig:detail_kinematics_stewart_mobility_close_struts - Figure ref:fig:detail_kinematics_stewart_mobility_space_struts +The rotational stiffnesses depends both on the orientation of the struts and on the location of the top joints (with respect to the considered center of rotation, i.e. the location of frame B). -Struts further apart: -- no change to XYZ -- increase in rotational stiffness (by the square of the distance) +Same orientation but increased distances (bi) by a factor 2 => rotational stiffness increased by factor 4. +Compact stewart platform of Figure ref:fig:detail_kinematics_stewart_mobility_close_struts as therefore less rotational stiffness than the Stewart platform of Figure ref:fig:detail_kinematics_stewart_mobility_space_struts. **** Diagonal Stiffness Matrix Having the stiffness matrix $\bm{K}$ diagonal can be beneficial for control purposes as it would make the plant in the cartesian frame decoupled at low frequency. - -This depends on the geometry and on the chosen {A} frame. - -For specific configurations, it is possible to have a diagonal K matrix. +This depends on the geometry and on the chosen {B} frame. +For specific geometry and chose of B frame, it is possible to have a diagonal K matrix. This will be discussed in Section ref:ssec:detail_kinematics_cubic_static. @@ -1492,7 +1623,7 @@ Dynamical equations (both in the cartesian frame and in the frame of the struts) The dynamics depends both on the geometry (Jacobian matrix) but also on the payload being placed on top of the platform. -Under very specific conditions, the equations of motion can be decoupled in the Cartesian space. +Under very specific conditions, the equations of motion in the Cartesian frame eqref:eq:nhexa_transfer_function_cart can be decoupled. These are studied in Section ref:ssec:detail_kinematics_cubic_dynamic. \begin{equation}\label{eq:nhexa_transfer_function_cart} @@ -1501,21 +1632,15 @@ These are studied in Section ref:ssec:detail_kinematics_cubic_dynamic. **** In the frame of the Struts -In the frame of the struts, the equations of motion are well decoupled at low frequency. -This is why most of Stewart platforms are controlled in the frame of the struts: bellow the resonance frequency, the system is decoupled and SISO control may be applied for each strut. +In the frame of the struts, the equations of motion eqref:eq:nhexa_transfer_function_struts are well decoupled at low frequency. +This is why most of Stewart platforms are controlled in the frame of the struts: bellow the resonance frequency, the system is decoupled and SISO control may be applied for each strut, independently of the payload being used. \begin{equation}\label{eq:nhexa_transfer_function_struts} \frac{\bm{\mathcal{L}}}{\bm{f}}(s) = ( \bm{J}^{-T} \bm{M} \bm{J}^{-1} s^2 + \bm{\mathcal{C}} + \bm{\mathcal{K}} )^{-1} \end{equation} Coupling between sensors (force sensors, relative position sensor, inertial sensors) in different struts may also be important for decentralized control. -Can the geometry be optimized to have lower coupling between the struts? -This will be studied with the cubic architecture. - -**** TODO Dynamic Isotropy - -[[cite:&afzali-far16_vibrat_dynam_isotr_hexap_analy_studies]]: -"*Dynamic isotropy*, leading to equal eigenfrequencies, is a powerful optimization measure." +In section ref:ssec:detail_kinematics_decentralized_control, it will be study if the Stewart platform geometry can be optimized to have lower coupling between the struts. ** Conclusion :PROPERTIES: @@ -1528,25 +1653,20 @@ These results could have been easily deduced based on some mechanical principles These trade-offs give some guidelines when choosing the Stewart platform geometry. #+name: tab:detail_kinematics_geometry -#+attr_latex: :environment tabularx :width \linewidth :align lXX -#+attr_latex: :center t :booktabs t :float t +#+attr_latex: :environment tabularx :width 0.9\linewidth :align Xcc +#+attr_latex: :center t :booktabs t :float t :font \small #+caption: Effect of a change in geometry on the manipulator's stiffness, force authority and stroke -| | *legs pointing more vertically* | *legs further apart* | -|-------------------------------+---------------------------------+----------------------| -| Vertical stiffness | $\nearrow$ | $=$ | -| Horizontal stiffness | $\searrow$ | $=$ | -| Vertical rotation stiffness | $\searrow$ | $\nearrow$ | -| Horizontal rotation stiffness | $\nearrow$ | $\nearrow$ | -|-------------------------------+---------------------------------+----------------------| -| Vertical force authority | $\nearrow$ | $=$ | -| Horizontal force authority | $\searrow$ | $=$ | -| Vertical torque authority | $\searrow$ | $\nearrow$ | -| Horizontal torque authority | $\nearrow$ | $\nearrow$ | -|-------------------------------+---------------------------------+----------------------| -| Vertical stroke | $\searrow$ | $=$ | -| Horizontal stroke | $\nearrow$ | $=$ | -| Vertical rotation stroke | $\nearrow$ | $\searrow$ | -| Horizontal rotation stroke | $\searrow$ | $\searrow$ | +| *Struts* | *Vertically Oriented* | *Increased separation* | +|-------------------------------+-----------------------+------------------------| +| Vertical stiffness | $\nearrow$ | $=$ | +| Horizontal stiffness | $\searrow$ | $=$ | +| Vertical rotation stiffness | $\searrow$ | $\nearrow$ | +| Horizontal rotation stiffness | $\nearrow$ | $\nearrow$ | +|-------------------------------+-----------------------+------------------------| +| Vertical stroke | $\searrow$ | $=$ | +| Horizontal stroke | $\nearrow$ | $=$ | +| Vertical rotation stroke | $\nearrow$ | $\searrow$ | +| Horizontal rotation stroke | $\searrow$ | $\searrow$ | * The Cubic Architecture :PROPERTIES: @@ -1555,21 +1675,14 @@ These trade-offs give some guidelines when choosing the Stewart platform geometr <> ** Introduction :ignore: -# Cubic configuration file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/cubic-configuration.org - The Cubic configuration for the Stewart platform was first proposed in [[cite:&geng94_six_degree_of_freed_activ]]. +This configuration is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube, as shown in Figure ref:fig:detail_kinematics_cubic_architecture_examples. -This configuration is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube Figure ref:fig:detail_kinematics_cubic_architecture_examples. +Typically, the struts have similar size than the cube's edge, as shown in Figure ref:fig:detail_kinematics_cubic_architecture_example. +Practical implementations of such configuration are shown in Figures ref:fig:detail_kinematics_jpl, ref:fig:detail_kinematics_uw_gsp and ref:fig:detail_kinematics_uqp. -Cubic configuration: -- The struts are corresponding to 6 of the 8 edges of a cube. -- This way, all struts are perpendicular to each other (except sets of two that are parallel). - -Struts with similar size than the cube's edge (Figure ref:fig:detail_kinematics_cubic_architecture_example). -Similar to Figures ref:fig:detail_kinematics_jpl, ref:fig:detail_kinematics_uw_gsp and ref:fig:detail_kinematics_uqp. - -Struts smaller than the cube's edge (Figure ref:fig:detail_kinematics_cubic_architecture_example_small). -Similar to the Stewart platform of Figure ref:fig:detail_kinematics_ulb_pz. +It is also possible to have the struts length smaller than the cube's edge (Figure ref:fig:detail_kinematics_cubic_architecture_example_small). +An example of such Stewart platform is shown in Figure ref:fig:detail_kinematics_ulb_pz. #+begin_src matlab :exports none :results none %% Example of a typical "cubic" architecture @@ -1647,25 +1760,23 @@ exportFig('figs/detail_kinematics_cubic_architecture_example_small.pdf', 'width' #+end_figure -The cubic configuration is attributed a number of properties that made this configuration widely used ([[cite:&preumont07_six_axis_singl_stage_activ;&jafari03_orthog_gough_stewar_platf_microm]]). -From [[cite:&geng94_six_degree_of_freed_activ]]: -1) Uniformity in control capability in all directions -2) Uniformity in stiffness in all directions -3) Minimum cross coupling force effect among actuators -4) Facilitate collocated sensor-actuator control system design -5) Simple kinematics relationships -6) Simple dynamic analysis -7) Simple mechanical design +A number of properties are attributed to the cubic configuration, which have made this configuration widely popular ([[cite:&geng94_six_degree_of_freed_activ;&preumont07_six_axis_singl_stage_activ;&jafari03_orthog_gough_stewar_platf_microm]]): +- Simple kinematics relationships and dynamical analysis [[cite:&geng94_six_degree_of_freed_activ]] +- Uniform stiffness in all directions [[cite:&hanieh03_activ_stewar]] +- Uniform mobility [[cite:&preumont18_vibrat_contr_activ_struc_fourt_edition, chapt.8.5.2]] +- Minimization of the cross coupling between actuators and sensors in other struts [[cite:&preumont07_six_axis_singl_stage_activ]]. + This is attributed to the fact that the struts are orthogonal to each other. + This is said to facilitate collocated sensor-actuator control system design, i.e. the implementation of decentralized control [[cite:&geng94_six_degree_of_freed_activ;&thayer02_six_axis_vibrat_isolat_system]]. -According to [[cite:&preumont07_six_axis_singl_stage_activ]], it "minimizes the cross-coupling amongst actuators and sensors of different legs" (being orthogonal to each other). -Specific points of interest are: -- uniform mobility, uniform stiffness, and coupling properties +Such properties are studied to see if they are useful for the nano-hexapod and the associated conditions: +- The mobility and stiffness properties of the cubic configuration are studied in Section ref:ssec:detail_kinematics_cubic_static. +- Dynamical decoupling is studied in Section ref:ssec:detail_kinematics_cubic_dynamic +- Decentralized control, important for the NASS, is studied in Section ref:ssec:detail_kinematics_decentralized_control -In this section: -- Such properties are studied -- Additional properties interesting for control? -- It is determined if the cubic architecture is interested for the nano-hexapod +As the cubic architecture has some restrictions on the geometry, alternative designs are proposed in Section ref:ssec:detail_kinematics_cubic_design. + +The goal is to determine if the cubic architecture is interesting for the nano-hexapod. ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -1696,7 +1807,6 @@ In this section: <> **** Stiffness matrix for the Cubic architecture Consider the cubic architecture shown in Figure ref:fig:detail_kinematics_cubic_schematic_full. - The unit vectors corresponding to the edges of the cube are described by eqref:eq:detail_kinematics_cubic_s. \begin{equation}\label{eq:detail_kinematics_cubic_s} @@ -1716,7 +1826,7 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \tilde{\bm{b}}_5 = \tilde{\bm{b}}_6 = H_c \begin{bmatrix} \frac{-2}{\sqrt{2}} \\ 0 \\ \frac{1}{2} \end{bmatrix} \end{equation} -#+begin_src latex :file detail_kinematics_cubic_schematic_full.pdf :results file none +#+begin_src latex :file detail_kinematics_cubic_schematic_full.pdf :results file \begin{tikzpicture} \begin{scope}[rotate={45}, shift={(0, 0, -4)}] % We first define the coordinate of the points of the Cube @@ -1730,7 +1840,7 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \coordinate[] (B3) at (0,4,0); % Center of the Cube - \node[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$){$\bullet$}; + \coordinate[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$); % We draw parts of the cube that corresponds to the Stewart platform \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); @@ -1784,16 +1894,19 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); \coordinate[] (origin) at (0,0,0); - \draw[->] (cubecenter.center) node[above right]{$\{B\}$} -- ++(0,0,1); - \draw[->] (cubecenter.center) -- ++(1,0,0); - \draw[->] (cubecenter.center) -- ++(0,1,0); + \draw[->, color=colorgreen] (cubecenter.center) node[above right]{$\{B\}$} -- ++(0,0,1); + \draw[->, color=colorgreen] (cubecenter.center) -- ++(1,0,0); + \draw[->, color=colorgreen] (cubecenter.center) -- ++(0,1,0); + + \node[] at (cubecenter.center){$\bullet$}; + \node[above left] at (cubecenter.center){$\{C\}$}; % Useful part of the cube \draw[<->, dashed] ($(A2)+(0.5,0)$) -- node[midway, right]{$H_{C}$} ($(B1)+(0.5,0)$); \end{tikzpicture} #+end_src -#+begin_src latex :file detail_kinematics_cubic_schematic.pdf :results file none +#+begin_src latex :file detail_kinematics_cubic_schematic.pdf :results file \begin{tikzpicture} \begin{scope}[rotate={45}, shift={(0, 0, -4)}] % We first define the coordinate of the points of the Cube @@ -1807,7 +1920,7 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \coordinate[] (B3) at (0,4,0); % Center of the Cube - \node[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$){$\bullet$}; + \coordinate[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$); % We draw parts of the cube that corresponds to the Stewart platform \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); @@ -1842,108 +1955,39 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \draw[color=colorblue] (a4)node{$\bullet$} -- (b4)node{$\bullet$}node[above left]{$\bm{b}_6$}; \draw[color=colorblue] (a5)node{$\bullet$} -- (b5)node{$\bullet$}node[left]{$\bm{b}_1$}; \draw[color=colorblue] (a6)node{$\bullet$} -- (b6)node{$\bullet$}node[below left]{$\bm{b}_2$}; - - % Labels - \node[above=0.1 of B1] {$\tilde{\bm{b}}_3 = \tilde{\bm{b}}_4$}; - \node[above=0.1 of B2] {$\tilde{\bm{b}}_5 = \tilde{\bm{b}}_6$}; - \node[above=0.1 of B3] {$\tilde{\bm{b}}_1 = \tilde{\bm{b}}_2$}; \end{scope} % Height of the Hexapod \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); \coordinate[] (origin) at (0,0,0); - \draw[->] (cubecenter.center) node[above right]{$\{B\}$} -- ++(0,0,1); - \draw[->] (cubecenter.center) -- ++(1,0,0); - \draw[->] (cubecenter.center) -- ++(0,1,0); - \end{tikzpicture} -#+end_src + \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) node[above right]{$\{B\}$} -- ++(0,0,1); + \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) -- ++(1,0,0); + \draw[->, color=colorgreen] ($(cubecenter.center)+(0,2.0,0)$) -- ++(0,1,0); -#+begin_src latex :file detail_kinematics_cubic_schematic_off_centered.pdf :results file none - \begin{tikzpicture} - \begin{scope}[rotate={45}, shift={(0, 0, -4)}] - % We first define the coordinate of the points of the Cube - \coordinate[] (bot) at (0,0,4); - \coordinate[] (top) at (4,4,0); - \coordinate[] (A1) at (0,0,0); - \coordinate[] (A2) at (4,0,4); - \coordinate[] (A3) at (0,4,4); - \coordinate[] (B1) at (4,0,0); - \coordinate[] (B2) at (4,4,4); - \coordinate[] (B3) at (0,4,0); - - % Center of the Cube - \node[] (cubecenter) at ($0.5*(bot) + 0.5*(top)$){$\bullet$}; - - % We draw parts of the cube that corresponds to the Stewart platform - \draw[] (A1)node[]{$\bullet$} -- (B1)node[]{$\bullet$} -- (A2)node[]{$\bullet$} -- (B2)node[]{$\bullet$} -- (A3)node[]{$\bullet$} -- (B3)node[]{$\bullet$} -- (A1); - - % ai and bi are computed - \def\lfrom{0.1} - \def\lto{0.9} - - \coordinate(a1) at ($(A1) - \lfrom*(A1) + \lfrom*(B1)$); - \coordinate(b1) at ($(A1) - \lto*(A1) + \lto*(B1)$); - \coordinate(a2) at ($(A2) - \lfrom*(A2) + \lfrom*(B1)$); - \coordinate(b2) at ($(A2) - \lto*(A2) + \lto*(B1)$); - \coordinate(a3) at ($(A2) - \lfrom*(A2) + \lfrom*(B2)$); - \coordinate(b3) at ($(A2) - \lto*(A2) + \lto*(B2)$); - \coordinate(a4) at ($(A3) - \lfrom*(A3) + \lfrom*(B2)$); - \coordinate(b4) at ($(A3) - \lto*(A3) + \lto*(B2)$); - \coordinate(a5) at ($(A3) - \lfrom*(A3) + \lfrom*(B3)$); - \coordinate(b5) at ($(A3) - \lto*(A3) + \lto*(B3)$); - \coordinate(a6) at ($(A1) - \lfrom*(A1) + \lfrom*(B3)$); - \coordinate(b6) at ($(A1) - \lto*(A1) + \lto*(B3)$); - - % We draw the fixed and mobiles platforms - \path[fill=colorblue, opacity=0.2] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \path[fill=colorblue, opacity=0.2] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - \draw[color=colorblue, dashed] (a1) -- (a2) -- (a3) -- (a4) -- (a5) -- (a6) -- cycle; - \draw[color=colorblue, dashed] (b1) -- (b2) -- (b3) -- (b4) -- (b5) -- (b6) -- cycle; - - % The legs of the hexapod are drawn - \draw[color=colorblue] (a1)node{$\bullet$} -- (b1)node{$\bullet$}; - \draw[color=colorblue] (a2)node{$\bullet$} -- (b2)node{$\bullet$}; - \draw[color=colorblue] (a3)node{$\bullet$} -- (b3)node{$\bullet$}; - \draw[color=colorblue] (a4)node{$\bullet$} -- (b4)node{$\bullet$}; - \draw[color=colorblue] (a5)node{$\bullet$} -- (b5)node{$\bullet$}; - \draw[color=colorblue] (a6)node{$\bullet$} -- (b6)node{$\bullet$}; - \end{scope} - - % Height of the Hexapod - \coordinate[] (sizepos) at ($(a2)+(0.2, 0)$); - \coordinate[] (origin) at (0,0,0); - - \draw[->] ($(cubecenter.center)+(0,2.0,0)$) node[above right]{$\{B\}$} -- ++(0,0,1); - \draw[->] ($(cubecenter.center)+(0,2.0,0)$) -- ++(1,0,0); - \draw[->] ($(cubecenter.center)+(0,2.0,0)$) -- ++(0,1,0); + \node[] at (cubecenter.center){$\bullet$}; + \node[right] at (cubecenter.center){$\{C\}$}; \draw[<->, dashed] (cubecenter.center) -- node[midway, right]{$H$} ($(cubecenter.center)+(0,2.0,0)$); \end{tikzpicture} #+end_src #+name: fig:detail_kinematics_cubic_schematic_cases -#+caption: Struts are represented un blue. The cube's center by a dot. +#+caption: Cubic architecture. Struts are represented un blue. The cube's center by a black dot. The Struts can match the cube's edges (\subref{fig:detail_kinematics_cubic_schematic_full}) or just take a portion of the edge (\subref{fig:detail_kinematics_cubic_schematic}) #+attr_latex: :options [htbp] #+begin_figure #+attr_latex: :caption \subcaption{\label{fig:detail_kinematics_cubic_schematic_full}Full cube} -#+attr_latex: :options {0.33\textwidth} +#+attr_latex: :options {0.48\textwidth} #+begin_subfigure -#+attr_latex: :scale 0.6 +#+attr_latex: :scale 0.9 [[file:figs/detail_kinematics_cubic_schematic_full.png]] #+end_subfigure #+attr_latex: :caption \subcaption{\label{fig:detail_kinematics_cubic_schematic}Cube's portion} -#+attr_latex: :options {0.33\textwidth} +#+attr_latex: :options {0.48\textwidth} #+begin_subfigure -#+attr_latex: :scale 0.6 +#+attr_latex: :scale 0.9 [[file:figs/detail_kinematics_cubic_schematic.png]] #+end_subfigure -#+attr_latex: :caption \subcaption{\label{fig:detail_kinematics_cubic_schematic_off_centered}Off Centered} -#+attr_latex: :options {0.33\textwidth} -#+begin_subfigure -#+attr_latex: :scale 0.6 -[[file:figs/detail_kinematics_cubic_schematic_off_centered.png]] -#+end_subfigure #+end_figure #+begin_src matlab @@ -2013,7 +2057,7 @@ pretty(K); #+end_src In that case (top joints at the cube's vertices), a diagonal stiffness matrix is obtained eqref:eq:detail_kinematics_cubic_stiffness. -Translation stiffness is twice the stiffness of the struts, and rotational stiffness is proportional to the square of the cube's size Hc. +Translation stiffness is twice the stiffness of the struts, and rotational stiffness is proportional to the square of the cube's size $H_c$. \begin{equation}\label{eq:detail_kinematics_cubic_stiffness} \bm{K}_{\{B\} = \{C\}} = k \begin{bmatrix} @@ -2026,24 +2070,23 @@ Translation stiffness is twice the stiffness of the struts, and rotational stiff \end{bmatrix} \end{equation} -But typically, the top joints are not placed at the cube's vertices but on the cube's edges (Figure ref:fig:detail_kinematics_cubic_schematic). +But typically, the top joints are not placed at the cube's vertices but anywhere along the cube's edges (Figure ref:fig:detail_kinematics_cubic_schematic). In that case, the location of the top joints can be expressed by eqref:eq:detail_kinematics_cubic_edges. - -\begin{equation}\label{eq:detail_kinematics_cubic_edges} -\bm{b}_i = \tilde{\bm{b}}_i + \alpha \hat{\bm{s}}_i -\end{equation} - But the computed stiffness matrix is the same eqref:eq:detail_kinematics_cubic_stiffness. -The Stiffness matrix is diagonal for forces and torques applied on the top platform, but expressed at the center of the cube, and for translations and rotations of the top platform expressed with respect to the cube's center. +\begin{equation}\label{eq:detail_kinematics_cubic_edges} + \bm{b}_i = \tilde{\bm{b}}_i + \alpha \hat{\bm{s}}_i +\end{equation} -- [ ] Should I introduce the term "center of stiffness" here? +The Stiffness matrix is therefore diagonal when the considered {B} frame is located at the center of the cube. +This corresponds to forces and torques applied on the top platform, but expressed at the center of the cube, and for translations and rotations of the top platform expressed with respect to the cube's center. +We may call this specific location (where the Stiffness matrix is diagonal) the "Center of Stiffness" (in analogy with the "Center of Mass" where the mass matrix is diagonal). **** Effect of having frame $\{B\}$ off-centered However, as soon as the location of the A and B frames are shifted from the cube's center, off diagonal elements in the stiffness matrix appear. -Let's consider here a vertical shift as shown in Figure ref:fig:detail_kinematics_cubic_schematic_off_centered. +Let's consider here a vertical shift as shown in Figure ref:fig:detail_kinematics_cubic_schematic. In that case, the stiffness matrix is eqref:eq:detail_kinematics_cubic_stiffness_off_centered. Off diagonal elements are increasing with the height difference between the cube's center and the considered B frame. @@ -2062,26 +2105,24 @@ Off diagonal elements are increasing with the height difference between the cube Such structure of the stiffness matrix is very typical with Stewart platform that have some symmetry, but not necessary only for cubic architectures. Therefore, the stiffness of the cubic architecture is special only when considering a frame located at the center of the cube. -This is not very convenient, as in the vast majority of cases, the interesting frame is located about the top platform. +This is not very convenient, as in the vast majority of cases, the interesting frame (where motion are relevant and forces are applied) is located about the top platform. Note that the cube's center needs not to be at the "center" of the Stewart platform. This can lead to interesting architectures shown in Section ref:ssec:detail_kinematics_cubic_design. **** Uniform Mobility -Uniform mobility in X,Y,Z directions (Figure ref:fig:detail_kinematics_cubic_mobility_translations) -- This is somehow more uniform than other architecture -- A cube is obtained -- The length of the cube's edge is equal to the strut axial stroke -- Mobility in translation does not depend on the cube's size - -Some have argue that the translational mobility of the Cubic Stewart platform is a sphere [[cite:&mcinroy00_desig_contr_flexur_joint_hexap]], and this is useful to be able to move equal amount in all directions. -As shown here, this is wrong. -It is possible the consider that the mobility is uniform along the directions of the struts, but usually these are not interesting directions. - +The mobility in translation of the Stewart platform is studied with constant orientation. +Considering limited actuator stroke (i.e. elongation of each strut), the maximum XYZ position that can be reached can be estimated. +The obtained mobility in X,Y,Z directions for the Cubic architecture is shown in Figure ref:fig:detail_kinematics_cubic_mobility_translations. +- It corresponds to a cube, whose axis are aligned with the struts, and the length of the cube's edge is equal to the strut axial stroke. +- We can say that the mobility in not uniform in the XYZ directions, but is uniform in the directions aligned with the cube's edges. + Claims of the cubic architecture having the property of having a translational mobility of a sphere is wrong [[cite:&mcinroy00_desig_contr_flexur_joint_hexap]]. +- Nevertheless, it can be said that the obtained mobility is somehow more uniform than other architecture, as the ones shown in Figure ref:fig:detail_kinematics_mobility_trans. +- Note that the mobility in translation does not depend on the cube's size. Also show mobility in Rx,Ry,Rz (Figure ref:fig:detail_kinematics_cubic_mobility_rotations): -- more mobility in Rx and Ry than in Rz +- More mobility in Rx and Ry than in Rz - Mobility decreases with the size of the cube #+begin_src matlab @@ -2213,9 +2254,6 @@ exportFig('figs/detail_kinematics_cubic_mobility_rotations.pdf', 'width', 'norma <> **** Introduction :ignore: -- [ ] [[cite:&mcinroy00_desig_contr_flexur_joint_hexap]] - Why is this here? - In this section, the dynamics of the platform in the cartesian frame is studied. This corresponds to the transfer function from forces and torques $\bm{\mathcal{F}}$ to translations and rotations $\bm{\mathcal{X}}$ of the top platform. If relative motion sensor are located in each strut ($\bm{\mathcal{L}}$ is measured), the pose $\bm{\mathcal{X}}$ is computed using the Jacobian matrix as shown in Figure ref:fig:detail_kinematics_centralized_control. @@ -2257,28 +2295,27 @@ As was derived during the conceptual design phase, the dynamics from $\bm{\mathc At low frequency: the static behavior of the platform depends on the stiffness matrix eqref:eq:detail_kinematics_transfer_function_cart_low_freq. +In section ref:ssec:detail_kinematics_cubic_static, it was shown that for the cubic configuration, the stiffness matrix is diagonal if frame $\{B\}$ is taken at the cube's center. +In that case, the "cartesian" plant is decoupled at low frequency. \begin{equation}\label{eq:detail_kinematics_transfer_function_cart_low_freq} \frac{{\mathcal{X}}}{\bm{\mathcal{F}}}(j \omega) \xrightarrow[\omega \to 0]{} \bm{K}^{-1} \end{equation} -In section ref:ssec:detail_kinematics_cubic_static, it was shown that for the cubic configuration, the stiffness matrix is diagonal if frame $\{B\}$ is taken at the cube's center. -In that case, the "cartesian" plant is decoupled at low frequency. At high frequency, the behavior depends on the mass matrix (evaluated at frame B) eqref:eq:detail_kinematics_transfer_function_high_freq. +To have the mass matrix diagonal, the center of mass of the mobile parts needs to coincide with the B frame and the principal axes of inertia of the body also needs to coincide with the axis of the B frame. \begin{equation}\label{eq:detail_kinematics_transfer_function_high_freq} \frac{{\mathcal{X}}}{\bm{\mathcal{F}}}(j \omega) \xrightarrow[\omega \to \infty]{} - \omega^2 \bm{M}^{-1} \end{equation} -To have the mass matrix diagonal, the center of mass of the mobile parts needs to coincide with the B frame and the principal axes of inertia of the body also needs to coincide with the axis of the B frame. - To verify that, -- CoM above the top platform (Figure ref:fig:detail_kinematics_cubic_payload) +- A cubic stewart platform is used with a cylindrical payload on top (Figure ref:fig:detail_kinematics_cubic_payload) - The transfer functions from F to X are computed for two specific locations of the B frames: - center of mass: coupled at low frequency due to non diagonal stiffness matrix (Figure ref:fig:detail_kinematics_cubic_cart_coupling_com) - center of stiffness: coupled at high frequency due to non diagonal mass matrix (Figure ref:fig:detail_kinematics_cubic_cart_coupling_cok) -- In both cases, we would get similar dynamics for a non-cubic stewart platform. +- In both cases, similar dynamics for a non-cubic stewart platform would be obtained and the cubic architecture does not show any clear advantage. #+name: fig:detail_kinematics_cubic_payload #+caption: Cubic stewart platform with top cylindrical payload @@ -2468,14 +2505,12 @@ exportFig('figs/detail_kinematics_cubic_cart_coupling_cok.pdf', 'width', 'half', **** Payload's CoM at the cube's center -It is therefore natural to try to have the cube's center and the center of mass of the moving part coincide at the same location. +It is natural to try to have the cube's center (center of stiffness) and the center of mass of the moving part coincide at the same location [[cite:&li01_simul_fault_vibrat_isolat_point]]. +To do so, the payload is located below the top platform, such that the center of mass of the moving body is at the cube's center (Figure ref:fig:detail_kinematics_cubic_centered_payload). -- CoM at the center of the cube: Figure ref:fig:detail_kinematics_cubic_centered_payload +This is what is physically done in [[cite:&mcinroy99_dynam;&mcinroy99_precis_fault_toler_point_using_stewar_platf;&mcinroy00_desig_contr_flexur_joint_hexap;&li01_simul_vibrat_isolat_point_contr;&jafari03_orthog_gough_stewar_platf_microm]] (Figure ref:fig:detail_kinematics_uw_gsp). -This is what is physically done in [[cite:&mcinroy99_dynam;&mcinroy99_precis_fault_toler_point_using_stewar_platf;&mcinroy00_desig_contr_flexur_joint_hexap;&li01_simul_vibrat_isolat_point_contr;&jafari03_orthog_gough_stewar_platf_microm]] -Shown in Figure ref:fig:detail_kinematics_uw_gsp - -The obtained dynamics is indeed well decoupled, thanks to the diagonal stiffness matrix and mass matrix as the same time. +The obtained dynamics is indeed well decoupled, thanks to the diagonal stiffness matrix and mass matrix at the same time. The main issue with this is that usually we want the payload to be located above the top platform, as it is the case for the nano-hexapod. Indeed, if a similar design than the one shown in Figure ref:fig:detail_kinematics_cubic_centered_payload was used, the x-ray beam will hit the different struts during the rotation of the spindle. @@ -2573,207 +2608,26 @@ exportFig('figs/detail_kinematics_cubic_cart_coupling_com_cok.pdf', 'width', 'ha #+end_subfigure #+end_figure -**** TODO Uniform stiffness :noexport: - -One may argue that the compliance matrix is more important that the stiffness matrix, as it describes how the platform with deforms to forces and torques. -As soon at the forces and torques are not longer applied to the center of the cube (which is typically not the case, except for specific case, as will be discussed), the Cubic architecture no longer provides same compliance in horizontal and vertical directions. - -Conclusion: -- Cubic architecture: - Very specific in the sense that it can give both: - - Same XYZ stiffness - - Diagonal K matrix - But only when evaluated at the cube's center - -First, we have to understand what is the physical meaning of the Stiffness matrix $\bm{K}$. - -The Stiffness matrix links forces $\bm{f}$ and torques $\bm{n}$ applied on the mobile platform at $\{B\}$ to the displacement $\Delta\bm{\mathcal{X}}$ of the mobile platform represented by $\{B\}$ with respect to $\{A\}$: -\[ \bm{\mathcal{F}} = \bm{K} \Delta\bm{\mathcal{X}} \] - -with: -- $\bm{\mathcal{F}} = [\bm{f}\ \bm{n}]^{T}$ -- $\Delta\bm{\mathcal{X}} = [\delta x, \delta y, \delta z, \delta \theta_{x}, \delta \theta_{y}, \delta \theta_{z}]^{T}$ - -If the stiffness matrix is inversible, its inverse is the compliance matrix: $\bm{C} = \bm{K}^{-1$ and: -\[ \Delta \bm{\mathcal{X}} = C \bm{\mathcal{F}} \] - -Thus, if the stiffness matrix is diagonal, the compliance matrix is also diagonal and a force (resp. torque) $\bm{\mathcal{F}}_i$ applied on the mobile platform at $\{B\}$ will induce a pure translation (resp. rotation) of the mobile platform represented by $\{B\}$ with respect to $\{A\}$. - -#+begin_src matlab :exports none :results none -%% Cubic Architecture - Effect of the position of frame {A} and {B} -H = 100e-3; % Height of the Stewart platform [m] -Hc = 100e-3; % Size of the useful part of the cube [m] -FOc = H/2; % Center of the cube at the Stewart platform center - -%% Frames {A} and {B} at the cube's center -MO_B = -50e-3; % Position {B} with respect to {M} [m] - -stewart_center = initializeStewartPlatform(); -stewart_center = initializeFramesPositions(stewart_center, 'H', H, 'MO_B', MO_B); -stewart_center = generateCubicConfiguration(stewart_center, 'Hc', Hc, 'FOc', FOc, 'FHa', 5e-3, 'MHb', 5e-3); -stewart_center = computeJointsPose(stewart_center); -stewart_center = initializeStrutDynamics(stewart_center, 'k', 1); -stewart_center = computeJacobian(stewart_center); -stewart_center = initializeCylindricalPlatforms(stewart_center, 'Fpr', 150e-3, 'Mpr', 150e-3); - -displayArchitecture(stewart_center, 'labels', false, 'frames', true); -plotCube(stewart_center, 'Hc', Hc, 'FOc', FOc, 'color', [0,0,0,0.5], 'link_to_struts', true); -#+end_src - -#+begin_src matlab :exports none :results none -%% Frames {A} and {B} offset from the cube's center -MO_B = 50e-3; % Position {B} with respect to {M} [m] - -stewart_offset = initializeStewartPlatform(); -stewart_offset = initializeFramesPositions(stewart_offset, 'H', H, 'MO_B', MO_B); -stewart_offset = generateCubicConfiguration(stewart_offset, 'Hc', Hc, 'FOc', FOc, 'FHa', 5e-3, 'MHb', 5e-3); -stewart_offset = computeJointsPose(stewart_offset); -stewart_offset = initializeStrutDynamics(stewart_offset, 'k', 2); -stewart_offset = computeJacobian(stewart_offset); -stewart_offset = initializeCylindricalPlatforms(stewart_offset, 'Fpr', 150e-3, 'Mpr', 150e-3); - -displayArchitecture(stewart_offset, 'labels', false, 'frames', true); -plotCube(stewart_offset, 'Hc', Hc, 'FOc', FOc, 'color', [0,0,0,0.5], 'link_to_struts', true); -#+end_src - -Here are the conclusion about the Stiffness matrix for the Cubic configuration: -- The cubic configuration permits to have $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$ -- The stiffness matrix $K$ is diagonal for the cubic configuration if the Jacobian is estimated at the cube center - -**** TODO Dynamic isotropy :noexport: - -[[cite:&afzali-far16_vibrat_dynam_isotr_hexap_analy_studies]]: -- proposes an architecture where the CoM can be above the top platform -- [ ] Try to find a stewart platform an a payload for witch all resonances are equal. - Massless struts and plates. - Cylindrical payload tuned to obtained such property. - Show that all modes can be optimally damped? - Compare with Stewart platform with different resonance frequencies. Also need to have parallel stiffness with the struts -- Same resonance frequencies for suspension modes? - Maybe in one case: sphere at the CoM? - Could be nice to show that. - Say that this can be nice for optimal damping for instance (link to paper explaining that) - - -- Show examples where the dynamics can indeed be decoupled in the cartesian frame (i.e. decoupled K and M matrices) - - -- [ ] Try to find a stewart platform an a payload for witch all resonances are equal. - It is not possible for a cubic architecture and a cylinder. - But maybe we can propose to not use a cubic architecture and still have dynamic isotropy? - For instance, let's consider a specific payload => give some rules to obtain dynamic isotropy: - - - Inertia of a cylinder: - Iz = 1/2mr^2 - Ix = Iy = 1/12 m (3r^2 + h^2) - -We want M = alpha K - -2k = alpha m - -alpha = 2k/m - -Krx = 3/2 k H^2 = Ix = 1/12 m - -#+begin_src matlab -%% Cubic Stewart platform with payload above the top platform -H = 200e-3; -MO_B = -100e-3; % Position {B} with respect to {M} [m] - -stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); -stewart = generateCubicConfiguration(stewart, 'Hc', H, 'FOc', H/2, 'FHa', 25e-3, 'MHb', 25e-3); -stewart = computeJointsPose(stewart); -stewart = initializeStrutDynamics(stewart, 'k', 1e6, 'c', 1e1); -stewart = initializeJointDynamics(stewart, 'type_F', '2dof', 'type_M', '3dof'); -stewart = computeJacobian(stewart); -stewart = initializeStewartPose(stewart); -stewart = initializeCylindricalPlatforms(stewart, ... - 'Mpm', 1e-6, ... % Massless platform - 'Fpm', 1e-6, ... % Massless platform - 'Mph', 20e-3, ... % Thin platform - 'Fph', 20e-3, ... % Thin platform - 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)), ... - 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa))); -stewart = initializeCylindricalStruts(stewart, ... - 'Fsm', 1e-6, ... % Massless strut - 'Msm', 1e-6, ... % Massless strut - 'Fsh', stewart.geometry.l(1)/2, ... - 'Msh', stewart.geometry.l(1)/2 ... -); - -% Sample at the Center of the cube -sample = initializeSample('type', 'cylindrical', 'm', 10, 'H', 1/9*H, 'H_offset', -H/2-1/9*H/2, 'R', sqrt(6)*H); - -% Run the linearization -G_CoM_CoK = linearize(mdl, io)*inv(stewart.kinematics.J.'); -G_CoM_CoK.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; -G_CoM_CoK.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}; -#+end_src - -#+begin_src matlab :exports none -freqs = logspace(0, 4, 1000); -figure; -tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); -ax1 = nexttile(); -hold on; -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(1, 1), freqs, 'Hz'))), 'color', colors(1,:), ... - 'DisplayName', '$D_x/F_x$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(2, 2), freqs, 'Hz'))), 'color', colors(2,:), ... - 'DisplayName', '$D_y/F_y$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(3, 3), freqs, 'Hz'))), 'color', colors(3,:), ... - 'DisplayName', '$D_z/F_z$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(4, 4), freqs, 'Hz'))), 'color', colors(4,:), ... - 'DisplayName', '$R_x/M_x$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(5, 5), freqs, 'Hz'))), 'color', colors(5,:), ... - 'DisplayName', '$R_y/M_y$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(6, 6), freqs, 'Hz'))), 'color', colors(6,:), ... - 'DisplayName', '$R_z/M_z$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(4, 2), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'DisplayName', '$R_x/F_y$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(5, 1), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'DisplayName', '$R_y/F_x$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(1, 5), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'DisplayName', '$D_x/M_y$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(2, 4), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ... - 'DisplayName', '$D_y/M_x$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Amplitude [m/V]'); -leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); -leg.ItemTokenSize(1) = 15; -xlim([1, 1e4]); -ylim([1e-10, 2e-3]) -#+end_src - - - - - - - - - **** Conclusion -- Some work to still be decoupled when considering flexible joint stiffness - - [ ] Find the reference - -- Better decoupling between the struts? Next section - Some conclusions can be drawn from the above analysis: - Static Decoupling <=> Diagonal Stiffness matrix <=> {A} and {B} at the cube's center + Can also have static decoupling with non-cubic architecture, if there is some symmetry between the struts. - Dynamic Decoupling <=> Static Decoupling + CoM of mobile platform coincident with {A} and {B}. -- Not specific to the cubic architecture -- Same stiffness in XYZ => Possible to have dynamic isotropy + This is very powerful, but requires to have the payload at the cube's center which is very restrictive and often not possible. + This is also not specific to the cubic architecture. +- Same stiffness in XYZ, which can be interesting for some applications. ** Decentralized Control <> **** Introduction :ignore: -From [[cite:preumont07_six_axis_singl_stage_activ]], the cubic configuration "/minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other)/". -This would facilitate the use of decentralized control. +This is reasonable to think that as the struts are orthogonal to each other for the cubic architecture, the coupling between the struts should be minimized and it should therefore be especially interesting for decentralized control. + +In this section, we wish to see if the cubic architecture has indeed some interesting properties related to decentralized control in the frame of the struts. + +Here two sensors integrated in the struts are considered: a displacement sensor and a force sensor. +The control architecture is shown in Figure ref:fig:detail_kinematics_decentralized_control where $\bm{K}_{\mathcal{L}}$ is a diagonal transfer function matrix. #+begin_src latex :file detail_kinematics_decentralized_control.pdf \begin{tikzpicture} @@ -2797,13 +2651,6 @@ This would facilitate the use of decentralized control. #+RESULTS: [[file:figs/detail_kinematics_decentralized_control.png]] -In this section, we wish to study such properties of the cubic architecture. - -Here, the plant output are sensors integrated in the Stewart platform struts. -Two sensors are considered: a displacement sensor and a force sensor. - -We will compare the transfer function from sensors to actuators in each strut for a cubic architecture and for a non-cubic architecture (where the struts are not orthogonal with each other). - The "strut plant" are compared for two Stewart platforms: - with cubic architecture shown in Figure ref:fig:detail_kinematics_cubic_payload (page pageref:fig:detail_kinematics_cubic_payload) - with a Stewart platform shown in Figure ref:fig:detail_kinematics_non_cubic_payload. It has the same payload and strut dynamics than for the cubic architecture. @@ -2982,9 +2829,11 @@ exportFig('figs/detail_kinematics_cubic_decentralized_dL.pdf', 'width', 'half', **** Force Sensors Similarly, the transfer functions from actuator force to force sensors included in each strut are extracted both for the cubic and non-cubic Stewart platforms. - The results are shown in Figure ref:fig:detail_kinematics_decentralized_fn. +The system is well decoupled at high frequency in both cases. +There are no evidence of an advantage of the cubic architecture. + #+begin_src matlab :exports none :results none %% Decentralized plant - Actuator force to strut force sensor - Cubic Architecture freqs = logspace(0, 4, 1000); @@ -3061,121 +2910,10 @@ exportFig('figs/detail_kinematics_cubic_decentralized_fn.pdf', 'width', 'half', #+end_subfigure #+end_figure -**** Cubic with centered payload :noexport: - -It seems having the payload at the center of the cube makes things worst for decentralized control. - -#+begin_src matlab -%% Cubic Stewart platform with payload above the top platform -H = 200e-3; -MO_B = -100e-3; % Position {B} with respect to {M} [m] - -stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); -stewart = generateCubicConfiguration(stewart, 'Hc', H, 'FOc', H/2, 'FHa', 25e-3, 'MHb', 25e-3); -stewart = computeJointsPose(stewart); -stewart = initializeStrutDynamics(stewart, 'k', 1e6, 'c', 1e1); -stewart = initializeJointDynamics(stewart, 'type_F', '2dof', 'type_M', '3dof'); -stewart = computeJacobian(stewart); -stewart = initializeStewartPose(stewart); -stewart = initializeCylindricalPlatforms(stewart, ... - 'Mpm', 1e-6, ... % Massless platform - 'Fpm', 1e-6, ... % Massless platform - 'Mph', 20e-3, ... % Thin platform - 'Fph', 20e-3, ... % Thin platform - 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb)), ... - 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa))); -stewart = initializeCylindricalStruts(stewart, ... - 'Fsm', 1e-6, ... % Massless strut - 'Msm', 1e-6, ... % Massless strut - 'Fsh', stewart.geometry.l(1)/2, ... - 'Msh', stewart.geometry.l(1)/2 ... -); - -% Sample at the Center of the cube -sample = initializeSample('type', 'cylindrical', 'm', 10, 'H', 100e-3, 'H_offset', -H/2-50e-3); - -% Run the linearization -G_CoM_CoK = linearize(mdl, io)*inv(stewart.kinematics.J.'); -G_CoM_CoK.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'}; -G_CoM_CoK.OutputName = {'dL1', 'dL2', 'dL3', 'dL4', 'dL5', 'dL6', ... - 'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'}; -#+end_src - -#+begin_src matlab :exports none :results none -%% Coupling in the cartesian frame for a Non_cubic Stewart platform - Frame {B} is at the center of mass of the payload -freqs = logspace(0, 4, 1000); -figure; -tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); -ax1 = nexttile(); -hold on; -for i = 1:5 - for j = i+1:6 - plot(freqs, abs(squeeze(freqresp(G_non_cubic(sprintf('fn%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... - 'HandleVisibility', 'off'); - plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(sprintf('fn%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... - 'HandleVisibility', 'off'); - end -end -plot(freqs, abs(squeeze(freqresp(G_non_cubic('fn1', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:)], 'linewidth', 2.5, ... - 'DisplayName', '$L_i/F_i$'); -plot(freqs, abs(squeeze(freqresp(G_non_cubic('fn2', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... - 'DisplayName', '$L_i/F_j$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('fn1', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:)], 'linewidth', 2.5, ... - 'DisplayName', '$L_i/F_i$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('fn2', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... - 'DisplayName', '$L_i/F_j$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Amplitude [N/N]'); -leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); -leg.ItemTokenSize(1) = 15; -xlim([1, 1e4]); -ylim([1e-3, 1e2]) -#+end_src - -#+begin_src matlab :exports none :results none -%% Coupling in the cartesian frame for a Non_cubic Stewart platform - Frame {B} is at the center of mass of the payload -freqs = logspace(0, 4, 1000); -figure; -tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); -ax1 = nexttile(); -hold on; -for i = 1:5 - for j = i+1:6 - plot(freqs, abs(squeeze(freqresp(G_non_cubic(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ... - 'HandleVisibility', 'off'); - plot(freqs, abs(squeeze(freqresp(G_cubic(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... - 'HandleVisibility', 'off'); - plot(freqs, abs(squeeze(freqresp(G_CoM_CoK(sprintf('dL%i',i), sprintf('f%i',j)), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... - 'HandleVisibility', 'off'); - end -end -plot(freqs, abs(squeeze(freqresp(G_non_cubic('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(1,:)], 'linewidth', 2.5, ... - 'DisplayName', '$L_i/F_i$'); -plot(freqs, abs(squeeze(freqresp(G_non_cubic('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ... - 'DisplayName', '$L_i/F_j$'); -plot(freqs, abs(squeeze(freqresp(G_cubic('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:)], 'linewidth', 2.5, ... - 'DisplayName', '$L_i/F_i$'); -plot(freqs, abs(squeeze(freqresp(G_cubic('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ... - 'DisplayName', '$L_i/F_j$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('dL1', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:)], 'linewidth', 2.5, ... - 'DisplayName', '$L_i/F_i$'); -plot(freqs, abs(squeeze(freqresp(G_CoM_CoK('dL2', 'f1'), freqs, 'Hz'))), 'color', [colors(3,:), 0.1], ... - 'DisplayName', '$L_i/F_j$'); -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Amplitude [m/N]'); -leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); -leg.ItemTokenSize(1) = 15; -xlim([1, 1e4]); -ylim([1e-10, 2e-3]) -#+end_src - - **** Conclusion The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut and thus provides no advantages for decentralized control. +No evidence of specific advantages of the cubic architecture for decentralized control has been found in the literature, despite many claims. ** Cubic architecture with Cube's center above the top platform <> @@ -3190,15 +2928,14 @@ Or, typically the $\{B\}$ frame is taken above the top platform where forces are In this section, modifications of the Cubic architectures are proposed in order to be able to have the payload above the top platform while still benefiting from interesting dynamical properties of the cubic architecture. -There are three key parameters: +There are three key parameters for the geometry of the Cubic Stewart platform: - $H$ height of the Stewart platform (distance from fix base to mobile platform) - $H_c$ height of the cube, as shown in Figure ref:fig:detail_kinematics_cubic_schematic_full - $H_{CoM}$ height of the center of mass with respect to the mobile platform. It is also the cube's center. -# Say a $H = 100\,mm$ tall Stewart platform needs to be designed with the CoM of the payload $H_{CoM} = 20\,mm$ above the top platform. -# The cube's center therefore needs to be positioned 20mm above the top platform. +Depending on the considered cube's size $H_c$ compared to $H$ and $H_{CoM}$, different designs are obtained. -The obtained design depends on the considered size of the cube $H_c$ with respect to $H$ and $H_{CoM}$. +In the three examples shows bellow, $H = 100\,mm$ and $H_{CoM} = 20\,mm$. #+begin_src matlab %% Cubic configurations with center of the cube above the top platform @@ -3209,7 +2946,7 @@ FOc = H + MO_B; % Center of the cube with respect to {F} **** Small cube -When the considered cube size is smaller than twice the height of the CoM, the obtained design looks like Figure ref:fig:detail_kinematics_cubic_above_small. +When the considered cube size $H_c$ is smaller than twice the height of the CoM $H_{CoM}$, the obtained design looks like Figure ref:fig:detail_kinematics_cubic_above_small. \begin{equation}\label{eq:detail_kinematics_cube_small} H_c < 2 H_{CoM} @@ -3220,6 +2957,8 @@ This is similar to [[cite:&furutani04_nanom_cuttin_machin_using_stewar]], even t Adjacent struts are parallel to each other, which is quite different from the typical architecture in which parallel struts are opposite to each other. +This lead to a compact architecture, but as the cube's size is small, the rotational stiffness may be too low. + #+begin_src matlab %% Small cube Hc = 2*MO_B; % Size of the useful part of the cube [m] @@ -3537,11 +3276,11 @@ Then, using eqref:eq:detail_kinematics_cube_joints, the size of the top and bott **** Conclusion -For each of the configuration, the Stiffness matrix is diagonal with $k_x = k_y = k_y = 2k$ with $k$ is the stiffness of each strut. +For each of the proposed configuration, the Stiffness matrix is diagonal with $k_x = k_y = k_y = 2k$ with $k$ is the stiffness of each strut. However, the rotational stiffnesses are increasing with the cube's size but the required size of the platform is also increasing, so there is a trade-off here. We found that we can have a diagonal stiffness matrix using the cubic architecture when $\{A\}$ and $\{B\}$ are located above the top platform. -Depending on the cube's size, we obtain 3 different configurations. +Depending on the cube's size, 3 different configurations were obtained. ** Conclusion :PROPERTIES: @@ -3550,15 +3289,14 @@ Depending on the cube's size, we obtain 3 different configurations. Cubic architecture can be interesting when specific payloads are being used. In that case, the center of mass of the payload should be placed at the center of the cube. -For the classical architecture, it is often not possible. +For the classical cubic architecture, it is often not possible. Architectures with the center of the cube about the top platform are proposed to overcome this issue. -Cubic architecture are attributed a number of properties that were found to be incorrect: -- Uniform mobility -- Easy for decentralized control +This study was necessary to determine if the Cubic configuration has specific properties that would be interesting for the nano-hexapod. +During this study, it was found that some properties attributed to the cubic configuration (such as uniform mobility and natural decoupling between the struts) were not verified or require more nuances than typically done. -* Nano Hexapod +* TODO Nano Hexapod :PROPERTIES: :HEADER-ARGS:matlab+: :tangle matlab/detail_kinematics_3_nano_hexapod.m :END: diff --git a/nass-geometry.pdf b/nass-geometry.pdf index 8c25402..51bc401 100644 Binary files a/nass-geometry.pdf and b/nass-geometry.pdf differ diff --git a/nass-geometry.tex b/nass-geometry.tex index 01b3456..ce24b9b 100644 --- a/nass-geometry.tex +++ b/nass-geometry.tex @@ -1,4 +1,4 @@ -% Created 2025-04-01 Tue 14:18 +% Created 2025-04-01 Tue 17:49 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -27,7 +27,7 @@ \begin{itemize} \item In the conceptual design phase, the geometry of the Stewart platform was chosen arbitrarily and not optimized \item In the detail design phase, we want to see if the geometry can be optimized to improve the overall performances -\item Optimization criteria: mobility, stiffness, dynamical decoupling, more performance / bandwidth +\item Optimization criteria: mobility, stiffness, decoupling between the struts for decentralized control, dynamical decoupling in the cartesian frame \end{itemize} Outline: @@ -35,8 +35,8 @@ Outline: \item Review of Stewart platform (Section \ref{sec:detail_kinematics_stewart_review}) Geometry, Actuators, Sensors, Joints \item Effect of geometry on the Stewart platform characteristics (Section \ref{sec:detail_kinematics_geometry}) -\item Cubic configuration: benefits? (Section \ref{sec:detail_kinematics_cubic}) -\item Obtained geometry for the nano hexapod (Section \ref{sec:detail_kinematics_nano_hexapod}) +\item Cubic configuration: special architecture that received many attention in the literature. We want to see the special properties of this architecture and if this can be applied for the nano hexapod (Section \ref{sec:detail_kinematics_cubic}) +\item Presentation of the obtained geometry for the nano hexapod (Section \ref{sec:detail_kinematics_nano_hexapod}) \end{itemize} \chapter{Review of Stewart platforms} @@ -60,14 +60,17 @@ Some Stewart platforms found in the literature are listed in Table \ref{tab:deta \item All presented Stewart platforms are using flexible joints, as it is a prerequisites for nano-positioning capabilities. \item Most of stewart platforms are using voice coil actuators or piezoelectric actuators. The actuators used for the Stewart platform will be chosen in the next section. -\item Depending on the application, various sensors are integrated in the struts or on the plates. +\item Depending on the application, various sensors are integrated in the struts or on the plates such as force sensors, inertial sensors or relative displacement sensors. The choice of sensor for the nano-hexapod will be described in the next section. -\item There are two categories of Stewart platform geometry: +\item Flexible joints can also have various implementations. This will be discussed in the next section. +\item There are two main categories of Stewart platform geometry: \begin{itemize} \item Cubic architecture (Figure \ref{fig:detail_kinematics_stewart_examples_cubic}). Struts are positioned along 6 sides of a cubic (and are therefore orthogonal to each other). Such specific architecture has some special properties that will be studied in Section \ref{sec:detail_kinematics_cubic}. \item Non-cubic architecture (Figure \ref{fig:detail_kinematics_stewart_examples_non_cubic}) +The orientation of the struts and position of the joints are chosen based on performances criteria. +Some of which are presented in Section \ref{sec:detail_kinematics_geometry} \end{itemize} \end{itemize} @@ -170,7 +173,7 @@ Conclusion: \item Lot's have a ``cubic'' architecture that will be discussed in Section \ref{sec:detail_kinematics_cubic} \item actuator types \item various sensors -\item flexible joints (discussed in next chapter) +\item flexible joints \end{itemize} \item The effect of geometry on the properties of the Stewart platform is studied in section \ref{sec:detail_kinematics_geometry} \item It is determined what is the optimal geometry for the NASS @@ -182,7 +185,7 @@ Conclusion: \item As was shown during the conceptual phase, the geometry of the Stewart platform influences: \begin{itemize} \item the stiffness and compliance properties -\item the mobility +\item the mobility or workspace \item the force authority \item the dynamics of the manipulator \end{itemize} @@ -194,7 +197,12 @@ The choice of frames (\(\{A\}\) and \(\{B\}\)), independently of the physical St \section{Platform Mobility / Workspace} The mobility of the Stewart platform (or any manipulator) is here defined as the range of motion that it can perform. It corresponds to the set of possible pose (i.e. combined translation and rotation) of frame \{B\} with respect to frame \{A\}. -It should therefore be represented in a six dimensional space. +It is therefore a six dimensional property which is difficult to represent. +Depending on the applications, only the translation mobility (i.e. fixed orientation workspace) or the rotation mobility may be represented. +This is equivalent as to project the six dimensional value into a 3 dimensional space, easier to represent. + +Mobility of parallel manipulators are inherently difficult to study as the translational and orientation workspace are coupled \cite{merlet02_still}. +Things are getting much more simpler when considering small motions as the Jacobian matrix can be considered constant and the equations are linear. As was shown during the conceptual phase, for small displacements, the Jacobian matrix can be used to link the strut motion to the motion of frame B with respect to A through equation \eqref{eq:detail_kinematics_jacobian}. \begin{equation}\label{eq:detail_kinematics_jacobian} @@ -220,34 +228,18 @@ More specifically: \item the mobility in rotation depends on bi (position of top joints) \end{itemize} -As will be shown in Section \ref{sec:detail_kinematics_cubic}, there are some geometry that gives same stroke in X, Y and Z directions. - -As the mobility is of dimension six, it is difficult to represent. -Depending on the applications, only the translation mobility or the rotation mobility may be represented. - -\begin{quote} -Although there is no human readable way to represent the complete workspace, some projections of the full workspace can be drawn. -\end{quote} - -Difficulty of studying workspace of parallel manipulators. - \paragraph{Mobility in translation} -Here, for simplicity, only translations are first considered: +Here, for simplicity, only translations are first considered (i.e. fixed orientation of the Stewart platform): \begin{itemize} \item Let's consider a general Stewart platform geometry shown in Figure \ref{fig:detail_kinematics_mobility_trans_arch}. \item In the general case: the translational mobility can be represented by a 3D shape with 12 faces (each actuator limits the stroke along its orientation in positive and negative directions). The faces are therefore perpendicular to the strut direction. -The obtained mobility is shown in Figure \ref{fig:detail_kinematics_mobility_trans_result}. +The obtained mobility for the considered stewart platform geometry is shown in Figure \ref{fig:detail_kinematics_mobility_trans_result}. +In reality, the workspace boundaries are portion of spheres, but they are well approximated by flat surfaces for short stroke hexapods \item Considering an actuator stroke of \(\pm d\), the mobile platform can be translated in any direction with a stroke of \(d\) -A circle with radius \(d\) can be contained in the general shape. -It will touch the shape along six lines defined by the strut axes. -The sphere with radius \(d\) is shown in Figure \ref{fig:detail_kinematics_mobility_trans_result}. -\item Therefore, for any (small stroke) Stewart platform with actuator stroke \(\pm d\), it is possible to move the top platform in any direction by at least a distance \(d\). -Note that no platform angular motion is here considered. When combining angular motion, the linear stroke decreases. -\item When considering some symmetry in the system (as typically the case), the shape becomes a Trigonal trapezohedron whose height and width depends on the orientation of the struts. -We only get 6 faces as usually the Stewart platform consists of 3 sets of 2 parallels struts. -\item In reality, portion of spheres, but well approximated by flat surfaces for short stroke hexapods. +This means that a sphere with radius \(d\) is contained in the general shape as illustrated in Figure \ref{fig:detail_kinematics_mobility_trans_result}. +The sphere will touch the shape along six lines defined by the strut axes. \end{itemize} \begin{figure}[htbp] @@ -268,11 +260,16 @@ We only get 6 faces as usually the Stewart platform consists of 3 sets of 2 para To better understand how the geometry of the Stewart platform impacts the translational mobility, two configurations are compared: \begin{itemize} -\item Struts oriented horizontally (Figure \ref{fig:detail_kinematics_stewart_mobility_vert_struts}) => more stroke in horizontal direction -\item Struts oriented vertically (Figure \ref{fig:detail_kinematics_stewart_mobility_hori_struts}) => more stroke in vertical direction -\item Corresponding mobility shown in Figure \ref{fig:detail_kinematics_mobility_translation_strut_orientation} +\item Struts oriented horizontally (Figure \ref{fig:detail_kinematics_stewart_mobility_vert_struts}). +This leads to having more stroke in the horizontal direction and less stroke in the vertical direction (Figure \ref{fig:detail_kinematics_mobility_translation_strut_orientation}). +\item Struts oriented vertically (Figure \ref{fig:detail_kinematics_stewart_mobility_hori_struts}). +More stroke in vertical direction \end{itemize} +It can be counter intuitive to have less stroke in the direction of the struts. +This is because the struts are forming a lever mechanism that amplifies the motion. +The amplification factor increases when the struts have an high angle with the direction and motion and is equal to one when it is aligned with the direction of motion. + \begin{figure}[htbp] \begin{subfigure}{0.25\textwidth} \begin{center} @@ -352,8 +349,8 @@ It will be done in Section \ref{sec:detail_kinematics_nano_hexapod} to estimate Stiffness matrix: \begin{itemize} \item defines how the nano-hexapod deforms (frame \(\{B\}\) with respect to frame \(\{A\}\)) due to static forces/torques applied on \(\{B\}\). -\item Depends on the Jacobian matrix (i.e. the geometry) and the strut axial stiffness \eqref{eq:detail_kinematics_stiffness_matrix} -\item Contribution of joints stiffness is here not considered \cite{mcinroy00_desig_contr_flexur_joint_hexap,mcinroy02_model_desig_flexur_joint_stewar} +\item It depends on the Jacobian matrix (i.e. the geometry) and the strut axial stiffness \eqref{eq:detail_kinematics_stiffness_matrix} +\item The contribution of joints stiffness is here not considered \cite{mcinroy00_desig_contr_flexur_joint_hexap,mcinroy02_model_desig_flexur_joint_stewar} \end{itemize} \begin{equation}\label{eq:detail_kinematics_stiffness_matrix} @@ -361,7 +358,7 @@ Stiffness matrix: \end{equation} It is assumed that the stiffness of all strut is the same: \(\bm{\mathcal{K}} = k \cdot \mathbf{I}_6\). -Obtained stiffness matrix linearly depends on the strut stiffness \(k\) \eqref{eq:detail_kinematics_stiffness_matrix_simplified}. +Obtained stiffness matrix linearly depends on the strut stiffness \(k\), and is structured as shown in \eqref{eq:detail_kinematics_stiffness_matrix_simplified}. \begin{equation}\label{eq:detail_kinematics_stiffness_matrix_simplified} \bm{K} = k \bm{J}^T \bm{J} = @@ -376,13 +373,13 @@ Obtained stiffness matrix linearly depends on the strut stiffness \(k\) \eqref{e \paragraph{Translation Stiffness} -XYZ stiffnesses: +As shown by \eqref{eq:detail_kinematics_stiffness_matrix_simplified}, the translation stiffnesses (the 3x3 top left terms of the stiffness matrix): \begin{itemize} \item Only depends on the orientation of the struts and not their location: \(\hat{\bm{s}}_i \cdot \hat{\bm{s}}_i^T\) \item Extreme case: all struts are vertical \(s_i = [0,\ 0,\ 1]\) => vertical stiffness of \(6 k\), but null stiffness in X and Y directions \item If two struts along X, two struts along Y, and two struts along Z => \(\hat{\bm{s}}_i \cdot \hat{\bm{s}}_i^T = 2 \bm{I}_3\) Stiffness is well distributed along directions. -This corresponds to the cubic architecture. +This corresponds to the cubic architecture presented in Section \ref{sec:detail_kinematics_cubic}. \end{itemize} If struts more vertical (Figure \ref{fig:detail_kinematics_stewart_mobility_vert_struts}): @@ -397,26 +394,16 @@ Opposite conclusions if struts are not horizontal (Figure \ref{fig:detail_kinema \paragraph{Rotational Stiffness} -Rotational stiffnesses: -\begin{itemize} -\item Same orientation but increased distances (bi) by a factor 2 => rotational stiffness increased by factor 4 -Figure \ref{fig:detail_kinematics_stewart_mobility_close_struts} -Figure \ref{fig:detail_kinematics_stewart_mobility_space_struts} -\end{itemize} +The rotational stiffnesses depends both on the orientation of the struts and on the location of the top joints (with respect to the considered center of rotation, i.e. the location of frame B). -Struts further apart: -\begin{itemize} -\item no change to XYZ -\item increase in rotational stiffness (by the square of the distance) -\end{itemize} +Same orientation but increased distances (bi) by a factor 2 => rotational stiffness increased by factor 4. +Compact stewart platform of Figure \ref{fig:detail_kinematics_stewart_mobility_close_struts} as therefore less rotational stiffness than the Stewart platform of Figure \ref{fig:detail_kinematics_stewart_mobility_space_struts}. \paragraph{Diagonal Stiffness Matrix} Having the stiffness matrix \(\bm{K}\) diagonal can be beneficial for control purposes as it would make the plant in the cartesian frame decoupled at low frequency. - -This depends on the geometry and on the chosen \{A\} frame. - -For specific configurations, it is possible to have a diagonal K matrix. +This depends on the geometry and on the chosen \{B\} frame. +For specific geometry and chose of B frame, it is possible to have a diagonal K matrix. This will be discussed in Section \ref{ssec:detail_kinematics_cubic_static}. @@ -426,7 +413,7 @@ This will be discussed in Section \ref{ssec:detail_kinematics_cubic_static}. Dynamical equations (both in the cartesian frame and in the frame of the struts) for the Stewart platform were derived during the conceptual phase with simplifying assumptions (massless struts and perfect joints). The dynamics depends both on the geometry (Jacobian matrix) but also on the payload being placed on top of the platform. -Under very specific conditions, the equations of motion can be decoupled in the Cartesian space. +Under very specific conditions, the equations of motion in the Cartesian frame \eqref{eq:nhexa_transfer_function_cart} can be decoupled. These are studied in Section \ref{ssec:detail_kinematics_cubic_dynamic}. \begin{equation}\label{eq:nhexa_transfer_function_cart} @@ -435,21 +422,15 @@ These are studied in Section \ref{ssec:detail_kinematics_cubic_dynamic}. \paragraph{In the frame of the Struts} -In the frame of the struts, the equations of motion are well decoupled at low frequency. -This is why most of Stewart platforms are controlled in the frame of the struts: bellow the resonance frequency, the system is decoupled and SISO control may be applied for each strut. +In the frame of the struts, the equations of motion \eqref{eq:nhexa_transfer_function_struts} are well decoupled at low frequency. +This is why most of Stewart platforms are controlled in the frame of the struts: bellow the resonance frequency, the system is decoupled and SISO control may be applied for each strut, independently of the payload being used. \begin{equation}\label{eq:nhexa_transfer_function_struts} \frac{\bm{\mathcal{L}}}{\bm{f}}(s) = ( \bm{J}^{-T} \bm{M} \bm{J}^{-1} s^2 + \bm{\mathcal{C}} + \bm{\mathcal{K}} )^{-1} \end{equation} Coupling between sensors (force sensors, relative position sensor, inertial sensors) in different struts may also be important for decentralized control. -Can the geometry be optimized to have lower coupling between the struts? -This will be studied with the cubic architecture. - -\paragraph{Dynamic Isotropy} - -\cite{afzali-far16_vibrat_dynam_isotr_hexap_analy_studies}: -``\textbf{Dynamic isotropy}, leading to equal eigenfrequencies, is a powerful optimization measure.'' +In section \ref{ssec:detail_kinematics_decentralized_control}, it will be study if the Stewart platform geometry can be optimized to have lower coupling between the struts. \section*{Conclusion} The effects of two changes in the manipulator's geometry, namely the position and orientation of the legs, are summarized in Table \ref{tab:detail_kinematics_geometry}. @@ -460,20 +441,16 @@ These trade-offs give some guidelines when choosing the Stewart platform geometr \begin{table}[htbp] \caption{\label{tab:detail_kinematics_geometry}Effect of a change in geometry on the manipulator's stiffness, force authority and stroke} \centering -\begin{tabularx}{\linewidth}{lXX} +\small +\begin{tabularx}{0.9\linewidth}{Xcc} \toprule - & \textbf{legs pointing more vertically} & \textbf{legs further apart}\\ +\textbf{Struts} & \textbf{Vertically Oriented} & \textbf{Increased separation}\\ \midrule Vertical stiffness & \(\nearrow\) & \(=\)\\ Horizontal stiffness & \(\searrow\) & \(=\)\\ Vertical rotation stiffness & \(\searrow\) & \(\nearrow\)\\ Horizontal rotation stiffness & \(\nearrow\) & \(\nearrow\)\\ \midrule -Vertical force authority & \(\nearrow\) & \(=\)\\ -Horizontal force authority & \(\searrow\) & \(=\)\\ -Vertical torque authority & \(\searrow\) & \(\nearrow\)\\ -Horizontal torque authority & \(\nearrow\) & \(\nearrow\)\\ -\midrule Vertical stroke & \(\searrow\) & \(=\)\\ Horizontal stroke & \(\nearrow\) & \(=\)\\ Vertical rotation stroke & \(\nearrow\) & \(\searrow\)\\ @@ -485,20 +462,13 @@ Horizontal rotation stroke & \(\searrow\) & \(\searrow\)\\ \chapter{The Cubic Architecture} \label{sec:detail_kinematics_cubic} The Cubic configuration for the Stewart platform was first proposed in \cite{geng94_six_degree_of_freed_activ}. +This configuration is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube, as shown in Figure \ref{fig:detail_kinematics_cubic_architecture_examples}. -This configuration is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube Figure \ref{fig:detail_kinematics_cubic_architecture_examples}. +Typically, the struts have similar size than the cube's edge, as shown in Figure \ref{fig:detail_kinematics_cubic_architecture_example}. +Practical implementations of such configuration are shown in Figures \ref{fig:detail_kinematics_jpl}, \ref{fig:detail_kinematics_uw_gsp} and \ref{fig:detail_kinematics_uqp}. -Cubic configuration: -\begin{itemize} -\item The struts are corresponding to 6 of the 8 edges of a cube. -\item This way, all struts are perpendicular to each other (except sets of two that are parallel). -\end{itemize} - -Struts with similar size than the cube's edge (Figure \ref{fig:detail_kinematics_cubic_architecture_example}). -Similar to Figures \ref{fig:detail_kinematics_jpl}, \ref{fig:detail_kinematics_uw_gsp} and \ref{fig:detail_kinematics_uqp}. - -Struts smaller than the cube's edge (Figure \ref{fig:detail_kinematics_cubic_architecture_example_small}). -Similar to the Stewart platform of Figure \ref{fig:detail_kinematics_ulb_pz}. +It is also possible to have the struts length smaller than the cube's edge (Figure \ref{fig:detail_kinematics_cubic_architecture_example_small}). +An example of such Stewart platform is shown in Figure \ref{fig:detail_kinematics_ulb_pz}. \begin{figure}[htbp] \begin{subfigure}{0.49\textwidth} @@ -517,36 +487,31 @@ Similar to the Stewart platform of Figure \ref{fig:detail_kinematics_ulb_pz}. \end{figure} -The cubic configuration is attributed a number of properties that made this configuration widely used (\cite{preumont07_six_axis_singl_stage_activ,jafari03_orthog_gough_stewar_platf_microm}). -From \cite{geng94_six_degree_of_freed_activ}: -\begin{enumerate} -\item Uniformity in control capability in all directions -\item Uniformity in stiffness in all directions -\item Minimum cross coupling force effect among actuators -\item Facilitate collocated sensor-actuator control system design -\item Simple kinematics relationships -\item Simple dynamic analysis -\item Simple mechanical design -\end{enumerate} - -According to \cite{preumont07_six_axis_singl_stage_activ}, it ``minimizes the cross-coupling amongst actuators and sensors of different legs'' (being orthogonal to each other). - -Specific points of interest are: +A number of properties are attributed to the cubic configuration, which have made this configuration widely popular (\cite{geng94_six_degree_of_freed_activ,preumont07_six_axis_singl_stage_activ,jafari03_orthog_gough_stewar_platf_microm}): \begin{itemize} -\item uniform mobility, uniform stiffness, and coupling properties +\item Simple kinematics relationships and dynamical analysis \cite{geng94_six_degree_of_freed_activ} +\item Uniform stiffness in all directions \cite{hanieh03_activ_stewar} +\item Uniform mobility \cite[, chapt.8.5.2]{preumont18_vibrat_contr_activ_struc_fourt_edition} +\item Minimization of the cross coupling between actuators and sensors in other struts \cite{preumont07_six_axis_singl_stage_activ}. +This is attributed to the fact that the struts are orthogonal to each other. +This is said to facilitate collocated sensor-actuator control system design, i.e. the implementation of decentralized control \cite{geng94_six_degree_of_freed_activ,thayer02_six_axis_vibrat_isolat_system}. \end{itemize} -In this section: + +Such properties are studied to see if they are useful for the nano-hexapod and the associated conditions: \begin{itemize} -\item Such properties are studied -\item Additional properties interesting for control? -\item It is determined if the cubic architecture is interested for the nano-hexapod +\item The mobility and stiffness properties of the cubic configuration are studied in Section \ref{ssec:detail_kinematics_cubic_static}. +\item Dynamical decoupling is studied in Section \ref{ssec:detail_kinematics_cubic_dynamic} +\item Decentralized control, important for the NASS, is studied in Section \ref{ssec:detail_kinematics_decentralized_control} \end{itemize} + +As the cubic architecture has some restrictions on the geometry, alternative designs are proposed in Section \ref{ssec:detail_kinematics_cubic_design}. + +The goal is to determine if the cubic architecture is interesting for the nano-hexapod. \section{Static Properties} \label{ssec:detail_kinematics_cubic_static} \paragraph{Stiffness matrix for the Cubic architecture} Consider the cubic architecture shown in Figure \ref{fig:detail_kinematics_cubic_schematic_full}. - The unit vectors corresponding to the edges of the cube are described by \eqref{eq:detail_kinematics_cubic_s}. \begin{equation}\label{eq:detail_kinematics_cubic_s} @@ -567,29 +532,23 @@ Coordinates of the cube's vertices relevant for the top joints, expressed with r \end{equation} \begin{figure}[htbp] -\begin{subfigure}{0.33\textwidth} +\begin{subfigure}{0.48\textwidth} \begin{center} -\includegraphics[scale=1,scale=0.6]{figs/detail_kinematics_cubic_schematic_full.png} +\includegraphics[scale=1,scale=0.9]{figs/detail_kinematics_cubic_schematic_full.png} \end{center} \subcaption{\label{fig:detail_kinematics_cubic_schematic_full}Full cube} \end{subfigure} -\begin{subfigure}{0.33\textwidth} +\begin{subfigure}{0.48\textwidth} \begin{center} -\includegraphics[scale=1,scale=0.6]{figs/detail_kinematics_cubic_schematic.png} +\includegraphics[scale=1,scale=0.9]{figs/detail_kinematics_cubic_schematic.png} \end{center} \subcaption{\label{fig:detail_kinematics_cubic_schematic}Cube's portion} \end{subfigure} -\begin{subfigure}{0.33\textwidth} -\begin{center} -\includegraphics[scale=1,scale=0.6]{figs/detail_kinematics_cubic_schematic_off_centered.png} -\end{center} -\subcaption{\label{fig:detail_kinematics_cubic_schematic_off_centered}Off Centered} -\end{subfigure} \caption{\label{fig:detail_kinematics_cubic_schematic_cases}Struts are represented un blue. The cube's center by a dot.} \end{figure} In that case (top joints at the cube's vertices), a diagonal stiffness matrix is obtained \eqref{eq:detail_kinematics_cubic_stiffness}. -Translation stiffness is twice the stiffness of the struts, and rotational stiffness is proportional to the square of the cube's size Hc. +Translation stiffness is twice the stiffness of the struts, and rotational stiffness is proportional to the square of the cube's size \(H_c\). \begin{equation}\label{eq:detail_kinematics_cubic_stiffness} \bm{K}_{\{B\} = \{C\}} = k \begin{bmatrix} @@ -602,16 +561,16 @@ Translation stiffness is twice the stiffness of the struts, and rotational stiff \end{bmatrix} \end{equation} -But typically, the top joints are not placed at the cube's vertices but on the cube's edges (Figure \ref{fig:detail_kinematics_cubic_schematic}). +But typically, the top joints are not placed at the cube's vertices but anywhere along the cube's edges (Figure \ref{fig:detail_kinematics_cubic_schematic}). In that case, the location of the top joints can be expressed by \eqref{eq:detail_kinematics_cubic_edges}. - -\begin{equation}\label{eq:detail_kinematics_cubic_edges} -\bm{b}_i = \tilde{\bm{b}}_i + \alpha \hat{\bm{s}}_i -\end{equation} - But the computed stiffness matrix is the same \eqref{eq:detail_kinematics_cubic_stiffness}. -The Stiffness matrix is diagonal for forces and torques applied on the top platform, but expressed at the center of the cube, and for translations and rotations of the top platform expressed with respect to the cube's center. +\begin{equation}\label{eq:detail_kinematics_cubic_edges} + \bm{b}_i = \tilde{\bm{b}}_i + \alpha \hat{\bm{s}}_i +\end{equation} + +The Stiffness matrix is therefore diagonal when the considered \{B\} frame is located at the center of the cube. +for forces and torques applied on the top platform, but expressed at the center of the cube, and for translations and rotations of the top platform expressed with respect to the cube's center. \begin{itemize} \item[{$\square$}] Should I introduce the term ``center of stiffness'' here? @@ -621,7 +580,7 @@ The Stiffness matrix is diagonal for forces and torques applied on the top platf However, as soon as the location of the A and B frames are shifted from the cube's center, off diagonal elements in the stiffness matrix appear. -Let's consider here a vertical shift as shown in Figure \ref{fig:detail_kinematics_cubic_schematic_off_centered}. +Let's consider here a vertical shift as shown in Figure \ref{fig:detail_kinematics_cubic_schematic}. In that case, the stiffness matrix is \eqref{eq:detail_kinematics_cubic_stiffness_off_centered}. Off diagonal elements are increasing with the height difference between the cube's center and the considered B frame. @@ -761,7 +720,7 @@ To verify that, \paragraph{Payload's CoM at the cube's center} -It is therefore natural to try to have the cube's center and the center of mass of the moving part coincide at the same location. +It is therefore natural to try to have the cube's center and the center of mass of the moving part coincide at the same location \cite{li01_simul_fault_vibrat_isolat_point}. \begin{itemize} \item CoM at the center of the cube: Figure \ref{fig:detail_kinematics_cubic_centered_payload} @@ -1055,6 +1014,8 @@ Requirements: \item The nano-hexapod should fit within a cylinder with radius of \(120\,mm\) and with a height of \(95\,mm\). \item In terms of mobility: uniform mobility in XYZ directions (100um) \item In terms of stiffness: ?? +Having the resonance frequencies well above the maximum rotational velocity of \(2\pi\,\text{rad/s}\) to limit the gyroscopic effects. +Having the resonance below the problematic modes of the micro-station to decouple from the micro-station complex dynamics. \item In terms of dynamics: \begin{itemize} \item be able to apply IFF in a decentralized way with good robustness and performances (good damping of modes) @@ -1062,8 +1023,14 @@ Requirements: \end{itemize} \end{itemize} -For the NASS, the payloads can have various inertia, with masses ranging from 1 to 50kg. +The main difficulty for the design optimization of the nano-hexapod, is that the payloads will have various inertia, with masses ranging from 1 to 50kg. It is therefore not possible to have one geometry that gives good dynamical properties for all the payloads. + + +It could have been an option to have a cubic architecture as proposed in section \ref{ssec:detail_kinematics_cubic_design}, but having the cube's center 150mm above the top platform would have lead to platforms well exceeding the maximum available size. +In that case, each payload would have to be calibrated in inertia before placing on top of the nano-hexapod, which would require a lot of work from the future users. + +Considering the fact that it would not be possible to have the center of mass at the cube's center, the cubic architecture is not of great value here. \section{Obtained Geometry} Take both platforms at maximum size. @@ -1071,9 +1038,26 @@ Make reasonable choice (close to the final choice). Say that it is good enough to make all the calculations. The geometry will be slightly refined during the detailed mechanical design for several reason: easy of mount, manufacturability, \ldots{} -\begin{itemize} -\item[{$\square$}] Show the obtained geometry and the main parameters. -\end{itemize} +Obtained geometry is shown in Figure \ref{fig:detail_kinematics_nano_hexapod}. +Height between the top plates is 95mm. +Joints are offset by 15mm from the plate surfaces, and are positioned along a circle with radius 120mm for the fixed joints and 110mm for the mobile joints. +The positioning angles (Figure \ref{fig:detail_kinematics_nano_hexapod_top}) are \([255, 285, 15, 45, 135, 165]\) degrees for the top joints and \([220, 320, 340, 80, 100, 200]\) degrees for the bottom joints. + +\begin{figure}[htbp] +\begin{subfigure}{0.48\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_kinematics_nano_hexapod_iso.png} +\end{center} +\subcaption{\label{fig:detail_kinematics_nano_hexapod_iso}Isometric view} +\end{subfigure} +\begin{subfigure}{0.48\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_kinematics_nano_hexapod_top.png} +\end{center} +\subcaption{\label{fig:detail_kinematics_nano_hexapod_top}Top view} +\end{subfigure} +\caption{\label{fig:detail_kinematics_nano_hexapod}Obtained architecture for the Nano Hexapod} +\end{figure} This geometry will be used for: \begin{itemize}