From 9c261436ee2ed31cf30529f16bee3aa10ca38d25 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Thu, 19 Dec 2019 18:01:32 +0100 Subject: [PATCH] [WIP] Start to work on a better definition of the Stewart platform --- simscape-model.org | 150 ++++++++++++++++++++++++++++++++++--------- stewart_platform.slx | Bin 0 -> 30610 bytes 2 files changed, 120 insertions(+), 30 deletions(-) create mode 100644 stewart_platform.slx diff --git a/simscape-model.org b/simscape-model.org index fc42f6a..6438d34 100644 --- a/simscape-model.org +++ b/simscape-model.org @@ -23,19 +23,109 @@ * Introduction :ignore: Stewart platforms are generated in multiple steps. +We define 4 important *frames*: +- $\{F\}$: Frame fixed to the *Fixed* base and located at the center of its bottom surface. + This is used to fix the Stewart platform to some support. +- $\{M\}$: Frame fixed to the *Moving* platform and located at the center of its top surface. + This is used to place things on top of the Stewart platform. +- $\{A\}$: Frame fixed to the fixed base. + It defined the center of rotation of the moving platform. +- $\{B\}$: Frame fixed to the moving platform. + The motion of the moving platforms and forces applied to it are defined with respect to this frame $\{B\}$. + +Then, we define the *location of the spherical joints*: +- $\bm{a}_{i}$ are the position of the spherical joints fixed to the fixed base +- $\bm{b}_{i}$ are the position of the spherical joints fixed to the moving platform + +We define the *rest position* of the Stewart platform: +- For simplicity, we suppose that the fixed base and the moving platform are parallel and aligned with the vertical axis at their rest position. +- Thus, to define the rest position of the Stewart platform, we just have to defined its total height $H$. + $H$ corresponds to the distance from the bottom of the fixed base to the top of the moving platform. + +From $\bm{a}_{i}$ and $\bm{b}_{i}$, we can determine the *length and orientation of each strut*: +- $l_{i}$ is the length of the strut +- ${}^{A}\hat{\bm{s}}_{i}$ is the unit vector align with the strut + +The position of the Spherical joints can be done using various methods: +- Cubic configuration +- Geometrical +- Definition them by hand +- These methods should be easily scriptable and corresponds to specific functions that returns ${}^{F}\bm{a}_{i}$ and ${}^{M}\bm{b}_{i}$. + The input of these functions are the parameters corresponding to the wanted geometry. + We need also to know the height of the platform. + +For Simscape, we need: +- The position of the frame $\{A\}$ with respect to the frame $\{F\}$: ${}^{F}\bm{O}_{A}$ +- The position of the frame $\{B\}$ with respect to the frame $\{M\}$: ${}^{M}\bm{O}_{B}$ +- The position and orientation of each spherical joint fixed to the fixed base: ${}^{F}\bm{a}_{i}$ and ${}^{F}\bm{R}_{a_{i}}$ +- The position and orientation of each spherical joint fixed to the moving platform: ${}^{M}\bm{b}_{i}$ and ${}^{M}\bm{R}_{b_{i}}$ +- The rest length of each strut: $l_{i}$ +- The stiffness and damping of each actuator: $k_{i}$ and $c_{i}$ + + +------ + +The procedure is the following: +1. Choose $H$ +2. Choose ${}^{F}\bm{O}_{A}$ and ${}^{M}\bm{O}_{B}$ +3. Choose $\bm{a}_{i}$ and $\bm{b}_{i}$, probably by specifying ${}^{F}\bm{a}_{i}$ and ${}^{M}\bm{b}_{i}$ +4. Choose $k_{i}$ and $c_{i}$ + +#+begin_src matlab + %% 1. Height of the platform. Location of {F} and {M} + H = 90e-3; % [m] + FO_M = [0; 0; H]; + + %% 2. Location of {A} and {B} + FO_A = [0; 0; 100e-3] + FO_M;% [m,m,m] + MO_B = [0; 0; 100e-3];% [m,m,m] + + %% 3. Position and Orientation of ai and bi + Fa = zeros(3, 6); % Fa_i is the i'th vector of Fa + Mb = zeros(3, 6); % Mb_i is the i'th vector of Mb + + Aa = Fa - repmat(FO_A, [1, 6]); + Bb = Mb - repmat(MO_B, [1, 6]); + + Ab = Bb - repmat(-MO_B-FO_M+FO_A, [1, 6]); + Ba = Aa - repmat( MO_B+FO_M-FO_A, [1, 6]); + + As = (Ab - Aa)./vecnorm(Ab - Aa); % As_i is the i'th vector of As + l = vecnorm(Ab - Aa); + + Bs = (Bb - Ba)./vecnorm(Bb - Ba); + + FRa = zeros(3,3,6); + MRb = zeros(3,3,6); + + for i = 1:6 + FRa(:,:,i) = [cross([0;1;0],As(:,i)) , cross(As(:,i), cross([0;1;0], As(:,i))) , As(:,i)]; + FRa(:,:,i) = FRa(:,:,i)./vecnorm(FRa(:,:,i)); + + MRb(:,:,i) = [cross([0;1;0],Bs(:,i)) , cross(Bs(:,i), cross([0;1;0], Bs(:,i))) , Bs(:,i)]; + MRb(:,:,i) = MRb(:,:,i)./vecnorm(MRb(:,:,i)); + end + + %% 4. Stiffness and Damping of each strut + Ki = 1e6*ones(6,1); + Ci = 1e2*ones(6,1); +#+end_src + +------ + First, geometrical parameters are defined: -- ${}^Aa_i$ - Position of the joints fixed to the fixed base w.r.t $\{A\}$ -- ${}^Ab_i$ - Position of the joints fixed to the mobile platform w.r.t $\{A\}$ -- ${}^Bb_i$ - Position of the joints fixed to the mobile platform w.r.t $\{B\}$ +- ${}^A\bm{a}_i$ - Position of the joints fixed to the fixed base w.r.t $\{A\}$ +- ${}^A\bm{b}_i$ - Position of the joints fixed to the mobile platform w.r.t $\{A\}$ +- ${}^B\bm{b}_i$ - Position of the joints fixed to the mobile platform w.r.t $\{B\}$ - $H$ - Total height of the mobile platform These parameter are enough to determine all the kinematic properties of the platform like the Jacobian, stroke, stiffness, ... These geometrical parameters can be generated using different functions: =initializeCubicConfiguration= for cubic configuration or =initializeGeneralConfiguration= for more general configuration. A function =computeGeometricalProperties= is then used to compute: -- $J_f$ - Jacobian matrix for the force location -- $J_d$ - Jacobian matrix for displacement estimation -- $R_m$ - Rotation matrices to position the leg vectors +- $\bm{J}_f$ - Jacobian matrix for the force location +- $\bm{J}_d$ - Jacobian matrix for displacement estimation +- $\bm{R}_m$ - Rotation matrices to position the leg vectors Then, geometrical parameters are computed for all the mechanical elements with the function =initializeMechanicalElements=: - Shape of the platforms @@ -55,12 +145,12 @@ Other Parameters are defined for the Simscape simulation: - Location of the Jacobian point for velocity/displacement computation * initializeGeneralConfiguration - :PROPERTIES: - :HEADER-ARGS:matlab+: :exports code - :HEADER-ARGS:matlab+: :comments no - :HEADER-ARGS:matlab+: :eval no - :HEADER-ARGS:matlab+: :tangle src/initializeGeneralConfiguration.m - :END: +:PROPERTIES: +:HEADER-ARGS:matlab+: :exports code +:HEADER-ARGS:matlab+: :comments no +:HEADER-ARGS:matlab+: :eval no +:HEADER-ARGS:matlab+: :tangle src/initializeGeneralConfiguration.m +:END: ** Function description The =initializeGeneralConfiguration= function takes one structure that contains configurations for the hexapod and returns one structure representing the Hexapod. @@ -138,12 +228,12 @@ end #+end_src * computeGeometricalProperties - :PROPERTIES: - :HEADER-ARGS:matlab+: :exports code - :HEADER-ARGS:matlab+: :comments no - :HEADER-ARGS:matlab+: :eval no - :HEADER-ARGS:matlab+: :tangle src/computeGeometricalProperties.m - :END: +:PROPERTIES: +:HEADER-ARGS:matlab+: :exports code +:HEADER-ARGS:matlab+: :comments no +:HEADER-ARGS:matlab+: :eval no +:HEADER-ARGS:matlab+: :tangle src/computeGeometricalProperties.m +:END: ** Function description #+begin_src matlab @@ -240,12 +330,12 @@ Compute Jacobian Matrix #+end_src * initializeMechanicalElements - :PROPERTIES: - :HEADER-ARGS:matlab+: :exports code - :HEADER-ARGS:matlab+: :comments no - :HEADER-ARGS:matlab+: :eval no - :HEADER-ARGS:matlab+: :tangle src/initializeMechanicalElements.m - :END: +:PROPERTIES: +:HEADER-ARGS:matlab+: :exports code +:HEADER-ARGS:matlab+: :comments no +:HEADER-ARGS:matlab+: :eval no +:HEADER-ARGS:matlab+: :tangle src/initializeMechanicalElements.m +:END: ** Function description #+begin_src matlab @@ -466,12 +556,12 @@ The structure is added to the Hexapod structure #+end_src * initializeSample - :PROPERTIES: - :HEADER-ARGS:matlab+: :exports code - :HEADER-ARGS:matlab+: :comments no - :HEADER-ARGS:matlab+: :eval no - :HEADER-ARGS:matlab+: :tangle src/initializeSample.m - :END: +:PROPERTIES: +:HEADER-ARGS:matlab+: :exports code +:HEADER-ARGS:matlab+: :comments no +:HEADER-ARGS:matlab+: :eval no +:HEADER-ARGS:matlab+: :tangle src/initializeSample.m +:END: ** Function description #+begin_src matlab diff --git a/stewart_platform.slx b/stewart_platform.slx new file mode 100644 index 0000000000000000000000000000000000000000..da84e1fc3b131e9caa4a0cc64a0bbf9b69231f2d GIT binary patch literal 30610 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