Add reference subsystems for struts and platforms
This commit is contained in:
+155
-79
@@ -433,85 +433,6 @@ 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
|
||||||
@@ -555,6 +476,161 @@ This Matlab function is accessible [[file:src/computeJacobian.m][here]].
|
|||||||
stewart.C = inv(stewart.K);
|
stewart.C = inv(stewart.K);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* Initialize the Geometry of the Mechanical Elements
|
||||||
|
** =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 (1,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
|
args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
|
args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Create the =struts= structure
|
||||||
|
#+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
|
||||||
|
|
||||||
|
** =initializeCylindricalPlatforms=: Initialize the geometry of the Fixed and Mobile Platforms
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:matlab+: :tangle src/initializeCylindricalPlatforms.m
|
||||||
|
:header-args:matlab+: :comments none :mkdirp yes :eval no
|
||||||
|
:END:
|
||||||
|
<<sec:initializeCylindricalPlatforms>>
|
||||||
|
|
||||||
|
This Matlab function is accessible [[file:src/initializeCylindricalPlatforms.m][here]].
|
||||||
|
|
||||||
|
*** Function description
|
||||||
|
#+begin_src matlab
|
||||||
|
function [stewart] = initializeCylindricalPlatforms(stewart, args)
|
||||||
|
% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
|
||||||
|
%
|
||||||
|
% Syntax: [stewart] = initializeCylindricalPlatforms(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args - Structure with the following fields:
|
||||||
|
% - Fpm [1x1] - Fixed Platform Mass [kg]
|
||||||
|
% - Fph [1x1] - Fixed Platform Height [m]
|
||||||
|
% - Fpr [1x1] - Fixed Platform Radius [m]
|
||||||
|
% - Mpm [1x1] - Mobile Platform Mass [kg]
|
||||||
|
% - Mph [1x1] - Mobile Platform Height [m]
|
||||||
|
% - Mpr [1x1] - Mobile Platform Radius [m]
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - stewart - updated Stewart structure with the added fields:
|
||||||
|
% - platforms [struct] - structure with the following fields:
|
||||||
|
% - Fpm [1x1] - Fixed Platform Mass [kg]
|
||||||
|
% - Msi [3x3] - Mobile Platform Inertia matrix [kg*m^2]
|
||||||
|
% - Fph [1x1] - Fixed Platform Height [m]
|
||||||
|
% - Fpr [1x1] - Fixed Platform Radius [m]
|
||||||
|
% - Mpm [1x1] - Mobile Platform Mass [kg]
|
||||||
|
% - Fsi [3x3] - Fixed Platform Inertia matrix [kg*m^2]
|
||||||
|
% - Mph [1x1] - Mobile Platform Height [m]
|
||||||
|
% - Mpr [1x1] - Mobile Platform Radius [m]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Optional Parameters
|
||||||
|
#+begin_src matlab
|
||||||
|
arguments
|
||||||
|
stewart
|
||||||
|
args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||||
|
args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||||
|
args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 125e-3
|
||||||
|
args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||||
|
args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||||
|
args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 100e-3
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Create the =platforms= struct
|
||||||
|
#+begin_src matlab
|
||||||
|
platforms = struct();
|
||||||
|
|
||||||
|
platforms.Fpm = args.Fpm;
|
||||||
|
platforms.Fph = args.Fph;
|
||||||
|
platforms.Fpr = args.Fpr;
|
||||||
|
platforms.Fpi = diag([1/12 * platforms.Fpm * (3*platforms.Fpr^2 + platforms.Fph^2), ...
|
||||||
|
1/12 * platforms.Fpm * (3*platforms.Fpr^2 + platforms.Fph^2), ...
|
||||||
|
1/2 * platforms.Fpm * platforms.Fpr^2]);
|
||||||
|
|
||||||
|
platforms.Mpm = args.Mpm;
|
||||||
|
platforms.Mph = args.Mph;
|
||||||
|
platforms.Mpr = args.Mpr;
|
||||||
|
platforms.Mpi = diag([1/12 * platforms.Mpm * (3*platforms.Mpr^2 + platforms.Mph^2), ...
|
||||||
|
1/12 * platforms.Mpm * (3*platforms.Mpr^2 + platforms.Mph^2), ...
|
||||||
|
1/2 * platforms.Mpm * platforms.Mpr^2]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Save the =platforms= struct
|
||||||
|
#+begin_src matlab
|
||||||
|
stewart.platforms = platforms;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* Utility Functions
|
* Utility Functions
|
||||||
** =inverseKinematics=: Compute Inverse Kinematics
|
** =inverseKinematics=: Compute Inverse Kinematics
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,53 @@
|
|||||||
|
function [stewart] = initializeCylindricalPlatforms(stewart, args)
|
||||||
|
% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms
|
||||||
|
%
|
||||||
|
% Syntax: [stewart] = initializeCylindricalPlatforms(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args - Structure with the following fields:
|
||||||
|
% - Fpm [1x1] - Fixed Platform Mass [kg]
|
||||||
|
% - Fph [1x1] - Fixed Platform Height [m]
|
||||||
|
% - Fpr [1x1] - Fixed Platform Radius [m]
|
||||||
|
% - Mpm [1x1] - Mobile Platform Mass [kg]
|
||||||
|
% - Mph [1x1] - Mobile Platform Height [m]
|
||||||
|
% - Mpr [1x1] - Mobile Platform Radius [m]
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - stewart - updated Stewart structure with the added fields:
|
||||||
|
% - platforms [struct] - structure with the following fields:
|
||||||
|
% - Fpm [1x1] - Fixed Platform Mass [kg]
|
||||||
|
% - Msi [3x3] - Mobile Platform Inertia matrix [kg*m^2]
|
||||||
|
% - Fph [1x1] - Fixed Platform Height [m]
|
||||||
|
% - Fpr [1x1] - Fixed Platform Radius [m]
|
||||||
|
% - Mpm [1x1] - Mobile Platform Mass [kg]
|
||||||
|
% - Fsi [3x3] - Fixed Platform Inertia matrix [kg*m^2]
|
||||||
|
% - Mph [1x1] - Mobile Platform Height [m]
|
||||||
|
% - Mpr [1x1] - Mobile Platform Radius [m]
|
||||||
|
|
||||||
|
arguments
|
||||||
|
stewart
|
||||||
|
args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||||
|
args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||||
|
args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 125e-3
|
||||||
|
args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||||
|
args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||||
|
args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 100e-3
|
||||||
|
end
|
||||||
|
|
||||||
|
platforms = struct();
|
||||||
|
|
||||||
|
platforms.Fpm = args.Fpm;
|
||||||
|
platforms.Fph = args.Fph;
|
||||||
|
platforms.Fpr = args.Fpr;
|
||||||
|
platforms.Fpi = diag([1/12 * platforms.Fpm * (3*platforms.Fpr^2 + platforms.Fph^2), ...
|
||||||
|
1/12 * platforms.Fpm * (3*platforms.Fpr^2 + platforms.Fph^2), ...
|
||||||
|
1/2 * platforms.Fpm * platforms.Fpr^2]);
|
||||||
|
|
||||||
|
platforms.Mpm = args.Mpm;
|
||||||
|
platforms.Mph = args.Mph;
|
||||||
|
platforms.Mpr = args.Mpr;
|
||||||
|
platforms.Mpi = diag([1/12 * platforms.Mpm * (3*platforms.Mpr^2 + platforms.Mph^2), ...
|
||||||
|
1/12 * platforms.Mpm * (3*platforms.Mpr^2 + platforms.Mph^2), ...
|
||||||
|
1/2 * platforms.Mpm * platforms.Mpr^2]);
|
||||||
|
|
||||||
|
stewart.platforms = platforms;
|
||||||
@@ -26,12 +26,12 @@ function [stewart] = initializeCylindricalStruts(stewart, args)
|
|||||||
|
|
||||||
arguments
|
arguments
|
||||||
stewart
|
stewart
|
||||||
args.Fsm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
args.Fsh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
args.Fsr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
args.Msm (6,1) double {mustBeNumeric, mustBePositive} = 0.1
|
args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 0.1
|
||||||
args.Msh (6,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3
|
||||||
args.Msr (6,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3
|
||||||
end
|
end
|
||||||
|
|
||||||
struts = struct();
|
struts = struct();
|
||||||
|
|||||||
Reference in New Issue
Block a user