diff --git a/docs/dynamics-study.html b/docs/dynamics-study.html index 4d4564b..53873d0 100644 --- a/docs/dynamics-study.html +++ b/docs/dynamics-study.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +open('stewart_platform_dynamics.slx')
-
-stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart); +stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); +stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p'); stewart = initializeCylindricalPlatforms(stewart); stewart = initializeCylindricalStruts(stewart); stewart = computeJacobian(stewart); stewart = initializeStewartPose(stewart); +stewart = initializeInertialSensor(stewart, 'type', 'none'); ++
ground = initializeGround('type', 'none'); +payload = initializePayload('type', 'none');
-Estimation of the transfer function from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\): +Estimation of the transfer function from \(\bm{\tau}\) to \(\mathcal{\bm{X}}\):
%% Options for Linearized @@ -320,33 +322,12 @@ options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; +mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/X'], 1, 'openoutput'); io_i = io_i + 1; - -%% Run the linearization -G = linearize(mdl, io, options); -G.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; -G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; --
%% Options for Linearized -options = linearizeOptions; -options.SampleTime = 0; - -%% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; - -%% Input/Output definition -clear io; io_i = 1; -io(io_i) = linio([mdl, '/J-T'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/X'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] +io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A} %% Run the linearization G = linearize(mdl, io, options); @@ -356,28 +337,19 @@ G.OutputName = {'Edx',
G_cart = minreal(G*inv(stewart.J')); -G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; +Gc = minreal(G*inv(stewart.kinematics.J')); +Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
+Estimation of the transfer function from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\): +
figure; bode(G, G_cart)
-
-%% Options for Linearized -options = linearizeOptions; -options.SampleTime = 0; - -%% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; - -%% Input/Output definition +%% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Fext'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/X'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext'); io_i = io_i + 1; % External forces/torques applied on {B} +io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A} %% Run the linearization Gd = linearize(mdl, io, options); @@ -385,38 +357,22 @@ Gd.InputName = {'Fex', 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
freqs = logspace(0, 3, 1000);
-
-figure;
-bode(Gd, G)
-
--Initialization of the Stewart platform. +We redo the identification for when the Stewart platform is on a flexible support.
stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart); -stewart = generateGeneralConfiguration(stewart); -stewart = computeJointsPose(stewart); -stewart = initializeStrutDynamics(stewart); -stewart = initializeCylindricalPlatforms(stewart); -stewart = initializeCylindricalStruts(stewart); -stewart = computeJacobian(stewart); -stewart = initializeStewartPose(stewart); +ground = initializeGround('type', 'flexible');
-Estimation of the transfer function from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\): +Estimation of the transfer function from \(\bm{\tau}\) to \(\mathcal{\bm{X}}\):
%% Options for Linearized @@ -424,35 +380,34 @@ options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; +mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/X'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] +io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A} %% Run the linearization G = linearize(mdl, io, options); -G.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; +G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
Gc = minreal(G*inv(stewart.kinematics.J')); +Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; ++
-Estimation of the transfer function from \(\mathcal{\bm{F}}_{d}\) to \(\mathcal{\bm{X}}\): +Estimation of the transfer function from \(\bm{\mathcal{F}}_{\text{ext}}\) to \(\mathcal{\bm{X}}\):
%% Options for Linearized -options = linearizeOptions; -options.SampleTime = 0; - -%% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; - -%% Input/Output definition +%% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Fext'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/X'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'F_ext'); io_i = io_i + 1; % External forces/torques applied on {B} +io(io_i) = linio([mdl, '/Relative Motion Sensor'], 1, 'openoutput'); io_i = io_i + 1; % Position/Orientation of {B} w.r.t. {A} %% Run the linearization Gd = linearize(mdl, io, options); @@ -460,43 +415,50 @@ Gd.InputName = {'Fex', 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
-Comparison of the two transfer function matrices. -
-freqs = logspace(0, 4, 1000);
-
-figure;
-bode(Gd, G, freqs)
-
+-Seems quite similar. +The transfer function from forces/torques applied by the actuators on the payload \(\bm{\mathcal{F}} = \bm{J}^T \bm{\tau}\) to the pose of the mobile platform \(\bm{\mathcal{X}}\) is the same as the transfer function from external forces/torques to \(\bm{\mathcal{X}}\) as long as the Stewart platform’s base is fixed.
Initialization of the Stewart platform.
stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart); +stewart = initializeFramesPositions(stewart, 'H', 90e-3, 'MO_B', 45e-3); stewart = generateGeneralConfiguration(stewart); stewart = computeJointsPose(stewart); stewart = initializeStrutDynamics(stewart); +stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p'); stewart = initializeCylindricalPlatforms(stewart); stewart = initializeCylindricalStruts(stewart); stewart = computeJacobian(stewart); stewart = initializeStewartPose(stewart); +stewart = initializeInertialSensor(stewart, 'type', 'none'); ++
ground = initializeGround('type', 'none'); +payload = initializePayload('type', 'none');
Gc = minreal(G*inv(stewart.kinematics.J')); +Gc.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; ++
Let’s first look at the low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\).
@@ -544,57 +517,57 @@ Let’s first look at the low frequency transfer function matrix from \(\matThe low frequency transfer function matrix from \(\mathcal{\bm{F}}\) to \(\mathcal{\bm{X}}\) corresponds to the compliance matrix of the Stewart platform.
--Initialization of the Stewart platform. -
-stewart = initializeStewartPlatform(); -stewart = initializeFramesPositions(stewart); -stewart = generateGeneralConfiguration(stewart); -stewart = computeJointsPose(stewart); -stewart = initializeStrutDynamics(stewart); -stewart = initializeCylindricalPlatforms(stewart); -stewart = initializeCylindricalStruts(stewart); -stewart = computeJacobian(stewart); -stewart = initializeStewartPose(stewart); --
-Estimation of the transfer function from \(\bm{\tau}\) to \(\bm{L}\): -
-%% Options for Linearized -options = linearizeOptions; -options.SampleTime = 0; - -%% Name of the Simulink File -mdl = 'stewart_platform_dynamics'; - -%% Input/Output definition -clear io; io_i = 1; -io(io_i) = linio([mdl, '/J-T'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/L'], 1, 'openoutput'); io_i = io_i + 1; - -%% Run the linearization -G = linearize(mdl, io, options); -G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; -G.OutputName = {'L1', 'L2', 'L3', 'L4', 'L5', 'L6'}; --
freqs = logspace(1, 3, 1000); -figure; bode(G, 2*pi*freqs) --
bodeFig({G(1,1), G(1,2)}, freqs, struct('phase', true)); -
Created: 2020-02-11 mar. 17:52
+Created: 2020-02-13 jeu. 15:19