diff --git a/figs/actuator_model_simple.pdf b/figs/actuator_model_simple.pdf new file mode 100644 index 0000000..2b7782d Binary files /dev/null and b/figs/actuator_model_simple.pdf differ diff --git a/figs/actuator_model_simple.png b/figs/actuator_model_simple.png new file mode 100644 index 0000000..d064de7 Binary files /dev/null and b/figs/actuator_model_simple.png differ diff --git a/figs/amplified_piezo_with_displacement_sensor.jpg b/figs/amplified_piezo_with_displacement_sensor.jpg new file mode 100644 index 0000000..6ba0ad3 Binary files /dev/null and b/figs/amplified_piezo_with_displacement_sensor.jpg differ diff --git a/figs/cedrat_apa95ml.png b/figs/cedrat_apa95ml.png new file mode 100644 index 0000000..cc55ef1 Binary files /dev/null and b/figs/cedrat_apa95ml.png differ diff --git a/figs/iff_1dof.pdf b/figs/iff_1dof.pdf new file mode 100644 index 0000000..0964d4d Binary files /dev/null and b/figs/iff_1dof.pdf differ diff --git a/figs/iff_1dof.png b/figs/iff_1dof.png new file mode 100644 index 0000000..4eac8a8 Binary files /dev/null and b/figs/iff_1dof.png differ diff --git a/figs/piezoelectric_stack.jpg b/figs/piezoelectric_stack.jpg new file mode 100644 index 0000000..e0896dc Binary files /dev/null and b/figs/piezoelectric_stack.jpg differ diff --git a/simscape_subsystems/Stewart_Platform.slx b/simscape_subsystems/Stewart_Platform.slx index a9ccecb..e3670c2 100644 Binary files a/simscape_subsystems/Stewart_Platform.slx and b/simscape_subsystems/Stewart_Platform.slx differ diff --git a/simscape_subsystems/stewart_strut.slx b/simscape_subsystems/stewart_strut.slx index 172fc5b..33cc196 100644 Binary files a/simscape_subsystems/stewart_strut.slx and b/simscape_subsystems/stewart_strut.slx differ diff --git a/simulink/stewart_active_damping.slx b/simulink/stewart_active_damping.slx index d0183c1..07355f6 100644 Binary files a/simulink/stewart_active_damping.slx and b/simulink/stewart_active_damping.slx differ diff --git a/src/initializeAmplifiedStrutDynamics.m b/src/initializeAmplifiedStrutDynamics.m new file mode 100644 index 0000000..be9d3bc --- /dev/null +++ b/src/initializeAmplifiedStrutDynamics.m @@ -0,0 +1,39 @@ +function [stewart] = initializeAmplifiedStrutDynamics(stewart, args) +% initializeAmplifiedStrutDynamics - Add Stiffness and Damping properties of each strut +% +% Syntax: [stewart] = initializeAmplifiedStrutDynamics(args) +% +% Inputs: +% - args - Structure with the following fields: +% - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m] +% - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)] +% - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m] +% - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - Ki [6x1] - Total Stiffness of each strut [N/m] +% - Ci [6x1] - Total Damping of each strut [N/(m/s)] +% - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m] +% - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)] +% - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m] +% - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)] + +arguments + stewart + args.Kdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1) + args.Cdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1) + args.Ksi (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1) + args.Csi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1) +end + +stewart.Ksi = args.Ksi; +stewart.Csi = args.Csi; + +stewart.Kdi = args.Kdi; +stewart.Cdi = args.Cdi; + +stewart.Ki = args.Ksi + args.Kdi; +stewart.Ci = args.Csi + args.Cdi; + +stewart.actuator_type = 2; diff --git a/src/initializeStrutDynamics.m b/src/initializeStrutDynamics.m index 0bfd7cb..8776bf8 100644 --- a/src/initializeStrutDynamics.m +++ b/src/initializeStrutDynamics.m @@ -21,3 +21,5 @@ end stewart.Ki = args.Ki; stewart.Ci = args.Ci; + +stewart.actuator_type = 1; diff --git a/stewart-architecture.html b/stewart-architecture.html index 43100e7..6c05161 100644 --- a/stewart-architecture.html +++ b/stewart-architecture.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Stewart Platform - Definition of the Architecture @@ -268,104 +268,113 @@ for the JavaScript code in this tag.

