Add model of the nano-hexapod
- STEPS files from SolidWorks - configurable APA, flexible joints, etc.
This commit is contained in:
142
src/initializeNanoHexapodFinal.m
Normal file
142
src/initializeNanoHexapodFinal.m
Normal file
@@ -0,0 +1,142 @@
|
||||
function [nano_hexapod] = initializeNanoHexapodFinal(args)
|
||||
|
||||
arguments
|
||||
%% Bottom Flexible Joints
|
||||
args.flex_bot_type char {mustBeMember(args.flex_bot_type,{'2dof', '3dof', '4dof', 'flexible'})} = '4dof'
|
||||
args.flex_bot_kRx (6,1) double {mustBeNumeric} = ones(6,1)*5 % X bending stiffness [Nm/rad]
|
||||
args.flex_bot_kRy (6,1) double {mustBeNumeric} = ones(6,1)*5 % Y bending stiffness [Nm/rad]
|
||||
args.flex_bot_kRz (6,1) double {mustBeNumeric} = ones(6,1)*260 % Torsionnal stiffness [Nm/rad]
|
||||
args.flex_bot_kz (6,1) double {mustBeNumeric} = ones(6,1)*1e8 % Axial Stiffness [N/m]
|
||||
args.flex_bot_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cz (6,1) double {mustBeNumeric} = ones(6,1)*1e2 % Axial Damping [N/(m/s)]
|
||||
%% Top Flexible Joints
|
||||
args.flex_top_type char {mustBeMember(args.flex_top_type,{'2dof', '3dof', '4dof', 'flexible'})} = '4dof'
|
||||
args.flex_top_kRx (6,1) double {mustBeNumeric} = ones(6,1)*5 % X bending stiffness [Nm/rad]
|
||||
args.flex_top_kRy (6,1) double {mustBeNumeric} = ones(6,1)*5 % Y bending stiffness [Nm/rad]
|
||||
args.flex_top_kRz (6,1) double {mustBeNumeric} = ones(6,1)*260 % Torsionnal stiffness [Nm/rad]
|
||||
args.flex_top_kz (6,1) double {mustBeNumeric} = ones(6,1)*1e8 % Axial Stiffness [N/m]
|
||||
args.flex_top_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_top_cz (6,1) double {mustBeNumeric} = ones(6,1)*1e2 % Axial Damping [N/(m/s)]
|
||||
%% Relative Motion Sensor
|
||||
args.motion_sensor_type char {mustBeMember(args.motion_sensor_type,{'struts', 'plates'})} = 'struts'
|
||||
%% Actuators
|
||||
args.actuator_type char {mustBeMember(args.actuator_type,{'2dof', 'flexible frame', 'flexible'})} = 'flexible'
|
||||
args.actuator_Ga (6,1) double {mustBeNumeric} = ones(6,1)*1 % Actuator gain [N/V]
|
||||
args.actuator_Gs (6,1) double {mustBeNumeric} = ones(6,1)*1 % Sensor gain [V/m]
|
||||
% For 2DoF
|
||||
args.actuator_k (6,1) double {mustBeNumeric} = ones(6,1)*0.35e6 % [N/m]
|
||||
args.actuator_ke (6,1) double {mustBeNumeric} = ones(6,1)*1.5e6 % [N/m]
|
||||
args.actuator_ka (6,1) double {mustBeNumeric} = ones(6,1)*43e6 % [N/m]
|
||||
args.actuator_c (6,1) double {mustBeNumeric} = ones(6,1)*3e1 % [N/(m/s)]
|
||||
args.actuator_ce (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % [N/(m/s)]
|
||||
args.actuator_ca (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % [N/(m/s)]
|
||||
args.actuator_Leq (6,1) double {mustBeNumeric} = ones(6,1)*0.056 % [m]
|
||||
% For Flexible Frame
|
||||
args.actuator_ks (6,1) double {mustBeNumeric} = ones(6,1)*235e6 % Stiffness of one stack [N/m]
|
||||
args.actuator_cs (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % Stiffness of one stack [N/m]
|
||||
% For Flexible
|
||||
args.actuator_xi (1,1) double {mustBeNumeric} = 0.01 % Sensor gain [V/m]
|
||||
end
|
||||
|
||||
nano_hexapod = struct();
|
||||
|
||||
nano_hexapod.flex_bot = struct();
|
||||
|
||||
switch args.flex_bot_type
|
||||
case '2dof'
|
||||
nano_hexapod.flex_bot.type = 1;
|
||||
case '3dof'
|
||||
nano_hexapod.flex_bot.type = 2;
|
||||
case '4dof'
|
||||
nano_hexapod.flex_bot.type = 3;
|
||||
case 'flexible'
|
||||
nano_hexapod.flex_bot.type = 4;
|
||||
end
|
||||
|
||||
nano_hexapod.flex_bot.kRx = args.flex_bot_kRx; % X bending stiffness [Nm/rad]
|
||||
nano_hexapod.flex_bot.kRy = args.flex_bot_kRy; % Y bending stiffness [Nm/rad]
|
||||
nano_hexapod.flex_bot.kRz = args.flex_bot_kRz; % Torsionnal stiffness [Nm/rad]
|
||||
nano_hexapod.flex_bot.kz = args.flex_bot_kz; % Axial stiffness [N/m]
|
||||
|
||||
nano_hexapod.flex_bot.cRx = args.flex_bot_cRx; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_bot.cRy = args.flex_bot_cRy; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_bot.cRz = args.flex_bot_cRz; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_bot.cz = args.flex_bot_cz; %[N/(m/s)]
|
||||
|
||||
nano_hexapod.flex_top = struct();
|
||||
|
||||
switch args.flex_top_type
|
||||
case '2dof'
|
||||
nano_hexapod.flex_top.type = 1;
|
||||
case '3dof'
|
||||
nano_hexapod.flex_top.type = 2;
|
||||
case '4dof'
|
||||
nano_hexapod.flex_top.type = 3;
|
||||
case 'flexible'
|
||||
nano_hexapod.flex_top.type = 4;
|
||||
end
|
||||
|
||||
nano_hexapod.flex_top.kRx = args.flex_top_kRx; % X bending stiffness [Nm/rad]
|
||||
nano_hexapod.flex_top.kRy = args.flex_top_kRy; % Y bending stiffness [Nm/rad]
|
||||
nano_hexapod.flex_top.kRz = args.flex_top_kRz; % Torsionnal stiffness [Nm/rad]
|
||||
nano_hexapod.flex_top.kz = args.flex_top_kz; % Axial stiffness [N/m]
|
||||
|
||||
nano_hexapod.flex_top.cRx = args.flex_top_cRx; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_top.cRy = args.flex_top_cRy; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_top.cRz = args.flex_top_cRz; % [Nm/(rad/s)]
|
||||
nano_hexapod.flex_top.cz = args.flex_top_cz; %[N/(m/s)]
|
||||
|
||||
nano_hexapod.motion_sensor = struct();
|
||||
|
||||
switch args.motion_sensor_type
|
||||
case 'struts'
|
||||
nano_hexapod.motion_sensor.type = 1;
|
||||
case 'plates'
|
||||
nano_hexapod.motion_sensor.type = 2;
|
||||
end
|
||||
|
||||
nano_hexapod.actuator = struct();
|
||||
|
||||
switch args.actuator_type
|
||||
case '2dof'
|
||||
nano_hexapod.actuator.type = 1;
|
||||
case 'flexible frame'
|
||||
nano_hexapod.actuator.type = 2;
|
||||
case 'flexible'
|
||||
nano_hexapod.actuator.type = 3;
|
||||
end
|
||||
|
||||
nano_hexapod.actuator.Ga = args.actuator_Ga; % Actuator gain [N/V]
|
||||
nano_hexapod.actuator.Gs = args.actuator_Gs; % Sensor gain [V/m]
|
||||
|
||||
nano_hexapod.actuator.k = args.actuator_k; % [N/m]
|
||||
nano_hexapod.actuator.ke = args.actuator_ke; % [N/m]
|
||||
nano_hexapod.actuator.ka = args.actuator_ka; % [N/m]
|
||||
|
||||
nano_hexapod.actuator.c = args.actuator_c; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ce = args.actuator_ce; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ca = args.actuator_ca; % [N/(m/s)]
|
||||
|
||||
nano_hexapod.actuator.Leq = args.actuator_Leq; % [m]
|
||||
|
||||
switch args.actuator_type
|
||||
case 'flexible frame'
|
||||
nano_hexapod.actuator.K = readmatrix('APA300ML_b_mat_K.CSV'); % Stiffness Matrix
|
||||
nano_hexapod.actuator.M = readmatrix('APA300ML_b_mat_M.CSV'); % Mass Matrix
|
||||
nano_hexapod.actuator.P = extractNodes('APA300ML_b_out_nodes_3D.txt'); % Node coordinates [m]
|
||||
case 'flexible'
|
||||
nano_hexapod.actuator.K = readmatrix('APA300ML_full_mat_K.CSV'); % Stiffness Matrix
|
||||
nano_hexapod.actuator.M = readmatrix('APA300ML_full_mat_M.CSV'); % Mass Matrix
|
||||
nano_hexapod.actuator.P = extractNodes('APA300ML_full_out_nodes_3D.txt'); % Node coordiantes [m]
|
||||
end
|
||||
|
||||
nano_hexapod.actuator.xi = args.actuator_xi; % Damping ratio
|
||||
|
||||
nano_hexapod.actuator.ks = args.actuator_ks; % Stiffness of one stack [N/m]
|
||||
nano_hexapod.actuator.cs = args.actuator_cs; % Damping of one stack [N/m]
|
||||
|
||||
save('./mat/stages.mat', 'nano_hexapod', '-append');
|
Reference in New Issue
Block a user