49 lines
1.4 KiB
Mathematica
49 lines
1.4 KiB
Mathematica
|
function [stewart] = initializeInertialSensor(stewart, args)
|
||
|
% initializeInertialSensor - Initialize the inertial sensor in each strut
|
||
|
%
|
||
|
% Syntax: [stewart] = initializeInertialSensor(args)
|
||
|
%
|
||
|
% Inputs:
|
||
|
% - args - Structure with the following fields:
|
||
|
% - type - 'geophone', 'accelerometer', 'none'
|
||
|
% - mass [1x1] - Weight of the inertial mass [kg]
|
||
|
% - freq [1x1] - Cutoff frequency [Hz]
|
||
|
%
|
||
|
% Outputs:
|
||
|
% - stewart - updated Stewart structure with the added fields:
|
||
|
% - stewart.sensors.inertial
|
||
|
% - type - 1 (geophone), 2 (accelerometer), 3 (none)
|
||
|
% - K [1x1] - Stiffness [N/m]
|
||
|
% - C [1x1] - Damping [N/(m/s)]
|
||
|
% - M [1x1] - Inertial Mass [kg]
|
||
|
% - G [1x1] - Gain
|
||
|
|
||
|
arguments
|
||
|
stewart
|
||
|
args.type char {mustBeMember(args.type,{'geophone', 'accelerometer', 'none'})} = 'none'
|
||
|
args.mass (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e-2
|
||
|
args.freq (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e3
|
||
|
end
|
||
|
|
||
|
sensor = struct();
|
||
|
|
||
|
switch args.type
|
||
|
case 'geophone'
|
||
|
sensor.type = 1;
|
||
|
|
||
|
sensor.M = args.mass;
|
||
|
sensor.K = sensor.M * (2*pi*args.freq)^2;
|
||
|
sensor.C = 2*sqrt(sensor.M * sensor.K);
|
||
|
case 'accelerometer'
|
||
|
sensor.type = 2;
|
||
|
|
||
|
sensor.M = args.mass;
|
||
|
sensor.K = sensor.M * (2*pi*args.freq)^2;
|
||
|
sensor.C = 2*sqrt(sensor.M * sensor.K);
|
||
|
sensor.G = -sensor.K/sensor.M;
|
||
|
case 'none'
|
||
|
sensor.type = 3;
|
||
|
end
|
||
|
|
||
|
stewart.sensors.inertial = sensor;
|