Table of Contents

@@ -730,7 +740,7 @@ The function displayArchitecture can be used to display the current -
+

stewart_architecture_example.png

Figure 5: Display of the current Stewart platform architecture (png, pdf)

@@ -738,7 +748,7 @@ The function displayArchitecture can be used to display the current

There are many options to show or hides elements such as labels and frames. -The documentation of the function is available here. +The documentation of the function is available here.

@@ -770,7 +780,7 @@ view([0 -1 0]);

-
+

stewart_architecture_example_pose.png

Figure 6: Display of the Stewart platform architecture at some defined pose (png, pdf)

@@ -779,18 +789,18 @@ view([0 -1 0]);
-
-

5 Functions

+
+

5 Functions

- +

-
-

5.1 initializeFramesPositions: Initialize the positions of frames {A}, {B}, {F} and {M}

+
+

5.1 initializeFramesPositions: Initialize the positions of frames {A}, {B}, {F} and {M}

- +

@@ -798,9 +808,21 @@ This Matlab function is accessible her

-
-

Function description

-
+
+

Documentation

+
+ +
+

stewart-frames-position.png +

+

Figure 7: Definition of the position of the frames

+
+
+
+ +
+

Function description

+
-
-

Documentation

-
- -
-

stewart-frames-position.png -

-

Figure 7: Definition of the position of the frames

-
-
-
- -
-

Optional Parameters

-
+
+

Optional Parameters

+
-
-

Initialize the Stewart structure

-
+
+

Initialize the Stewart structure

+
-
-

Compute the position of each frame

-
+
+

Compute the position of each frame

+
stewart.H = args.H; % Total Height of the Stewart Platform [m]
 
@@ -875,11 +885,11 @@ stewart.FO_A = stewart.MO_B + stewart.FO_M; 
 
-
-

5.2 generateGeneralConfiguration: Generate a Very General Configuration

+
+

5.2 generateGeneralConfiguration: Generate a Very General Configuration

- +

@@ -887,9 +897,26 @@ This Matlab function is accessible

-
-

Function description

-
+ + +
+

Function description

+
function [stewart] = generateGeneralConfiguration(stewart, args)
 % generateGeneralConfiguration - Generate a Very General Configuration
@@ -914,26 +941,9 @@ This Matlab function is accessible 
 
- - -
-

Optional Parameters

-
+
+

Optional Parameters

+
arguments
     stewart
@@ -949,9 +959,9 @@ The radius of the circles can be chosen as well as the angles where the joints a
 
-
-

Compute the pose

-
+
+

Compute the pose

+
stewart.Fa = zeros(3,6);
 stewart.Mb = zeros(3,6);
@@ -969,11 +979,11 @@ stewart.Mb = zeros(3,6);
 
-
-

5.3 computeJointsPose: Compute the Pose of the Joints

+
+

5.3 computeJointsPose: Compute the Pose of the Joints

- +

@@ -981,9 +991,21 @@ This Matlab function is accessible here.

-
-

Function description

-
+
+

Documentation

+
+ +
+

stewart-struts.png +

+

Figure 9: Position and orientation of the struts

+
+
+
+ +
+

Function description

+
function [stewart] = computeJointsPose(stewart)
 % computeJointsPose -
@@ -1014,21 +1036,9 @@ This Matlab function is accessible here.
 
-
-

Documentation

-
- -
-

stewart-struts.png -

-

Figure 9: Position and orientation of the struts

-
-
-
- -
-

Compute the position of the Joints

-
+
+

Compute the position of the Joints

+
stewart.Aa = stewart.Fa - repmat(stewart.FO_A, [1, 6]);
 stewart.Bb = stewart.Mb - repmat(stewart.MO_B, [1, 6]);
