diff --git a/cubic-configuration.html b/cubic-configuration.html index 8f79349..c3cec35 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
+
The discovery of the Cubic configuration is done in geng94_six_degree_of_freed_activ. -Further analysis is conducted in jafari03_orthog_gough_stewar_platf_microm. +Further analysis is conducted in
--People using orthogonal/cubic configuration: preumont07_six_axis_singl_stage_activ. -
- -The specificity of the Cubic configuration is that each actuator is orthogonal with the others.
-To generate and study the Cubic configuration, initializeCubicConfiguration
is used (description in section 4).
+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).
-
+To generate and study the Cubic configuration, initializeCubicConfiguration
is used (description in section 5).
+
The goal is to study the benefits of using a cubic configuration: @@ -352,20 +349,20 @@ 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.
-
Figure 1: Centered cubic configuration
@@ -469,11 +466,11 @@ save('./mat/stewart.mat', --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.
@@ -573,16 +570,16 @@ stewart = computeGeometricalProperties(stewart, opts);-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
@@ -695,8 +692,8 @@ We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the StiffHere, the “center” of the Stewart platform is not at the cube center. @@ -810,8 +807,8 @@ We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiff
We here study the effect of the size of the cube used for the Stewart configuration.
@@ -900,7 +897,7 @@ xlabel('Cube Size [mm]'); ylabel(
+
Figure 3: \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) function of the size of the cube
generateCubicConfiguration
: Generate a Cubic Configuration+This Matlab function is accessible here. +
+function [stewart] = generateCubicConfiguration(stewart, args) +% generateCubicConfiguration - Generate a Cubic Configuration +% +% Syntax: [stewart] = generateCubicConfiguration(stewart, args) +% +% Inputs: +% - stewart - A structure with the following fields +% - H [1x1] - Total height of the platform [m] +% - args - Can have the following fields: +% - Hc [1x1] - Height of the "useful" part of the cube [m] +% - FOc [1x1] - Height of the center of the cube with respect to {F} [m] +% - FHa [1x1] - Height of the plane joining the points ai with respect to the frame {F} [m] +% - MHb [1x1] - Height of the plane joining the points bi with respect to the frame {M} [m] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} +% - Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} ++
+
+Figure 4: 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 +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 +located at the center of the cube and aligned with {F} and {M}. +
+ +sx = [ 2; -1; -1]; +sy = [ 0; 1; -1]; +sz = [ 1; 1; 1]; + +R = [sx, sy, sz]./vecnorm([sx, sy, sz]); + +L = args.Hc*sqrt(3); + +Cc = R'*[[0;0;L],[L;0;L],[L;0;0],[L;L;0],[0;L;0],[0;L;L]] - [0;0;1.5*args.Hc]; + +CCf = [Cc(:,1), Cc(:,3), Cc(:,3), Cc(:,5), Cc(:,5), Cc(:,1)]; % CCf(:,i) corresponds to the bottom cube's vertice corresponding to the i'th leg +CCm = [Cc(:,2), Cc(:,2), Cc(:,4), Cc(:,4), Cc(:,6), Cc(:,6)]; % CCm(:,i) corresponds to the top cube's vertice corresponding to the i'th leg ++
+We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)). +
+CSi = (CCm - CCf)./vecnorm(CCm - CCf); ++
+We now which to compute the position of the joints \(a_{i}\) and \(b_{i}\). +
+stewart.Fa = CCf + [0; 0; args.FOc] + ((args.FHa-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; +stewart.Mb = CCf + [0; 0; args.FOc-stewart.H] + ((stewart.H-args.MHb-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; ++
function [stewart] = initializeCubicConfiguration(opts_param)@@ -939,9 +1062,9 @@ In that case, the legs will the further separated. Size of the cube is then limi
Default values for opts.
@@ -969,9 +1092,9 @@ Populate opts with input parameterspoints = [0, 0, 0; ... 0, 0, 1; ... @@ -1015,9 +1138,9 @@ We use to rotation matrix to rotate the cube
leg_indices = [3, 4; ... 2, 4; ... @@ -1044,9 +1167,9 @@ legs_start = zeros(6, 3);
If the Stewart platform is not contained in the cube, throw an error.
@@ -1064,9 +1187,9 @@ If the Stewart platform is not contained in the cube, throw an error.We now determine the location of the joints on the fixed platform w.r.t the fixed frame \(\{A\}\). \(\{A\}\) is fixed to the bottom of the base. @@ -1110,9 +1233,9 @@ Ab = Ab - h*[0, 0, 1
stewart = struct(); stewart.Aa = Aa; @@ -1126,18 +1249,18 @@ Ab = Ab - h*[0, 0, 1
-
Figure 4: Schematic of the bottom plates with all the parameters
+Figure 5: Schematic of the bottom plates with all the parameters
@@ -1169,9 +1292,9 @@ Lets express \(a_i\), \(b_i\) and \(a_j\):
We start with the point of a cube in space:
@@ -1297,9 +1420,9 @@ Let’s then estimate the middle position of the platformFirst we defined the height of the Hexapod.
@@ -1360,15 +1483,15 @@ zlim([0, 2]);
Created: 2020-01-27 lun. 17:41
+Created: 2020-02-06 jeu. 17:25
initializeFramesPositions
: Initialize the positions of frames {A}, {B}, {F} and {M}
+initializeFramesPositions
: Initialize the positions of frames {A}, {B}, {F} and {M}
generateCubicConfiguration
: Generate a Cubic Configuration
+generateGeneralConfiguration
: Generate a Very General Configuration
generateGeneralConfiguration
: Generate a Very General Configuration
+computeJointsPose
: Compute the Pose of the Joints
computeJointsPose
: Compute the Pose of the Joints
+initializeStewartPose
: Determine the initial stroke in each leg to have the wanted pose
initializeStewartPose
: Determine the initial stroke in each leg to have the wanted pose
+initializeCylindricalPlatforms
: Initialize the geometry of the Fixed and Mobile Platforms
initializeCylindricalPlatforms
: Initialize the geometry of the Fixed and Mobile Platforms
+initializeCylindricalStruts
: Define the inertia of cylindrical struts
initializeCylindricalStruts
: Define the inertia of cylindrical struts
+initializeStrutDynamics
: Add Stiffness and Damping properties of each strut
initializeStrutDynamics
: Add Stiffness and Damping properties of each strut
+initializeJointDynamics
: Add Stiffness and Damping properties for spherical joints
-initializeJointDynamics
: Add Stiffness and Damping properties for spherical joints
-
-
-Figure 6: 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 -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 -located at the center of the cube and aligned with {F} and {M}. -
- -sx = [ 2; -1; -1]; -sy = [ 0; 1; -1]; -sz = [ 1; 1; 1]; - -R = [sx, sy, sz]./vecnorm([sx, sy, sz]); - -L = args.Hc*sqrt(3); - -Cc = R'*[[0;0;L],[L;0;L],[L;0;0],[L;L;0],[0;L;0],[0;L;L]] - [0;0;1.5*args.Hc]; - -CCf = [Cc(:,1), Cc(:,3), Cc(:,3), Cc(:,5), Cc(:,5), Cc(:,1)]; % CCf(:,i) corresponds to the bottom cube's vertice corresponding to the i'th leg -CCm = [Cc(:,2), Cc(:,2), Cc(:,4), Cc(:,4), Cc(:,6), Cc(:,6)]; % CCm(:,i) corresponds to the top cube's vertice corresponding to the i'th leg --
-We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)). -
-CSi = (CCm - CCf)./vecnorm(CCm - CCf); --
-We now which to compute the position of the joints \(a_{i}\) and \(b_{i}\). -
-stewart.Fa = CCf + [0; 0; args.FOc] + ((args.FHa-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; -stewart.Mb = CCf + [0; 0; args.FOc-stewart.H] + ((stewart.H-args.MHb-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; --
generateGeneralConfiguration
: Generate a Very General ConfigurationJoints are positions on a circle centered with the Z axis of {F} and {M} and at a chosen distance from {F} and {M}. -The radius of the circles can be chosen as well as the angles where the joints are located. +The radius of the circles can be chosen as well as the angles where the joints are located (see Figure 6).
+ + ++
+Figure 6: Position of the joints
+arguments stewart @@ -998,9 +883,9 @@ The radius of the circles can be chosen as well as the angles where the joints a
stewart.Fa = zeros(3,6); stewart.Mb = zeros(3,6); @@ -1018,11 +903,11 @@ stewart.Mb = zeros(3,6);
computeJointsPose
: Compute the Pose of the JointscomputeJointsPose
: Compute the Pose of the Joints@@ -1030,9 +915,9 @@ This Matlab function is accessible here.
function [stewart] = computeJointsPose(stewart) % computeJointsPose - @@ -1063,11 +948,11 @@ This Matlab function is accessible here.
Figure 7: Position and orientation of the struts
@@ -1075,9 +960,9 @@ This Matlab function is accessible here.stewart.Aa = stewart.Fa - repmat(stewart.FO_A, [1, 6]); stewart.Bb = stewart.Mb - repmat(stewart.MO_B, [1, 6]); @@ -1089,9 +974,9 @@ stewart.Ba = stewart.Aa - repmat( stewart.MO_B
stewart.As = (stewart.Ab - stewart.Aa)./vecnorm(stewart.Ab - stewart.Aa); % As_i is the i'th vector of As @@ -1106,9 +991,9 @@ stewart.l = vecnorm(stewart.Ab - stewart.Aa)
stewart.FRa = zeros(3,3,6); stewart.MRb = zeros(3,3,6); @@ -1126,11 +1011,11 @@ stewart.MRb = zeros(3,3,6);
initializeStewartPose
: Determine the initial stroke in each leg to have the wanted poseinitializeStewartPose
: Determine the initial stroke in each leg to have the wanted pose@@ -1138,9 +1023,9 @@ This Matlab function is accessible here
function [stewart] = initializeStewartPose(stewart, args) % initializeStewartPose - Determine the initial stroke in each leg to have the wanted pose @@ -1164,9 +1049,9 @@ This Matlab function is accessible here
arguments stewart @@ -1178,9 +1063,9 @@ This Matlab function is accessible here
[Li, dLi] = inverseKinematics(stewart, 'AP', args.AP, 'ARB', args.ARB); @@ -1191,11 +1076,11 @@ stewart.dLi = dLi;
initializeCylindricalPlatforms
: Initialize the geometry of the Fixed and Mobile PlatformsinitializeCylindricalPlatforms
: Initialize the geometry of the Fixed and Mobile Platforms
@@ -1203,9 +1088,9 @@ This Matlab function is accessible
-
@@ -1302,9 +1187,9 @@ This Matlab function is accessible h
@@ -1401,9 +1286,9 @@ This Matlab function is accessible here<
@@ -1462,9 +1347,9 @@ This Matlab function is accessible here<
Created: 2020-01-29 mer. 16:49 Created: 2020-02-06 jeu. 17:25Function description
-Function description
+function [stewart] = initializeCylindricalPlatforms(stewart, args)
% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
@@ -1237,9 +1122,9 @@ This Matlab function is accessible
-
Optional Parameters
-Optional Parameters
+arguments
stewart
@@ -1255,9 +1140,9 @@ This Matlab function is accessible
-
Create the
-platforms
structCreate the
+platforms
structplatforms = struct();
@@ -1279,9 +1164,9 @@ platforms.Mpi = diag([1/12
Save the
-platforms
structSave the
+platforms
structstewart.platforms = platforms;
@@ -1290,11 +1175,11 @@ platforms.Mpi = diag([1/12
5.7
-initializeCylindricalStruts
: Define the inertia of cylindrical struts5.6
+initializeCylindricalStruts
: Define the inertia of cylindrical strutsFunction description
-Function description
+function [stewart] = initializeCylindricalStruts(stewart, args)
% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts
@@ -1336,9 +1221,9 @@ This Matlab function is accessible h
Optional Parameters
-Optional Parameters
+arguments
stewart
@@ -1354,9 +1239,9 @@ This Matlab function is accessible h
Create the
-struts
structureCreate the
+struts
structurestruts = struct();
@@ -1389,11 +1274,11 @@ struts.Msi = zeros(3, 3, 6);
5.8
-initializeStrutDynamics
: Add Stiffness and Damping properties of each strut5.7
+initializeStrutDynamics
: Add Stiffness and Damping properties of each strutFunction description
-Function description
+function [stewart] = initializeStrutDynamics(stewart, args)
% initializeStrutDynamics - Add Stiffness and Damping properties of each strut
@@ -1424,9 +1309,9 @@ This Matlab function is accessible here<
Optional Parameters
-Optional Parameters
+arguments
stewart
@@ -1438,9 +1323,9 @@ This Matlab function is accessible here<
Add Stiffness and Damping properties of each strut
-Add Stiffness and Damping properties of each strut
+stewart.Ki = args.Ki;
stewart.Ci = args.Ci;
@@ -1450,11 +1335,11 @@ stewart.Ci = args.Ci;
5.9
-initializeJointDynamics
: Add Stiffness and Damping properties for spherical joints5.8
+initializeJointDynamics
: Add Stiffness and Damping properties for spherical jointsFunction description
-Function description
+function [stewart] = initializeJointDynamics(stewart, args)
% initializeJointDynamics - Add Stiffness and Damping properties for the spherical joints
@@ -1473,46 +1358,65 @@ This Matlab function is accessible here<
%
% Inputs:
% - args - Structure with the following fields:
-% - Kbi [6x1] - Rotational Stiffness for each top spherical joints [N/rad]
-% - Cbi [6x1] - Damping of each top spherical joint [N/(rad/s)]
-% - Kti [6x1] - Rotational Stiffness for each bottom universal joints [N/rad]
-% - Cti [6x1] - Damping of each bottom universal joint [N/(rad/s)]
+% - Ksbi [6x1] - Bending (Rx, Ry) Stiffness for each top Spherical joints [N/rad]
+% - Csbi [6x1] - Bending (Rx, Ry) Damping of each top Spherical joint [N/(rad/s)]
+% - Ksti [6x1] - Torsion (Rz) Stiffness for each top Spherical joints [N/rad]
+% - Csti [6x1] - Torsion (Rz) Damping of each top Spherical joint [N/(rad/s)]
+% - Kubi [6x1] - Bending (Rx, Ry) Stiffness for each bottom Universal joints [N/rad]
+% - Cubi [6x1] - Bending (Rx, Ry) Damping of each bottom Universal joint [N/(rad/s)]
+% - disable [true/false] - Sets all the stiffness/damping to zero
%
% Outputs:
% - stewart - updated Stewart structure with the added fields:
-% - Kbi [6x1] - Rotational Stiffness for each top spherical joints [N/rad]
-% - Cbi [6x1] - Damping of each top spherical joint [N/(rad/s)]
-% - Kti [6x1] - Rotational Stiffness for each bottom universal joints [N/rad]
-% - Cti [6x1] - Damping of each bottom universal joint [N/(rad/s)]
+% - Ksbi [6x1] - Bending (Rx, Ry) Stiffness for each top Spherical joints [N/rad]
+% - Csbi [6x1] - Bending (Rx, Ry) Damping of each top Spherical joint [N/(rad/s)]
+% - Ksti [6x1] - Torsion (Rz) Stiffness for each top Spherical joints [N/rad]
+% - Csti [6x1] - Torsion (Rz) Damping of each top Spherical joint [N/(rad/s)]
+% - Kubi [6x1] - Bending (Rx, Ry) Stiffness for each bottom Universal joints [N/rad]
+% - Cubi [6x1] - Bending (Rx, Ry) Damping of each bottom Universal joint [N/(rad/s)]
Optional Parameters
-Optional Parameters
+arguments
stewart
- args.Kti (6,1) double {mustBeNumeric, mustBeNonnegative} = zeros(6,1)
- args.Cti (6,1) double {mustBeNumeric, mustBeNonnegative} = zeros(6,1)
- args.Kbi (6,1) double {mustBeNumeric, mustBeNonnegative} = zeros(6,1)
- args.Cbi (6,1) double {mustBeNumeric, mustBeNonnegative} = zeros(6,1)
+ args.Ksbi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e+1*ones(6,1)
+ args.Csbi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
+ args.Ksti (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e+0*ones(6,1)
+ args.Csti (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
+ args.Kubi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e+1*ones(6,1)
+ args.Cubi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
+ args.disable logical {mustBeNumericOrLogical} = false
end
Add Stiffness and Damping properties of each strut
-Add Stiffness and Damping properties of each strut
+stewart.Kti = args.Kti;
-stewart.Cti = args.Cti;
-stewart.Kbi = args.Kbi;
-stewart.Cbi = args.Cbi;
+
if args.disable
+ stewart.Ksbi = zeros(6,1);
+ stewart.Csbi = zeros(6,1);
+ stewart.Ksti = zeros(6,1);
+ stewart.Csti = zeros(6,1);
+ stewart.Kubi = zeros(6,1);
+ stewart.Cubi = zeros(6,1);
+else
+ stewart.Ksbi = args.Ksbi;
+ stewart.Csbi = args.Csbi;
+ stewart.Ksti = args.Ksti;
+ stewart.Csti = args.Csti;
+ stewart.Kubi = args.Kubi;
+ stewart.Cubi = args.Cubi;
+end