From aa61c84eb538bc32cdd02e18c2c31637a6d8d76d Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Tue, 11 Feb 2020 15:27:39 +0100 Subject: [PATCH] Org and Docs folders --- .../active-damping.html | 188 +++-- control-study.html => docs/control-study.html | 117 ++- {css => docs/css}/htmlize.css | 0 {css => docs/css}/readtheorg.css | 0 .../cubic-configuration.html | 195 +++-- .../dynamics-study.html | 128 +-- docs/figs | 1 + .../identification.html | 209 ++--- index.html => docs/index.html | 68 +- {js => docs/js}/bootstrap.min.js | 0 {js => docs/js}/jquery.min.js | 0 .../js}/jquery.stickytableheaders.min.js | 0 {js => docs/js}/readtheorg.js | 0 .../kinematic-study.html | 397 ++++----- .../simscape-model.html | 192 +++-- .../simulink-project.html | 3 +- docs/static-analysis.html | 323 ++++++++ .../stewart-architecture.html | 783 +++++++++--------- active-damping.org => org/active-damping.org | 10 + control-study.org => org/control-study.org | 0 .../cubic-configuration.org | 10 + dynamics-study.org => org/dynamics-study.org | 10 + org/figs | 1 + identification.org => org/identification.org | 10 + index.org => org/index.org | 0 .../kinematic-study.org | 10 + simscape-model.org => org/simscape-model.org | 10 + .../simulink-project.org | 0 .../static-analysis.org | 10 + .../stewart-architecture.org | 0 30 files changed, 1541 insertions(+), 1134 deletions(-) rename active-damping.html => docs/active-damping.html (81%) rename control-study.html => docs/control-study.html (81%) rename {css => docs/css}/htmlize.css (100%) rename {css => docs/css}/readtheorg.css (100%) rename cubic-configuration.html => docs/cubic-configuration.html (79%) rename dynamics-study.html => docs/dynamics-study.html (82%) create mode 120000 docs/figs rename identification.html => docs/identification.html (88%) rename index.html => docs/index.html (83%) rename {js => docs/js}/bootstrap.min.js (100%) rename {js => docs/js}/jquery.min.js (100%) rename {js => docs/js}/jquery.stickytableheaders.min.js (100%) rename {js => docs/js}/readtheorg.js (100%) rename kinematic-study.html => docs/kinematic-study.html (79%) rename simscape-model.html => docs/simscape-model.html (80%) rename simulink-project.html => docs/simulink-project.html (99%) create mode 100644 docs/static-analysis.html rename stewart-architecture.html => docs/stewart-architecture.html (79%) rename active-damping.org => org/active-damping.org (98%) rename control-study.org => org/control-study.org (100%) rename cubic-configuration.org => org/cubic-configuration.org (97%) rename dynamics-study.org => org/dynamics-study.org (94%) create mode 120000 org/figs rename identification.org => org/identification.org (97%) rename index.org => org/index.org (100%) rename kinematic-study.org => org/kinematic-study.org (98%) rename simscape-model.org => org/simscape-model.org (95%) rename simulink-project.org => org/simulink-project.org (100%) rename static-analysis.org => org/static-analysis.org (76%) rename stewart-architecture.org => org/stewart-architecture.org (100%) diff --git a/active-damping.html b/docs/active-damping.html similarity index 81% rename from active-damping.html rename to docs/active-damping.html index d0411d9..0aa17b4 100644 --- a/active-damping.html +++ b/docs/active-damping.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Stewart Platform - Decentralized Active Damping @@ -268,28 +268,28 @@ for the JavaScript code in this tag.

Table of Contents

@@ -300,24 +300,25 @@ for the JavaScript code in this tag. The following decentralized active damping techniques are briefly studied:

-
-

1 Inertial Control

-
+
+

Inertial Control

+

- +

-
-

1.1 Identification of the Dynamics

-
+
+

Identification of the Dynamics