@@ -1040,9 +1050,9 @@ stewart.Ba = stewart.Aa - repmat( stewart.MO_B
 
-
-

Compute the strut length and orientation

-
+
+

Compute the strut length and orientation

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

Compute the orientation of the Joints

-
+
+

Compute the orientation of the Joints

+
stewart.FRa = zeros(3,3,6);
 stewart.MRb = zeros(3,3,6);
@@ -1077,11 +1087,11 @@ stewart.MRb = zeros(3,3,6);
 
-
-

5.4 initializeStewartPose: Determine the initial stroke in each leg to have the wanted pose

+
+

5.4 initializeStewartPose: Determine the initial stroke in each leg to have the wanted pose

- +

@@ -1089,9 +1099,9 @@ This Matlab function is accessible here

-
-

Function description

-
+
+

Function description

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

Optional Parameters

-
+
+

Optional Parameters

+
arguments
     stewart
@@ -1129,9 +1139,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);
 
@@ -1142,11 +1152,11 @@ stewart.dLi = dLi;
 
-
-

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

+
+

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

- +

@@ -1154,9 +1164,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
@@ -1188,9 +1198,9 @@ This Matlab function is accessible 
-

Optional Parameters

-
+
+

Optional Parameters

+
arguments
     stewart
@@ -1206,9 +1216,9 @@ This Matlab function is accessible 
-

Create the platforms struct

-
+
+

Create the platforms struct

+
platforms = struct();
 
@@ -1230,9 +1240,9 @@ platforms.Mpi = diag([1/12 
 
-
-

Save the platforms struct

-
+
+

Save the platforms struct

+
stewart.platforms = platforms;
 
@@ -1241,11 +1251,11 @@ platforms.Mpi = diag([1/12
-
-

5.6 initializeCylindricalStruts: Define the inertia of cylindrical struts

+
+

5.6 initializeCylindricalStruts: Define the inertia of cylindrical struts

- +

@@ -1253,9 +1263,9 @@ This Matlab function is accessible h

-
-

Function description

-
+
+

Function description

+
-
-

Optional Parameters

-
+
+

Optional Parameters

+
-
-

Create the struts structure

-
+
+

Create the struts structure

+
struts = struct();
 
@@ -1340,11 +1350,11 @@ struts.Msi = zeros(3, 3, 6);
 
-
-

5.7 initializeStrutDynamics: Add Stiffness and Damping properties of each strut

+
+

5.7 initializeStrutDynamics: Add Stiffness and Damping properties of each strut

- +

@@ -1352,9 +1362,39 @@ This Matlab function is accessible here<

-
-

Function description

-
+
+

Documentation

+
+ +
+

piezoelectric_stack.jpg +

+

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

+
+ +

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

+
    +
  • \(k_{i}\) represent the vertical stiffness of the actuator
  • +
  • \(F_{i}\) represents the force applied by the actuator
  • +
  • \(F_{m,i}\) represents the total measured force
  • +
  • \(v_{m,i}\) represents the absolute velocity of the top part of the actuator
  • +
  • \(d_{m,i}\) represents the total relative displacement of the actuator
  • +
+ + +
+

actuator_model_simple.png +

+

Figure 11: Simple model of an Actuator

+
+
+
+ +
+

Function description

+
function [stewart] = initializeStrutDynamics(stewart, args)
 % initializeStrutDynamics - Add Stiffness and Damping properties of each strut
@@ -1375,9 +1415,9 @@ This Matlab function is accessible here<
 
-
-

Optional Parameters

-
+
+

Optional Parameters

+
-
-

Add Stiffness and Damping properties of each strut

-
+
+

Add Stiffness and Damping properties of each strut

+
stewart.Ki = args.Ki;
 stewart.Ci = args.Ci;
+
+stewart.actuator_type = 1;
 
-
-

5.8 initializeJointDynamics: Add Stiffness and Damping properties for spherical joints

+
+

5.8 initializeAmplifiedStrutDynamics: Add Stiffness and Damping properties of each strut for an amplified piezoelectric actuator

- + +

+ +

+This Matlab function is accessible here. +

+
+ +
+

Documentation

+
+

+An amplified piezoelectric actuator is shown in Figure 12. +

+ + +
+

amplified_piezo_with_displacement_sensor.jpg +

+

Figure 12: Example of an Amplified piezoelectric actuator with an integrated displacement sensor (Cedrat Technologies)

+
+ +

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

+
    +
  • \(k_{p,i}\) represent the vertical stiffness when the piezoelectric stack is removed
  • +
  • \(k_{s,i}\) is the vertical stiffness contribution of the piezoelectric stack
  • +
  • \(F_{i}\) represents the part of the piezoelectric stack that is used as a force actuator
  • +
  • \(F_{m,i}\) represents the remaining part of the piezoelectric stack that is used as a force sensor
  • +
  • \(v_{m,i}\) represents the absolute velocity of the top part of the actuator
  • +
  • \(d_{m,i}\) represents the total relative displacement of the actuator
  • +
+ + +
+

iff_1dof.png +

+

Figure 13: Model of an amplified actuator

+
+
+
+ +
+

Function description

+
+
+
function [stewart] = initializeAmplifiedStrutDynamics(stewart, args)
+% initializeAmplifiedStrutDynamics - Add Stiffness and Damping properties of each strut
+%
+% Syntax: [stewart] = initializeAmplifiedStrutDynamics(args)
+%
+% Inputs:
+%    - args - Structure with the following fields:
+%        - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
+%        - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
+%        - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m]
+%        - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)]
+%
+% Outputs:
+%    - stewart - updated Stewart structure with the added fields:
+%        - Ki  [6x1] - Total Stiffness of each strut [N/m]
+%        - Ci  [6x1] - Total Damping of each strut [N/(m/s)]
+%        - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m]
+%        - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)]
+%        - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m]
+%        - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)]
+
+
+
+
+ +
+

