Add function to initialize cylindrical struts
This commit is contained in:
parent
7cfd4fef39
commit
6f5280cb33
@ -102,12 +102,14 @@ By following this procedure, we obtain a Matlab structure =stewart= that contain
|
|||||||
** Test the functions
|
** Test the functions
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
stewart = initializeFramesPositions('H', 90e-3, 'MO_B', 45e-3);
|
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 = generateCubicConfiguration(stewart, 'Hc', 60e-3, 'FOc', 45e-3, 'FHa', 5e-3, 'MHb', 5e-3);
|
||||||
|
stewart = generateGeneralConfiguration(stewart);
|
||||||
stewart = computeJointsPose(stewart);
|
stewart = computeJointsPose(stewart);
|
||||||
stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
|
stewart = initializeStrutDynamics(stewart, 'Ki', 1e6*ones(6,1), 'Ci', 1e2*ones(6,1));
|
||||||
|
stewart = initializeCylindricalStruts(stewart);
|
||||||
stewart = computeJacobian(stewart);
|
stewart = computeJacobian(stewart);
|
||||||
[Li, dLi] = inverseKinematics(stewart, 'AP', [0;0;0.00001], 'ARB', eye(3));
|
[Li, dLi] = inverseKinematics(stewart, 'AP', [0;0;0.00001], 'ARB', eye(3));
|
||||||
[P, R] = forwardKinematicsApprox(stewart, 'dL', dLi)
|
[P, R] = forwardKinematicsApprox(stewart, 'dL', dLi);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* =initializeFramesPositions=: Initialize the positions of frames {A}, {B}, {F} and {M}
|
* =initializeFramesPositions=: Initialize the positions of frames {A}, {B}, {F} and {M}
|
||||||
@ -169,7 +171,8 @@ This Matlab function is accessible [[file:src/initializeFramesPositions.m][here]
|
|||||||
stewart.FO_A = stewart.MO_B + stewart.FO_M; % Position of {A} with respect to {F} [m]
|
stewart.FO_A = stewart.MO_B + stewart.FO_M; % Position of {A} with respect to {F} [m]
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* =generateCubicConfiguration=: Generate a Cubic Configuration
|
* Initialize the position of the Joints
|
||||||
|
** =generateCubicConfiguration=: Generate a Cubic Configuration
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle src/generateCubicConfiguration.m
|
:header-args:matlab+: :tangle src/generateCubicConfiguration.m
|
||||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
@ -178,7 +181,7 @@ This Matlab function is accessible [[file:src/initializeFramesPositions.m][here]
|
|||||||
|
|
||||||
This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here]].
|
This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here]].
|
||||||
|
|
||||||
** Function description
|
*** Function description
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
function [stewart] = generateCubicConfiguration(stewart, args)
|
function [stewart] = generateCubicConfiguration(stewart, args)
|
||||||
% generateCubicConfiguration - Generate a Cubic Configuration
|
% generateCubicConfiguration - Generate a Cubic Configuration
|
||||||
@ -200,12 +203,12 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here
|
|||||||
% - Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M}
|
% - Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Documentation
|
*** Documentation
|
||||||
#+name: fig:cubic-configuration-definition
|
#+name: fig:cubic-configuration-definition
|
||||||
#+caption: Cubic Configuration
|
#+caption: Cubic Configuration
|
||||||
[[file:figs/cubic-configuration-definition.png]]
|
[[file:figs/cubic-configuration-definition.png]]
|
||||||
|
|
||||||
** Optional Parameters
|
*** Optional Parameters
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
arguments
|
arguments
|
||||||
stewart
|
stewart
|
||||||
@ -216,7 +219,7 @@ This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here
|
|||||||
end
|
end
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Position of the Cube
|
*** Position of the Cube
|
||||||
We define the useful points of the cube with respect to the Cube's center.
|
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
|
${}^{C}C$ are the 6 vertices of the cubes expressed in a frame {C} which is
|
||||||
located at the center of the cube and aligned with {F} and {M}.
|
located at the center of the cube and aligned with {F} and {M}.
|
||||||
@ -236,7 +239,7 @@ located at the center of the cube and aligned with {F} and {M}.
|
|||||||
CCm = [Cc(:,2), Cc(:,2), Cc(:,4), Cc(:,4), Cc(:,6), Cc(:,6)]; % CCm(:,i) corresponds to the top cube's vertice corresponding to the i'th leg
|
CCm = [Cc(:,2), Cc(:,2), Cc(:,4), Cc(:,4), Cc(:,6), Cc(:,6)]; % CCm(:,i) corresponds to the top cube's vertice corresponding to the i'th leg
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** 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}$).
|
We can compute the vector of each leg ${}^{C}\hat{\bm{s}}_{i}$ (unit vector from ${}^{C}C_{f}$ to ${}^{C}C_{m}$).
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
CSi = (CCm - CCf)./vecnorm(CCm - CCf);
|
CSi = (CCm - CCf)./vecnorm(CCm - CCf);
|
||||||
@ -248,7 +251,7 @@ We now which to compute the position of the joints $a_{i}$ and $b_{i}$.
|
|||||||
stewart.Mb = CCf + [0; 0; args.FOc-stewart.H] + ((stewart.H-args.MHb-(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;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* =generateGeneralConfiguration=: Generate a Very General Configuration
|
** =generateGeneralConfiguration=: Generate a Very General Configuration
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle src/generateGeneralConfiguration.m
|
:header-args:matlab+: :tangle src/generateGeneralConfiguration.m
|
||||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
@ -257,7 +260,7 @@ We now which to compute the position of the joints $a_{i}$ and $b_{i}$.
|
|||||||
|
|
||||||
This Matlab function is accessible [[file:src/generateGeneralConfiguration.m][here]].
|
This Matlab function is accessible [[file:src/generateGeneralConfiguration.m][here]].
|
||||||
|
|
||||||
** Function description
|
*** Function description
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
function [stewart] = generateGeneralConfiguration(stewart, args)
|
function [stewart] = generateGeneralConfiguration(stewart, args)
|
||||||
% generateGeneralConfiguration - Generate a Very General Configuration
|
% generateGeneralConfiguration - Generate a Very General Configuration
|
||||||
@ -281,11 +284,11 @@ This Matlab function is accessible [[file:src/generateGeneralConfiguration.m][he
|
|||||||
% - Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M}
|
% - Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Documentation
|
*** Documentation
|
||||||
Joints are positions on a circle centered with the Z axis of {F} and {M} and at a chosen distance from {F} and {M}.
|
Joints are positions on a circle centered with the Z axis of {F} and {M} and at a chosen distance from {F} and {M}.
|
||||||
The radius of the circles can be chosen as well as the angles where the joints are located.
|
The radius of the circles can be chosen as well as the angles where the joints are located.
|
||||||
|
|
||||||
** Optional Parameters
|
*** Optional Parameters
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
arguments
|
arguments
|
||||||
stewart
|
stewart
|
||||||
@ -298,7 +301,7 @@ The radius of the circles can be chosen as well as the angles where the joints a
|
|||||||
end
|
end
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Compute the pose
|
*** Compute the pose
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
stewart.Fa = zeros(3,6);
|
stewart.Fa = zeros(3,6);
|
||||||
stewart.Mb = zeros(3,6);
|
stewart.Mb = zeros(3,6);
|
||||||
@ -430,6 +433,85 @@ This Matlab function is accessible [[file:src/initializeStrutDynamics.m][here]].
|
|||||||
stewart.Ci = args.Ci;
|
stewart.Ci = args.Ci;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* =initializeCylindricalStruts=: Define the mass and moment of inertia of cylindrical struts
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:matlab+: :tangle src/initializeCylindricalStruts.m
|
||||||
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
|
:END:
|
||||||
|
<<sec:initializeCylindricalStruts>>
|
||||||
|
|
||||||
|
This Matlab function is accessible [[file:src/initializeCylindricalStruts.m][here]].
|
||||||
|
|
||||||
|
** Function description
|
||||||
|
#+begin_src matlab
|
||||||
|
function [stewart] = initializeCylindricalStruts(stewart, args)
|
||||||
|
% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts
|
||||||
|
%
|
||||||
|
% Syntax: [stewart] = initializeCylindricalStruts(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args - Structure with the following fields:
|
||||||
|
% - Fsm [1x1] - Mass of the Fixed part of the struts [kg]
|
||||||
|
% - Fsh [1x1] - Height of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Fsr [1x1] - Radius of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Msm [1x1] - Mass of the Mobile part of the struts [kg]
|
||||||
|
% - Msh [1x1] - Height of cylinder for the Mobile part of the struts [m]
|
||||||
|
% - Msr [1x1] - Radius of cylinder for the Mobile part of the struts [m]
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - stewart - updated Stewart structure with the added fields:
|
||||||
|
% - struts [struct] - structure with the following fields:
|
||||||
|
% - Fsm [6x1] - Mass of the Fixed part of the struts [kg]
|
||||||
|
% - Fsi [3x3x6] - Moment of Inertia for the Fixed part of the struts [kg*m^2]
|
||||||
|
% - Msm [6x1] - Mass of the Mobile part of the struts [kg]
|
||||||
|
% - Msi [3x3x6] - Moment of Inertia for the Mobile part of the struts [kg*m^2]
|
||||||
|
% - Fsh [6x1] - Height of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Fsr [6x1] - Radius of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Msh [6x1] - Height of cylinder for the Mobile part of the struts [m]
|
||||||
|
% - Msr [6x1] - Radius of cylinder for the Mobile part of the struts [m]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Optional Parameters
|
||||||
|
#+begin_src matlab
|
||||||
|
arguments
|
||||||
|
stewart
|
||||||
|
args.Fsm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Fsh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Fsr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
args.Msm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Msh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Msr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Add Stiffness and Damping properties of each strut
|
||||||
|
#+begin_src matlab
|
||||||
|
struts = struct();
|
||||||
|
|
||||||
|
struts.Fsm = ones(6,1).*args.Fsm;
|
||||||
|
struts.Msm = ones(6,1).*args.Msm;
|
||||||
|
|
||||||
|
struts.Fsh = ones(6,1).*args.Fsh;
|
||||||
|
struts.Fsr = ones(6,1).*args.Fsr;
|
||||||
|
struts.Msh = ones(6,1).*args.Msh;
|
||||||
|
struts.Msr = ones(6,1).*args.Msr;
|
||||||
|
|
||||||
|
struts.Fsi = zeros(3, 3, 6);
|
||||||
|
struts.Msi = zeros(3, 3, 6);
|
||||||
|
for i = 1:6
|
||||||
|
struts.Fsi(:,:,i) = diag([1/12 * struts.Fsm(i) * (3*struts.Fsr(i)^2 + struts.Fsh(i)^2), ...
|
||||||
|
1/12 * struts.Fsm(i) * (3*struts.Fsr(i)^2 + struts.Fsh(i)^2), ...
|
||||||
|
1/2 * struts.Fsm(i) * struts.Fsr(i)^2]);
|
||||||
|
struts.Msi(:,:,i) = diag([1/12 * struts.Msm(i) * (3*struts.Msr(i)^2 + struts.Msh(i)^2), ...
|
||||||
|
1/12 * struts.Msm(i) * (3*struts.Msr(i)^2 + struts.Msh(i)^2), ...
|
||||||
|
1/2 * struts.Msm(i) * struts.Msr(i)^2]);
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
stewart.struts = struts;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* =computeJacobian=: Compute the Jacobian Matrix
|
* =computeJacobian=: Compute the Jacobian Matrix
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle src/computeJacobian.m
|
:header-args:matlab+: :tangle src/computeJacobian.m
|
||||||
@ -473,7 +555,8 @@ This Matlab function is accessible [[file:src/computeJacobian.m][here]].
|
|||||||
stewart.C = inv(stewart.K);
|
stewart.C = inv(stewart.K);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* =inverseKinematics=: Compute Inverse Kinematics
|
* Utility Functions
|
||||||
|
** =inverseKinematics=: Compute Inverse Kinematics
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle src/inverseKinematics.m
|
:header-args:matlab+: :tangle src/inverseKinematics.m
|
||||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
@ -482,7 +565,7 @@ This Matlab function is accessible [[file:src/computeJacobian.m][here]].
|
|||||||
|
|
||||||
This Matlab function is accessible [[file:src/inverseKinematics.m][here]].
|
This Matlab function is accessible [[file:src/inverseKinematics.m][here]].
|
||||||
|
|
||||||
** Function description
|
*** Function description
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
function [Li, dLi] = inverseKinematics(stewart, args)
|
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}
|
% inverseKinematics - Compute the needed length of each strut to have the wanted position and orientation of {B} with respect to {A}
|
||||||
@ -502,7 +585,7 @@ This Matlab function is accessible [[file:src/inverseKinematics.m][here]].
|
|||||||
% - dLi [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A}
|
% - dLi [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Optional Parameters
|
*** Optional Parameters
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
arguments
|
arguments
|
||||||
stewart
|
stewart
|
||||||
@ -511,7 +594,7 @@ This Matlab function is accessible [[file:src/inverseKinematics.m][here]].
|
|||||||
end
|
end
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Theory
|
*** 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$.
|
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$.
|
||||||
|
|
||||||
From the geometry of the manipulator, the loop closure for each limb, $i = 1, 2, \dots, 6$ can be written as
|
From the geometry of the manipulator, the loop closure for each limb, $i = 1, 2, \dots, 6$ can be written as
|
||||||
@ -533,7 +616,7 @@ Hence, for $i = 1, 2, \dots, 6$, each limb length can be uniquely determined by:
|
|||||||
If the position and orientation of the moving platform lie in the feasible workspace of the manipulator, one unique solution to the limb length is determined by the above equation.
|
If the position and orientation of the moving platform lie in the feasible workspace of the manipulator, one unique solution to the limb length is determined by the above equation.
|
||||||
Otherwise, when the limbs' lengths derived yield complex numbers, then the position or orientation of the moving platform is not reachable.
|
Otherwise, when the limbs' lengths derived yield complex numbers, then the position or orientation of the moving platform is not reachable.
|
||||||
|
|
||||||
** Compute
|
*** Compute
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
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));
|
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));
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -542,7 +625,7 @@ Otherwise, when the limbs' lengths derived yield complex numbers, then the posit
|
|||||||
dLi = Li-stewart.l;
|
dLi = Li-stewart.l;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* =forwardKinematicsApprox=: Compute the Forward Kinematics
|
** =forwardKinematicsApprox=: Compute the Forward Kinematics
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle src/forwardKinematicsApprox.m
|
:header-args:matlab+: :tangle src/forwardKinematicsApprox.m
|
||||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
@ -551,7 +634,7 @@ Otherwise, when the limbs' lengths derived yield complex numbers, then the posit
|
|||||||
|
|
||||||
This Matlab function is accessible [[file:src/forwardKinematicsApprox.m][here]].
|
This Matlab function is accessible [[file:src/forwardKinematicsApprox.m][here]].
|
||||||
|
|
||||||
** Function description
|
*** Function description
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
function [P, R] = forwardKinematicsApprox(stewart, args)
|
function [P, R] = forwardKinematicsApprox(stewart, args)
|
||||||
% forwardKinematicsApprox - Computed the approximate pose of {B} with respect to {A} from the length of each strut and using
|
% forwardKinematicsApprox - Computed the approximate pose of {B} with respect to {A} from the length of each strut and using
|
||||||
@ -570,7 +653,7 @@ This Matlab function is accessible [[file:src/forwardKinematicsApprox.m][here]].
|
|||||||
% - R [3x3] - The estimated rotation matrix that gives the orientation of {B} with respect to {A}
|
% - R [3x3] - The estimated rotation matrix that gives the orientation of {B} with respect to {A}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Optional Parameters
|
*** Optional Parameters
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
arguments
|
arguments
|
||||||
stewart
|
stewart
|
||||||
@ -578,7 +661,7 @@ This Matlab function is accessible [[file:src/forwardKinematicsApprox.m][here]].
|
|||||||
end
|
end
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Computation
|
*** Computation
|
||||||
From a small displacement of each strut $d\bm{\mathcal{L}}$, we can compute the
|
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:
|
position and orientation of {B} with respect to {A} using the following formula:
|
||||||
\[ d \bm{\mathcal{X}} = \bm{J}^{-1} d\bm{\mathcal{L}} \]
|
\[ d \bm{\mathcal{X}} = \bm{J}^{-1} d\bm{\mathcal{L}} \]
|
||||||
|
58
src/initializeCylindricalStruts.m
Normal file
58
src/initializeCylindricalStruts.m
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
function [stewart] = initializeCylindricalStruts(stewart, args)
|
||||||
|
% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts
|
||||||
|
%
|
||||||
|
% Syntax: [stewart] = initializeCylindricalStruts(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args - Structure with the following fields:
|
||||||
|
% - Fsm [1x1] - Mass of the Fixed part of the struts [kg]
|
||||||
|
% - Fsh [1x1] - Height of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Fsr [1x1] - Radius of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Msm [1x1] - Mass of the Mobile part of the struts [kg]
|
||||||
|
% - Msh [1x1] - Height of cylinder for the Mobile part of the struts [m]
|
||||||
|
% - Msr [1x1] - Radius of cylinder for the Mobile part of the struts [m]
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - stewart - updated Stewart structure with the added fields:
|
||||||
|
% - struts [struct] - structure with the following fields:
|
||||||
|
% - Fsm [6x1] - Mass of the Fixed part of the struts [kg]
|
||||||
|
% - Fsi [3x3x6] - Moment of Inertia for the Fixed part of the struts [kg*m^2]
|
||||||
|
% - Msm [6x1] - Mass of the Mobile part of the struts [kg]
|
||||||
|
% - Msi [3x3x6] - Moment of Inertia for the Mobile part of the struts [kg*m^2]
|
||||||
|
% - Fsh [6x1] - Height of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Fsr [6x1] - Radius of cylinder for the Fixed part of the struts [m]
|
||||||
|
% - Msh [6x1] - Height of cylinder for the Mobile part of the struts [m]
|
||||||
|
% - Msr [6x1] - Radius of cylinder for the Mobile part of the struts [m]
|
||||||
|
|
||||||
|
arguments
|
||||||
|
stewart
|
||||||
|
args.Fsm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Fsh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Fsr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
args.Msm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Msh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Msr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
end
|
||||||
|
|
||||||
|
struts = struct();
|
||||||
|
|
||||||
|
struts.Fsm = ones(6,1).*args.Fsm;
|
||||||
|
struts.Msm = ones(6,1).*args.Msm;
|
||||||
|
|
||||||
|
struts.Fsh = ones(6,1).*args.Fsh;
|
||||||
|
struts.Fsr = ones(6,1).*args.Fsr;
|
||||||
|
struts.Msh = ones(6,1).*args.Msh;
|
||||||
|
struts.Msr = ones(6,1).*args.Msr;
|
||||||
|
|
||||||
|
struts.Fsi = zeros(3, 3, 6);
|
||||||
|
struts.Msi = zeros(3, 3, 6);
|
||||||
|
for i = 1:6
|
||||||
|
struts.Fsi(:,:,i) = diag([1/12 * struts.Fsm(i) * (3*struts.Fsr(i)^2 + struts.Fsh(i)^2), ...
|
||||||
|
1/12 * struts.Fsm(i) * (3*struts.Fsr(i)^2 + struts.Fsh(i)^2), ...
|
||||||
|
1/2 * struts.Fsm(i) * struts.Fsr(i)^2]);
|
||||||
|
struts.Msi(:,:,i) = diag([1/12 * struts.Msm(i) * (3*struts.Msr(i)^2 + struts.Msh(i)^2), ...
|
||||||
|
1/12 * struts.Msm(i) * (3*struts.Msr(i)^2 + struts.Msh(i)^2), ...
|
||||||
|
1/2 * struts.Msm(i) * struts.Msr(i)^2]);
|
||||||
|
end
|
||||||
|
|
||||||
|
stewart.struts = struts;
|
Loading…
Reference in New Issue
Block a user