Add Disturbances and Reference initialization

This commit is contained in:
Thomas Dehaeze 2020-03-11 18:58:35 +01:00
parent d87701c3ad
commit 0aad830597
5 changed files with 186 additions and 6 deletions

Binary file not shown.

View File

@ -118,14 +118,13 @@ As always, the parameters that define the geometry are taken from the =stewart=
* Subsystem - Struts
<<sec:struts>>
** Strut Configuration
For the Stewart platform, the 6 struts are identical.
Thus, all the struts used in the Stewart platform are referring to the same subsystem called =stewart_strut.slx= and shown in Figure [[fig:simscape_strut]].
This strut as the following structure:
- *Universal Joint** connected on the Fixed base
- *Prismatic Joint** for the actuator
- *Spherical Joint** connected on the Mobile platform
This strut has the following structure:
- *Universal Joint* connected on the Fixed base
- *Prismatic Joint* for the actuator
- *Spherical Joint* connected on the Mobile platform
This configuration is called *UPS*.
@ -310,3 +309,127 @@ This Matlab function is accessible [[file:../src/initializeGround.m][here]].
#+begin_src matlab
ground.rot_point = args.rot_point;
#+end_src
* Initialize Disturbances
:PROPERTIES:
:header-args:matlab+: :tangle ../src/initializeDisturbances.m
:header-args:matlab+: :comments none :mkdirp yes
:header-args:matlab+: :eval no :results none
:END:
<<sec:initializeDisturbances>>
** Function Declaration and Documentation
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
function [disturbances] = initializeDisturbances(args)
% initializeDisturbances - Initialize the disturbances
%
% Syntax: [disturbances] = initializeDisturbances(args)
%
% Inputs:
% - args -
#+end_src
** Optional Parameters
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
arguments
args.Fd double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Fd_t double {mustBeNumeric, mustBeReal} = 0
args.Dw double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Dw_t double {mustBeNumeric, mustBeReal} = 0
end
#+end_src
** Structure initialization
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
disturbances = struct();
#+end_src
** Ground Motion
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
disturbances.Dw = timeseries([args.Dw], args.Dw_t);
#+end_src
** Direct Forces
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
disturbances.Fd = timeseries([args.Fd], args.Fd_t);
#+end_src
* Initialize References
:PROPERTIES:
:header-args:matlab+: :tangle ../src/initializeReferences.m
:header-args:matlab+: :comments none :mkdirp yes
:header-args:matlab+: :eval no :results none
:END:
<<sec:initializeReferences>>
** Function Declaration and Documentation
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
function [references] = initializeReferences(stewart, args)
% initializeReferences - Initialize the references
%
% Syntax: [references] = initializeReferences(args)
%
% Inputs:
% - args -
#+end_src
** Optional Parameters
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
arguments
stewart
args.t double {mustBeNumeric, mustBeReal} = 0
args.r double {mustBeNumeric, mustBeReal} = zeros(6, 1)
end
#+end_src
** Compute the corresponding strut length
#+begin_src matlab
rL = zeros(6, length(args.t));
for i = 1:length(args.t)
R = [cos(args.r(6,i)) -sin(args.r(6,i)) 0;
sin(args.r(6,i)) cos(args.r(6,i)) 0;
0 0 1] * ...
[cos(args.r(5,i)) 0 sin(args.r(5,i));
0 1 0;
-sin(args.r(5,i)) 0 cos(args.r(5,i))] * ...
[1 0 0;
0 cos(args.r(4,i)) -sin(args.r(4,i));
0 sin(args.r(4,i)) cos(args.r(4,i))];
[Li, dLi] = inverseKinematics(stewart, 'AP', [args.r(1,i); args.r(2,i); args.r(3,i)], 'ARB', R);
rL(:, i) = dLi;
end
#+end_src
** References
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
references.r = timeseries(args.r, args.t);
references.rL = timeseries(rL, args.t);
#+end_src

View File

@ -7,7 +7,7 @@ function [controller] = initializeController(args)
% - args - Can have the following fields:
arguments
args.type char {mustBeMember(args.type, {'open-loop', 'iff', 'dvf', 'hac-iff', 'hac-dvf'})} = 'open-loop'
args.type char {mustBeMember(args.type, {'open-loop', 'iff', 'dvf', 'hac-iff', 'hac-dvf', 'ref-track-L', 'ref-track-X'})} = 'open-loop'
end
controller = struct();
@ -23,4 +23,8 @@ switch args.type
controller.type = 3;
case 'hac-dvf'
controller.type = 4;
case 'ref-track-L'
controller.type = 5;
case 'ref-track-X'
controller.type = 6;
end

View File

@ -0,0 +1,20 @@
function [disturbances] = initializeDisturbances(args)
% initializeDisturbances - Initialize the disturbances
%
% Syntax: [disturbances] = initializeDisturbances(args)
%
% Inputs:
% - args -
arguments
args.Fd double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Fd_t double {mustBeNumeric, mustBeReal} = 0
args.Dw double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Dw_t double {mustBeNumeric, mustBeReal} = 0
end
disturbances = struct();
disturbances.Dw = timeseries([args.Dw], args.Dw_t);
disturbances.Fd = timeseries([args.Fd], args.Fd_t);

View File

@ -0,0 +1,33 @@
function [references] = initializeReferences(stewart, args)
% initializeReferences - Initialize the references
%
% Syntax: [references] = initializeReferences(args)
%
% Inputs:
% - args -
arguments
stewart
args.t double {mustBeNumeric, mustBeReal} = 0
args.r double {mustBeNumeric, mustBeReal} = zeros(6, 1)
end
rL = zeros(6, length(args.t));
for i = 1:length(args.t)
R = [cos(args.r(6,i)) -sin(args.r(6,i)) 0;
sin(args.r(6,i)) cos(args.r(6,i)) 0;
0 0 1] * ...
[cos(args.r(5,i)) 0 sin(args.r(5,i));
0 1 0;
-sin(args.r(5,i)) 0 cos(args.r(5,i))] * ...
[1 0 0;
0 cos(args.r(4,i)) -sin(args.r(4,i));
0 sin(args.r(4,i)) cos(args.r(4,i))];
[Li, dLi] = inverseKinematics(stewart, 'AP', [args.r(1,i); args.r(2,i); args.r(3,i)], 'ARB', R);
rL(:, i) = dLi;
end
references.r = timeseries(args.r, args.t);
references.rL = timeseries(rL, args.t);