Optional Parameters

+
+
+
arguments
+    stewart
+    args.Kdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1)
+    args.Cdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
+    args.Ksi (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1)
+    args.Csi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
+end
+
+
+
+
+ +
+

Add Stiffness and Damping properties of each strut

+
+
+
stewart.Ksi = args.Ksi;
+stewart.Csi = args.Csi;
+
+stewart.Kdi = args.Kdi;
+stewart.Cdi = args.Cdi;
+
+stewart.Ki = args.Ksi + args.Kdi;
+stewart.Ci = args.Csi + args.Cdi;
+
+stewart.actuator_type = 2;
+
+
+
+
+
+ +
+

5.9 initializeJointDynamics: Add Stiffness and Damping properties for spherical joints

+
+

+

@@ -1413,9 +1567,9 @@ This Matlab function is accessible here<

-
-

Function description

-
+
+

Function description

+
-
-

Optional Parameters

-
+
+

Optional Parameters

+
-
-

Add Stiffness and Damping properties of each strut

-
+
+

Add Stiffness and Damping properties of each strut

+
-
-

5.9 displayArchitecture: 3D plot of the Stewart platform architecture

-
+
+

5.10 displayArchitecture: 3D plot of the Stewart platform architecture

+

- +

@@ -1501,9 +1655,9 @@ This Matlab function is accessible here.

-
-

Function description

-
+
+

Function description

+
function [] = displayArchitecture(stewart, args)
 % displayArchitecture - 3D plot of the Stewart platform architecture
@@ -1531,9 +1685,9 @@ This Matlab function is accessible here.
 
-
-

Optional Parameters

-
+
+

Optional Parameters

+
arguments
     stewart
@@ -1553,9 +1707,9 @@ This Matlab function is accessible here.
 
-
-

Figure Creation, Frames and Homogeneous transformations

-
+
+

Figure Creation, Frames and Homogeneous transformations

+

The reference frame of the 3d plot corresponds to the frame \(\{F\}\).

@@ -1598,9 +1752,9 @@ Let’s define a parameter used to position the labels with respect to the c
-
-

Fixed Base elements

-
+
+

Fixed Base elements

+

Let’s first plot the frame \(\{F\}\).

@@ -1678,9 +1832,9 @@ Let’s now plot the position and labels of the Fixed Joints
-
-

Mobile Platform elements

-
+
+

Mobile Platform elements

+

Plot the frame \(\{M\}\).

@@ -1764,9 +1918,9 @@ Plot the position and labels of the rotation joints fixed to the mobile platform
-
-

