diff --git a/docs/cubic-configuration.html b/docs/cubic-configuration.html index b4da0d2..b9d11cc 100644 --- a/docs/cubic-configuration.html +++ b/docs/cubic-configuration.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Cubic configuration for the Stewart Platform @@ -299,20 +299,29 @@ for the JavaScript code in this tag.

The discovery of the Cubic configuration is done in geng94_six_degree_of_freed_activ. -Further analysis is conducted in

-The specificity of the Cubic configuration is that each actuator is orthogonal with the others. +The specificity of the Cubic configuration is that each actuator is orthogonal with the others:

+
+

+the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube. +

+

The cubic (or orthogonal) configuration of the Stewart platform is now widely used (preumont07_six_axis_singl_stage_activ,jafari03_orthog_gough_stewar_platf_microm).

-According to preumont07_six_axis_singl_stage_activ, the cubic configuration provides a uniform stiffness in all directions and minimizes the crosscoupling from actuator to sensor of different legs (being orthogonal to each other). +According to preumont07_six_axis_singl_stage_activ:

+
+

+This topology provides a uniform control capability and a uniform stiffness in all directions, and it minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other). +

+

To generate and study the Cubic configuration, generateCubicConfiguration is used (description in section 2.1). @@ -327,7 +336,37 @@ The goal is to study the benefits of using a cubic configuration:

1 Configuration Analysis - Stiffness Matrix

+

+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: +

+ + +

+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\}\). +

+ +

+One has to note that this is only valid in a static way. +

+

1.1 Cubic Stewart platform centered with the cube center - Jacobian estimated at the cube center

@@ -336,12 +375,20 @@ We create a cubic Stewart platform (figure 1) in such The Jacobian matrix is estimated at the location of the center of the cube.

+
+
H = 100e-3;     % height of the Stewart platform [m]
+MO_B = -H/2;     % Position {B} with respect to {M} [m]
+Hc = H;         % Size of the useful part of the cube [m]
+FOc = H + MO_B; % Center of the cube with respect to {F}
+
+
+
stewart = initializeStewartPlatform();
-stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', -50e-3);
-stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
+stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
+stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
 stewart = computeJointsPose(stewart);
-stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
+stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
 stewart = computeJacobian(stewart);
 stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
 
@@ -444,12 +491,20 @@ We create a cubic Stewart platform with center of the cube located at the center The Jacobian matrix is not estimated at the location of the center of the cube.

+
+
H    = 100e-3; % height of the Stewart platform [m]
+MO_B = 20e-3;  % Position {B} with respect to {M} [m]
+Hc   = H;      % Size of the useful part of the cube [m]
+FOc  = H/2;    % Center of the cube with respect to {F}
+
+
+
stewart = initializeStewartPlatform();
-stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 0);
-stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
+stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
+stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
 stewart = computeJointsPose(stewart);
-stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
+stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
 stewart = computeJacobian(stewart);
 stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
 
@@ -483,8 +538,8 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' 2 0 -2.5e-16 -1.4e-17 --0.1 +0 +-0.14 0 @@ -492,7 +547,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' 0 2 0 -0.1 +0.14 0 0 @@ -501,35 +556,35 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' -2.5e-16 0 2 -3.4e-18 --1.4e-17 +-5.3e-19 +0 0 -1.4e-17 -0.1 -3.4e-18 -0.02 -1.1e-20 -3.4e-18 +0 +0.14 +-5.3e-19 +0.025 +0 +8.7e-19 --0.1 +-0.14 +0 +2.6e-18 +1.6e-19 +0.025 0 --1.4e-17 -1.4e-19 -0.02 --1.7e-18 6.6e-18 -3.3e-18 0 -3.6e-18 --1.7e-18 +8.9e-19 +0 0.06 @@ -541,23 +596,24 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr'

1.3 Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center

-Here, the “center” of the Stewart platform is not at the cube center (figure 4). +Here, the “center” of the Stewart platform is not at the cube center (figure 4). The Jacobian is estimated at the cube center.

- -
-

3d-cubic-stewart-misaligned.png -

-

Figure 4: Not centered cubic configuration

+
+
H    = 80e-3; % height of the Stewart platform [m]
+MO_B = -30e-3;  % Position {B} with respect to {M} [m]
+Hc   = 100e-3;      % Size of the useful part of the cube [m]
+FOc  = H + MO_B;    % Center of the cube with respect to {F}
+
stewart = initializeStewartPlatform();
-stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3);
-stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
+stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
+stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
 stewart = computeJointsPose(stewart);
-stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
+stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
 stewart = computeJacobian(stewart);
 stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
 
@@ -567,7 +623,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr'

cubic_conf_not_centered_J_center.png

-

Figure 5: Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center (png, pdf)

+

Figure 4: Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center (png, pdf)

@@ -592,7 +648,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' - + @@ -600,7 +656,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' - + @@ -609,35 +665,35 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' - + - - + + - - + + - + - - + + - + - - + + @@ -664,14 +720,22 @@ The center height of the Stewart platform is then at \(z = \frac{175-75}{2} = 50 The center of the cube from the top platform is at \(z = 110 - 175 = -65\).

+
+
H    = 100e-3; % height of the Stewart platform [m]
+MO_B = -H/2;  % Position {B} with respect to {M} [m]
+Hc   = 1.5*H;      % Size of the useful part of the cube [m]
+FOc  = H/2 + 10e-3;    % Center of the cube with respect to {F}
+
+
+
stewart = initializeStewartPlatform();
-stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3);
-stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0);
+stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B);
+stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0);
 stewart = computeJointsPose(stewart);
-stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
+stewart = initializeStrutDynamics(stewart, 'K', ones(6,1));
 stewart = computeJacobian(stewart);
-stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3);
+stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 215e-3, 'Mpr', 195e-3);
 
@@ -679,7 +743,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr'

cubic_conf_not_centered_J_stewart_center.png

-

Figure 6: Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center (png, pdf)

+

Figure 5: Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center (png, pdf)

0 -1.7e-16 00.024.9e-17 0
0 2 0-0.02-2.2e-17 0 2.8e-17
-1.7e-16 0 21.2e-191.1e-18 -1.4e-17 1.4e-17
0-0.021.2e-19-2.2e-171.1e-18 0.015-4.3e-191.7e-1803.5e-18
0.024.4e-17 0-7.3e-18-3.3e-21-1.4e-17-5.7e-20 0.0150-8.7e-19
6.6e-18 2.5e-17 02e-1803.5e-18-8.7e-19 0.06
@@ -702,7 +766,7 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' - + @@ -714,43 +778,43 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' - + - + - - - + + + - - - - + + + + - - - + + + - - + + - + - +
2 0-1.7e-161.5e-16 0 0.02 00 -0.02 02.8e-170
-1.7e-161.5e-16 0 21.2e-19-1.4e-171.4e-17-3e-18-2.8e-170
0 -0.021.2e-190.015-4.3e-191.7e-18-3e-180.034-8.7e-195.2e-18
0.02 0-7.3e-18-3.3e-210.015-2.2e-17-4.4e-190.034 0
6.6e-182.5e-175.9e-18-7.5e-18 02e-183.5e-18 00.060.14
@@ -761,6 +825,9 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr'

1.5 Conclusion

+

+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.
  • @@ -774,32 +841,47 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr'

    1.6 Having Cube’s center above the top platform

    -Let’s say we want to have a decouple dynamics above the top platform. +Let’s say we want to have a diagonal stiffness matrix when \(\{A\}\) and \(\{B\}\) are located above the top platform. Thus, we want the cube’s center to be located above the top center. -This is possible, to do so: +

    + +

    +Let’s fix the Height of the Stewart platform and the position of frames \(\{A\}\) and \(\{B\}\): +

    +
    +
    H    = 100e-3; % height of the Stewart platform [m]
    +MO_B = 20e-3;  % Position {B} with respect to {M} [m]
    +
    +
    + +

    +We find the several Cubic configuration for the Stewart platform where the center of the cube is located at frame \(\{A\}\). +The differences between the configuration are the cube’s size:

      -
    • The position of the center of the cube should be positioned at A
    • -
    • The Height of the “useful” part of the cube should be at least equal to two times the distance from F to A. -It is possible to have small cube, but then to configuration is a little bit strange.
    • +
    • Small Cube Size in Figure 6
    • +
    • Medium Cube Size in Figure 7
    • +
    • Large Cube Size in Figure 8
    +

    +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. +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. +

    +
    -
    stewart = initializeStewartPlatform();
    -stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 50e-3);
    -FOc = stewart.H + stewart.MO_B(3);
    -Hc = 2*(stewart.H + stewart.MO_B(3));
    -stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 10e-3, 'MHb', 10e-3);
    -stewart = computeJointsPose(stewart);
    -stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1));
    -stewart = initializeJointDynamics(stewart, 'disable', true);
    -stewart = initializeCylindricalPlatforms(stewart);
    -stewart = initializeCylindricalStruts(stewart);
    -stewart = computeJacobian(stewart);
    -stewart = initializeStewartPose(stewart);
    +
    Hc   = 0.4*H;    % Size of the useful part of the cube [m]
    +FOc  = H + MO_B; % Center of the cube with respect to {F}
     
    + +
    +

    stewart_cubic_conf_type_1.png +

    +

    Figure 6: Cubic Configuration for the Stewart Platform - Small Cube Size (png, pdf)

    +
    + @@ -820,9 +902,9 @@ stewart = initializeStewartPose(stewart); - + - + @@ -830,52 +912,222 @@ stewart = initializeStewartPose(stewart); - + - + - - + + - - - - - + + + + + - + + + + + - - - - - - + + - - - + + +
    2 0-3.2e-16-2.8e-16 03.1e-162.4e-17 0
    0 2 0-1.2e-16-2.3e-17 0 0
    -3.2e-16-2.8e-16 0 25e-18-5.6e-17-2.1e-190 0
    0-1.2e-165e-180.143.5e-181.4e-17-2.3e-17-2.1e-190.0024-5.4e-206.5e-19
    3e-162.4e-1704.9e-19-2.3e-200.0024 0-5.4e-172.1e-190.14-6.9e-18
    7.4e-19-2.6e-17-1.2e-181.1e-18 01.3e-17-6.9e-180.546.2e-1900.0096
    -

    -We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiffness matrix is not diagonal. +

    +
    Hc   = 1.5*H;    % Size of the useful part of the cube [m]
    +FOc  = H + MO_B; % Center of the cube with respect to {F}
    +
    +
    + + +
    +

    stewart_cubic_conf_type_2.png

    +

    Figure 7: Cubic Configuration for the Stewart Platform - Medium Cube Size (png, pdf)

    +
    + + + + + +++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    20-1.9e-1605.6e-170
    020-7.6e-1700
    -1.9e-16022.5e-182.8e-170
    0-7.6e-172.5e-180.0348.7e-198.7e-18
    5.7e-1703.2e-172.9e-190.0340
    -1e-18-1.3e-175.6e-178.4e-1800.14
    + +
    +
    Hc   = 2.5*H;    % Size of the useful part of the cube [m]
    +FOc  = H + MO_B; % Center of the cube with respect to {F}
    +
    +
    + + +
    +

    stewart_cubic_conf_type_3.png +

    +

    Figure 8: Cubic Configuration for the Stewart Platform - Large Cube Size (png, pdf)

    +
    + + + + + +++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    20-3e-160-8.3e-170
    020-2.2e-1705.6e-17
    -3e-1602-9.3e-19-2.8e-170
    0-2.2e-17-9.3e-190.09402.1e-17
    -8e-170-3e-17-6.1e-190.0940
    -6.2e-187.2e-175.6e-172.3e-1700.37
@@ -934,7 +1186,7 @@ This Matlab function is accessible

cubic-configuration-definition.png

-

Figure 7: Cubic Configuration

+

Figure 9: Cubic Configuration

@@ -1039,7 +1291,7 @@ stewart.platform_M.Mb = Mb;

Author: Dehaeze Thomas

-

Created: 2020-02-11 mar. 17:52

+

Created: 2020-02-12 mer. 10:22

diff --git a/docs/figs/cubic_conf_centered_J_center.pdf b/docs/figs/cubic_conf_centered_J_center.pdf index 45c3dca..b50806c 100644 Binary files a/docs/figs/cubic_conf_centered_J_center.pdf and b/docs/figs/cubic_conf_centered_J_center.pdf differ diff --git a/docs/figs/cubic_conf_centered_J_center.png b/docs/figs/cubic_conf_centered_J_center.png index 4c94c84..0a7feb4 100644 Binary files a/docs/figs/cubic_conf_centered_J_center.png and b/docs/figs/cubic_conf_centered_J_center.png differ diff --git a/docs/figs/cubic_conf_centered_J_not_center.pdf b/docs/figs/cubic_conf_centered_J_not_center.pdf index fcbb1a4..b7f8ab4 100644 Binary files a/docs/figs/cubic_conf_centered_J_not_center.pdf and b/docs/figs/cubic_conf_centered_J_not_center.pdf differ diff --git a/docs/figs/cubic_conf_centered_J_not_center.png b/docs/figs/cubic_conf_centered_J_not_center.png index 5ac3afd..09bef34 100644 Binary files a/docs/figs/cubic_conf_centered_J_not_center.png and b/docs/figs/cubic_conf_centered_J_not_center.png differ diff --git a/docs/figs/cubic_conf_not_centered_J_center.pdf b/docs/figs/cubic_conf_not_centered_J_center.pdf index 132c542..73a01ac 100644 Binary files a/docs/figs/cubic_conf_not_centered_J_center.pdf and b/docs/figs/cubic_conf_not_centered_J_center.pdf differ diff --git a/docs/figs/cubic_conf_not_centered_J_center.png b/docs/figs/cubic_conf_not_centered_J_center.png index cff6948..1ec9f7f 100644 Binary files a/docs/figs/cubic_conf_not_centered_J_center.png and b/docs/figs/cubic_conf_not_centered_J_center.png differ diff --git a/docs/figs/cubic_conf_not_centered_J_stewart_center.pdf b/docs/figs/cubic_conf_not_centered_J_stewart_center.pdf index ff03265..33a733d 100644 Binary files a/docs/figs/cubic_conf_not_centered_J_stewart_center.pdf and b/docs/figs/cubic_conf_not_centered_J_stewart_center.pdf differ diff --git a/docs/figs/cubic_conf_not_centered_J_stewart_center.png b/docs/figs/cubic_conf_not_centered_J_stewart_center.png index cff6948..1850841 100644 Binary files a/docs/figs/cubic_conf_not_centered_J_stewart_center.png and b/docs/figs/cubic_conf_not_centered_J_stewart_center.png differ diff --git a/docs/figs/stewart_cubic_conf_type_1.pdf b/docs/figs/stewart_cubic_conf_type_1.pdf new file mode 100644 index 0000000..598baa2 Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_1.pdf differ diff --git a/docs/figs/stewart_cubic_conf_type_1.png b/docs/figs/stewart_cubic_conf_type_1.png new file mode 100644 index 0000000..154d4d9 Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_1.png differ diff --git a/docs/figs/stewart_cubic_conf_type_2.pdf b/docs/figs/stewart_cubic_conf_type_2.pdf new file mode 100644 index 0000000..cf2c7bd Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_2.pdf differ diff --git a/docs/figs/stewart_cubic_conf_type_2.png b/docs/figs/stewart_cubic_conf_type_2.png new file mode 100644 index 0000000..6dadb21 Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_2.png differ diff --git a/docs/figs/stewart_cubic_conf_type_3.pdf b/docs/figs/stewart_cubic_conf_type_3.pdf new file mode 100644 index 0000000..9051e68 Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_3.pdf differ diff --git a/docs/figs/stewart_cubic_conf_type_3.png b/docs/figs/stewart_cubic_conf_type_3.png new file mode 100644 index 0000000..a84967b Binary files /dev/null and b/docs/figs/stewart_cubic_conf_type_3.png differ diff --git a/org/cubic-configuration.org b/org/cubic-configuration.org index 7a75460..0ef7814 100644 --- a/org/cubic-configuration.org +++ b/org/cubic-configuration.org @@ -40,13 +40,18 @@ * Introduction :ignore: The discovery of the Cubic configuration is done in cite:geng94_six_degree_of_freed_activ. -Further analysis is conducted in -The specificity of the Cubic configuration is that each actuator is orthogonal with the others. +The specificity of the Cubic configuration is that each actuator is orthogonal with the others: +#+begin_quote +the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube. +#+end_quote The cubic (or orthogonal) configuration of the Stewart platform is now widely used (cite:preumont07_six_axis_singl_stage_activ,jafari03_orthog_gough_stewar_platf_microm). -According to cite:preumont07_six_axis_singl_stage_activ, the cubic configuration provides a uniform stiffness in all directions and *minimizes the crosscoupling* from actuator to sensor of different legs (being orthogonal to each other). +According to cite:preumont07_six_axis_singl_stage_activ: +#+begin_quote +This topology provides a uniform control capability and a uniform stiffness in all directions, and it minimizes the cross-coupling amongst actuators and sensors of different legs (being orthogonal to each other). +#+end_quote To generate and study the Cubic configuration, =generateCubicConfiguration= is used (description in section [[sec:generateCubicConfiguration]]). The goal is to study the benefits of using a cubic configuration: @@ -55,6 +60,23 @@ The goal is to study the benefits of using a cubic configuration: - Is the center of the cube an important point? * Configuration Analysis - Stiffness Matrix +** Introduction :ignore: +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\}$. + +One has to note that this is only valid in a static way. + ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -72,12 +94,19 @@ The goal is to study the benefits of using a cubic configuration: We create a cubic Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot). The Jacobian matrix is estimated at the location of the center of the cube. +#+begin_src matlab + H = 100e-3; % height of the Stewart platform [m] + MO_B = -H/2; % Position {B} with respect to {M} [m] + Hc = H; % Size of the useful part of the cube [m] + FOc = H + MO_B; % Center of the cube with respect to {F} +#+end_src + #+begin_src matlab stewart = initializeStewartPlatform(); - stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', -50e-3); - stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); stewart = computeJointsPose(stewart); - stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); stewart = computeJacobian(stewart); stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3); #+end_src @@ -88,7 +117,7 @@ The Jacobian matrix is estimated at the location of the center of the cube. #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false); - scatter3(0, 0, 50e-3, 200, 'kh'); + scatter3(0, 0, FOc, 200, 'kh'); #+end_src #+header: :tangle no :exports results :results none :noweb yes @@ -101,7 +130,7 @@ The Jacobian matrix is estimated at the location of the center of the cube. [[file:figs/cubic_conf_centered_J_center.png]] #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(stewart.K, {}, {}, ' %.2g '); + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); #+end_src #+RESULTS: @@ -116,19 +145,26 @@ The Jacobian matrix is estimated at the location of the center of the cube. We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]). The Jacobian matrix is not estimated at the location of the center of the cube. +#+begin_src matlab + H = 100e-3; % height of the Stewart platform [m] + MO_B = 20e-3; % Position {B} with respect to {M} [m] + Hc = H; % Size of the useful part of the cube [m] + FOc = H/2; % Center of the cube with respect to {F} +#+end_src + #+begin_src matlab stewart = initializeStewartPlatform(); - stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 0); - stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); stewart = computeJointsPose(stewart); - stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); stewart = computeJacobian(stewart); stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3); #+end_src #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false); - scatter3(0, 0, 50e-3, 200, 'kh'); + scatter3(0, 0, FOc, 200, 'kh'); #+end_src #+header: :tangle no :exports results :results none :noweb yes @@ -141,38 +177,41 @@ The Jacobian matrix is not estimated at the location of the center of the cube. [[file:figs/cubic_conf_centered_J_not_center.png]] #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(stewart.K, {}, {}, ' %.2g '); + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); #+end_src #+RESULTS: -| 2 | 0 | -2.5e-16 | 1.4e-17 | -0.1 | 0 | -| 0 | 2 | 0 | 0.1 | 0 | 0 | -| -2.5e-16 | 0 | 2 | 3.4e-18 | -1.4e-17 | 0 | -| 1.4e-17 | 0.1 | 3.4e-18 | 0.02 | 1.1e-20 | 3.4e-18 | -| -0.1 | 0 | -1.4e-17 | 1.4e-19 | 0.02 | -1.7e-18 | -| 6.6e-18 | -3.3e-18 | 0 | 3.6e-18 | -1.7e-18 | 0.06 | +| 2 | 0 | -2.5e-16 | 0 | -0.14 | 0 | +| 0 | 2 | 0 | 0.14 | 0 | 0 | +| -2.5e-16 | 0 | 2 | -5.3e-19 | 0 | 0 | +| 0 | 0.14 | -5.3e-19 | 0.025 | 0 | 8.7e-19 | +| -0.14 | 0 | 2.6e-18 | 1.6e-19 | 0.025 | 0 | +| 6.6e-18 | -3.3e-18 | 0 | 8.9e-19 | 0 | 0.06 | ** Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center -Here, the "center" of the Stewart platform is not at the cube center (figure [[fig:3d-cubic-stewart-misaligned]]). +Here, the "center" of the Stewart platform is not at the cube center (figure [[fig:cubic_conf_not_centered_J_center]]). The Jacobian is estimated at the cube center. -#+name: fig:3d-cubic-stewart-misaligned -#+caption: Not centered cubic configuration -[[file:figs/3d-cubic-stewart-misaligned.png]] +#+begin_src matlab + H = 80e-3; % height of the Stewart platform [m] + MO_B = -30e-3; % Position {B} with respect to {M} [m] + Hc = 100e-3; % Size of the useful part of the cube [m] + FOc = H + MO_B; % Center of the cube with respect to {F} +#+end_src #+begin_src matlab stewart = initializeStewartPlatform(); - stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3); - stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); stewart = computeJointsPose(stewart); - stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); stewart = computeJacobian(stewart); stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3); #+end_src #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false); - scatter3(0, 0, 50e-3, 200, 'kh'); + scatter3(0, 0, FOc, 200, 'kh'); #+end_src #+header: :tangle no :exports results :results none :noweb yes @@ -185,16 +224,16 @@ The Jacobian is estimated at the cube center. [[file:figs/cubic_conf_not_centered_J_center.png]] #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(stewart.K, {}, {}, ' %.2g '); + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); #+end_src #+RESULTS: -| 2 | 0 | -1.7e-16 | 0 | 0.02 | 0 | -| 0 | 2 | 0 | -0.02 | 0 | 2.8e-17 | -| -1.7e-16 | 0 | 2 | 1.2e-19 | -1.4e-17 | 1.4e-17 | -| 0 | -0.02 | 1.2e-19 | 0.015 | -4.3e-19 | 1.7e-18 | -| 0.02 | 0 | -7.3e-18 | -3.3e-21 | 0.015 | 0 | -| 6.6e-18 | 2.5e-17 | 0 | 2e-18 | 0 | 0.06 | +| 2 | 0 | -1.7e-16 | 0 | 4.9e-17 | 0 | +| 0 | 2 | 0 | -2.2e-17 | 0 | 2.8e-17 | +| -1.7e-16 | 0 | 2 | 1.1e-18 | -1.4e-17 | 1.4e-17 | +| 0 | -2.2e-17 | 1.1e-18 | 0.015 | 0 | 3.5e-18 | +| 4.4e-17 | 0 | -1.4e-17 | -5.7e-20 | 0.015 | -8.7e-19 | +| 6.6e-18 | 2.5e-17 | 0 | 3.5e-18 | -8.7e-19 | 0.06 | We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal. @@ -207,19 +246,26 @@ The Stewart platform is from $z = H_0 = 75$ to $z = H_0 + H_{tot} = 175$. The center height of the Stewart platform is then at $z = \frac{175-75}{2} = 50$. The center of the cube from the top platform is at $z = 110 - 175 = -65$. +#+begin_src matlab + H = 100e-3; % height of the Stewart platform [m] + MO_B = -H/2; % Position {B} with respect to {M} [m] + Hc = 1.5*H; % Size of the useful part of the cube [m] + FOc = H/2 + 10e-3; % Center of the cube with respect to {F} +#+end_src + #+begin_src matlab stewart = initializeStewartPlatform(); - stewart = initializeFramesPositions(stewart, 'H', 80e-3, 'MO_B', -40e-3); - stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); stewart = computeJointsPose(stewart); - stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); stewart = computeJacobian(stewart); - stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 175e-3, 'Mpr', 150e-3); + stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 215e-3, 'Mpr', 195e-3); #+end_src #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false); - scatter3(0, 0, 50e-3, 200, 'kh'); + scatter3(0, 0, FOc, 200, 'kh'); #+end_src #+header: :tangle no :exports results :results none :noweb yes @@ -232,64 +278,158 @@ The center of the cube from the top platform is at $z = 110 - 175 = -65$. [[file:figs/cubic_conf_not_centered_J_stewart_center.png]] #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(stewart.K, {}, {}, ' %.2g '); + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); #+end_src #+RESULTS: -| 2 | 0 | -1.7e-16 | 0 | 0.02 | 0 | -| 0 | 2 | 0 | -0.02 | 0 | 2.8e-17 | -| -1.7e-16 | 0 | 2 | 1.2e-19 | -1.4e-17 | 1.4e-17 | -| 0 | -0.02 | 1.2e-19 | 0.015 | -4.3e-19 | 1.7e-18 | -| 0.02 | 0 | -7.3e-18 | -3.3e-21 | 0.015 | 0 | -| 6.6e-18 | 2.5e-17 | 0 | 2e-18 | 0 | 0.06 | +| 2 | 0 | 1.5e-16 | 0 | 0.02 | 0 | +| 0 | 2 | 0 | -0.02 | 0 | 0 | +| 1.5e-16 | 0 | 2 | -3e-18 | -2.8e-17 | 0 | +| 0 | -0.02 | -3e-18 | 0.034 | -8.7e-19 | 5.2e-18 | +| 0.02 | 0 | -2.2e-17 | -4.4e-19 | 0.034 | 0 | +| 5.9e-18 | -7.5e-18 | 0 | 3.5e-18 | 0 | 0.14 | ** Conclusion #+begin_important - - 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. +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. #+end_important ** Having Cube's center above the top platform -Let's say we want to have a decouple dynamics above the top platform. +Let's say we want to have a diagonal stiffness matrix when $\{A\}$ and $\{B\}$ are located above the top platform. Thus, we want the cube's center to be located above the top center. -This is possible, to do so: -- The position of the center of the cube should be positioned at A -- The Height of the "useful" part of the cube should be at least equal to two times the distance from F to A. - It is possible to have small cube, but then to configuration is a little bit strange. + +Let's fix the Height of the Stewart platform and the position of frames $\{A\}$ and $\{B\}$: +#+begin_src matlab + H = 100e-3; % height of the Stewart platform [m] + MO_B = 20e-3; % Position {B} with respect to {M} [m] +#+end_src + +We find the several Cubic configuration for the Stewart platform where the center of the cube is located at frame $\{A\}$. +The differences between the configuration are the cube's size: +- Small Cube Size in Figure [[fig:stewart_cubic_conf_type_1]] +- Medium Cube Size in Figure [[fig:stewart_cubic_conf_type_2]] +- Large Cube Size in Figure [[fig:stewart_cubic_conf_type_3]] + +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. +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. #+begin_src matlab - stewart = initializeStewartPlatform(); - stewart = initializeFramesPositions(stewart, 'H', 100e-3, 'MO_B', 50e-3); - FOc = stewart.H + stewart.MO_B(3); - Hc = 2*(stewart.H + stewart.MO_B(3)); - stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 10e-3, 'MHb', 10e-3); - stewart = computeJointsPose(stewart); - stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); - stewart = initializeJointDynamics(stewart, 'disable', true); - stewart = initializeCylindricalPlatforms(stewart); - stewart = initializeCylindricalStruts(stewart); - stewart = computeJacobian(stewart); - stewart = initializeStewartPose(stewart); + Hc = 0.4*H; % Size of the useful part of the cube [m] + FOc = H + MO_B; % Center of the cube with respect to {F} #+end_src #+begin_src matlab :exports none + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); + stewart = computeJointsPose(stewart); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); + stewart = computeJacobian(stewart); + stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb))); displayArchitecture(stewart, 'labels', false); - scatter3(0, 0, 50e-3, 200, 'kh'); + scatter3(0, 0, FOc, 200, 'kh'); #+end_src +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_1.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:stewart_cubic_conf_type_1 +#+caption: Cubic Configuration for the Stewart Platform - Small Cube Size ([[./figs/stewart_cubic_conf_type_1.png][png]], [[./figs/stewart_cubic_conf_type_1.pdf][pdf]]) +[[file:figs/stewart_cubic_conf_type_1.png]] + #+begin_src matlab :exports results :results value table replace :tangle no - data2orgtable(stewart.K, {}, {}, ' %.2g '); + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); #+end_src #+RESULTS: -| 2 | 0 | -3.2e-16 | 0 | 3.1e-16 | 0 | -| 0 | 2 | 0 | -1.2e-16 | 0 | 0 | -| -3.2e-16 | 0 | 2 | 5e-18 | -5.6e-17 | 0 | -| 0 | -1.2e-16 | 5e-18 | 0.14 | 3.5e-18 | 1.4e-17 | -| 3e-16 | 0 | -5.4e-17 | 2.1e-19 | 0.14 | -6.9e-18 | -| 7.4e-19 | -2.6e-17 | 0 | 1.3e-17 | -6.9e-18 | 0.54 | +| 2 | 0 | -2.8e-16 | 0 | 2.4e-17 | 0 | +| 0 | 2 | 0 | -2.3e-17 | 0 | 0 | +| -2.8e-16 | 0 | 2 | -2.1e-19 | 0 | 0 | +| 0 | -2.3e-17 | -2.1e-19 | 0.0024 | -5.4e-20 | 6.5e-19 | +| 2.4e-17 | 0 | 4.9e-19 | -2.3e-20 | 0.0024 | 0 | +| -1.2e-18 | 1.1e-18 | 0 | 6.2e-19 | 0 | 0.0096 | -We obtain $k_x = k_y = k_z$ and $k_{\theta_x} = k_{\theta_y}$, but the Stiffness matrix is not diagonal. +#+begin_src matlab + Hc = 1.5*H; % Size of the useful part of the cube [m] + FOc = H + MO_B; % Center of the cube with respect to {F} +#+end_src + +#+begin_src matlab :exports none + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); + stewart = computeJointsPose(stewart); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); + stewart = computeJacobian(stewart); + stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb))); + displayArchitecture(stewart, 'labels', false); + scatter3(0, 0, FOc, 200, 'kh'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_2.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:stewart_cubic_conf_type_2 +#+caption: Cubic Configuration for the Stewart Platform - Medium Cube Size ([[./figs/stewart_cubic_conf_type_2.png][png]], [[./figs/stewart_cubic_conf_type_2.pdf][pdf]]) +[[file:figs/stewart_cubic_conf_type_2.png]] + + +#+begin_src matlab :exports results :results value table replace :tangle no + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); +#+end_src + +#+RESULTS: +| 2 | 0 | -1.9e-16 | 0 | 5.6e-17 | 0 | +| 0 | 2 | 0 | -7.6e-17 | 0 | 0 | +| -1.9e-16 | 0 | 2 | 2.5e-18 | 2.8e-17 | 0 | +| 0 | -7.6e-17 | 2.5e-18 | 0.034 | 8.7e-19 | 8.7e-18 | +| 5.7e-17 | 0 | 3.2e-17 | 2.9e-19 | 0.034 | 0 | +| -1e-18 | -1.3e-17 | 5.6e-17 | 8.4e-18 | 0 | 0.14 | + +#+begin_src matlab + Hc = 2.5*H; % Size of the useful part of the cube [m] + FOc = H + MO_B; % Center of the cube with respect to {F} +#+end_src + +#+begin_src matlab :exports none + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', H, 'MO_B', MO_B); + stewart = generateCubicConfiguration(stewart, 'Hc', Hc, 'FOc', FOc, 'FHa', 0, 'MHb', 0); + stewart = computeJointsPose(stewart); + stewart = initializeStrutDynamics(stewart, 'K', ones(6,1)); + stewart = computeJacobian(stewart); + stewart = initializeCylindricalPlatforms(stewart, 'Fpr', 1.2*max(vecnorm(stewart.platform_F.Fa)), 'Mpr', 1.2*max(vecnorm(stewart.platform_M.Mb))); + displayArchitecture(stewart, 'labels', false); + scatter3(0, 0, FOc, 200, 'kh'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/stewart_cubic_conf_type_3.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:stewart_cubic_conf_type_3 +#+caption: Cubic Configuration for the Stewart Platform - Large Cube Size ([[./figs/stewart_cubic_conf_type_3.png][png]], [[./figs/stewart_cubic_conf_type_3.pdf][pdf]]) +[[file:figs/stewart_cubic_conf_type_3.png]] + + +#+begin_src matlab :exports results :results value table replace :tangle no + data2orgtable(stewart.kinematics.K, {}, {}, ' %.2g '); +#+end_src + +#+RESULTS: +| 2 | 0 | -3e-16 | 0 | -8.3e-17 | 0 | +| 0 | 2 | 0 | -2.2e-17 | 0 | 5.6e-17 | +| -3e-16 | 0 | 2 | -9.3e-19 | -2.8e-17 | 0 | +| 0 | -2.2e-17 | -9.3e-19 | 0.094 | 0 | 2.1e-17 | +| -8e-17 | 0 | -3e-17 | -6.1e-19 | 0.094 | 0 | +| -6.2e-18 | 7.2e-17 | 5.6e-17 | 2.3e-17 | 0 | 0.37 | * TODO Cubic size analysis :noexport: We here study the effect of the size of the cube used for the Stewart configuration.