From 2082bbd580e691417daa07bb8caaf629b819e4b2 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Tue, 11 Feb 2020 15:21:39 +0100 Subject: [PATCH] Update initialization --- active-damping.org | 13 +++++---- control-study.org | 3 +- cubic-configuration.org | 43 +++++++++++++++++++++------- dynamics-study.org | 12 +++++--- identification.org | 9 ++++-- kinematic-study.org | 9 ++++-- simscape-model.org | 1 + simulink/stewart_active_damping.slx | Bin 35478 -> 36051 bytes 8 files changed, 64 insertions(+), 26 deletions(-) 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 afa908c46edf5279ea71d1555acf7ca26668a7db..d6c43afc69ae46c9ea1e89f1bc1221cfae9b68b6 100644 GIT binary patch delta 13888 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 jg)f8Y2^j$XjO!2 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