Legs

-
+
+

Legs

+

Plot the legs connecting the joints of the fixed base to the joints of the mobile platform.

@@ -1789,9 +1943,9 @@ Plot the legs connecting the joints of the fixed base to the joints of the mobil
-
-

5.9.1 Figure parameters

-
+
+

5.10.1 Figure parameters

+
view([1 -0.6 0.4]);
 axis equal;
@@ -1812,7 +1966,7 @@ Plot the legs connecting the joints of the fixed base to the joints of the mobil
 

Author: Dehaeze Thomas

-

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

+

Created: 2020-02-10 lun. 18:17

diff --git a/stewart-architecture.org b/stewart-architecture.org index e76927e..fb0d8f2 100644 --- a/stewart-architecture.org +++ b/stewart-architecture.org @@ -288,6 +288,15 @@ Let's now move a little bit the top platform and re-display the configuration: This Matlab function is accessible [[file:src/initializeFramesPositions.m][here]]. +*** Documentation +:PROPERTIES: +:UNNUMBERED: t +:END: + +#+name: fig:stewart-frames-position +#+caption: Definition of the position of the frames +[[file:figs/stewart-frames-position.png]] + *** Function description :PROPERTIES: :UNNUMBERED: t @@ -311,15 +320,6 @@ This Matlab function is accessible [[file:src/initializeFramesPositions.m][here] % - FO_A [3x1] - Position of {A} with respect to {F} [m] #+end_src -*** Documentation -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+name: fig:stewart-frames-position -#+caption: Definition of the position of the frames -[[file:figs/stewart-frames-position.png]] - *** Optional Parameters :PROPERTIES: :UNNUMBERED: t @@ -362,31 +362,6 @@ This Matlab function is accessible [[file:src/initializeFramesPositions.m][here] This Matlab function is accessible [[file:src/generateGeneralConfiguration.m][here]]. -*** Function description -:PROPERTIES: -:UNNUMBERED: t -:END: -#+begin_src matlab - function [stewart] = generateGeneralConfiguration(stewart, args) - % generateGeneralConfiguration - Generate a Very General Configuration - % - % Syntax: [stewart] = generateGeneralConfiguration(stewart, args) - % - % Inputs: - % - args - Can have the following fields: - % - FH [1x1] - Height of the position of the fixed joints with respect to the frame {F} [m] - % - FR [1x1] - Radius of the position of the fixed joints in the X-Y [m] - % - FTh [6x1] - Angles of the fixed joints in the X-Y plane with respect to the X axis [rad] - % - MH [1x1] - Height of the position of the mobile joints with respect to the frame {M} [m] - % - FR [1x1] - Radius of the position of the mobile joints in the X-Y [m] - % - MTh [6x1] - Angles of the mobile joints in the X-Y plane with respect to the X axis [rad] - % - % 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} -#+end_src - *** Documentation :PROPERTIES: :UNNUMBERED: t @@ -442,6 +417,31 @@ The radius of the circles can be chosen as well as the angles where the joints a #+RESULTS: [[file:figs/stewart_bottom_plate.png]] +*** Function description +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + function [stewart] = generateGeneralConfiguration(stewart, args) + % generateGeneralConfiguration - Generate a Very General Configuration + % + % Syntax: [stewart] = generateGeneralConfiguration(stewart, args) + % + % Inputs: + % - args - Can have the following fields: + % - FH [1x1] - Height of the position of the fixed joints with respect to the frame {F} [m] + % - FR [1x1] - Radius of the position of the fixed joints in the X-Y [m] + % - FTh [6x1] - Angles of the fixed joints in the X-Y plane with respect to the X axis [rad] + % - MH [1x1] - Height of the position of the mobile joints with respect to the frame {M} [m] + % - FR [1x1] - Radius of the position of the mobile joints in the X-Y [m] + % - MTh [6x1] - Angles of the mobile joints in the X-Y plane with respect to the X axis [rad] + % + % 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} +#+end_src + *** Optional Parameters :PROPERTIES: :UNNUMBERED: t @@ -483,6 +483,15 @@ The radius of the circles can be chosen as well as the angles where the joints a This Matlab function is accessible [[file:src/computeJointsPose.m][here]]. +*** Documentation +:PROPERTIES: +:UNNUMBERED: t +:END: + +#+name: fig:stewart-struts +#+caption: Position and orientation of the struts +[[file:figs/stewart-struts.png]] + *** Function description :PROPERTIES: :UNNUMBERED: t @@ -514,15 +523,6 @@ This Matlab function is accessible [[file:src/computeJointsPose.m][here]]. % - MRb [3x3x6] - The i'th 3x3 array is the rotation matrix to orientate the top of the i'th strut from {M} #+end_src -*** Documentation -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+name: fig:stewart-struts -#+caption: Position and orientation of the struts -[[file:figs/stewart-struts.png]] - *** Compute the position of the Joints :PROPERTIES: :UNNUMBERED: t @@ -805,6 +805,50 @@ This Matlab function is accessible [[file:src/initializeCylindricalStruts.m][her This Matlab function is accessible [[file:src/initializeStrutDynamics.m][here]]. +*** Documentation +:PROPERTIES: +:UNNUMBERED: t +:END: + +#+name: fig:piezoelectric_stack +#+attr_html: :width 500px +#+caption: Example of a piezoelectric stach actuator (PI) +[[file:figs/piezoelectric_stack.jpg]] + +A simplistic model of such amplified actuator is shown in Figure [[fig:actuator_model_simple]] where: +- $k_{i}$ represent the vertical stiffness of the actuator +- $F_{i}$ represents the force applied by the actuator +- $F_{m,i}$ represents the total measured force +- $v_{m,i}$ represents the absolute velocity of the top part of the actuator +- $d_{m,i}$ represents the total relative displacement of the actuator + +#+begin_src latex :file actuator_model_simple.pdf :post pdf2svg(file=*this*, ext="png") :exports results + \begin{tikzpicture} + \draw (-1, 0) -- (1, 0); + + % Spring, Damper, and Actuator + \draw[spring] (-1, 0) -- (-1, 1.5) node[midway, left=0.1]{$k_{i}$}; + \draw[damper] ( 0, 0) -- ( 0, 1.5) node[midway, left=0.2]{$c_{i}$}; + \draw[actuator] ( 1, 0) -- ( 1, 1.5) node[midway, left=0.1](F){$F_{i}$}; + + \node[forcesensor={2}{0.2}] (fsens) at (0, 1.5){}; + + \node[left] at (fsens.west) {$F_{m,i}$}; + + \draw[dashed] (1, 0) -- ++(0.4, 0); + \draw[dashed] (1, 1.7) -- ++(0.4, 0); + + \draw[->] (0, 1.7)node[]{$\bullet$} -- ++(0, 0.5) node[right]{$v_{m,i}$}; + + \draw[<->] (1.4, 0) -- ++(0, 1.7) node[midway, right]{$d_{m,i}$}; + \end{tikzpicture} +#+end_src + +#+name: fig:actuator_model_simple +#+caption: Simple model of an Actuator +#+RESULTS: +[[file:figs/actuator_model_simple.png]] + *** Function description :PROPERTIES: :UNNUMBERED: t @@ -845,6 +889,127 @@ This Matlab function is accessible [[file:src/initializeStrutDynamics.m][here]]. #+begin_src matlab stewart.Ki = args.Ki; stewart.Ci = args.Ci; + + stewart.actuator_type = 1; +#+end_src + +** =initializeAmplifiedStrutDynamics=: Add Stiffness and Damping properties of each strut for an amplified piezoelectric actuator +:PROPERTIES: +:header-args:matlab+: :tangle src/initializeAmplifiedStrutDynamics.m +:header-args:matlab+: :comments none :mkdirp yes :eval no +:END: +<> + +This Matlab function is accessible [[file:src/initializeAmplifiedStrutDynamics.m][here]]. + +*** Documentation +:PROPERTIES: +:UNNUMBERED: t +:END: + +An amplified piezoelectric actuator is shown in Figure [[fig:cedrat_apa95ml]]. + +#+name: fig:cedrat_apa95ml +#+attr_html: :width 500px +#+caption: Example of an Amplified piezoelectric actuator with an integrated displacement sensor (Cedrat Technologies) +[[file:figs/amplified_piezo_with_displacement_sensor.jpg]] + +A simplistic model of such amplified actuator is shown in Figure [[fig:amplified_piezo_model]] where: +- $k_{p,i}$ represent the vertical stiffness when the piezoelectric stack is removed +- $k_{s,i}$ is the vertical stiffness contribution of the piezoelectric stack +- $F_{i}$ represents the part of the piezoelectric stack that is used as a force actuator +- $F_{m,i}$ represents the remaining part of the piezoelectric stack that is used as a force sensor +- $v_{m,i}$ represents the absolute velocity of the top part of the actuator +- $d_{m,i}$ represents the total relative displacement of the actuator + +#+begin_src latex :file iff_1dof.pdf :post pdf2svg(file=*this*, ext="png") :exports results + \begin{tikzpicture} + % Ground + \draw (-1.2, 0) -- (1, 0); + + % Mass + \draw (-1.2, 1.4) -- ++(2.2, 0); + \node[forcesensor={0.4}{0.4}] (fsensn) at (0, 1){}; + \draw[] (-0.4, 1) -- (0.4, 1); + \node[right] at (fsensn.east) {$F_{m,i}$}; + + % Spring, Damper, and Actuator + \draw[spring] (-0.4, 0) -- (-0.4, 1) node[midway, right=0.1]{$k_{s,i}$}; + \draw[actuator={0.4}{0.2}] (0.4, 0) -- (0.4, 1) node[midway, right=0.1]{$F_{i}$}; + + \draw[spring] (-1, 0) -- (-1, 1.4) node[midway, left=0.1]{$k_{p,i}$}; + + \draw[dashed] (1, 0) -- ++(0.4, 0); + + \draw[dashed] (1, 1.4) -- ++(0.4, 0); + + \draw[->] (0, 1.4)node[]{$\bullet$} -- ++(0, 0.5) node[right]{$v_{m,i}$}; + + \draw[<->] (1.4, 0) -- ++(0, 1.4) node[midway, right]{$d_{m,i}$}; + \end{tikzpicture} +#+end_src + +#+name: fig:amplified_piezo_model +#+caption: Model of an amplified actuator +#+RESULTS: +[[file:figs/iff_1dof.png]] + +*** Function description +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + function [stewart] = initializeAmplifiedStrutDynamics(stewart, args) + % initializeAmplifiedStrutDynamics - Add Stiffness and Damping properties of each strut + % + % Syntax: [stewart] = initializeAmplifiedStrutDynamics(args) + % + % Inputs: + % - args - Structure with the following fields: + % - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m] + % - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)] + % - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m] + % - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)] + % + % Outputs: + % - stewart - updated Stewart structure with the added fields: + % - Ki [6x1] - Total Stiffness of each strut [N/m] + % - Ci [6x1] - Total Damping of each strut [N/(m/s)] + % - Ksi [6x1] - Vertical stiffness contribution of the piezoelectric stack [N/m] + % - Csi [6x1] - Vertical damping contribution of the piezoelectric stack [N/(m/s)] + % - Kdi [6x1] - Vertical stiffness when the piezoelectric stack is removed [N/m] + % - Cdi [6x1] - Vertical damping when the piezoelectric stack is removed [N/(m/s)] +#+end_src + +*** Optional Parameters +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + arguments + stewart + args.Kdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 5e6*ones(6,1) + args.Cdi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1) + args.Ksi (6,1) double {mustBeNumeric, mustBeNonnegative} = 15e6*ones(6,1) + args.Csi (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1) + end +#+end_src + +*** Add Stiffness and Damping properties of each strut +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab + stewart.Ksi = args.Ksi; + stewart.Csi = args.Csi; + + stewart.Kdi = args.Kdi; + stewart.Cdi = args.Cdi; + + stewart.Ki = args.Ksi + args.Kdi; + stewart.Ci = args.Csi + args.Cdi; + + stewart.actuator_type = 2; #+end_src ** =initializeJointDynamics=: Add Stiffness and Damping properties for spherical joints