From 58cbe3cfaedd232be64fabd23b5ae5645290bbf1 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Wed, 29 Jan 2020 13:29:29 +0100 Subject: [PATCH] Add skeleton for the kinematic analysis --- kinematic-study.html | 358 ++++++++++++++++++++----------------------- kinematic-study.org | 59 ++++++- 2 files changed, 220 insertions(+), 197 deletions(-) diff --git a/kinematic-study.html b/kinematic-study.html index 0758596..fc4132e 100644 --- a/kinematic-study.html +++ b/kinematic-study.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Kinematic Study of the Stewart Platform @@ -283,40 +283,61 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 Needed Actuator Stroke

+
+

1 Jacobian Analysis

+
+
+

1.1 Jacobian Computation

+
+ +
+

1.2 Velocity of the struts to the velocity of the mobile platform

+
+ +
+

1.3 Displacement of the struts to the displacement of the mobile platform

+
+ +
+

1.4 Force Transformation

+
+
+ +
+

2 Forward and Inverse Kinematics

+
+
+
+

2.1 Inverse Kinematics

+
+ + +
+

2.2 Forward Kinematics

+
+ + +
+

2.3 Approximate Forward Kinematics

+
+
+ + +
+

3 Stiffness Analysis

+
+
+
+

3.1 Computation of the Stiffness and Compliance Matrix

+
+
+ +
+

4 Estimated required actuator stroke for specified platform mobility

+
+
+
+

4.1 Needed Actuator Stroke

+

The goal is to determine the needed stroke of the actuators to obtain wanted translations and rotations.

-
-

1.1 Stewart architecture definition

-
+
+

4.1.1 Stewart architecture definition

+

We use a cubic architecture.

