diff --git a/active-damping.org b/active-damping.org index 027790a..854f5c8 100644 --- a/active-damping.org +++ b/active-damping.org @@ -21,7 +21,6 @@ :END: * Introduction :ignore: - The following decentralized active damping techniques are briefly studied: - Inertial Control (proportional feedback of the absolute velocity): Section [[sec:active_damping_inertial]] - Integral Force Feedback: Section [[sec:active_damping_iff]] @@ -54,7 +53,8 @@ The following decentralized active damping techniques are briefly studied: ** Identification of the Dynamics #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -283,10 +283,12 @@ The root locus is shown in figure [[fig:root_locus_inertial_rot_stiffness]] and ** Identification of the Dynamics with perfect Joints We first initialize the Stewart platform without joint stiffness. #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); + stewart = initializeAmplifiedStrutDynamics(stewart); stewart = initializeJointDynamics(stewart, 'disable', true); stewart = initializeCylindricalPlatforms(stewart); stewart = initializeCylindricalStruts(stewart); @@ -316,7 +318,7 @@ And we identify the dynamics from force actuators to force sensors. The transfer function from actuator forces to force sensors is shown in Figure [[fig:iff_plant_coupling]]. #+begin_src matlab :exports none - freqs = logspace(1, 3, 1000); + freqs = logspace(1, 4, 1000); figure; @@ -514,7 +516,8 @@ The root locus is shown in figure [[fig:root_locus_iff_rot_stiffness]] and the o ** Identification of the Dynamics with perfect Joints We first initialize the Stewart platform without joint stiffness. #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); diff --git a/control-study.org b/control-study.org index 547cbdc..561cb13 100644 --- a/control-study.org +++ b/control-study.org @@ -69,7 +69,8 @@ ** Initialize the Stewart platform #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); diff --git a/cubic-configuration.org b/cubic-configuration.org index a051463..28b09fa 100644 --- a/cubic-configuration.org +++ b/cubic-configuration.org @@ -56,7 +56,8 @@ We create a cubic Stewart platform (figure [[fig:3d-cubic-stewart-aligned]]) in The Jacobian matrix is estimated at the location of the center of the cube. #+begin_src matlab - stewart = initializeFramesPositions('H', 100e-3, 'MO_B', -50e-3); + 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 = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); @@ -99,7 +100,8 @@ 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. #+begin_src matlab - stewart = initializeFramesPositions('H', 100e-3, 'MO_B', 0); + 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 = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); @@ -142,7 +144,8 @@ The Jacobian is estimated at the cube center. [[file:./figs/3d-cubic-stewart-misaligned.png]] #+begin_src matlab - stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -40e-3); + 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 = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); @@ -188,7 +191,8 @@ 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 - stewart = initializeFramesPositions('H', 80e-3, 'MO_B', -40e-3); + 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 = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart, 'Ki', ones(6,1)); @@ -237,7 +241,8 @@ This is possible, to do so: It is possible to have small cube, but then to configuration is a little bit strange. #+begin_src matlab - stewart = initializeFramesPositions('H', 100e-3, 'MO_B', 50e-3); + 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); @@ -368,7 +373,7 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here % % Inputs: % - stewart - A structure with the following fields - % - H [1x1] - Total height of the platform [m] + % - geometry.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] @@ -377,8 +382,8 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here % % 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} + % - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} + % - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} #+end_src *** Documentation @@ -403,6 +408,15 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here end #+end_src +*** Check the =stewart= structure elements +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + assert(isfield(stewart.geometry, 'H'), 'stewart.geometry should have attribute H') + H = stewart.geometry.H; +#+end_src + *** Position of the Cube :PROPERTIES: :UNNUMBERED: t @@ -437,8 +451,17 @@ We can compute the vector of each leg ${}^{C}\hat{\bm{s}}_{i}$ (unit vector from We now which to compute the position of the joints $a_{i}$ and $b_{i}$. #+begin_src matlab - 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; + Fa = CCf + [0; 0; args.FOc] + ((args.FHa-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; + Mb = CCf + [0; 0; args.FOc-H] + ((H-args.MHb-(args.FOc-args.Hc/2))./CSi(3,:)).*CSi; +#+end_src + +*** Populate the =stewart= structure +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + stewart.platform_F.Fa = Fa; + stewart.platform_M.Mb = Mb; #+end_src * Bibliography :ignore: diff --git a/dynamics-study.org b/dynamics-study.org index cde371d..ea988cb 100644 --- a/dynamics-study.org +++ b/dynamics-study.org @@ -41,7 +41,8 @@ ** test #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -129,7 +130,8 @@ Estimation of the transfer function from $\mathcal{\bm{F}}$ to $\mathcal{\bm{X}} ** Compare external forces and forces applied by the actuators Initialization of the Stewart platform. #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -194,7 +196,8 @@ Seems quite similar. ** Comparison of the static transfer function and the Compliance matrix Initialization of the Stewart platform. #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -257,7 +260,8 @@ The low frequency transfer function matrix from $\mathcal{\bm{F}}$ to $\mathcal{ ** Transfer function from forces applied in the legs to the displacement of the legs Initialization of the Stewart platform. #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); diff --git a/identification.org b/identification.org index 5fe90b3..d56e229 100644 --- a/identification.org +++ b/identification.org @@ -65,7 +65,8 @@ An important difference from basic Simulink models is that the states in a physi ** Initialize the Stewart Platform #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -120,7 +121,8 @@ An important difference from basic Simulink models is that the states in a physi ** Initialize the Stewart Platform #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); @@ -354,7 +356,8 @@ Save the movie of the mode shape. ** Initialize the Stewart Platform #+begin_src matlab - stewart = initializeFramesPositions(); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); diff --git a/kinematic-study.org b/kinematic-study.org index 3951bb2..065999d 100644 --- a/kinematic-study.org +++ b/kinematic-study.org @@ -226,7 +226,8 @@ This will also gives us the range for which the approximate forward kinematic is *** Stewart architecture definition We first define some general Stewart architecture. #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStewartPose(stewart); @@ -331,7 +332,8 @@ This is what is analyzed in this section. ** Stewart architecture definition Let's first define the Stewart platform architecture that we want to study. #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStewartPose(stewart); @@ -487,7 +489,8 @@ However, for small displacements, we can use the Jacobian as an approximate solu ** Stewart architecture definition Let's first define the Stewart platform architecture that we want to study. #+begin_src matlab - stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3); + stewart = initializeStewartPlatform(); + stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStewartPose(stewart); diff --git a/simscape-model.org b/simscape-model.org index 3faf69e..74dbece 100644 --- a/simscape-model.org +++ b/simscape-model.org @@ -131,6 +131,7 @@ There is two main types of inertial sensor that can be used to measure the absol Both inertial sensors are described bellow. +* Other Elements ** Z-Axis Geophone *** Working Principle From the schematic of the Z-axis geophone shown in Figure [[fig:z_axis_geophone]], we can write the transfer function from the support velocity $\dot{w}$ to the relative velocity of the inertial mass $\dot{d}$: diff --git a/simulink/stewart_active_damping.slx b/simulink/stewart_active_damping.slx index afa908c..d6c43af 100644 Binary files a/simulink/stewart_active_damping.slx and b/simulink/stewart_active_damping.slx differ