Compute sensor/actuator constants

This commit is contained in:
2021-06-07 18:43:02 +02:00
parent fe52c24729
commit e051f58428
52 changed files with 12501 additions and 1194 deletions

View File

@@ -0,0 +1,98 @@
function [actuator] = initializeAPA(args)
% initializeAPA -
%
% Syntax: [actuator] = initializeAPA(args)
%
% Inputs:
% - args -
%
% Outputs:
% - actuator -
arguments
args.type char {mustBeMember(args.type,{'2dof', 'flexible frame', 'flexible'})} = '2dof'
args.Ga (1,1) double {mustBeNumeric} = 0
args.Gs (1,1) double {mustBeNumeric} = 0
% For 2DoF
args.k (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.35e6
args.ke (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*1.5e6
args.ka (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*43e6
args.c (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*3e1
args.ce (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*2e1
args.ca (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*2e1
args.Leq (6,1) double {mustBeNumeric} = ones(6,1)*0.056
% Force Flexible APA
args.xi (1,1) double {mustBeNumeric, mustBePositive} = 0.5
% For Flexible Frame
args.ks (1,1) double {mustBeNumeric, mustBePositive} = 235e6
args.cs (1,1) double {mustBeNumeric, mustBePositive} = 1e1
end
actuator = struct();
switch args.type
case '2dof'
actuator.type = 1;
case 'flexible frame'
actuator.type = 2;
case 'flexible'
actuator.type = 3;
end
if args.Ga == 0
switch args.type
case '2dof'
actuator.Ga = -46.4;
case 'flexible frame'
actuator.Ga = 1; % TODO
case 'flexible'
actuator.Ga = 23.4;
end
else
actuator.Ga = args.Ga; % Actuator gain [N/V]
end
if args.Gs == 0
switch args.type
case '2dof'
actuator.Gs = 0.098;
case 'flexible frame'
actuator.Gs = 1; % TODO
case 'flexible'
actuator.Gs = -4674824;
end
else
actuator.Gs = args.Gs; % Sensor gain [V/m]
end
actuator.k = args.k; % [N/m]
actuator.ke = args.ke; % [N/m]
actuator.ka = args.ka; % [N/m]
actuator.c = args.c; % [N/(m/s)]
actuator.ce = args.ce; % [N/(m/s)]
actuator.ca = args.ca; % [N/(m/s)]
actuator.Leq = args.Leq; % [m]
switch args.type
case 'flexible frame'
actuator.K = readmatrix('APA300ML_b_mat_K.CSV'); % Stiffness Matrix
actuator.M = readmatrix('APA300ML_b_mat_M.CSV'); % Mass Matrix
actuator.P = extractNodes('APA300ML_b_out_nodes_3D.txt'); % Node coordinates [m]
case 'flexible'
actuator.K = readmatrix('full_APA300ML_K.CSV'); % Stiffness Matrix
actuator.M = readmatrix('full_APA300ML_M.CSV'); % Mass Matrix
actuator.P = extractNodes('full_APA300ML_out_nodes_3D.txt'); % Node coordiantes [m]
end
actuator.xi = args.xi; % Damping ratio
actuator.ks = args.ks; % Stiffness of one stack [N/m]
actuator.cs = args.cs; % Damping of one stack [N/m]

View File

@@ -0,0 +1,45 @@
function [flex_bot] = initializeBotFlexibleJoint(args)
% initializeBotFlexibleJoint -
%
% Syntax: [flex_bot] = initializeBotFlexibleJoint(args)
%
% Inputs:
% - args -
%
% Outputs:
% - flex_bot -
arguments
args.type char {mustBeMember(args.type,{'2dof', '3dof', '4dof'})} = '2dof'
args.kRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*5
args.kRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*5
args.kRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*260
args.kz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*1e8
args.cRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*1e2
end
flex_bot = struct();
switch args.type
case '2dof'
flex_bot.type = 1;
case '3dof'
flex_bot.type = 2;
case '4dof'
flex_bot.type = 3;
end
flex_bot.kRx = args.kRx;
flex_bot.kRy = args.kRy;
flex_bot.kRz = args.kRz;
flex_bot.kz = args.kz;
flex_bot.cRx = args.cRx;
flex_bot.cRy = args.cRy;
flex_bot.cRz = args.cRz;
flex_bot.cz = args.cz;

View File

@@ -0,0 +1,45 @@
function [flex_top] = initializeTopFlexibleJoint(args)
% initializeTopFlexibleJoint -
%
% Syntax: [flex_top] = initializeTopFlexibleJoint(args)
%
% Inputs:
% - args -
%
% Outputs:
% - flex_top -
arguments
args.type char {mustBeMember(args.type,{'2dof', '3dof', '4dof'})} = '2dof'
args.kRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*5
args.kRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*5
args.kRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*260
args.kz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*1e8
args.cRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*0.1
args.cz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)*1e2
end
flex_top = struct();
switch args.type
case '2dof'
flex_top.type = 1;
case '3dof'
flex_top.type = 2;
case '4dof'
flex_top.type = 3;
end
flex_top.kRx = args.kRx;
flex_top.kRy = args.kRy;
flex_top.kRz = args.kRz;
flex_top.kz = args.kz;
flex_top.cRx = args.cRx;
flex_top.cRy = args.cRy;
flex_top.cRz = args.cRz;
flex_top.cz = args.cz;