@@ -364,9 +439,9 @@ save('./mat/stewart.mat', -

1.2 Wanted translations and rotations

-
+
+

4.1.2 Wanted translations and rotations

+

We define wanted translations and rotations

@@ -381,9 +456,9 @@ Ry_max = 30e-6; % Rotati
-
-

1.3 Needed stroke for “pure” rotations or translations

-
+
+

4.1.3 Needed stroke for “pure” rotations or translations

+

First, we estimate the needed actuator stroke for “pure” rotations and translation.

@@ -401,122 +476,21 @@ From -1.2e-05[m] to 1.1e-05[m]: Total stroke = 22.9[um]
+
+
-
-

1.4 Needed stroke for combined translations and rotations

-
+
+

5 Estimated platform mobility from specified actuator stroke

+
+
+

6 Functions

+
+
+
+

6.1 computeJacobian: Compute the Jacobian Matrix

+

-Now, we combine translations and rotations, and we try to find the worst case (that we suppose to happen at the border). -

-
-
Lmax = 0;
-Lmin = 0;
-pos = [0, 0, 0, 0, 0];
-for Tx = [-Tx_max,Tx_max]
-for Ty = [-Ty_max,Ty_max]
-for Tz = [-Tz_max,Tz_max]
-for Rx = [-Rx_max,Rx_max]
-for Ry = [-Ry_max,Ry_max]
-    lmax = max(stewart.Jd*[Tx Ty Tz Rx Ry 0]');
-    lmin = min(stewart.Jd*[Tx Ty Tz Rx Ry 0]');
-    if lmax > Lmax
-        Lmax = lmax;
-        pos = [Tx Ty Tz Rx Ry];
-    end
-    if lmin < Lmin
-        Lmin = lmin;
-    end
-end
-end
-end
-end
-end
-
-
- -

-We obtain a needed stroke shown below (almost two times the needed stroke for “pure” rotations and translations). -

-
-From -3.1e-05[m] to 3.1e-05[m]: Total stroke = 61.5[um]
-
-
-
-
- -
-

2 Maximum Stroke

-
-

-From a specified actuator stroke, we try to estimate the available maneuverability of the Stewart platform. -

- -
-
[X, Y, Z] = getMaxPositions(stewart);
-
-
- -
-
figure;
-plot3(X, Y, Z, 'k-')
-
-
-
-
- -
-

3 Functions

-
-
-
-

3.1 getMaxPositions

-
-
-
function [X, Y, Z] = getMaxPositions(stewart)
-    Leg = stewart.Leg;
-    J = stewart.Jd;
-    theta = linspace(0, 2*pi, 100);
-    phi = linspace(-pi/2 , pi/2, 100);
-    dmax = zeros(length(theta), length(phi));
-
-    for i = 1:length(theta)
-        for j = 1:length(phi)
-            L = J*[cos(phi(j))*cos(theta(i)) cos(phi(j))*sin(theta(i)) sin(phi(j)) 0 0 0]';
-            dmax(i, j) = Leg.stroke/max(abs(L));
-        end
-    end
-
-    X = dmax.*cos(repmat(phi,length(theta),1)).*cos(repmat(theta,length(phi),1))';
-    Y = dmax.*cos(repmat(phi,length(theta),1)).*sin(repmat(theta,length(phi),1))';
-    Z = dmax.*sin(repmat(phi,length(theta),1));
-end
-
-
-
-
- -
-

3.2 getMaxPureDisplacement

-
-
-
function [max_disp] = getMaxPureDisplacement(Leg, J)
-    max_disp = zeros(6, 1);
-    max_disp(1) = Leg.stroke/max(abs(J*[1 0 0 0 0 0]'));
-    max_disp(2) = Leg.stroke/max(abs(J*[0 1 0 0 0 0]'));
-    max_disp(3) = Leg.stroke/max(abs(J*[0 0 1 0 0 0]'));
-    max_disp(4) = Leg.stroke/max(abs(J*[0 0 0 1 0 0]'));
-    max_disp(5) = Leg.stroke/max(abs(J*[0 0 0 0 1 0]'));
-    max_disp(6) = Leg.stroke/max(abs(J*[0 0 0 0 0 1]'));
-end
-
-
-
-
-
-

3.3 computeJacobian: Compute the Jacobian Matrix

-
-

- +

@@ -524,9 +498,9 @@ This Matlab function is accessible here.

-
-

3.3.1 Function description

-
+
+

6.1.1 Function description

+
function [stewart] = computeJacobian(stewart)
 % computeJacobian -
@@ -548,9 +522,9 @@ This Matlab function is accessible here.
 
-
-

3.3.2 Compute Jacobian Matrix

-
+
+

6.1.2 Compute Jacobian Matrix

+
stewart.J = [stewart.As' , cross(stewart.Ab, stewart.As)'];
 
@@ -558,9 +532,9 @@ This Matlab function is accessible here.
-
-

3.3.3 Compute Stiffness Matrix

-
+
+

6.1.3 Compute Stiffness Matrix

+
stewart.K = stewart.J'*diag(stewart.Ki)*stewart.J;
 
@@ -568,9 +542,9 @@ This Matlab function is accessible here.
-
-

3.3.4 Compute Compliance Matrix

-
+
+

6.1.4 Compute Compliance Matrix

+
stewart.C = inv(stewart.K);
 
@@ -579,11 +553,11 @@ This Matlab function is accessible here.
-
-

3.4 inverseKinematics: Compute Inverse Kinematics

-
+
+

6.2 inverseKinematics: Compute Inverse Kinematics

+

- +

@@ -591,9 +565,9 @@ This Matlab function is accessible here.

-
-

3.4.1 Function description

-
+
+

6.2.1 Function description

+
function [Li, dLi] = inverseKinematics(stewart, args)
 % inverseKinematics - Compute the needed length of each strut to have the wanted position and orientation of {B} with respect to {A}
@@ -616,9 +590,9 @@ This Matlab function is accessible here.
 
-
-

3.4.2 Optional Parameters

-
+
+

6.2.2 Optional Parameters

+
arguments
     stewart
@@ -630,9 +604,9 @@ This Matlab function is accessible here.
 
-
-

3.4.3 Theory

-
+
+

6.2.3 Theory

+

For inverse kinematic analysis, it is assumed that the position \({}^A\bm{P}\) and orientation of the moving platform \({}^A\bm{R}_B\) are given and the problem is to obtain the joint variables, namely, \(\bm{L} = [l_1, l_2, \dots, l_6]^T\).

@@ -666,9 +640,9 @@ Otherwise, when the limbs’ lengths derived yield complex numbers, then the
-
-

3.4.4 Compute

-
+
+

6.2.4 Compute

+
Li = sqrt(args.AP'*args.AP + diag(stewart.Bb'*stewart.Bb) + diag(stewart.Aa'*stewart.Aa) - (2*args.AP'*stewart.Aa)' + (2*args.AP'*(args.ARB*stewart.Bb))' - diag(2*(args.ARB*stewart.Bb)'*stewart.Aa));
 
@@ -682,11 +656,11 @@ Otherwise, when the limbs’ lengths derived yield complex numbers, then the
-
-

3.5 forwardKinematicsApprox: Compute the Approximate Forward Kinematics

-
+
+

6.3 forwardKinematicsApprox: Compute the Approximate Forward Kinematics

+

- +

@@ -694,9 +668,9 @@ This Matlab function is accessible here<

-
-

3.5.1 Function description

-
+
+

6.3.1 Function description

+
-
-

3.5.2 Optional Parameters

-
+
+

6.3.2 Optional Parameters

+
-
-

3.5.3 Computation

-
+
+

6.3.3 Computation

+

From a small displacement of each strut \(d\bm{\mathcal{L}}\), we can compute the position and orientation of {B} with respect to {A} using the following formula: @@ -778,7 +752,7 @@ We then compute the corresponding rotation matrix.

Author: Dehaeze Thomas

-

Created: 2020-01-28 mar. 17:38

+

Created: 2020-01-29 mer. 13:29

diff --git a/kinematic-study.org b/kinematic-study.org index d246121..93c3b5d 100644 --- a/kinematic-study.org +++ b/kinematic-study.org @@ -22,7 +22,39 @@ :END: * Introduction :ignore: -* Matlab Init :noexport:ignore: + +* Jacobian Analysis +** Introduction :ignore: + +** Jacobian Computation + +** Velocity of the struts to the velocity of the mobile platform + +** Displacement of the struts to the displacement of the mobile platform + +** Force Transformation + +* Forward and Inverse Kinematics +** Introduction :ignore: + +** Inverse Kinematics + + +** Forward Kinematics + + +** Approximate Forward Kinematics + + +* Stiffness Analysis +** Introduction :ignore: + +** Computation of the Stiffness and Compliance Matrix + +* Estimated required actuator stroke for specified platform mobility +** Introduction :ignore: + +** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> #+end_src @@ -35,10 +67,10 @@ simulinkproject('./'); #+end_src -* Needed Actuator Stroke +** Needed Actuator Stroke The goal is to determine the needed stroke of the actuators to obtain wanted translations and rotations. -** Stewart architecture definition +*** Stewart architecture definition We use a cubic architecture. #+begin_src matlab :results silent @@ -62,7 +94,7 @@ We use a cubic architecture. save('./mat/stewart.mat', 'stewart'); #+end_src -** Wanted translations and rotations +*** Wanted translations and rotations We define wanted translations and rotations #+begin_src matlab :results silent Tx_max = 15e-6; % Translation [m] @@ -72,7 +104,7 @@ We define wanted translations and rotations Ry_max = 30e-6; % Rotation [rad] #+end_src -** Needed stroke for "pure" rotations or translations +*** Needed stroke for "pure" rotations or translations First, we estimate the needed actuator stroke for "pure" rotations and translation. #+begin_src matlab :results silent LTx = stewart.Jd*[Tx_max 0 0 0 0 0]'; @@ -89,6 +121,23 @@ First, we estimate the needed actuator stroke for "pure" rotations and translati #+RESULTS: : From -1.2e-05[m] to 1.1e-05[m]: Total stroke = 22.9[um] +* Estimated platform mobility from specified actuator stroke +** Introduction :ignore: + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab :results none :exports none + simulinkproject('./'); +#+end_src + + * Functions ** =computeJacobian=: Compute the Jacobian Matrix :PROPERTIES: