Add reference subsystems for struts and platforms
This commit is contained in:
parent
1ad2e58d22
commit
45471fc497
@ -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:
|
||||||
|
BIN
simscape_subsystems/Fixed_Based.slx
Normal file
BIN
simscape_subsystems/Fixed_Based.slx
Normal file
Binary file not shown.
BIN
simscape_subsystems/Mobile_Platform.slx
Normal file
BIN
simscape_subsystems/Mobile_Platform.slx
Normal file
Binary file not shown.
BIN
simscape_subsystems/Stewart_Platform.slx
Normal file
BIN
simscape_subsystems/Stewart_Platform.slx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
simulink/stewart_platform_tests.slx
Normal file
BIN
simulink/stewart_platform_tests.slx
Normal file
Binary file not shown.
Binary file not shown.
53
src/initializeCylindricalPlatforms.m
Normal file
53
src/initializeCylindricalPlatforms.m
Normal file
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user