+
-
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);
@@ -350,10 +351,10 @@ G.OutputName = {'Vm1', 
 

-The transfer function from actuator forces to force sensors is shown in Figure 1. +The transfer function from actuator forces to force sensors is shown in Figure 1.

-
+

inertial_plant_coupling.png

Figure 1: Transfer function from the Actuator force \(F_{i}\) to the absolute velocity of the same leg \(v_{m,i}\) and to the absolute velocity of the other legs \(v_{m,j}\) with \(i \neq j\) in grey (png, pdf)

@@ -361,9 +362,9 @@ The transfer function from actuator forces to force sensors is shown in Figure <
-
-

1.2 Effect of the Flexible Joint stiffness on the Dynamics

-
+
+

Effect of the Flexible Joint stiffness on the Dynamics

+

We add some stiffness and damping in the flexible joints and we re-identify the dynamics.

@@ -376,10 +377,10 @@ Gf.OutputName = {'Vm1',

-The new dynamics from force actuator to force sensor is shown in Figure 2. +The new dynamics from force actuator to force sensor is shown in Figure 2.

-
+

inertial_plant_flexible_joint_decentralized.png

Figure 2: Transfer function from the Actuator force \(F_{i}\) to the absolute velocity sensor \(v_{m,i}\) (png, pdf)

@@ -387,9 +388,9 @@ The new dynamics from force actuator to force sensor is shown in Figure
-
-

1.3 Obtained Damping

-
+
+

Obtained Damping

+

The control is a performed in a decentralized manner. The \(6 \times 6\) control is a diagonal matrix with pure proportional action on the diagonal: @@ -402,17 +403,17 @@ The \(6 \times 6\) control is a diagonal matrix with pure proportional action on

-The root locus is shown in figure 3 and the obtained pole damping function of the control gain is shown in figure 4. +The root locus is shown in figure 3 and the obtained pole damping function of the control gain is shown in figure 4.

-
+

root_locus_inertial_rot_stiffness.png

Figure 3: Root Locus plot with Decentralized Inertial Control when considering the stiffness of flexible joints (png, pdf)

-
+

pole_damping_gain_inertial_rot_stiffness.png

Figure 4: Damping of the poles with respect to the gain of the Decentralized Inertial Control when considering the stiffness of flexible joints (png, pdf)

@@ -420,9 +421,9 @@ The root locus is shown in figure 3 and the obtained p
-
-

1.4 Conclusion

-
+
+

Conclusion

+

Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors. @@ -433,25 +434,27 @@ Joint stiffness does increase the resonance frequencies of the system but does n

-
-

2 Integral Force Feedback

-
+
+

Integral Force Feedback

+

- +

-
-

2.1 Identification of the Dynamics with perfect Joints

-
+
+

Identification of the Dynamics with perfect Joints

+

We first initialize the Stewart platform without joint stiffness.

-
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);
@@ -484,10 +487,10 @@ G.OutputName = {'Fm1', 
 

-The transfer function from actuator forces to force sensors is shown in Figure 5. +The transfer function from actuator forces to force sensors is shown in Figure 5.

-
+

iff_plant_coupling.png

Figure 5: Transfer function from the Actuator force \(F_{i}\) to the Force sensor of the same leg \(F_{m,i}\) and to the force sensor of the other legs \(F_{m,j}\) with \(i \neq j\) in grey (png, pdf)

@@ -495,9 +498,9 @@ The transfer function from actuator forces to force sensors is shown in Figure <
-
-

2.2 Effect of the Flexible Joint stiffness on the Dynamics

-
+
+

Effect of the Flexible Joint stiffness on the Dynamics

+

We add some stiffness and damping in the flexible joints and we re-identify the dynamics.

@@ -510,10 +513,10 @@ Gf.OutputName = {'Fm1',

-The new dynamics from force actuator to force sensor is shown in Figure 6. +The new dynamics from force actuator to force sensor is shown in Figure 6.

-
+

iff_plant_flexible_joint_decentralized.png

Figure 6: Transfer function from the Actuator force \(F_{i}\) to the force sensor \(F_{m,i}\) (png, pdf)

@@ -521,9 +524,9 @@ The new dynamics from force actuator to force sensor is shown in Figure
-
-

2.3 Obtained Damping

-
+
+

Obtained Damping

+

The control is a performed in a decentralized manner. The \(6 \times 6\) control is a diagonal matrix with pure integration action on the diagonal: @@ -536,17 +539,17 @@ The \(6 \times 6\) control is a diagonal matrix with pure integration action on

-The root locus is shown in figure 7 and the obtained pole damping function of the control gain is shown in figure 8. +The root locus is shown in figure 7 and the obtained pole damping function of the control gain is shown in figure 8.

-
+

root_locus_iff_rot_stiffness.png

Figure 7: Root Locus plot with Decentralized Integral Force Feedback when considering the stiffness of flexible joints (png, pdf)

-
+

pole_damping_gain_iff_rot_stiffness.png

Figure 8: Damping of the poles with respect to the gain of the Decentralized Integral Force Feedback when considering the stiffness of flexible joints (png, pdf)

@@ -554,9 +557,9 @@ The root locus is shown in figure 7 and the obtained p
-
-

2.4 Conclusion

-
+
+

Conclusion

+

The joint stiffness has a huge impact on the attainable active damping performance when using force sensors. @@ -568,22 +571,23 @@ Thus, if Integral Force Feedback is to be used in a Stewart platform with flexib

-
-

3 Direct Velocity Feedback

-
+
+

Direct Velocity Feedback

+

- +

-
-

3.1 Identification of the Dynamics with perfect Joints

-
+
+

Identification of the Dynamics with perfect Joints

+

We first initialize the Stewart platform without joint stiffness.

-
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);
@@ -619,10 +623,10 @@ G.OutputName = {'Dm1', 
 

-The transfer function from actuator forces to relative motion sensors is shown in Figure 9. +The transfer function from actuator forces to relative motion sensors is shown in Figure 9.

-
+

dvf_plant_coupling.png

Figure 9: Transfer function from the Actuator force \(F_{i}\) to the Relative Motion Sensor \(D_{m,j}\) with \(i \neq j\) (png, pdf)

@@ -631,9 +635,9 @@ The transfer function from actuator forces to relative motion sensors is shown i
-
-

3.2 Effect of the Flexible Joint stiffness on the Dynamics

-
+
+

Effect of the Flexible Joint stiffness on the Dynamics

+

We add some stiffness and damping in the flexible joints and we re-identify the dynamics.

@@ -646,10 +650,10 @@ Gf.OutputName = {'Dm1',

-The new dynamics from force actuator to relative motion sensor is shown in Figure 10. +The new dynamics from force actuator to relative motion sensor is shown in Figure 10.

-
+

dvf_plant_flexible_joint_decentralized.png

Figure 10: Transfer function from the Actuator force \(F_{i}\) to the relative displacement sensor \(D_{m,i}\) (png, pdf)

@@ -657,9 +661,9 @@ The new dynamics from force actuator to relative motion sensor is shown in Figur
-
-

3.3 Obtained Damping

-
+
+

Obtained Damping

+

The control is a performed in a decentralized manner. The \(6 \times 6\) control is a diagonal matrix with pure derivative action on the diagonal: @@ -672,17 +676,17 @@ The \(6 \times 6\) control is a diagonal matrix with pure derivative action on t

-The root locus is shown in figure 11 and the obtained pole damping function of the control gain is shown in figure 12. +The root locus is shown in figure 11 and the obtained pole damping function of the control gain is shown in figure 12.

-
+

root_locus_dvf_rot_stiffness.png

Figure 11: Root Locus plot with Direct Velocity Feedback when considering the Stiffness of flexible joints (png, pdf)

-
+

pole_damping_gain_dvf_rot_stiffness.png

Figure 12: Damping of the poles with respect to the gain of the Direct Velocity Feedback when considering the Stiffness of flexible joints (png, pdf)

@@ -690,9 +694,9 @@ The root locus is shown in figure 11 and the obtained
-
-

3.4 Conclusion

-
+
+

Conclusion

+

Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors. @@ -705,7 +709,7 @@ Joint stiffness does increase the resonance frequencies of the system but does n

Author: Dehaeze Thomas

-

Created: 2020-02-06 jeu. 15:39

+

Created: 2020-02-11 mar. 15:26

diff --git a/control-study.html b/docs/control-study.html similarity index 81% rename from control-study.html rename to docs/control-study.html index 621e851..7cd7857 100644 --- a/control-study.html +++ b/docs/control-study.html @@ -5,7 +5,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Stewart Platform - Control Study @@ -247,31 +247,16 @@ for the JavaScript code in this tag. } /*]]>*///--> - - + + -
-

1 First Control Architecture

-
+
+

First Control Architecture

+
-
-

1.1 Control Schematic

-
+
+

Control Schematic

+
\begin{tikzpicture}
   % Blocs
   \node[block] (J) at (0, 0) {$J$};
   \node[addb={+}{}{}{}{-}, right=1 of J] (subr) {};
-  \node[block, right=0.8 of subr] (K) {$K_{L}$};
-  \node[block, right=1 of K] (G) {$G_{L}$};
+  \node[block, right=0.8 of subr] (K) {$K_{L}$};
+  \node[block, right=1 of K] (G) {$G_{L}$};
 
   % Connections and labels
-  \draw[<-] (J.west)node[above left]{$\bm{r}_{n}$} -- ++(-1, 0);
-  \draw[->] (J.east) -- (subr.west) node[above left]{$\bm{r}_{L}$};
-  \draw[->] (subr.east) -- (K.west) node[above left]{$\bm{\epsilon}_{L}$};
+  \draw[<-] (J.west)node[above left]{$\bm{r}_{n}$} -- ++(-1, 0);
+  \draw[->] (J.east) -- (subr.west) node[above left]{$\bm{r}_{L}$};
+  \draw[->] (subr.east) -- (K.west) node[above left]{$\bm{\epsilon}_{L}$};
   \draw[->] (K.east) -- (G.west) node[above left]{$\bm{\tau}$};
   \draw[->] (G.east) node[above right]{$\bm{L}$} -| ($(G.east)+(1, -1)$) -| (subr.south);
 \end{tikzpicture}
@@ -331,34 +315,27 @@ for the JavaScript code in this tag.
 
-
-

1.2 Initialize the Stewart platform

-
+
+

Initialize the Stewart platform

+
-
stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
-% stewart = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
+
stewart = initializeStewartPlatform();
+stewart = initializeFramesPositions(stewart);
 stewart = generateGeneralConfiguration(stewart);
 stewart = computeJointsPose(stewart);
-stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
+stewart = initializeStrutDynamics(stewart);
+stewart = initializeCylindricalPlatforms(stewart);
+stewart = initializeCylindricalStruts(stewart);
 stewart = computeJacobian(stewart);
+stewart = initializeStewartPose(stewart);
 
-
-

1.3 Initialize the Simulation

-
-
-
load('mat/conf_simscape.mat');
-
-
-
-
- -
-

1.4 Identification of the plant

-
+
+

Identification of the plant

+

Let’s identify the transfer function from \(\bm{\tau}}\) to \(\bm{L}\).

@@ -384,18 +361,18 @@ G.OutputName = {'L1', '
-
-

1.5 Plant Analysis

-
+
+

Plant Analysis

+

Diagonal terms Compare to off-diagonal terms

-
-

1.6 Controller Design

-
+
+

Controller Design

+

One integrator should be present in the controller.

@@ -424,7 +401,7 @@ Kl = Kl * eye(6);

Author: Dehaeze Thomas

-

Created: 2020-01-22 mer. 16:31

+

Created: 2020-02-11 mar. 15:23

diff --git a/css/htmlize.css b/docs/css/htmlize.css similarity index 100% rename from css/htmlize.css rename to docs/css/htmlize.css diff --git a/css/readtheorg.css b/docs/css/readtheorg.css similarity index 100% rename from css/readtheorg.css rename to docs/css/readtheorg.css diff --git a/cubic-configuration.html b/docs/cubic-configuration.html similarity index 79% rename from cubic-configuration.html rename to docs/cubic-configuration.html index 1f2dea8..9a6066b 100644 --- a/cubic-configuration.html +++ b/docs/cubic-configuration.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Cubic configuration for the Stewart Platform @@ -268,25 +268,27 @@ for the JavaScript code in this tag.

Table of Contents

-
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);
@@ -873,19 +880,19 @@ We obtain \(k_x = k_y = k_z\) and \(k_{\theta_x} = k_{\theta_y}\), but the Stiff
 
-
-

2 Functions

-
+
+

Functions

+

- +

-
-

2.1 generateCubicConfiguration: Generate a Cubic Configuration

-
+
+

generateCubicConfiguration: Generate a Cubic Configuration

+

- +

@@ -893,9 +900,9 @@ This Matlab function is accessible he

-
-

Function description

-
+ -
-

Documentation

-
+
+

Documentation

+
- -
-

Optional Parameters

-
+
+

Optional Parameters

+
-
-

Position of the Cube

-
+
+

Check the stewart structure elements

+
+
+
assert(isfield(stewart.geometry, 'H'),   'stewart.geometry should have attribute H')
+H = stewart.geometry.H;
+
+
+
+
+ +
+

Position of the Cube

+

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 @@ -975,9 +993,9 @@ CCm = [Cc(:,2), Cc(:

-
-

Compute the pose

-
+
+

Compute the pose

+

We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector from \({}^{C}C_{f}\) to \({}^{C}C_{m}\)).

@@ -990,8 +1008,19 @@ We can compute the vector of each leg \({}^{C}\hat{\bm{s}}_{i}\) (unit vector fr 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;
+
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;
+
+
+
+
+ +
+

Populate the stewart structure

+
+
+
stewart.platform_F.Fa = Fa;
+stewart.platform_M.Mb = Mb;
 
@@ -1002,15 +1031,15 @@ stewart.Mb = CCf + [0; 0; args.FOc[geng94_six_degree_of_freed_activ]
Geng & Haynes, Six Degree-Of-Freedom Active Vibration Control Using the Stewart Platforms, IEEE Transactions on Control Systems Technology, 2(1), 45-53 (1994). link. doi. -
  • [preumont07_six_axis_singl_stage_activ] Preumont, Horodinca, Romanescu, de Marneffe, Avraam, Deraemaeker, Bossens & Abu Hanieh, A Six-Axis Single-Stage Active Vibration Isolator Based on Stewart Platform, Journal of Sound and Vibration, 300(3-5), 644-661 (2007). link. doi.
  • +

    Author: Dehaeze Thomas

    -

    Created: 2020-02-07 ven. 17:31

    +

    Created: 2020-02-11 mar. 15:26

    diff --git a/dynamics-study.html b/docs/dynamics-study.html similarity index 82% rename from dynamics-study.html rename to docs/dynamics-study.html index ff700eb..fc82af2 100644 --- a/dynamics-study.html +++ b/docs/dynamics-study.html @@ -1,11 +1,10 @@ - - + Stewart Platform - Dynamics Study @@ -247,31 +246,16 @@ for the JavaScript code in this tag. } /*]]>*///--> - - + + -
    -

    1 Some tests

    -
    +
    +

    Some tests

    +
    -
    -

    1.1 Simscape Model

    -
    +
    +

    Simscape Model

    +
    open('stewart_platform_dynamics.slx')
     
    @@ -311,15 +295,19 @@ for the JavaScript code in this tag.
    -
    -

    1.2 test

    -
    +
    +

    test

    +
    -
    stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
    -stewart = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
    +stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
    -stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
    +stewart = initializeStrutDynamics(stewart);
    +stewart = initializeCylindricalPlatforms(stewart);
    +stewart = initializeCylindricalStruts(stewart);
     stewart = computeJacobian(stewart);
    +stewart = initializeStewartPose(stewart);
     
    @@ -408,18 +396,22 @@ bode(Gd, G)
    -
    -

    1.3 Compare external forces and forces applied by the actuators

    -
    +
    +

    Compare external forces and forces applied by the actuators

    +

    Initialization of the Stewart platform.

    -
    stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
    -stewart = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
    +stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
    -stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
    +stewart = initializeStrutDynamics(stewart);
    +stewart = initializeCylindricalPlatforms(stewart);
    +stewart = initializeCylindricalStruts(stewart);
     stewart = computeJacobian(stewart);
    +stewart = initializeStewartPose(stewart);
     
    @@ -489,18 +481,22 @@ Seems quite similar.
    -
    -

    1.4 Comparison of the static transfer function and the Compliance matrix

    -
    +
    +

    Comparison of the static transfer function and the Compliance matrix

    +

    Initialization of the Stewart platform.

    -
    stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
    -stewart = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
    +stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
    -stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
    +stewart = initializeStrutDynamics(stewart);
    +stewart = initializeCylindricalPlatforms(stewart);
    +stewart = initializeCylindricalStruts(stewart);
     stewart = computeJacobian(stewart);
    +stewart = initializeStewartPose(stewart);
     
    @@ -688,18 +684,22 @@ The low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathc
    -
    -

    1.5 Transfer function from forces applied in the legs to the displacement of the legs

    -
    +
    +

    Transfer function from forces applied in the legs to the displacement of the legs

    +

    Initialization of the Stewart platform.

    -
    stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
    -stewart = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
    +stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
    -stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
    +stewart = initializeStrutDynamics(stewart);
    +stewart = initializeCylindricalPlatforms(stewart);
    +stewart = initializeCylindricalStruts(stewart);
     stewart = computeJacobian(stewart);
    +stewart = initializeStewartPose(stewart);
     
    @@ -742,7 +742,7 @@ G.OutputName = {'L1', '

    Author: Dehaeze Thomas

    -

    Created: 2020-01-22 mer. 16:31

    +

    Created: 2020-02-11 mar. 15:27

    diff --git a/docs/figs b/docs/figs new file mode 120000 index 0000000..8ea5186 --- /dev/null +++ b/docs/figs @@ -0,0 +1 @@ +../figs \ No newline at end of file diff --git a/identification.html b/docs/identification.html similarity index 88% rename from identification.html rename to docs/identification.html index 05695ad..1e24e68 100644 --- a/identification.html +++ b/docs/identification.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Identification of the Stewart Platform using Simscape @@ -247,15 +247,15 @@ for the JavaScript code in this tag. /*]]>*///--> - + }; + + @@ -396,19 +396,20 @@ An important difference from basic Simulink models is that the states in a physi -
    -

    1 Identification

    -
    +
    +

    Identification

    +
    -
    -

    1.1 Simscape Model

    +
    +

    Simscape Model

    -
    -

    1.2 Initialize the Stewart Platform

    -
    +
    +

    Initialize the Stewart Platform

    +
    -
    stewart = initializeFramesPositions();
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
     stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
     stewart = initializeStrutDynamics(stewart);
    @@ -421,9 +422,9 @@ stewart = initializeStewartPose(stewart);
     
    -
    -

    1.3 Identification

    -
    +
    +

    Identification

    +
    %% Options for Linearized
     options = linearizeOptions;
    @@ -456,15 +457,16 @@ G.OutputName = {'Xdx', 
     
    -
    -

    2 States as the motion of the mobile platform

    -
    +
    +

    States as the motion of the mobile platform

    +
    -
    -

    2.1 Initialize the Stewart Platform

    -
    +
    +

    Initialize the Stewart Platform

    +
    -
    stewart = initializeFramesPositions();
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
     stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
     stewart = initializeStrutDynamics(stewart);
    @@ -477,9 +479,9 @@ stewart = initializeStewartPose(stewart);
     
    -
    -

    2.2 Identification

    -
    +
    +

    Identification

    +
    %% Options for Linearized
     options = linearizeOptions;
    @@ -538,9 +540,9 @@ And indeed, we obtain 12 states.
     
    -
    -

    2.3 Coordinate transformation

    -
    +
    +

    Coordinate transformation

    +

    We can perform the following transformation using the ss2ss command.

    @@ -574,9 +576,9 @@ Gt = ss(At, Bt, Ct, Dt);
    -
    -

    2.4 Analysis

    -
    +
    +

    Analysis

    +
    [V,D] = eig(Gt.A);
     
    @@ -640,9 +642,9 @@ Gt = ss(At, Bt, Ct, Dt);
    -
    -

    2.5 Visualizing the modes

    -
    +
    +

    Visualizing the modes

    +

    To visualize the i’th mode, we may excite the system using the inputs \(U_i\) such that \(B U_i\) is co-linear to \(\xi_i\) (the mode we want to excite).

    @@ -721,21 +723,21 @@ Save the movie of the mode shape.
    -
    +

    mode1.gif

    Figure 1: Identified mode - 1

    -
    +

    mode3.gif

    Figure 2: Identified mode - 3

    -
    +

    mode5.gif

    Figure 3: Identified mode - 5

    @@ -743,9 +745,9 @@ Save the movie of the mode shape.
    -
    -

    2.6 Identification

    -
    +
    +

    Identification

    +
    %% Options for Linearized
     options = linearizeOptions;
    @@ -773,9 +775,9 @@ G = linearize(mdl, io, options);
     
    -
    -

    2.7 Change of states

    -
    +
    +

    Change of states

    +
    At = G.C*G.A*pinv(G.C);
     
    @@ -799,13 +801,13 @@ Dt = zeros(12, 6);
     
    -
    -

    3 Simple Model without any sensor

    -
    +
    +

    Simple Model without any sensor

    +
    -
    -

    3.1 Simscape Model

    -
    +
    +

    Simscape Model

    +
    open 'stewart_identification_simple.slx'
     
    @@ -814,11 +816,12 @@ Dt = zeros(12, 6);
    -
    -

    3.2 Initialize the Stewart Platform

    -
    +
    +

    Initialize the Stewart Platform

    +
    -
    stewart = initializeFramesPositions();
    +
    stewart = initializeStewartPlatform();
    +stewart = initializeFramesPositions(stewart);
     stewart = generateGeneralConfiguration(stewart);
     stewart = computeJointsPose(stewart);
     stewart = initializeStrutDynamics(stewart);
    @@ -831,9 +834,9 @@ stewart = initializeStewartPose(stewart);
     
    -
    -

    3.3 Identification

    -
    +
    +

    Identification

    +
    stateorder = {...
         'stewart_platform_identification_simple/Solver Configuration/EVAL_KEY/INPUT_1_1_1',...
    @@ -919,9 +922,9 @@ G.OutputName = {'Xdx', 
     
    -
    -

    4 Cartesian Plot

    -
    +
    +

    Cartesian Plot

    +

    From a force applied in the Cartesian frame to a displacement in the Cartesian frame.

    @@ -945,9 +948,9 @@ bode(G.G_cart, freqs);
    -
    -

    5 From a force to force sensor

    -
    +
    +

    From a force to force sensor

    +
    figure;
     hold on;
    @@ -977,9 +980,9 @@ legend('location', 'sou
     
    -
    -

    6 From a force applied in the leg to the displacement of the leg

    -
    +
    +

    From a force applied in the leg to the displacement of the leg

    +
    figure;
     hold on;
    @@ -1008,9 +1011,9 @@ legend('location', 'nor
     
    -
    -

    7 Transmissibility

    -
    +
    +

    Transmissibility

    +
    figure;
     hold on;
    @@ -1049,9 +1052,9 @@ xlabel('Frequency [Hz]'); ylabel(
    -

    8 Compliance

    -
    +
    +

    Compliance

    +

    From a force applied in the Cartesian frame to a relative displacement of the mobile platform with respect to the base.

    @@ -1070,9 +1073,9 @@ xlabel('Frequency [Hz]'); ylabel( -

    9 Inertial

    -
    +
    +

    Inertial

    +

    From a force applied on the Cartesian frame to the absolute displacement of the mobile platform.

    @@ -1093,7 +1096,7 @@ xlabel('Frequency [Hz]'); ylabel(

    Author: Dehaeze Thomas

    -

    Created: 2020-01-29 mer. 17:51

    +

    Created: 2020-02-11 mar. 15:26

    diff --git a/index.html b/docs/index.html similarity index 83% rename from index.html rename to docs/index.html index 049a8d7..0512b44 100644 --- a/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Stewart Platforms @@ -254,14 +254,14 @@ for the JavaScript code in this tag.

    Table of Contents

    @@ -274,9 +274,9 @@ The goal of this project is to provide a Matlab/Simscape Toolbox to study Stewar The project is divided into several section listed below.

    -
    -

    1 Simulink Project (link)

    -
    +
    +

    Simulink Project (link)

    +

    The project is managed with a Simulink Project. Such project is briefly presented here. @@ -284,9 +284,9 @@ Such project is briefly presented here.

    -
    -

    2 Stewart Platform Architecture Definition (link)

    -
    +
    +

    Stewart Platform Architecture Definition (link)

    +

    The way the Stewart Platform is defined here.

    @@ -310,9 +310,9 @@ Other parameters are also defined such as:
    -
    -

    3 Simscape Model of the Stewart Platform (link)

    -
    +
    +

    Simscape Model of the Stewart Platform (link)

    +

    The Stewart Platform is then modeled using Simscape.

    @@ -323,9 +323,9 @@ The way to model is build and works is explained h
    -
    -

    4 Kinematic Analysis (link)

    -
    +
    +

    Kinematic Analysis (link)

    +

    From the defined geometry of the Stewart platform, we can perform static analysis such as:

    @@ -344,9 +344,9 @@ All these analysis are described here.
    -
    -

    5 Identification of the Stewart Dynamics (link)

    -
    +
    +

    Identification of the Stewart Dynamics (link)

    +

    The Dynamics of the Stewart platform can be identified using the Simscape model.

    @@ -366,9 +366,9 @@ The code that is used for identification is explained -

    6 Active Damping (link)

    -
    +
    +

    Active Damping (link)

    +

    The use of different sensors are compared for active damping:

    @@ -385,18 +385,18 @@ The result of the analysis is accessible here.
    -
    -

    7 Motion Control of the Stewart Platform (link)

    -
    +
    +

    Motion Control of the Stewart Platform (link)

    +

    Some control architecture for motion control of the Stewart platform are applied on the Simscape model and compared in this document.

    -
    -

    8 Cubic Configuration (link)

    -
    +
    +

    Cubic Configuration (link)

    +

    The cubic configuration is a special class of Stewart platform that has interesting properties.

    @@ -409,7 +409,7 @@ These properties are studied in this docu

    Author: Dehaeze Thomas

    -

    Created: 2020-01-29 mer. 20:24

    +

    Created: 2020-02-11 mar. 15:27

    diff --git a/js/bootstrap.min.js b/docs/js/bootstrap.min.js similarity index 100% rename from js/bootstrap.min.js rename to docs/js/bootstrap.min.js diff --git a/js/jquery.min.js b/docs/js/jquery.min.js similarity index 100% rename from js/jquery.min.js rename to docs/js/jquery.min.js diff --git a/js/jquery.stickytableheaders.min.js b/docs/js/jquery.stickytableheaders.min.js similarity index 100% rename from js/jquery.stickytableheaders.min.js rename to docs/js/jquery.stickytableheaders.min.js diff --git a/js/readtheorg.js b/docs/js/readtheorg.js similarity index 100% rename from js/readtheorg.js rename to docs/js/readtheorg.js diff --git a/kinematic-study.html b/docs/kinematic-study.html similarity index 79% rename from kinematic-study.html rename to docs/kinematic-study.html index 1fae0d8..a1a58a5 100644 --- a/kinematic-study.html +++ b/docs/kinematic-study.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Kinematic Study of the Stewart Platform @@ -268,73 +268,73 @@ for the JavaScript code in this tag.

    Table of Contents

    -
    +

    inertial_sensor.png

    Figure 6: Schematic of a Z-Axis geophone

    @@ -634,11 +628,11 @@ Note that there is trade-off between:
    -
    -

    5.3.2 Initialization function

    -
    +
    +

    Initialization function

    +

    - +

    @@ -676,7 +670,7 @@ This Matlab function is accessible

    Author: Dehaeze Thomas

    -

    Created: 2020-01-29 mer. 12:02

    +

    Created: 2020-02-11 mar. 15:26

    diff --git a/simulink-project.html b/docs/simulink-project.html similarity index 99% rename from simulink-project.html rename to docs/simulink-project.html index fefa285..2f971f2 100644 --- a/simulink-project.html +++ b/docs/simulink-project.html @@ -1,10 +1,11 @@ + - + Simulink Project for the Stewart Simscape folder diff --git a/docs/static-analysis.html b/docs/static-analysis.html new file mode 100644 index 0000000..9bb6f6b --- /dev/null +++ b/docs/static-analysis.html @@ -0,0 +1,323 @@ + + + + + + + + +Stewart Platform - Static Analysis + + + + + + + + + + + + + + +
    +

    Stewart Platform - Static Analysis

    +
    +

    Table of Contents

    +
    + +
    +
    + +
    +

    Coupling

    +
    +

    +What causes the coupling from \(F_i\) to \(X_i\) ? +

    + +
    +
    \begin{tikzpicture}
    +  \node[block] (Jt) at (0, 0) {$J^{-T}$};
    +  \node[block, right= of Jt] (G) {$G$};
    +  \node[block, right= of G] (J) {$J^{-1}$};
    +
    +  \draw[->] ($(Jt.west)+(-0.8, 0)$) -- (Jt.west) node[above left]{$F_i$};
    +  \draw[->] (Jt.east) -- (G.west) node[above left]{$\tau_i$};
    +  \draw[->] (G.east) -- (J.west) node[above left]{$q_i$};
    +  \draw[->] (J.east) -- ++(0.8, 0) node[above left]{$X_i$};
    +\end{tikzpicture}
    +
    +
    + + +
    +

    coupling.png +

    +

    Figure 1: Block diagram to control an hexapod

    +
    + +

    +There is no coupling from \(F_i\) to \(X_j\) if \(J^{-1} G J^{-T}\) is diagonal. +

    + +

    +If \(G\) is diagonal (cubic configuration), then \(J^{-1} G J^{-T} = G J^{-1} J^{-T} = G (J^{T} J)^{-1} = G K^{-1}\) +

    + +

    +Thus, the system is uncoupled if \(G\) and \(K\) are diagonal. +

    +
    +
    +
    +
    +

    Author: Dehaeze Thomas

    +

    Created: 2020-02-11 mar. 15:27

    +
    + + diff --git a/stewart-architecture.html b/docs/stewart-architecture.html similarity index 79% rename from stewart-architecture.html rename to docs/stewart-architecture.html index c858337..d1d504a 100644 --- a/stewart-architecture.html +++ b/docs/stewart-architecture.html @@ -1,10 +1,11 @@ + - + Stewart Platform - Definition of the Architecture @@ -268,137 +269,137 @@ for the JavaScript code in this tag.

    Table of Contents

    -
    -

    Compute the position of the Joints

    -
    +
    +

    Compute the position of the Joints

    +
    Aa = Fa - repmat(FO_A, [1, 6]);
     Bb = Mb - repmat(MO_B, [1, 6]);
    @@ -1197,9 +1198,9 @@ Ba = Aa - repmat( MO_B+
     
    -
    -

    Compute the strut length and orientation

    -
    +
    +

    Compute the strut length and orientation

    +
    As = (Ab - Aa)./vecnorm(Ab - Aa); % As_i is the i'th vector of As
     
    @@ -1214,9 +1215,9 @@ l = vecnorm(Ab - Aa)'
     
    -
    -

    Compute the orientation of the Joints

    -
    +
    +

    Compute the orientation of the Joints

    +
    FRa = zeros(3,3,6);
     MRb = zeros(3,3,6);
    @@ -1233,9 +1234,9 @@ MRb = zeros(3,3,6);
     
    -
    -

    Populate the stewart structure

    -
    +
    +

    Populate the stewart structure

    +
    stewart.geometry.Aa = Aa;
     stewart.geometry.Ab = Ab;
    @@ -1256,11 +1257,11 @@ stewart.platform_M.MRb = MRb;
     
    -
    -

    5.5 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

    +
    -
    -

    Function description

    -
    +
    +

    Function description

    +
    function [stewart] = initializeStewartPose(stewart, args)
     % initializeStewartPose - Determine the initial stroke in each leg to have the wanted pose
    @@ -1294,9 +1295,9 @@ This Matlab function is accessible here
     
    -
    -

    Optional Parameters

    -
    +
    +

    Optional Parameters

    +
    arguments
         stewart
    @@ -1308,9 +1309,9 @@ This Matlab function is accessible here
     
    -
    -

    Use the Inverse Kinematic function

    -
    +
    +

    Use the Inverse Kinematic function

    +
    [Li, dLi] = inverseKinematics(stewart, 'AP', args.AP, 'ARB', args.ARB);
     
    @@ -1318,9 +1319,9 @@ This Matlab function is accessible here
    -
    -

    Populate the stewart structure

    -
    +
    +

    Populate the stewart structure

    +
    stewart.actuators.Leq = dLi;
     
    @@ -1329,11 +1330,11 @@ This Matlab function is accessible here
    -
    -

    5.6 initializeCylindricalPlatforms: Initialize the geometry of the Fixed and Mobile Platforms

    -
    +
    +

    initializeCylindricalPlatforms: Initialize the geometry of the Fixed and Mobile Platforms

    +

    - +

    @@ -1341,9 +1342,9 @@ This Matlab function is accessible -

    Function description

    -
    +
    +

    Function description

    +
    function [stewart] = initializeCylindricalPlatforms(stewart, args)
     % initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
    @@ -1377,9 +1378,9 @@ This Matlab function is accessible 
    -

    Optional Parameters

    -
    +
    +

    Optional Parameters

    +
    arguments
         stewart
    @@ -1395,9 +1396,9 @@ This Matlab function is accessible 
    -

    Compute the Inertia matrices of platforms

    -
    +
    +

    Compute the Inertia matrices of platforms

    +
    I_F = diag([1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ...
                 1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ...
    @@ -1414,9 +1415,9 @@ This Matlab function is accessible 
    -

    Populate the stewart structure

    -
    +
    +

    Populate the stewart structure

    +
    stewart.platform_F.type = 1;
     
    @@ -1440,11 +1441,11 @@ stewart.platform_M.H = args.Mph;
     
    -
    -

    5.7 initializeCylindricalStruts: Define the inertia of cylindrical struts

    -
    +
    +

    initializeCylindricalStruts: Define the inertia of cylindrical struts

    +

    - +

    @@ -1452,9 +1453,9 @@ This Matlab function is accessible h

    -
    -

    Function description

    -
    +
    +

    Function description

    +
    -
    -

    Optional Parameters

    -
    +
    +

    Optional Parameters

    +
    -
    -

    Compute the properties of the cylindrical struts

    -
    +
    +

    Compute the properties of the cylindrical struts

    +
    Fsm = ones(6,1).*args.Fsm;
     Fsh = ones(6,1).*args.Fsh;
    @@ -1537,9 +1538,9 @@ I_M = zeros(3, 3, 6); % Inertia of the "mobile" part o
     
    -
    -

    Populate the stewart structure

    -
    +
    +

    Populate the stewart structure

    +
    stewart.struts_M.type = 1;
     
    @@ -1563,11 +1564,11 @@ stewart.struts_F.H = Fsh;
     
    -
    -

    5.8 initializeStrutDynamics: Add Stiffness and Damping properties of each strut

    -
    +
    +

    initializeStrutDynamics: Add Stiffness and Damping properties of each strut

    +

    - +

    @@ -1575,18 +1576,18 @@ This Matlab function is accessible here<

    -
    -

    Documentation

    -
    +
    +

    Documentation

    +
    -
    +

    piezoelectric_stack.jpg

    Figure 11: Example of a piezoelectric stach actuator (PI)

    -A simplistic model of such amplified actuator is shown in Figure 12 where: +A simplistic model of such amplified actuator is shown in Figure 12 where: