diff --git a/cubic-configuration.html b/cubic-configuration.html index 96cc75a..a0f2463 100644 --- a/cubic-configuration.html +++ b/cubic-configuration.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +generateCubicConfiguration
: Generate a Cubic Configuration
+generateCubicConfiguration
: Generate a Cubic Configuration
generateCubicConfiguration
is used (description in section 2.1).
The goal is to study the benefits of using a cubic configuration:
-We create a cubic Stewart platform (figure 1) in such a way that the center of the cube (black dot) is located at the center of the Stewart platform (blue dot). +We create a cubic Stewart platform (figure 1) 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.
+stewart = initializeFramesPositions('H', 100e-3, 'MO_B', -50e-3); +stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); +stewart = computeJacobian(stewart); ++
Figure 1: Centered cubic configuration
opts = struct(... - 'H_tot', 100, ... % Total height of the Hexapod [mm] - 'L', 200/sqrt(3), ... % Size of the Cube [mm] - 'H', 60, ... % Height between base joints and platform joints [mm] - 'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm] - ); -stewart = initializeCubicConfiguration(opts); -opts = struct(... - 'Jd_pos', [0, 0, -50], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm] - 'Jf_pos', [0, 0, -50] ... % Position of the Jacobian for force location from the top of the mobile platform [mm] - ); -stewart = computeGeometricalProperties(stewart, opts); - -save('./mat/stewart.mat', 'stewart'); --
K = stewart.Jf'*stewart.Jf;
-
-1.9e-18 | --2.3e-17 | -1.8e-18 | -5.5e-17 | --1.5e-17 | +0 | +-2.5e-16 | +0 | +2.1e-17 | +0 | ||
1.9e-18 | +0 | 2 | -6.8e-18 | --6.1e-17 | --1.6e-18 | -4.8e-18 | +0 | +-7.8e-19 | +0 | +0 | |
-2.3e-17 | -6.8e-18 | +-2.5e-16 | +0 | 2 | --6.7e-18 | -4.9e-18 | -5.3e-19 | +-2.4e-18 | +-1.4e-17 | +0 | |
1.8e-18 | --6.1e-17 | --6.7e-18 | -0.0067 | --2.3e-20 | --6.1e-20 | +0 | +-7.8e-19 | +-2.4e-18 | +0.015 | +-4.3e-19 | +1.7e-18 |
5.5e-17 | --1.6e-18 | -4.9e-18 | --2.3e-20 | -0.0067 | -1e-18 | +1.8e-17 | +0 | +-1.1e-17 | +0 | +0.015 | +0 |
-1.5e-17 | -4.8e-18 | -5.3e-19 | --6.1e-20 | -1e-18 | -0.027 | +6.6e-18 | +-3.3e-18 | +0 | +1.7e-18 | +0 | +0.06 |
-We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure 1). +We create a cubic Stewart platform with center of the cube located at the center of the Stewart platform (figure 1). The Jacobian matrix is not estimated at the location of the center of the cube.
opts = struct(... - 'H_tot', 100, ... % Total height of the Hexapod [mm] - 'L', 200/sqrt(3), ... % Size of the Cube [mm] - 'H', 60, ... % Height between base joints and platform joints [mm] - 'H0', 200/2-60/2 ... % Height between the corner of the cube and the plane containing the base joints [mm] - ); -stewart = initializeCubicConfiguration(opts); -opts = struct(... - 'Jd_pos', [0, 0, 0], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm] - 'Jf_pos', [0, 0, 0] ... % Position of the Jacobian for force location from the top of the mobile platform [mm] - ); -stewart = computeGeometricalProperties(stewart, opts); --
K = stewart.Jf'*stewart.Jf; +stewart = initializeFramesPositions('H', 100e-3, 'MO_B', 0); +stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); +stewart = computeJacobian(stewart);
-Here, the “center” of the Stewart platform is not at the cube center (figure 2). +Here, the “center” of the Stewart platform is not at the cube center (figure 2). The Jacobian is estimated at the cube center.
-
Figure 2: Not centered cubic configuration
-The center of the cube is at \(z = 110\). -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\). -
-opts = struct(... - 'H_tot', 100, ... % Total height of the Hexapod [mm] - 'L', 220/sqrt(3), ... % Size of the Cube [mm] - 'H', 60, ... % Height between base joints and platform joints [mm] - 'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm] - ); -stewart = initializeCubicConfiguration(opts); -opts = struct(... - 'Jd_pos', [0, 0, -65], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm] - 'Jf_pos', [0, 0, -65] ... % Position of the Jacobian for force location from the top of the mobile platform [mm] - ); -stewart = computeGeometricalProperties(stewart, opts); --
K = stewart.Jf'*stewart.Jf; +stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -40e-3); +stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); +stewart = computeJacobian(stewart);
Here, the “center” of the Stewart platform is not at the cube center. @@ -681,23 +636,11 @@ The center of the cube from the top platform is at \(z = 110 - 175 = -65\).
opts = struct(... - 'H_tot', 100, ... % Total height of the Hexapod [mm] - 'L', 220/sqrt(3), ... % Size of the Cube [mm] - 'H', 60, ... % Height between base joints and platform joints [mm] - 'H0', 75 ... % Height between the corner of the cube and the plane containing the base joints [mm] - ); -stewart = initializeCubicConfiguration(opts); -opts = struct(... - 'Jd_pos', [0, 0, -60], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm] - 'Jf_pos', [0, 0, -60] ... % Position of the Jacobian for force location from the top of the mobile platform [mm] - ); -stewart = computeGeometricalProperties(stewart, opts); --
K = stewart.Jf'*stewart.Jf; +stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -30e-3); +stewart = generateCubicConfiguration(stewart, 'Hc', 100e-3, 'FOc', 50e-3, 'FHa', 0, 'MHb', 0); +stewart = computeJointsPose(stewart); +stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); +stewart = computeJacobian(stewart);
+We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), and the Stiffness matrix is diagonal. +
++Let’s say we want to have a decouple dynamics above the top platform. +Thus, we want the cube’s center to be located above the top center. +This is possible, to do so: +
+stewart = initializeFramesPositions('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); ++
2 | +0 | +-4.6e-16 | +0 | +4e-17 | +0 | +
0 | +2 | +0 | +-4.8e-17 | +0 | +-3.5e-17 | +
-4.6e-16 | +0 | +2 | +1.5e-20 | +4e-17 | +0 | +
0 | +-4.8e-17 | +1.5e-20 | +0.00034 | +6.8e-21 | +4.2e-19 | +
4e-17 | +0 | +4e-17 | +-3e-21 | +0.00034 | +-2.7e-20 | +
-1.7e-19 | +-3.6e-17 | +0 | +4.2e-19 | +-2.7e-20 | +0.0014 |
-We here study the effect of the size of the cube used for the Stewart configuration. -
- --We fix the height of the Stewart platform, the center of the cube is at the center of the Stewart platform. -
- --We only vary the size of the cube. -
- -H_cubes = 250:20:350; -stewarts = {zeros(length(H_cubes), 1)}; --
for i = 1:length(H_cubes) - H_cube = H_cubes(i); - H_tot = 100; - H = 80; - - opts = struct(... - 'H_tot', H_tot, ... % Total height of the Hexapod [mm] - 'L', H_cube/sqrt(3), ... % Size of the Cube [mm] - 'H', H, ... % Height between base joints and platform joints [mm] - 'H0', H_cube/2-H/2 ... % Height between the corner of the cube and the plane containing the base joints [mm] - ); - stewart = initializeCubicConfiguration(opts); - - opts = struct(... - 'Jd_pos', [0, 0, H_cube/2-opts.H0-opts.H_tot], ... % Position of the Jacobian for displacement estimation from the top of the mobile platform [mm] - 'Jf_pos', [0, 0, H_cube/2-opts.H0-opts.H_tot] ... % Position of the Jacobian for force location from the top of the mobile platform [mm] - ); - stewart = computeGeometricalProperties(stewart, opts); - stewarts(i) = {stewart}; -end --
-The Stiffness matrix is computed for all generated Stewart platforms. -
-Ks = zeros(6, 6, length(H_cube)); -for i = 1:length(H_cubes) - Ks(:, :, i) = stewarts{i}.Jd'*stewarts{i}.Jd; -end --
-The only elements of \(K\) that vary are \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\). -
- --Finally, we plot \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) -
-figure; -hold on; -plot(H_cubes, squeeze(Ks(4, 4, :)), 'DisplayName', '$k_{\theta_x}$'); -plot(H_cubes, squeeze(Ks(6, 6, :)), 'DisplayName', '$k_{\theta_z}$'); -hold off; -legend('location', 'northwest'); -xlabel('Cube Size [mm]'); ylabel('Rotational stiffnes [normalized]'); --
-
-Figure 3: \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) function of the size of the cube
--We observe that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) increase linearly with the cube size. -
- --In order to maximize the rotational stiffness of the Stewart platform, the size of the cube should be the highest possible. -In that case, the legs will the further separated. Size of the cube is then limited by allowed space. -
- -generateCubicConfiguration
: Generate a Cubic ConfigurationgenerateCubicConfiguration
: Generate a Cubic Configuration@@ -911,9 +865,9 @@ This Matlab function is accessible he
function [stewart] = generateCubicConfiguration(stewart, args) % generateCubicConfiguration - Generate a Cubic Configuration @@ -938,37 +892,37 @@ This Matlab function is accessible he
-
Figure 4: Cubic Configuration
+Figure 3: Cubic Configuration
arguments stewart args.Hc (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 args.FOc (1,1) double {mustBeNumeric} = 50e-3 - args.FHa (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 - args.MHb (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 + args.FHa (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3 + args.MHb (1,1) double {mustBeNumeric, mustBeNonnegative} = 15e-3 end
We define the useful points of the cube with respect to the Cube’s center. \({}^{C}C\) are the 6 vertices of the cubes expressed in a frame {C} which is @@ -993,9 +947,9 @@ CCm = [Cc(:,2), Cc(:
We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)).
@@ -1028,7 +982,7 @@ stewart.Mb = CCf + [0; 0; args.FOcCreated: 2020-02-06 jeu. 17:29
+Created: 2020-02-06 jeu. 18:22
-