From 7accbd28555e85cd341c0caf43387f2d3429239c Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Fri, 7 Feb 2025 18:00:49 +0100 Subject: [PATCH] Add Simscape model --- matlab/nano_hexapod_model.slx | Bin 0 -> 73319 bytes matlab/src/computeJacobian.m | 37 + matlab/src/computeJointsPose.m | 80 + matlab/src/describeStewartPlatform.m | 77 + matlab/src/displayArchitecture.m | 240 +++ matlab/src/generateGeneralConfiguration.m | 41 + matlab/src/initializeController.m | 45 + matlab/src/initializeCylindricalPlatforms.m | 61 + matlab/src/initializeCylindricalStruts.m | 50 + matlab/src/initializeFramesPositions.m | 37 + matlab/src/initializeJointDynamics.m | 129 ++ matlab/src/initializeLoggingConfiguration.m | 33 + matlab/src/initializeSample.m | 38 + matlab/src/initializeSimplifiedNanoHexapod.m | 141 ++ matlab/src/initializeStewartPlatform.m | 33 + matlab/src/initializeStewartPose.m | 29 + matlab/src/initializeStrutDynamics.m | 54 + matlab/src/inverseKinematics.m | 38 + matlab/subsystems/Fixed_Based.slx | Bin 0 -> 40177 bytes matlab/subsystems/Mobile_Platform.slx | Bin 0 -> 42197 bytes matlab/subsystems/Stewart_Platform.slx | Bin 0 -> 48531 bytes matlab/subsystems/metrology_6dof.slx | Bin 0 -> 40379 bytes matlab/subsystems/stewart_strut.slx | Bin 0 -> 54735 bytes simscape-nano-hexapod.org | 1429 +++++++++++++++++- 24 files changed, 2589 insertions(+), 3 deletions(-) create mode 100644 matlab/nano_hexapod_model.slx create mode 100644 matlab/src/computeJacobian.m create mode 100644 matlab/src/computeJointsPose.m create mode 100644 matlab/src/describeStewartPlatform.m create mode 100644 matlab/src/displayArchitecture.m create mode 100644 matlab/src/generateGeneralConfiguration.m create mode 100644 matlab/src/initializeController.m create mode 100644 matlab/src/initializeCylindricalPlatforms.m create mode 100644 matlab/src/initializeCylindricalStruts.m create mode 100644 matlab/src/initializeFramesPositions.m create mode 100644 matlab/src/initializeJointDynamics.m create mode 100644 matlab/src/initializeLoggingConfiguration.m create mode 100644 matlab/src/initializeSample.m create mode 100644 matlab/src/initializeSimplifiedNanoHexapod.m create mode 100644 matlab/src/initializeStewartPlatform.m create mode 100644 matlab/src/initializeStewartPose.m create mode 100644 matlab/src/initializeStrutDynamics.m create mode 100644 matlab/src/inverseKinematics.m create mode 100644 matlab/subsystems/Fixed_Based.slx create mode 100644 matlab/subsystems/Mobile_Platform.slx create mode 100644 matlab/subsystems/Stewart_Platform.slx create mode 100644 matlab/subsystems/metrology_6dof.slx create mode 100644 matlab/subsystems/stewart_strut.slx diff --git a/matlab/nano_hexapod_model.slx b/matlab/nano_hexapod_model.slx new file mode 100644 index 0000000000000000000000000000000000000000..4e8e0fdf6f8ee54b98f827adfb59b490cd10a72c GIT binary patch literal 73319 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 RjkXDXDPdi^uzY43{U2y=se}Lk literal 0 HcmV?d00001 diff --git a/matlab/src/computeJacobian.m b/matlab/src/computeJacobian.m new file mode 100644 index 0000000..6adaa7f --- /dev/null +++ b/matlab/src/computeJacobian.m @@ -0,0 +1,37 @@ +function [stewart] = computeJacobian(stewart) +% computeJacobian - +% +% Syntax: [stewart] = computeJacobian(stewart) +% +% Inputs: +% - stewart - With at least the following fields: +% - geometry.As [3x6] - The 6 unit vectors for each strut expressed in {A} +% - geometry.Ab [3x6] - The 6 position of the joints bi expressed in {A} +% - actuators.K [6x1] - Total stiffness of the actuators +% +% Outputs: +% - stewart - With the 3 added field: +% - geometry.J [6x6] - The Jacobian Matrix +% - geometry.K [6x6] - The Stiffness Matrix +% - geometry.C [6x6] - The Compliance Matrix + + assert(isfield(stewart.geometry, 'As'), 'stewart.geometry should have attribute As') + As = stewart.geometry.As; + + assert(isfield(stewart.geometry, 'Ab'), 'stewart.geometry should have attribute Ab') + Ab = stewart.geometry.Ab; + + assert(isfield(stewart.actuators, 'k'), 'stewart.actuators should have attribute k') + Ki = stewart.actuators.k; + + J = [As' , cross(Ab, As)']; + + K = J'*diag(Ki)*J; + + C = inv(K); + + stewart.geometry.J = J; + stewart.geometry.K = K; + stewart.geometry.C = C; + +end diff --git a/matlab/src/computeJointsPose.m b/matlab/src/computeJointsPose.m new file mode 100644 index 0000000..904f37a --- /dev/null +++ b/matlab/src/computeJointsPose.m @@ -0,0 +1,80 @@ +function [stewart] = computeJointsPose(stewart) +% computeJointsPose - +% +% Syntax: [stewart] = computeJointsPose(stewart) +% +% Inputs: +% - stewart - A structure with the following fields +% - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} +% - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} +% - platform_F.FO_A [3x1] - Position of {A} with respect to {F} +% - platform_M.MO_B [3x1] - Position of {B} with respect to {M} +% - geometry.FO_M [3x1] - Position of {M} with respect to {F} +% +% Outputs: +% - stewart - A structure with the following added fields +% - geometry.Aa [3x6] - The i'th column is the position of ai with respect to {A} +% - geometry.Ab [3x6] - The i'th column is the position of bi with respect to {A} +% - geometry.Ba [3x6] - The i'th column is the position of ai with respect to {B} +% - geometry.Bb [3x6] - The i'th column is the position of bi with respect to {B} +% - geometry.l [6x1] - The i'th element is the initial length of strut i +% - geometry.As [3x6] - The i'th column is the unit vector of strut i expressed in {A} +% - geometry.Bs [3x6] - The i'th column is the unit vector of strut i expressed in {B} +% - struts_F.l [6x1] - Length of the Fixed part of the i'th strut +% - struts_M.l [6x1] - Length of the Mobile part of the i'th strut +% - platform_F.FRa [3x3x6] - The i'th 3x3 array is the rotation matrix to orientate the bottom of the i'th strut from {F} +% - platform_M.MRb [3x3x6] - The i'th 3x3 array is the rotation matrix to orientate the top of the i'th strut from {M} + + assert(isfield(stewart.platform_F, 'Fa'), 'stewart.platform_F should have attribute Fa') + Fa = stewart.platform_F.Fa; + + assert(isfield(stewart.platform_M, 'Mb'), 'stewart.platform_M should have attribute Mb') + Mb = stewart.platform_M.Mb; + + assert(isfield(stewart.platform_F, 'FO_A'), 'stewart.platform_F should have attribute FO_A') + FO_A = stewart.platform_F.FO_A; + + assert(isfield(stewart.platform_M, 'MO_B'), 'stewart.platform_M should have attribute MO_B') + MO_B = stewart.platform_M.MO_B; + + assert(isfield(stewart.geometry, 'FO_M'), 'stewart.geometry should have attribute FO_M') + FO_M = stewart.geometry.FO_M; + + Aa = Fa - repmat(FO_A, [1, 6]); + Bb = Mb - repmat(MO_B, [1, 6]); + + Ab = Bb - repmat(-MO_B-FO_M+FO_A, [1, 6]); + Ba = Aa - repmat( MO_B+FO_M-FO_A, [1, 6]); + + As = (Ab - Aa)./vecnorm(Ab - Aa); % As_i is the i'th vector of As + + l = vecnorm(Ab - Aa)'; + + Bs = (Bb - Ba)./vecnorm(Bb - Ba); + + FRa = zeros(3,3,6); + MRb = zeros(3,3,6); + + for i = 1:6 + FRa(:,:,i) = [cross([0;1;0], As(:,i)) , cross(As(:,i), cross([0;1;0], As(:,i))) , As(:,i)]; + FRa(:,:,i) = FRa(:,:,i)./vecnorm(FRa(:,:,i)); + + MRb(:,:,i) = [cross([0;1;0], Bs(:,i)) , cross(Bs(:,i), cross([0;1;0], Bs(:,i))) , Bs(:,i)]; + MRb(:,:,i) = MRb(:,:,i)./vecnorm(MRb(:,:,i)); + end + + stewart.geometry.Aa = Aa; + stewart.geometry.Ab = Ab; + stewart.geometry.Ba = Ba; + stewart.geometry.Bb = Bb; + stewart.geometry.As = As; + stewart.geometry.Bs = Bs; + stewart.geometry.l = l; + + stewart.struts_F.l = l/2; + stewart.struts_M.l = l/2; + + stewart.platform_F.FRa = FRa; + stewart.platform_M.MRb = MRb; + +end diff --git a/matlab/src/describeStewartPlatform.m b/matlab/src/describeStewartPlatform.m new file mode 100644 index 0000000..14dd29e --- /dev/null +++ b/matlab/src/describeStewartPlatform.m @@ -0,0 +1,77 @@ +function [] = describeStewartPlatform(stewart) +% describeStewartPlatform - Display some text describing the current defined Stewart Platform +% +% Syntax: [] = describeStewartPlatform(args) +% +% Inputs: +% - stewart +% +% Outputs: + +arguments + stewart +end + +fprintf('GEOMETRY:\n') +fprintf('- The height between the fixed based and the top platform is %.3g [mm].\n', 1e3*stewart.geometry.H) + +if stewart.platform_M.MO_B(3) > 0 + fprintf('- Frame {A} is located %.3g [mm] above the top platform.\n', 1e3*stewart.platform_M.MO_B(3)) +else + fprintf('- Frame {A} is located %.3g [mm] below the top platform.\n', - 1e3*stewart.platform_M.MO_B(3)) +end + +fprintf('- The initial length of the struts are:\n') +fprintf('\t %.3g, %.3g, %.3g, %.3g, %.3g, %.3g [mm]\n', 1e3*stewart.geometry.l) +fprintf('\n') + +fprintf('ACTUATORS:\n') +if stewart.actuators.type == 1 + fprintf('- The actuators are modelled as 1DoF.\n') + fprintf('- The Stiffness and Damping of each actuators is:\n') + fprintf('\t k = %.0e [N/m] \t c = %.0e [N/(m/s)]\n', stewart.actuators.K(1), stewart.actuators.C(1)) +elseif stewart.actuators.type == 2 + fprintf('- The actuators are modelled as 2DoF (APA).\n') + fprintf('- The vertical stiffness and damping contribution of the piezoelectric stack is:\n') + fprintf('\t ka = %.0e [N/m] \t ca = %.0e [N/(m/s)]\n', stewart.actuators.Ka(1), stewart.actuators.Ca(1)) + fprintf('- Vertical stiffness when the piezoelectric stack is removed is:\n') + fprintf('\t kr = %.0e [N/m] \t cr = %.0e [N/(m/s)]\n', stewart.actuators.Kr(1), stewart.actuators.Cr(1)) +elseif stewart.actuators.type == 3 + fprintf('- The actuators are modelled with a flexible element (FEM).\n') +end +fprintf('\n') + +fprintf('JOINTS:\n') + +switch stewart.joints_F.type + case 1 + fprintf('- The joints on the fixed based are universal joints (2DoF)\n') + case 2 + fprintf('- The joints on the fixed based are spherical joints (3DoF)\n') +end + +switch stewart.joints_M.type + case 1 + fprintf('- The joints on the mobile based are universal joints (2DoF)\n') + case 2 + fprintf('- The joints on the mobile based are spherical joints (3DoF)\n') +end + +fprintf('- The position of the joints on the fixed based with respect to {F} are (in [mm]):\n') +fprintf('\t % .3g \t % .3g \t % .3g\n', 1e3*stewart.platform_F.Fa) + +fprintf('- The position of the joints on the mobile based with respect to {M} are (in [mm]):\n') +fprintf('\t % .3g \t % .3g \t % .3g\n', 1e3*stewart.platform_M.Mb) +fprintf('\n') + +fprintf('KINEMATICS:\n') + +if isfield(stewart.kinematics, 'K') + fprintf('- The Stiffness matrix K is (in [N/m]):\n') + fprintf('\t % .0e \t % .0e \t % .0e \t % .0e \t % .0e \t % .0e\n', stewart.kinematics.K) +end + +if isfield(stewart.kinematics, 'C') + fprintf('- The Damping matrix C is (in [m/N]):\n') + fprintf('\t % .0e \t % .0e \t % .0e \t % .0e \t % .0e \t % .0e\n', stewart.kinematics.C) +end diff --git a/matlab/src/displayArchitecture.m b/matlab/src/displayArchitecture.m new file mode 100644 index 0000000..f8d9012 --- /dev/null +++ b/matlab/src/displayArchitecture.m @@ -0,0 +1,240 @@ +function [] = displayArchitecture(stewart, args) +% displayArchitecture - 3D plot of the Stewart platform architecture +% +% Syntax: [] = displayArchitecture(args) +% +% Inputs: +% - stewart +% - args - Structure with the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% - F_color [color] - Color used for the Fixed elements +% - M_color [color] - Color used for the Mobile elements +% - L_color [color] - Color used for the Legs elements +% - frames [true/false] - Display the Frames +% - legs [true/false] - Display the Legs +% - joints [true/false] - Display the Joints +% - labels [true/false] - Display the Labels +% - platforms [true/false] - Display the Platforms +% - views ['all', 'xy', 'yz', 'xz', 'default'] - +% +% Outputs: + +arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + args.F_color = [0 0.4470 0.7410] + args.M_color = [0.8500 0.3250 0.0980] + args.L_color = [0 0 0] + args.frames logical {mustBeNumericOrLogical} = true + args.legs logical {mustBeNumericOrLogical} = true + args.joints logical {mustBeNumericOrLogical} = true + args.labels logical {mustBeNumericOrLogical} = true + args.platforms logical {mustBeNumericOrLogical} = true + args.views char {mustBeMember(args.views,{'all', 'xy', 'xz', 'yz', 'default'})} = 'default' +end + +assert(isfield(stewart.platform_F, 'FO_A'), 'stewart.platform_F should have attribute FO_A') +FO_A = stewart.platform_F.FO_A; + +assert(isfield(stewart.platform_M, 'MO_B'), 'stewart.platform_M should have attribute MO_B') +MO_B = stewart.platform_M.MO_B; + +assert(isfield(stewart.geometry, 'H'), 'stewart.geometry should have attribute H') +H = stewart.geometry.H; + +assert(isfield(stewart.platform_F, 'Fa'), 'stewart.platform_F should have attribute Fa') +Fa = stewart.platform_F.Fa; + +assert(isfield(stewart.platform_M, 'Mb'), 'stewart.platform_M should have attribute Mb') +Mb = stewart.platform_M.Mb; + +if ~strcmp(args.views, 'all') + figure; +else + f = figure('visible', 'off'); +end + +hold on; + +FTa = [eye(3), FO_A; ... + zeros(1,3), 1]; +ATb = [args.ARB, args.AP; ... + zeros(1,3), 1]; +BTm = [eye(3), -MO_B; ... + zeros(1,3), 1]; + +FTm = FTa*ATb*BTm; + +d_unit_vector = H/4; + +d_label = H/20; + +Ff = [0, 0, 0]; +if args.frames + quiver3(Ff(1)*ones(1,3), Ff(2)*ones(1,3), Ff(3)*ones(1,3), ... + [d_unit_vector 0 0], [0 d_unit_vector 0], [0 0 d_unit_vector], '-', 'Color', args.F_color) + + if args.labels + text(Ff(1) + d_label, ... + Ff(2) + d_label, ... + Ff(3) + d_label, '$\{F\}$', 'Color', args.F_color); + end +end + +if args.frames + quiver3(FO_A(1)*ones(1,3), FO_A(2)*ones(1,3), FO_A(3)*ones(1,3), ... + [d_unit_vector 0 0], [0 d_unit_vector 0], [0 0 d_unit_vector], '-', 'Color', args.F_color) + + if args.labels + text(FO_A(1) + d_label, ... + FO_A(2) + d_label, ... + FO_A(3) + d_label, '$\{A\}$', 'Color', args.F_color); + end +end + +if args.platforms && stewart.platform_F.type == 1 + theta = [0:0.01:2*pi+0.01]; % Angles [rad] + v = null([0; 0; 1]'); % Two vectors that are perpendicular to the circle normal + center = [0; 0; 0]; % Center of the circle + radius = stewart.platform_F.R; % Radius of the circle [m] + + points = center*ones(1, length(theta)) + radius*(v(:,1)*cos(theta) + v(:,2)*sin(theta)); + + plot3(points(1,:), ... + points(2,:), ... + points(3,:), '-', 'Color', args.F_color); +end + +if args.joints + scatter3(Fa(1,:), ... + Fa(2,:), ... + Fa(3,:), 'MarkerEdgeColor', args.F_color); + if args.labels + for i = 1:size(Fa,2) + text(Fa(1,i) + d_label, ... + Fa(2,i), ... + Fa(3,i), sprintf('$a_{%i}$', i), 'Color', args.F_color); + end + end +end + +Fm = FTm*[0; 0; 0; 1]; % Get the position of frame {M} w.r.t. {F} + +if args.frames + FM_uv = FTm*[d_unit_vector*eye(3); zeros(1,3)]; % Rotated Unit vectors + quiver3(Fm(1)*ones(1,3), Fm(2)*ones(1,3), Fm(3)*ones(1,3), ... + FM_uv(1,1:3), FM_uv(2,1:3), FM_uv(3,1:3), '-', 'Color', args.M_color) + + if args.labels + text(Fm(1) + d_label, ... + Fm(2) + d_label, ... + Fm(3) + d_label, '$\{M\}$', 'Color', args.M_color); + end +end + +FB = FO_A + args.AP; + +if args.frames + FB_uv = FTm*[d_unit_vector*eye(3); zeros(1,3)]; % Rotated Unit vectors + quiver3(FB(1)*ones(1,3), FB(2)*ones(1,3), FB(3)*ones(1,3), ... + FB_uv(1,1:3), FB_uv(2,1:3), FB_uv(3,1:3), '-', 'Color', args.M_color) + + if args.labels + text(FB(1) - d_label, ... + FB(2) + d_label, ... + FB(3) + d_label, '$\{B\}$', 'Color', args.M_color); + end +end + +if args.platforms && stewart.platform_M.type == 1 + theta = [0:0.01:2*pi+0.01]; % Angles [rad] + v = null((FTm(1:3,1:3)*[0;0;1])'); % Two vectors that are perpendicular to the circle normal + center = Fm(1:3); % Center of the circle + radius = stewart.platform_M.R; % Radius of the circle [m] + + points = center*ones(1, length(theta)) + radius*(v(:,1)*cos(theta) + v(:,2)*sin(theta)); + + plot3(points(1,:), ... + points(2,:), ... + points(3,:), '-', 'Color', args.M_color); +end + +if args.joints + Fb = FTm*[Mb;ones(1,6)]; + + scatter3(Fb(1,:), ... + Fb(2,:), ... + Fb(3,:), 'MarkerEdgeColor', args.M_color); + + if args.labels + for i = 1:size(Fb,2) + text(Fb(1,i) + d_label, ... + Fb(2,i), ... + Fb(3,i), sprintf('$b_{%i}$', i), 'Color', args.M_color); + end + end +end + +if args.legs + for i = 1:6 + plot3([Fa(1,i), Fb(1,i)], ... + [Fa(2,i), Fb(2,i)], ... + [Fa(3,i), Fb(3,i)], '-', 'Color', args.L_color); + + if args.labels + text((Fa(1,i)+Fb(1,i))/2 + d_label, ... + (Fa(2,i)+Fb(2,i))/2, ... + (Fa(3,i)+Fb(3,i))/2, sprintf('$%i$', i), 'Color', args.L_color); + end + end +end + +switch args.views + case 'default' + view([1 -0.6 0.4]); + case 'xy' + view([0 0 1]); + case 'xz' + view([0 -1 0]); + case 'yz' + view([1 0 0]); +end +axis equal; +axis off; + +if strcmp(args.views, 'all') + hAx = findobj('type', 'axes'); + + figure; + s1 = subplot(2,2,1); + copyobj(get(hAx(1), 'Children'), s1); + view([0 0 1]); + axis equal; + axis off; + title('Top') + + s2 = subplot(2,2,2); + copyobj(get(hAx(1), 'Children'), s2); + view([1 -0.6 0.4]); + axis equal; + axis off; + + s3 = subplot(2,2,3); + copyobj(get(hAx(1), 'Children'), s3); + view([1 0 0]); + axis equal; + axis off; + title('Front') + + s4 = subplot(2,2,4); + copyobj(get(hAx(1), 'Children'), s4); + view([0 -1 0]); + axis equal; + axis off; + title('Side') + + close(f); +end diff --git a/matlab/src/generateGeneralConfiguration.m b/matlab/src/generateGeneralConfiguration.m new file mode 100644 index 0000000..69b9786 --- /dev/null +++ b/matlab/src/generateGeneralConfiguration.m @@ -0,0 +1,41 @@ +function [stewart] = generateGeneralConfiguration(stewart, args) +% generateGeneralConfiguration - Generate a Very General Configuration +% +% Syntax: [stewart] = generateGeneralConfiguration(stewart, args) +% +% Inputs: +% - args - Can have the following fields: +% - FH [1x1] - Height of the position of the fixed joints with respect to the frame {F} [m] +% - FR [1x1] - Radius of the position of the fixed joints in the X-Y [m] +% - FTh [6x1] - Angles of the fixed joints in the X-Y plane with respect to the X axis [rad] +% - MH [1x1] - Height of the position of the mobile joints with respect to the frame {M} [m] +% - FR [1x1] - Radius of the position of the mobile joints in the X-Y [m] +% - MTh [6x1] - Angles of the mobile joints in the X-Y plane with respect to the X axis [rad] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} +% - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} + + arguments + stewart + args.FH (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 + args.FR (1,1) double {mustBeNumeric, mustBePositive} = 115e-3; + args.FTh (6,1) double {mustBeNumeric} = [-10, 10, 120-10, 120+10, 240-10, 240+10]*(pi/180); + args.MH (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 + args.MR (1,1) double {mustBeNumeric, mustBePositive} = 90e-3; + args.MTh (6,1) double {mustBeNumeric} = [-60+10, 60-10, 60+10, 180-10, 180+10, -60-10]*(pi/180); + end + + Fa = zeros(3,6); + Mb = zeros(3,6); + + for i = 1:6 + Fa(:,i) = [args.FR*cos(args.FTh(i)); args.FR*sin(args.FTh(i)); args.FH]; + Mb(:,i) = [args.MR*cos(args.MTh(i)); args.MR*sin(args.MTh(i)); -args.MH]; + end + + stewart.platform_F.Fa = Fa; + stewart.platform_M.Mb = Mb; + +end diff --git a/matlab/src/initializeController.m b/matlab/src/initializeController.m new file mode 100644 index 0000000..1b55d91 --- /dev/null +++ b/matlab/src/initializeController.m @@ -0,0 +1,45 @@ +function [] = initializeController(args) + + arguments + args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac', 'hac-iff', 'stabilizing'})} = 'open-loop' + end + + controller = struct(); + + switch args.type + case 'open-loop' + controller.type = 1; + controller.name = 'Open-Loop'; + case 'dvf' + controller.type = 2; + controller.name = 'Decentralized Direct Velocity Feedback'; + case 'iff' + controller.type = 3; + controller.name = 'Decentralized Integral Force Feedback'; + case 'hac-dvf' + controller.type = 4; + controller.name = 'HAC-DVF'; + case 'ref-track-L' + controller.type = 5; + controller.name = 'Reference Tracking in the frame of the legs'; + case 'ref-track-iff-L' + controller.type = 6; + controller.name = 'Reference Tracking in the frame of the legs + IFF'; + case 'cascade-hac-lac' + controller.type = 7; + controller.name = 'Cascade Control + HAC-LAC'; + case 'hac-iff' + controller.type = 8; + controller.name = 'HAC-IFF'; + case 'stabilizing' + controller.type = 9; + controller.name = 'Stabilizing Controller'; + end + + if exist('./mat', 'dir') + save('mat/nano_hexapod_model_controller.mat', 'controller'); + elseif exist('./matlab', 'dir') + save('matlab/mat/nano_hexapod_model_controller.mat', 'controller'); + end + +end diff --git a/matlab/src/initializeCylindricalPlatforms.m b/matlab/src/initializeCylindricalPlatforms.m new file mode 100644 index 0000000..1c048f3 --- /dev/null +++ b/matlab/src/initializeCylindricalPlatforms.m @@ -0,0 +1,61 @@ +function [stewart] = initializeCylindricalPlatforms(stewart, args) +% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms +% +% Syntax: [stewart] = initializeCylindricalPlatforms(args) +% +% Inputs: +% - args - Structure with the following fields: +% - Fpm [1x1] - Fixed Platform Mass [kg] +% - Fph [1x1] - Fixed Platform Height [m] +% - Fpr [1x1] - Fixed Platform Radius [m] +% - Mpm [1x1] - Mobile Platform Mass [kg] +% - Mph [1x1] - Mobile Platform Height [m] +% - Mpr [1x1] - Mobile Platform Radius [m] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - platform_F [struct] - structure with the following fields: +% - type = 1 +% - M [1x1] - Fixed Platform Mass [kg] +% - I [3x3] - Fixed Platform Inertia matrix [kg*m^2] +% - H [1x1] - Fixed Platform Height [m] +% - R [1x1] - Fixed Platform Radius [m] +% - platform_M [struct] - structure with the following fields: +% - M [1x1] - Mobile Platform Mass [kg] +% - I [3x3] - Mobile Platform Inertia matrix [kg*m^2] +% - H [1x1] - Mobile Platform Height [m] +% - R [1x1] - Mobile Platform Radius [m] + + arguments + stewart + args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1 + args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 + args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 125e-3 + args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 1 + args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 + args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 100e-3 + end + + I_F = diag([1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ... + 1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ... + 1/2 *args.Fpm * args.Fpr^2]); + + I_M = diag([1/12*args.Mpm * (3*args.Mpr^2 + args.Mph^2), ... + 1/12*args.Mpm * (3*args.Mpr^2 + args.Mph^2), ... + 1/2 *args.Mpm * args.Mpr^2]); + + stewart.platform_F.type = 1; + + stewart.platform_F.I = I_F; + stewart.platform_F.M = args.Fpm; + stewart.platform_F.R = args.Fpr; + stewart.platform_F.H = args.Fph; + + stewart.platform_M.type = 1; + + stewart.platform_M.I = I_M; + stewart.platform_M.M = args.Mpm; + stewart.platform_M.R = args.Mpr; + stewart.platform_M.H = args.Mph; + +end diff --git a/matlab/src/initializeCylindricalStruts.m b/matlab/src/initializeCylindricalStruts.m new file mode 100644 index 0000000..16d4fd2 --- /dev/null +++ b/matlab/src/initializeCylindricalStruts.m @@ -0,0 +1,50 @@ +function [stewart] = initializeCylindricalStruts(stewart, args) +% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts +% +% Syntax: [stewart] = initializeCylindricalStruts(args) +% +% Inputs: +% - args - Structure with the following fields: +% - Fsm [1x1] - Mass of the Fixed part of the struts [kg] +% - Fsh [1x1] - Height of cylinder for the Fixed part of the struts [m] +% - Fsr [1x1] - Radius of cylinder for the Fixed part of the struts [m] +% - Msm [1x1] - Mass of the Mobile part of the struts [kg] +% - Msh [1x1] - Height of cylinder for the Mobile part of the struts [m] +% - Msr [1x1] - Radius of cylinder for the Mobile part of the struts [m] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - struts_F [struct] - structure with the following fields: +% - M [6x1] - Mass of the Fixed part of the struts [kg] +% - I [3x3x6] - Moment of Inertia for the Fixed part of the struts [kg*m^2] +% - H [6x1] - Height of cylinder for the Fixed part of the struts [m] +% - R [6x1] - Radius of cylinder for the Fixed part of the struts [m] +% - struts_M [struct] - structure with the following fields: +% - M [6x1] - Mass of the Mobile part of the struts [kg] +% - I [3x3x6] - Moment of Inertia for the Mobile part of the struts [kg*m^2] +% - H [6x1] - Height of cylinder for the Mobile part of the struts [m] +% - R [6x1] - Radius of cylinder for the Mobile part of the struts [m] + + arguments + stewart + args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 0.1 + args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3 + args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 + args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 0.1 + args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3 + args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 + end + + stewart.struts_M.type = 1; + + stewart.struts_M.M = args.Msm; + stewart.struts_M.R = args.Msr; + stewart.struts_M.H = args.Msh; + + stewart.struts_F.type = 1; + + stewart.struts_F.M = args.Fsm; + stewart.struts_F.R = args.Fsr; + stewart.struts_F.H = args.Fsh; + +end diff --git a/matlab/src/initializeFramesPositions.m b/matlab/src/initializeFramesPositions.m new file mode 100644 index 0000000..f1e065b --- /dev/null +++ b/matlab/src/initializeFramesPositions.m @@ -0,0 +1,37 @@ +function [stewart] = initializeFramesPositions(stewart, args) +% initializeFramesPositions - Initialize the positions of frames {A}, {B}, {F} and {M} +% +% Syntax: [stewart] = initializeFramesPositions(stewart, args) +% +% Inputs: +% - args - Can have the following fields: +% - H [1x1] - Total Height of the Stewart Platform (height from {F} to {M}) [m] +% - MO_B [1x1] - Height of the frame {B} with respect to {M} [m] +% +% Outputs: +% - stewart - A structure with the following fields: +% - geometry.H [1x1] - Total Height of the Stewart Platform [m] +% - geometry.FO_M [3x1] - Position of {M} with respect to {F} [m] +% - platform_M.MO_B [3x1] - Position of {B} with respect to {M} [m] +% - platform_F.FO_A [3x1] - Position of {A} with respect to {F} [m] + + arguments + stewart + args.H (1,1) double {mustBeNumeric, mustBePositive} = 90e-3 + args.MO_B (1,1) double {mustBeNumeric} = 50e-3 + end + + H = args.H; % Total Height of the Stewart Platform [m] + + FO_M = [0; 0; H]; % Position of {M} with respect to {F} [m] + + MO_B = [0; 0; args.MO_B]; % Position of {B} with respect to {M} [m] + + FO_A = MO_B + FO_M; % Position of {A} with respect to {F} [m] + + stewart.geometry.H = H; + stewart.geometry.FO_M = FO_M; + stewart.platform_M.MO_B = MO_B; + stewart.platform_F.FO_A = FO_A; + +end diff --git a/matlab/src/initializeJointDynamics.m b/matlab/src/initializeJointDynamics.m new file mode 100644 index 0000000..4c4d1b5 --- /dev/null +++ b/matlab/src/initializeJointDynamics.m @@ -0,0 +1,129 @@ +function [stewart] = initializeJointDynamics(stewart, args) +% initializeJointDynamics - Add Stiffness and Damping properties for the spherical joints +% +% Syntax: [stewart] = initializeJointDynamics(args) +% +% Inputs: +% - args - Structure with the following fields: +% - type_F - 'universal', 'spherical', 'universal_p', 'spherical_p' +% - type_M - 'universal', 'spherical', 'universal_p', 'spherical_p' +% - Kf_M [6x1] - Bending (Rx, Ry) Stiffness for each top joints [(N.m)/rad] +% - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad] +% - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)] +% - Ct_M [6x1] - Torsion (Rz) Damping of each top joint [(N.m)/(rad/s)] +% - Kf_F [6x1] - Bending (Rx, Ry) Stiffness for each bottom joints [(N.m)/rad] +% - Kt_F [6x1] - Torsion (Rz) Stiffness for each bottom joints [(N.m)/rad] +% - Cf_F [6x1] - Bending (Rx, Ry) Damping of each bottom joint [(N.m)/(rad/s)] +% - Cf_F [6x1] - Torsion (Rz) Damping of each bottom joint [(N.m)/(rad/s)] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - stewart.joints_F and stewart.joints_M: +% - type - 1 (universal), 2 (spherical), 3 (universal perfect), 4 (spherical perfect) +% - Kx, Ky, Kz [6x1] - Translation (Tx, Ty, Tz) Stiffness [N/m] +% - Kf [6x1] - Flexion (Rx, Ry) Stiffness [(N.m)/rad] +% - Kt [6x1] - Torsion (Rz) Stiffness [(N.m)/rad] +% - Cx, Cy, Cz [6x1] - Translation (Rx, Ry) Damping [N/(m/s)] +% - Cf [6x1] - Flexion (Rx, Ry) Damping [(N.m)/(rad/s)] +% - Cb [6x1] - Torsion (Rz) Damping [(N.m)/(rad/s)] + + arguments + stewart + args.type_F char {mustBeMember(args.type_F,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '2dof' + args.type_M char {mustBeMember(args.type_M,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '3dof' + args.Kf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.K_M double {mustBeNumeric} = zeros(6,6) + args.M_M double {mustBeNumeric} = zeros(6,6) + args.n_xyz_M double {mustBeNumeric} = zeros(2,3) + args.xi_M double {mustBeNumeric} = 0.1 + args.step_file_M char {} = '' + args.K_F double {mustBeNumeric} = zeros(6,6) + args.M_F double {mustBeNumeric} = zeros(6,6) + args.n_xyz_F double {mustBeNumeric} = zeros(2,3) + args.xi_F double {mustBeNumeric} = 0.1 + args.step_file_F char {} = '' + end + + switch args.type_F + case '2dof' + stewart.joints_F.type = 1; + case '3dof' + stewart.joints_F.type = 2; + case '4dof' + stewart.joints_F.type = 3; + case '6dof' + stewart.joints_F.type = 4; + case 'flexible' + stewart.joints_F.type = 5; + otherwise + error("joints_F are not correctly defined") + end + + switch args.type_M + case '2dof' + stewart.joints_M.type = 1; + case '3dof' + stewart.joints_M.type = 2; + case '4dof' + stewart.joints_M.type = 3; + case '6dof' + stewart.joints_M.type = 4; + case 'flexible' + stewart.joints_M.type = 5; + otherwise + error("joints_M are not correctly defined") + end + + stewart.joints_M.Ka = args.Ka_M; + stewart.joints_M.Kr = args.Kr_M; + + stewart.joints_F.Ka = args.Ka_F; + stewart.joints_F.Kr = args.Kr_F; + + stewart.joints_M.Ca = args.Ca_M; + stewart.joints_M.Cr = args.Cr_M; + + stewart.joints_F.Ca = args.Ca_F; + stewart.joints_F.Cr = args.Cr_F; + + stewart.joints_M.Kf = args.Kf_M; + stewart.joints_M.Kt = args.Kt_M; + + stewart.joints_F.Kf = args.Kf_F; + stewart.joints_F.Kt = args.Kt_F; + + stewart.joints_M.Cf = args.Cf_M; + stewart.joints_M.Ct = args.Ct_M; + + stewart.joints_F.Cf = args.Cf_F; + stewart.joints_F.Ct = args.Ct_F; + + stewart.joints_F.M = args.M_F; + stewart.joints_F.K = args.K_F; + stewart.joints_F.n_xyz = args.n_xyz_F; + stewart.joints_F.xi = args.xi_F; + stewart.joints_F.xi = args.xi_F; + stewart.joints_F.step_file = args.step_file_F; + + stewart.joints_M.M = args.M_M; + stewart.joints_M.K = args.K_M; + stewart.joints_M.n_xyz = args.n_xyz_M; + stewart.joints_M.xi = args.xi_M; + stewart.joints_M.step_file = args.step_file_M; + +end diff --git a/matlab/src/initializeLoggingConfiguration.m b/matlab/src/initializeLoggingConfiguration.m new file mode 100644 index 0000000..21b3a34 --- /dev/null +++ b/matlab/src/initializeLoggingConfiguration.m @@ -0,0 +1,33 @@ + function [] = initializeLoggingConfiguration(args) + + arguments + args.log char {mustBeMember(args.log,{'none', 'all', 'forces'})} = 'none' + args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 + end + + conf_log = struct(); + + switch args.log + case 'none' + conf_log.type = 0; + case 'all' + conf_log.type = 1; + case 'forces' + conf_log.type = 2; + end + + conf_log.Ts = args.Ts; + +if exist('./mat', 'dir') + if exist('./mat/nano_hexapod_model_conf_log.mat', 'file') + save('mat/nano_hexapod_model_conf_log.mat', 'conf_log', '-append'); + else + save('mat/nano_hexapod_model_conf_log.mat', 'conf_log'); + end +elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod_model_conf_log.mat', 'file') + save('matlab/mat/nano_hexapod_model_conf_log.mat', 'conf_log', '-append'); + else + save('matlab/mat/nano_hexapod_model_conf_log.mat', 'conf_log'); + end +end diff --git a/matlab/src/initializeSample.m b/matlab/src/initializeSample.m new file mode 100644 index 0000000..0ed1946 --- /dev/null +++ b/matlab/src/initializeSample.m @@ -0,0 +1,38 @@ +function [sample] = initializeSample(args) + + arguments + args.type char {mustBeMember(args.type,{'none', 'cylindrical'})} = 'none' + args.H (1,1) double {mustBeNumeric, mustBePositive} = 200e-3 % Height [m] + args.R (1,1) double {mustBeNumeric, mustBePositive} = 110e-3 % Radius [m] + args.m (1,1) double {mustBeNumeric, mustBePositive} = 1 % Mass [kg] + end + + sample = struct(); + + switch args.type + case 'none' + sample.type = 0; + sample.m = 0; + case 'cylindrical' + sample.type = 1; + + sample.H = args.H; + sample.R = args.R; + sample.m = args.m; + end + + if exist('./mat', 'dir') + if exist('./mat/nano_hexapod.mat', 'file') + save('mat/nano_hexapod.mat', 'sample', '-append'); + else + save('mat/nano_hexapod.mat', 'sample'); + end + elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod.mat', 'file') + save('matlab/mat/nano_hexapod.mat', 'sample', '-append'); + else + save('matlab/mat/nano_hexapod.mat', 'sample'); + end + end + +end diff --git a/matlab/src/initializeSimplifiedNanoHexapod.m b/matlab/src/initializeSimplifiedNanoHexapod.m new file mode 100644 index 0000000..5b9ed84 --- /dev/null +++ b/matlab/src/initializeSimplifiedNanoHexapod.m @@ -0,0 +1,141 @@ +function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) + + arguments + %% initializeFramesPositions + args.H (1,1) double {mustBeNumeric, mustBePositive} = 95e-3 % Height of the nano-hexapod [m] + args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m] + %% generateGeneralConfiguration + args.FH (1,1) double {mustBeNumeric, mustBePositive} = 20e-3 % Height of fixed joints [m] + args.FR (1,1) double {mustBeNumeric, mustBePositive} = 120e-3 % Radius of fixed joints [m] + args.FTh (6,1) double {mustBeNumeric} = [220, 320, 340, 80, 100, 200]*(pi/180) % Angles of fixed joints [rad] + args.MH (1,1) double {mustBeNumeric, mustBePositive} = 20e-3 % Height of mobile joints [m] + args.MR (1,1) double {mustBeNumeric, mustBePositive} = 110e-3 % Radius of mobile joints [m] + args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad] + %% Actuators + args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof' + args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 380000 + args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605 + args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302 + args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 5 + args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100 + args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50 + %% initializeCylindricalPlatforms + args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 5 % Mass of the fixed plate [kg] + args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 % Thickness of the fixed plate [m] + args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 150e-3 % Radius of the fixed plate [m] + args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 5 % Mass of the mobile plate [kg] + args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 % Thickness of the mobile plate [m] + args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 150e-3 % Radius of the mobile plate [m] + %% initializeCylindricalStruts + args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Mass of the fixed part of the strut [kg] + args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 % Length of the fixed part of the struts [m] + args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 % Radius of the fixed part of the struts [m] + args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Mass of the mobile part of the strut [kg] + args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 % Length of the mobile part of the struts [m] + args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 % Radius of the fixed part of the struts [m] + %% Bottom and Top Flexible Joints + args.flex_type_F char {mustBeMember(args.flex_type_F,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '2dof' + args.flex_type_M char {mustBeMember(args.flex_type_M,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '3dof' + args.Kf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + %% inverseKinematics + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + stewart = initializeStewartPlatform(); + + stewart = initializeFramesPositions(stewart, ... + 'H', args.H, ... + 'MO_B', args.MO_B); + + stewart = generateGeneralConfiguration(stewart, ... + 'FH', args.FH, ... + 'FR', args.FR, ... + 'FTh', args.FTh, ... + 'MH', args.MH, ... + 'MR', args.MR, ... + 'MTh', args.MTh); + + stewart = computeJointsPose(stewart); + + stewart = initializeStrutDynamics(stewart, ... + 'type', args.actuator_type, ... + 'k', args.actuator_k, ... + 'ke', args.actuator_ke, ... + 'ka', args.actuator_ka, ... + 'c', args.actuator_c, ... + 'ce', args.actuator_ce, ... + 'ca', args.actuator_ca); + + stewart = initializeJointDynamics(stewart, ... + 'type_F', args.flex_type_F, ... + 'type_M', args.flex_type_M, ... + 'Kf_M', args.Kf_M, ... + 'Cf_M', args.Cf_M, ... + 'Kt_M', args.Kt_M, ... + 'Ct_M', args.Ct_M, ... + 'Kf_F', args.Kf_F, ... + 'Cf_F', args.Cf_F, ... + 'Kt_F', args.Kt_F, ... + 'Ct_F', args.Ct_F, ... + 'Ka_F', args.Ka_F, ... + 'Ca_F', args.Ca_F, ... + 'Kr_F', args.Kr_F, ... + 'Cr_F', args.Cr_F, ... + 'Ka_M', args.Ka_M, ... + 'Ca_M', args.Ca_M, ... + 'Kr_M', args.Kr_M, ... + 'Cr_M', args.Cr_M); + + stewart = initializeCylindricalPlatforms(stewart, ... + 'Fpm', args.Fpm, ... + 'Fph', args.Fph, ... + 'Fpr', args.Fpr, ... + 'Mpm', args.Mpm, ... + 'Mph', args.Mph, ... + 'Mpr', args.Mpr); + + stewart = initializeCylindricalStruts(stewart, ... + 'Fsm', args.Fsm, ... + 'Fsh', args.Fsh, ... + 'Fsr', args.Fsr, ... + 'Msm', args.Msm, ... + 'Msh', args.Msh, ... + 'Msr', args.Msr); + + stewart = computeJacobian(stewart); + + stewart = initializeStewartPose(stewart, ... + 'AP', args.AP, ... + 'ARB', args.ARB); + + nano_hexapod = stewart; + if exist('./mat', 'dir') + if exist('./mat/nano_hexapod.mat', 'file') + save('mat/nano_hexapod.mat', 'nano_hexapod', '-append'); + else + save('mat/nano_hexapod.mat', 'nano_hexapod'); + end + elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod.mat', 'file') + save('matlab/mat/nano_hexapod.mat', 'nano_hexapod', '-append'); + else + save('matlab/mat/nano_hexapod.mat', 'nano_hexapod'); + end + end +end diff --git a/matlab/src/initializeStewartPlatform.m b/matlab/src/initializeStewartPlatform.m new file mode 100644 index 0000000..42b4188 --- /dev/null +++ b/matlab/src/initializeStewartPlatform.m @@ -0,0 +1,33 @@ +function [stewart] = initializeStewartPlatform() +% initializeStewartPlatform - Initialize the stewart structure +% +% Syntax: [stewart] = initializeStewartPlatform(args) +% +% Outputs: +% - stewart - A structure with the following sub-structures: +% - platform_F - +% - platform_M - +% - joints_F - +% - joints_M - +% - struts_F - +% - struts_M - +% - actuators - +% - geometry - +% - properties - + + stewart = struct(); + stewart.platform_F = struct(); + stewart.platform_M = struct(); + stewart.joints_F = struct(); + stewart.joints_M = struct(); + stewart.struts_F = struct(); + stewart.struts_M = struct(); + stewart.actuators = struct(); + stewart.sensors = struct(); + stewart.sensors.inertial = struct(); + stewart.sensors.force = struct(); + stewart.sensors.relative = struct(); + stewart.geometry = struct(); + stewart.kinematics = struct(); + +end diff --git a/matlab/src/initializeStewartPose.m b/matlab/src/initializeStewartPose.m new file mode 100644 index 0000000..272262e --- /dev/null +++ b/matlab/src/initializeStewartPose.m @@ -0,0 +1,29 @@ +function [stewart] = initializeStewartPose(stewart, args) +% initializeStewartPose - Determine the initial stroke in each leg to have the wanted pose +% It uses the inverse kinematic +% +% Syntax: [stewart] = initializeStewartPose(stewart, args) +% +% Inputs: +% - stewart - A structure with the following fields +% - Aa [3x6] - The positions ai expressed in {A} +% - Bb [3x6] - The positions bi expressed in {B} +% - args - Can have the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - actuators.Leq [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A} + + arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + [Li, dLi] = inverseKinematics(stewart, 'AP', args.AP, 'ARB', args.ARB); + + stewart.actuators.Leq = dLi; + +end diff --git a/matlab/src/initializeStrutDynamics.m b/matlab/src/initializeStrutDynamics.m new file mode 100644 index 0000000..9808789 --- /dev/null +++ b/matlab/src/initializeStrutDynamics.m @@ -0,0 +1,54 @@ +function [stewart] = initializeStrutDynamics(stewart, args) +% initializeStrutDynamics - Add Stiffness and Damping properties of each strut +% +% Syntax: [stewart] = initializeStrutDynamics(args) +% +% Inputs: +% - args - Structure with the following fields: +% - K [6x1] - Stiffness of each strut [N/m] +% - C [6x1] - Damping of each strut [N/(m/s)] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - actuators.type = 1 +% - actuators.K [6x1] - Stiffness of each strut [N/m] +% - actuators.C [6x1] - Damping of each strut [N/(m/s)] + + arguments + stewart + args.type char {mustBeMember(args.type,{'1dof', '2dof', 'flexible'})} = '1dof' + args.k (1,1) double {mustBeNumeric, mustBeNonnegative} = 20e6 + args.ke (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e6 + args.ka (1,1) double {mustBeNumeric, mustBeNonnegative} = 60e6 + args.c (1,1) double {mustBeNumeric, mustBeNonnegative} = 2e1 + args.ce (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e6 + args.ca (1,1) double {mustBeNumeric, mustBeNonnegative} = 10 + + args.F_gain (1,1) double {mustBeNumeric} = 1 + args.me (1,1) double {mustBeNumeric} = 0.01 + args.ma (1,1) double {mustBeNumeric} = 0.01 + end + + if strcmp(args.type, '1dof') + stewart.actuators.type = 1; + elseif strcmp(args.type, '2dof') + stewart.actuators.type = 2; + elseif strcmp(args.type, 'flexible') + stewart.actuators.type = 3; + end + + stewart.actuators.k = args.k; + stewart.actuators.c = args.c; + + stewart.actuators.ka = args.ka; + stewart.actuators.ca = args.ca; + + stewart.actuators.ke = args.ke; + stewart.actuators.ce = args.ce; + + stewart.actuators.F_gain = args.F_gain; + + stewart.actuators.ma = args.ma; + stewart.actuators.me = args.me; + +end diff --git a/matlab/src/inverseKinematics.m b/matlab/src/inverseKinematics.m new file mode 100644 index 0000000..3096ab1 --- /dev/null +++ b/matlab/src/inverseKinematics.m @@ -0,0 +1,38 @@ +function [Li, dLi] = inverseKinematics(stewart, args) +% inverseKinematics - Compute the needed length of each strut to have the wanted position and orientation of {B} with respect to {A} +% +% Syntax: [stewart] = inverseKinematics(stewart) +% +% Inputs: +% - stewart - A structure with the following fields +% - geometry.Aa [3x6] - The positions ai expressed in {A} +% - geometry.Bb [3x6] - The positions bi expressed in {B} +% - geometry.l [6x1] - Length of each strut +% - args - Can have the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% +% Outputs: +% - Li [6x1] - The 6 needed length of the struts in [m] to have the wanted pose of {B} w.r.t. {A} +% - dLi [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A} + + arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + assert(isfield(stewart.geometry, 'Aa'), 'stewart.geometry should have attribute Aa') + Aa = stewart.geometry.Aa; + + assert(isfield(stewart.geometry, 'Bb'), 'stewart.geometry should have attribute Bb') + Bb = stewart.geometry.Bb; + + assert(isfield(stewart.geometry, 'l'), 'stewart.geometry should have attribute l') + l = stewart.geometry.l; + + Li = sqrt(args.AP'*args.AP + diag(Bb'*Bb) + diag(Aa'*Aa) - (2*args.AP'*Aa)' + (2*args.AP'*(args.ARB*Bb))' - diag(2*(args.ARB*Bb)'*Aa)); + + dLi = Li-l; + +end diff --git a/matlab/subsystems/Fixed_Based.slx b/matlab/subsystems/Fixed_Based.slx new file mode 100644 index 0000000000000000000000000000000000000000..9b7075a1a6e5eddcb563d19ee0087870f262767c GIT binary patch literal 40177 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 YBh%Hu17@SMX`Ko*0ZeuHX=i)?0(MNQkN^Mx literal 0 HcmV?d00001 diff --git a/matlab/subsystems/Mobile_Platform.slx b/matlab/subsystems/Mobile_Platform.slx new file mode 100644 index 0000000000000000000000000000000000000000..78ef458d3d64283eb7e2054d0a34df58e3e2bdae GIT binary patch literal 42197 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 literal 0 HcmV?d00001 diff --git a/matlab/subsystems/Stewart_Platform.slx b/matlab/subsystems/Stewart_Platform.slx new file mode 100644 index 0000000000000000000000000000000000000000..b8faba3cd04191394ee132ff31d45674a129497d GIT binary patch literal 48531 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 literal 0 HcmV?d00001 diff --git a/matlab/subsystems/metrology_6dof.slx b/matlab/subsystems/metrology_6dof.slx new file mode 100644 index 0000000000000000000000000000000000000000..6227ebc62473d8a3e12f5cc6aaa3238cb8ef82fa GIT binary patch literal 40379 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 ZrUmP3;R3V7&zux=7;b=ImrD6r`yX`9XvP2l literal 0 HcmV?d00001 diff --git a/matlab/subsystems/stewart_strut.slx b/matlab/subsystems/stewart_strut.slx new file mode 100644 index 0000000000000000000000000000000000000000..063a625c26d269f8585ee8831b3db5c80324fc62 GIT binary patch literal 54735 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 z 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 B|JVQk literal 0 HcmV?d00001 diff --git a/simscape-nano-hexapod.org b/simscape-nano-hexapod.org index 88fd7af..f40fcde 100644 --- a/simscape-nano-hexapod.org +++ b/simscape-nano-hexapod.org @@ -851,20 +851,1443 @@ Compute: ** Initialize Path #+NAME: m-init-path #+BEGIN_SRC matlab -%% Path for functions, data and scripts -addpath('./matlab/mat/'); % Path for data addpath('./matlab/'); % Path for scripts + +%% Path for functions, data and scripts +addpath('./matlab/mat/'); % Path for Computed FRF +addpath('./matlab/src/'); % Path for functions +addpath('./matlab/subsystems/'); % Path for Subsystems Simulink files + +%% Data directory +data_dir = './matlab/mat/' #+END_SRC #+NAME: m-init-path-tangle #+BEGIN_SRC matlab %% Path for functions, data and scripts -addpath('./mat/'); % Path for data +addpath('./mat/'); % Path for Data +addpath('./src/'); % Path for functions +addpath('./subsystems/'); % Path for Subsystems Simulink files + +%% Data directory +data_dir = './mat/'; #+END_SRC +** Initialize Simscape Model +#+NAME: m-init-simscape +#+begin_src matlab +% Simulink Model name +mdl = 'nano_hexapod_model'; +#+end_src + ** Initialize other elements #+NAME: m-init-other #+BEGIN_SRC matlab %% Colors for the figures colors = colororder; + +%% Frequency Vector +freqs = logspace(0, 3, 1000); #+END_SRC + +* Matlab Functions :noexport: +** =initializeLoggingConfiguration=: Logging Configuration +:PROPERTIES: +:header-args:matlab+: :tangle matlab/src/initializeLoggingConfiguration.m +:header-args:matlab+: :comments none :mkdirp yes :eval no +:END: + +*** Function description +#+begin_src matlab + function [] = initializeLoggingConfiguration(args) +#+end_src + +*** Optional Parameters +#+begin_src matlab + arguments + args.log char {mustBeMember(args.log,{'none', 'all', 'forces'})} = 'none' + args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 + end +#+end_src + +*** Structure initialization +#+begin_src matlab + conf_log = struct(); +#+end_src + +*** Add Type +#+begin_src matlab + switch args.log + case 'none' + conf_log.type = 0; + case 'all' + conf_log.type = 1; + case 'forces' + conf_log.type = 2; + end +#+end_src + +*** Sampling Time +#+begin_src matlab + conf_log.Ts = args.Ts; +#+end_src + +*** Save the Structure +#+begin_src matlab +if exist('./mat', 'dir') + if exist('./mat/nano_hexapod_model_conf_log.mat', 'file') + save('mat/nano_hexapod_model_conf_log.mat', 'conf_log', '-append'); + else + save('mat/nano_hexapod_model_conf_log.mat', 'conf_log'); + end +elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod_model_conf_log.mat', 'file') + save('matlab/mat/nano_hexapod_model_conf_log.mat', 'conf_log', '-append'); + else + save('matlab/mat/nano_hexapod_model_conf_log.mat', 'conf_log'); + end +end +#+end_src + +** =initializeController=: Initialize Controller +#+begin_src matlab :tangle matlab/src/initializeController.m :comments none :mkdirp yes :eval no +function [] = initializeController(args) + + arguments + args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac', 'hac-iff', 'stabilizing'})} = 'open-loop' + end + + controller = struct(); + + switch args.type + case 'open-loop' + controller.type = 1; + controller.name = 'Open-Loop'; + case 'dvf' + controller.type = 2; + controller.name = 'Decentralized Direct Velocity Feedback'; + case 'iff' + controller.type = 3; + controller.name = 'Decentralized Integral Force Feedback'; + case 'hac-dvf' + controller.type = 4; + controller.name = 'HAC-DVF'; + case 'ref-track-L' + controller.type = 5; + controller.name = 'Reference Tracking in the frame of the legs'; + case 'ref-track-iff-L' + controller.type = 6; + controller.name = 'Reference Tracking in the frame of the legs + IFF'; + case 'cascade-hac-lac' + controller.type = 7; + controller.name = 'Cascade Control + HAC-LAC'; + case 'hac-iff' + controller.type = 8; + controller.name = 'HAC-IFF'; + case 'stabilizing' + controller.type = 9; + controller.name = 'Stabilizing Controller'; + end + + if exist('./mat', 'dir') + save('mat/nano_hexapod_model_controller.mat', 'controller'); + elseif exist('./matlab', 'dir') + save('matlab/mat/nano_hexapod_model_controller.mat', 'controller'); + end + +end +#+end_src + +** =initializeSample=: Sample + +#+begin_src matlab :tangle matlab/src/initializeSample.m :comments none :mkdirp yes :eval no +function [sample] = initializeSample(args) + + arguments + args.type char {mustBeMember(args.type,{'none', 'cylindrical'})} = 'none' + args.H (1,1) double {mustBeNumeric, mustBePositive} = 200e-3 % Height [m] + args.R (1,1) double {mustBeNumeric, mustBePositive} = 110e-3 % Radius [m] + args.m (1,1) double {mustBeNumeric, mustBePositive} = 1 % Mass [kg] + end + + sample = struct(); + + switch args.type + case 'none' + sample.type = 0; + sample.m = 0; + case 'cylindrical' + sample.type = 1; + + sample.H = args.H; + sample.R = args.R; + sample.m = args.m; + end + + if exist('./mat', 'dir') + if exist('./mat/nano_hexapod.mat', 'file') + save('mat/nano_hexapod.mat', 'sample', '-append'); + else + save('mat/nano_hexapod.mat', 'sample'); + end + elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod.mat', 'file') + save('matlab/mat/nano_hexapod.mat', 'sample', '-append'); + else + save('matlab/mat/nano_hexapod.mat', 'sample'); + end + end + +end +#+end_src + +** Stewart platform +*** =initializeSimplifiedNanoHexapod=: Nano Hexapod + +#+begin_src matlab :tangle matlab/src/initializeSimplifiedNanoHexapod.m :comments none :mkdirp yes :eval no +function [nano_hexapod] = initializeSimplifiedNanoHexapod(args) + + arguments + %% initializeFramesPositions + args.H (1,1) double {mustBeNumeric, mustBePositive} = 95e-3 % Height of the nano-hexapod [m] + args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m] + %% generateGeneralConfiguration + args.FH (1,1) double {mustBeNumeric, mustBePositive} = 20e-3 % Height of fixed joints [m] + args.FR (1,1) double {mustBeNumeric, mustBePositive} = 120e-3 % Radius of fixed joints [m] + args.FTh (6,1) double {mustBeNumeric} = [220, 320, 340, 80, 100, 200]*(pi/180) % Angles of fixed joints [rad] + args.MH (1,1) double {mustBeNumeric, mustBePositive} = 20e-3 % Height of mobile joints [m] + args.MR (1,1) double {mustBeNumeric, mustBePositive} = 110e-3 % Radius of mobile joints [m] + args.MTh (6,1) double {mustBeNumeric} = [255, 285, 15, 45, 135, 165]*(pi/180) % Angles of fixed joints [rad] + %% Actuators + args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof' + args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 380000 + args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605 + args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302 + args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 5 + args.actuator_ce (1,1) double {mustBeNumeric, mustBePositive} = 100 + args.actuator_ca (1,1) double {mustBeNumeric, mustBePositive} = 50 + %% initializeCylindricalPlatforms + args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 5 % Mass of the fixed plate [kg] + args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 % Thickness of the fixed plate [m] + args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 150e-3 % Radius of the fixed plate [m] + args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 5 % Mass of the mobile plate [kg] + args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 % Thickness of the mobile plate [m] + args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 150e-3 % Radius of the mobile plate [m] + %% initializeCylindricalStruts + args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Mass of the fixed part of the strut [kg] + args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 % Length of the fixed part of the struts [m] + args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 % Radius of the fixed part of the struts [m] + args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Mass of the mobile part of the strut [kg] + args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 60e-3 % Length of the mobile part of the struts [m] + args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 % Radius of the fixed part of the struts [m] + %% Bottom and Top Flexible Joints + args.flex_type_F char {mustBeMember(args.flex_type_F,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '2dof' + args.flex_type_M char {mustBeMember(args.flex_type_M,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '3dof' + args.Kf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + %% inverseKinematics + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + stewart = initializeStewartPlatform(); + + stewart = initializeFramesPositions(stewart, ... + 'H', args.H, ... + 'MO_B', args.MO_B); + + stewart = generateGeneralConfiguration(stewart, ... + 'FH', args.FH, ... + 'FR', args.FR, ... + 'FTh', args.FTh, ... + 'MH', args.MH, ... + 'MR', args.MR, ... + 'MTh', args.MTh); + + stewart = computeJointsPose(stewart); + + stewart = initializeStrutDynamics(stewart, ... + 'type', args.actuator_type, ... + 'k', args.actuator_k, ... + 'ke', args.actuator_ke, ... + 'ka', args.actuator_ka, ... + 'c', args.actuator_c, ... + 'ce', args.actuator_ce, ... + 'ca', args.actuator_ca); + + stewart = initializeJointDynamics(stewart, ... + 'type_F', args.flex_type_F, ... + 'type_M', args.flex_type_M, ... + 'Kf_M', args.Kf_M, ... + 'Cf_M', args.Cf_M, ... + 'Kt_M', args.Kt_M, ... + 'Ct_M', args.Ct_M, ... + 'Kf_F', args.Kf_F, ... + 'Cf_F', args.Cf_F, ... + 'Kt_F', args.Kt_F, ... + 'Ct_F', args.Ct_F, ... + 'Ka_F', args.Ka_F, ... + 'Ca_F', args.Ca_F, ... + 'Kr_F', args.Kr_F, ... + 'Cr_F', args.Cr_F, ... + 'Ka_M', args.Ka_M, ... + 'Ca_M', args.Ca_M, ... + 'Kr_M', args.Kr_M, ... + 'Cr_M', args.Cr_M); + + stewart = initializeCylindricalPlatforms(stewart, ... + 'Fpm', args.Fpm, ... + 'Fph', args.Fph, ... + 'Fpr', args.Fpr, ... + 'Mpm', args.Mpm, ... + 'Mph', args.Mph, ... + 'Mpr', args.Mpr); + + stewart = initializeCylindricalStruts(stewart, ... + 'Fsm', args.Fsm, ... + 'Fsh', args.Fsh, ... + 'Fsr', args.Fsr, ... + 'Msm', args.Msm, ... + 'Msh', args.Msh, ... + 'Msr', args.Msr); + + stewart = computeJacobian(stewart); + + stewart = initializeStewartPose(stewart, ... + 'AP', args.AP, ... + 'ARB', args.ARB); + + nano_hexapod = stewart; + if exist('./mat', 'dir') + if exist('./mat/nano_hexapod.mat', 'file') + save('mat/nano_hexapod.mat', 'nano_hexapod', '-append'); + else + save('mat/nano_hexapod.mat', 'nano_hexapod'); + end + elseif exist('./matlab', 'dir') + if exist('./matlab/mat/nano_hexapod.mat', 'file') + save('matlab/mat/nano_hexapod.mat', 'nano_hexapod', '-append'); + else + save('matlab/mat/nano_hexapod.mat', 'nano_hexapod'); + end + end +end +#+end_src + +*** =initializeStewartPlatform=: Initialize the Stewart Platform structure + +#+begin_src matlab :tangle matlab/src/initializeStewartPlatform.m :comments none :mkdirp yes :eval no +function [stewart] = initializeStewartPlatform() +% initializeStewartPlatform - Initialize the stewart structure +% +% Syntax: [stewart] = initializeStewartPlatform(args) +% +% Outputs: +% - stewart - A structure with the following sub-structures: +% - platform_F - +% - platform_M - +% - joints_F - +% - joints_M - +% - struts_F - +% - struts_M - +% - actuators - +% - geometry - +% - properties - + + stewart = struct(); + stewart.platform_F = struct(); + stewart.platform_M = struct(); + stewart.joints_F = struct(); + stewart.joints_M = struct(); + stewart.struts_F = struct(); + stewart.struts_M = struct(); + stewart.actuators = struct(); + stewart.sensors = struct(); + stewart.sensors.inertial = struct(); + stewart.sensors.force = struct(); + stewart.sensors.relative = struct(); + stewart.geometry = struct(); + stewart.kinematics = struct(); + +end +#+end_src + +*** =initializeFramesPositions=: Initialize the positions of frames {A}, {B}, {F} and {M} + +#+begin_src matlab :tangle matlab/src/initializeFramesPositions.m :comments none :mkdirp yes :eval no +function [stewart] = initializeFramesPositions(stewart, args) +% initializeFramesPositions - Initialize the positions of frames {A}, {B}, {F} and {M} +% +% Syntax: [stewart] = initializeFramesPositions(stewart, args) +% +% Inputs: +% - args - Can have the following fields: +% - H [1x1] - Total Height of the Stewart Platform (height from {F} to {M}) [m] +% - MO_B [1x1] - Height of the frame {B} with respect to {M} [m] +% +% Outputs: +% - stewart - A structure with the following fields: +% - geometry.H [1x1] - Total Height of the Stewart Platform [m] +% - geometry.FO_M [3x1] - Position of {M} with respect to {F} [m] +% - platform_M.MO_B [3x1] - Position of {B} with respect to {M} [m] +% - platform_F.FO_A [3x1] - Position of {A} with respect to {F} [m] + + arguments + stewart + args.H (1,1) double {mustBeNumeric, mustBePositive} = 90e-3 + args.MO_B (1,1) double {mustBeNumeric} = 50e-3 + end + + H = args.H; % Total Height of the Stewart Platform [m] + + FO_M = [0; 0; H]; % Position of {M} with respect to {F} [m] + + MO_B = [0; 0; args.MO_B]; % Position of {B} with respect to {M} [m] + + FO_A = MO_B + FO_M; % Position of {A} with respect to {F} [m] + + stewart.geometry.H = H; + stewart.geometry.FO_M = FO_M; + stewart.platform_M.MO_B = MO_B; + stewart.platform_F.FO_A = FO_A; + +end +#+end_src + +*** =generateGeneralConfiguration=: Generate a Very General Configuration + +#+begin_src matlab :tangle matlab/src/generateGeneralConfiguration.m :comments none :mkdirp yes :eval no +function [stewart] = generateGeneralConfiguration(stewart, args) +% generateGeneralConfiguration - Generate a Very General Configuration +% +% Syntax: [stewart] = generateGeneralConfiguration(stewart, args) +% +% Inputs: +% - args - Can have the following fields: +% - FH [1x1] - Height of the position of the fixed joints with respect to the frame {F} [m] +% - FR [1x1] - Radius of the position of the fixed joints in the X-Y [m] +% - FTh [6x1] - Angles of the fixed joints in the X-Y plane with respect to the X axis [rad] +% - MH [1x1] - Height of the position of the mobile joints with respect to the frame {M} [m] +% - FR [1x1] - Radius of the position of the mobile joints in the X-Y [m] +% - MTh [6x1] - Angles of the mobile joints in the X-Y plane with respect to the X axis [rad] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} +% - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} + + arguments + stewart + args.FH (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 + args.FR (1,1) double {mustBeNumeric, mustBePositive} = 115e-3; + args.FTh (6,1) double {mustBeNumeric} = [-10, 10, 120-10, 120+10, 240-10, 240+10]*(pi/180); + args.MH (1,1) double {mustBeNumeric, mustBePositive} = 15e-3 + args.MR (1,1) double {mustBeNumeric, mustBePositive} = 90e-3; + args.MTh (6,1) double {mustBeNumeric} = [-60+10, 60-10, 60+10, 180-10, 180+10, -60-10]*(pi/180); + end + + Fa = zeros(3,6); + Mb = zeros(3,6); + + for i = 1:6 + Fa(:,i) = [args.FR*cos(args.FTh(i)); args.FR*sin(args.FTh(i)); args.FH]; + Mb(:,i) = [args.MR*cos(args.MTh(i)); args.MR*sin(args.MTh(i)); -args.MH]; + end + + stewart.platform_F.Fa = Fa; + stewart.platform_M.Mb = Mb; + +end +#+end_src + +*** =computeJointsPose=: Compute the Pose of the Joints + +#+begin_src matlab :tangle matlab/src/computeJointsPose.m :comments none :mkdirp yes :eval no +function [stewart] = computeJointsPose(stewart) +% computeJointsPose - +% +% Syntax: [stewart] = computeJointsPose(stewart) +% +% Inputs: +% - stewart - A structure with the following fields +% - platform_F.Fa [3x6] - Its i'th column is the position vector of joint ai with respect to {F} +% - platform_M.Mb [3x6] - Its i'th column is the position vector of joint bi with respect to {M} +% - platform_F.FO_A [3x1] - Position of {A} with respect to {F} +% - platform_M.MO_B [3x1] - Position of {B} with respect to {M} +% - geometry.FO_M [3x1] - Position of {M} with respect to {F} +% +% Outputs: +% - stewart - A structure with the following added fields +% - geometry.Aa [3x6] - The i'th column is the position of ai with respect to {A} +% - geometry.Ab [3x6] - The i'th column is the position of bi with respect to {A} +% - geometry.Ba [3x6] - The i'th column is the position of ai with respect to {B} +% - geometry.Bb [3x6] - The i'th column is the position of bi with respect to {B} +% - geometry.l [6x1] - The i'th element is the initial length of strut i +% - geometry.As [3x6] - The i'th column is the unit vector of strut i expressed in {A} +% - geometry.Bs [3x6] - The i'th column is the unit vector of strut i expressed in {B} +% - struts_F.l [6x1] - Length of the Fixed part of the i'th strut +% - struts_M.l [6x1] - Length of the Mobile part of the i'th strut +% - platform_F.FRa [3x3x6] - The i'th 3x3 array is the rotation matrix to orientate the bottom of the i'th strut from {F} +% - platform_M.MRb [3x3x6] - The i'th 3x3 array is the rotation matrix to orientate the top of the i'th strut from {M} + + assert(isfield(stewart.platform_F, 'Fa'), 'stewart.platform_F should have attribute Fa') + Fa = stewart.platform_F.Fa; + + assert(isfield(stewart.platform_M, 'Mb'), 'stewart.platform_M should have attribute Mb') + Mb = stewart.platform_M.Mb; + + assert(isfield(stewart.platform_F, 'FO_A'), 'stewart.platform_F should have attribute FO_A') + FO_A = stewart.platform_F.FO_A; + + assert(isfield(stewart.platform_M, 'MO_B'), 'stewart.platform_M should have attribute MO_B') + MO_B = stewart.platform_M.MO_B; + + assert(isfield(stewart.geometry, 'FO_M'), 'stewart.geometry should have attribute FO_M') + FO_M = stewart.geometry.FO_M; + + Aa = Fa - repmat(FO_A, [1, 6]); + Bb = Mb - repmat(MO_B, [1, 6]); + + Ab = Bb - repmat(-MO_B-FO_M+FO_A, [1, 6]); + Ba = Aa - repmat( MO_B+FO_M-FO_A, [1, 6]); + + As = (Ab - Aa)./vecnorm(Ab - Aa); % As_i is the i'th vector of As + + l = vecnorm(Ab - Aa)'; + + Bs = (Bb - Ba)./vecnorm(Bb - Ba); + + FRa = zeros(3,3,6); + MRb = zeros(3,3,6); + + for i = 1:6 + FRa(:,:,i) = [cross([0;1;0], As(:,i)) , cross(As(:,i), cross([0;1;0], As(:,i))) , As(:,i)]; + FRa(:,:,i) = FRa(:,:,i)./vecnorm(FRa(:,:,i)); + + MRb(:,:,i) = [cross([0;1;0], Bs(:,i)) , cross(Bs(:,i), cross([0;1;0], Bs(:,i))) , Bs(:,i)]; + MRb(:,:,i) = MRb(:,:,i)./vecnorm(MRb(:,:,i)); + end + + stewart.geometry.Aa = Aa; + stewart.geometry.Ab = Ab; + stewart.geometry.Ba = Ba; + stewart.geometry.Bb = Bb; + stewart.geometry.As = As; + stewart.geometry.Bs = Bs; + stewart.geometry.l = l; + + stewart.struts_F.l = l/2; + stewart.struts_M.l = l/2; + + stewart.platform_F.FRa = FRa; + stewart.platform_M.MRb = MRb; + +end +#+end_src + +*** =initializeCylindricalPlatforms=: Initialize the geometry of the Fixed and Mobile Platforms + +#+begin_src matlab :tangle matlab/src/initializeCylindricalPlatforms.m :comments none :mkdirp yes :eval no +function [stewart] = initializeCylindricalPlatforms(stewart, args) +% initializeCylindricalPlatforms - Initialize the geometry of the Fixed and Mobile Platforms +% +% Syntax: [stewart] = initializeCylindricalPlatforms(args) +% +% Inputs: +% - args - Structure with the following fields: +% - Fpm [1x1] - Fixed Platform Mass [kg] +% - Fph [1x1] - Fixed Platform Height [m] +% - Fpr [1x1] - Fixed Platform Radius [m] +% - Mpm [1x1] - Mobile Platform Mass [kg] +% - Mph [1x1] - Mobile Platform Height [m] +% - Mpr [1x1] - Mobile Platform Radius [m] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - platform_F [struct] - structure with the following fields: +% - type = 1 +% - M [1x1] - Fixed Platform Mass [kg] +% - I [3x3] - Fixed Platform Inertia matrix [kg*m^2] +% - H [1x1] - Fixed Platform Height [m] +% - R [1x1] - Fixed Platform Radius [m] +% - platform_M [struct] - structure with the following fields: +% - M [1x1] - Mobile Platform Mass [kg] +% - I [3x3] - Mobile Platform Inertia matrix [kg*m^2] +% - H [1x1] - Mobile Platform Height [m] +% - R [1x1] - Mobile Platform Radius [m] + + arguments + stewart + args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1 + args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 + args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 125e-3 + args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 1 + args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 + args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 100e-3 + end + + I_F = diag([1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ... + 1/12*args.Fpm * (3*args.Fpr^2 + args.Fph^2), ... + 1/2 *args.Fpm * args.Fpr^2]); + + I_M = diag([1/12*args.Mpm * (3*args.Mpr^2 + args.Mph^2), ... + 1/12*args.Mpm * (3*args.Mpr^2 + args.Mph^2), ... + 1/2 *args.Mpm * args.Mpr^2]); + + stewart.platform_F.type = 1; + + stewart.platform_F.I = I_F; + stewart.platform_F.M = args.Fpm; + stewart.platform_F.R = args.Fpr; + stewart.platform_F.H = args.Fph; + + stewart.platform_M.type = 1; + + stewart.platform_M.I = I_M; + stewart.platform_M.M = args.Mpm; + stewart.platform_M.R = args.Mpr; + stewart.platform_M.H = args.Mph; + +end +#+end_src + +*** =initializeCylindricalStruts=: Define the inertia of cylindrical struts + +#+begin_src matlab :tangle matlab/src/initializeCylindricalStruts.m :comments none :mkdirp yes :eval no +function [stewart] = initializeCylindricalStruts(stewart, args) +% initializeCylindricalStruts - Define the mass and moment of inertia of cylindrical struts +% +% Syntax: [stewart] = initializeCylindricalStruts(args) +% +% Inputs: +% - args - Structure with the following fields: +% - Fsm [1x1] - Mass of the Fixed part of the struts [kg] +% - Fsh [1x1] - Height of cylinder for the Fixed part of the struts [m] +% - Fsr [1x1] - Radius of cylinder for the Fixed part of the struts [m] +% - Msm [1x1] - Mass of the Mobile part of the struts [kg] +% - Msh [1x1] - Height of cylinder for the Mobile part of the struts [m] +% - Msr [1x1] - Radius of cylinder for the Mobile part of the struts [m] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - struts_F [struct] - structure with the following fields: +% - M [6x1] - Mass of the Fixed part of the struts [kg] +% - I [3x3x6] - Moment of Inertia for the Fixed part of the struts [kg*m^2] +% - H [6x1] - Height of cylinder for the Fixed part of the struts [m] +% - R [6x1] - Radius of cylinder for the Fixed part of the struts [m] +% - struts_M [struct] - structure with the following fields: +% - M [6x1] - Mass of the Mobile part of the struts [kg] +% - I [3x3x6] - Moment of Inertia for the Mobile part of the struts [kg*m^2] +% - H [6x1] - Height of cylinder for the Mobile part of the struts [m] +% - R [6x1] - Radius of cylinder for the Mobile part of the struts [m] + + arguments + stewart + args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 0.1 + args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3 + args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 + args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 0.1 + args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 50e-3 + args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 + end + + stewart.struts_M.type = 1; + + stewart.struts_M.M = args.Msm; + stewart.struts_M.R = args.Msr; + stewart.struts_M.H = args.Msh; + + stewart.struts_F.type = 1; + + stewart.struts_F.M = args.Fsm; + stewart.struts_F.R = args.Fsr; + stewart.struts_F.H = args.Fsh; + +end +#+end_src + +*** =initializeStrutDynamics=: Add Stiffness and Damping properties of each strut + +#+begin_src matlab :tangle matlab/src/initializeStrutDynamics.m :comments none :mkdirp yes :eval no +function [stewart] = initializeStrutDynamics(stewart, args) +% initializeStrutDynamics - Add Stiffness and Damping properties of each strut +% +% Syntax: [stewart] = initializeStrutDynamics(args) +% +% Inputs: +% - args - Structure with the following fields: +% - K [6x1] - Stiffness of each strut [N/m] +% - C [6x1] - Damping of each strut [N/(m/s)] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - actuators.type = 1 +% - actuators.K [6x1] - Stiffness of each strut [N/m] +% - actuators.C [6x1] - Damping of each strut [N/(m/s)] + + arguments + stewart + args.type char {mustBeMember(args.type,{'1dof', '2dof', 'flexible'})} = '1dof' + args.k (1,1) double {mustBeNumeric, mustBeNonnegative} = 20e6 + args.ke (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e6 + args.ka (1,1) double {mustBeNumeric, mustBeNonnegative} = 60e6 + args.c (1,1) double {mustBeNumeric, mustBeNonnegative} = 2e1 + args.ce (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e6 + args.ca (1,1) double {mustBeNumeric, mustBeNonnegative} = 10 + + args.F_gain (1,1) double {mustBeNumeric} = 1 + args.me (1,1) double {mustBeNumeric} = 0.01 + args.ma (1,1) double {mustBeNumeric} = 0.01 + end + + if strcmp(args.type, '1dof') + stewart.actuators.type = 1; + elseif strcmp(args.type, '2dof') + stewart.actuators.type = 2; + elseif strcmp(args.type, 'flexible') + stewart.actuators.type = 3; + end + + stewart.actuators.k = args.k; + stewart.actuators.c = args.c; + + stewart.actuators.ka = args.ka; + stewart.actuators.ca = args.ca; + + stewart.actuators.ke = args.ke; + stewart.actuators.ce = args.ce; + + stewart.actuators.F_gain = args.F_gain; + + stewart.actuators.ma = args.ma; + stewart.actuators.me = args.me; + +end +#+end_src + +*** =initializeJointDynamics=: Add Stiffness and Damping properties for spherical joints + +#+begin_src matlab :tangle matlab/src/initializeJointDynamics.m :comments none :mkdirp yes :eval no +function [stewart] = initializeJointDynamics(stewart, args) +% initializeJointDynamics - Add Stiffness and Damping properties for the spherical joints +% +% Syntax: [stewart] = initializeJointDynamics(args) +% +% Inputs: +% - args - Structure with the following fields: +% - type_F - 'universal', 'spherical', 'universal_p', 'spherical_p' +% - type_M - 'universal', 'spherical', 'universal_p', 'spherical_p' +% - Kf_M [6x1] - Bending (Rx, Ry) Stiffness for each top joints [(N.m)/rad] +% - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad] +% - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)] +% - Ct_M [6x1] - Torsion (Rz) Damping of each top joint [(N.m)/(rad/s)] +% - Kf_F [6x1] - Bending (Rx, Ry) Stiffness for each bottom joints [(N.m)/rad] +% - Kt_F [6x1] - Torsion (Rz) Stiffness for each bottom joints [(N.m)/rad] +% - Cf_F [6x1] - Bending (Rx, Ry) Damping of each bottom joint [(N.m)/(rad/s)] +% - Cf_F [6x1] - Torsion (Rz) Damping of each bottom joint [(N.m)/(rad/s)] +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - stewart.joints_F and stewart.joints_M: +% - type - 1 (universal), 2 (spherical), 3 (universal perfect), 4 (spherical perfect) +% - Kx, Ky, Kz [6x1] - Translation (Tx, Ty, Tz) Stiffness [N/m] +% - Kf [6x1] - Flexion (Rx, Ry) Stiffness [(N.m)/rad] +% - Kt [6x1] - Torsion (Rz) Stiffness [(N.m)/rad] +% - Cx, Cy, Cz [6x1] - Translation (Rx, Ry) Damping [N/(m/s)] +% - Cf [6x1] - Flexion (Rx, Ry) Damping [(N.m)/(rad/s)] +% - Cb [6x1] - Torsion (Rz) Damping [(N.m)/(rad/s)] + + arguments + stewart + args.type_F char {mustBeMember(args.type_F,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '2dof' + args.type_M char {mustBeMember(args.type_M,{'2dof', '3dof', '4dof', '6dof', 'flexible'})} = '3dof' + args.Kf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cf_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kt_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ct_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_F (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ka_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Ca_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Kr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.Cr_M (1,1) double {mustBeNumeric, mustBeNonnegative} = 0 + args.K_M double {mustBeNumeric} = zeros(6,6) + args.M_M double {mustBeNumeric} = zeros(6,6) + args.n_xyz_M double {mustBeNumeric} = zeros(2,3) + args.xi_M double {mustBeNumeric} = 0.1 + args.step_file_M char {} = '' + args.K_F double {mustBeNumeric} = zeros(6,6) + args.M_F double {mustBeNumeric} = zeros(6,6) + args.n_xyz_F double {mustBeNumeric} = zeros(2,3) + args.xi_F double {mustBeNumeric} = 0.1 + args.step_file_F char {} = '' + end + + switch args.type_F + case '2dof' + stewart.joints_F.type = 1; + case '3dof' + stewart.joints_F.type = 2; + case '4dof' + stewart.joints_F.type = 3; + case '6dof' + stewart.joints_F.type = 4; + case 'flexible' + stewart.joints_F.type = 5; + otherwise + error("joints_F are not correctly defined") + end + + switch args.type_M + case '2dof' + stewart.joints_M.type = 1; + case '3dof' + stewart.joints_M.type = 2; + case '4dof' + stewart.joints_M.type = 3; + case '6dof' + stewart.joints_M.type = 4; + case 'flexible' + stewart.joints_M.type = 5; + otherwise + error("joints_M are not correctly defined") + end + + stewart.joints_M.Ka = args.Ka_M; + stewart.joints_M.Kr = args.Kr_M; + + stewart.joints_F.Ka = args.Ka_F; + stewart.joints_F.Kr = args.Kr_F; + + stewart.joints_M.Ca = args.Ca_M; + stewart.joints_M.Cr = args.Cr_M; + + stewart.joints_F.Ca = args.Ca_F; + stewart.joints_F.Cr = args.Cr_F; + + stewart.joints_M.Kf = args.Kf_M; + stewart.joints_M.Kt = args.Kt_M; + + stewart.joints_F.Kf = args.Kf_F; + stewart.joints_F.Kt = args.Kt_F; + + stewart.joints_M.Cf = args.Cf_M; + stewart.joints_M.Ct = args.Ct_M; + + stewart.joints_F.Cf = args.Cf_F; + stewart.joints_F.Ct = args.Ct_F; + + stewart.joints_F.M = args.M_F; + stewart.joints_F.K = args.K_F; + stewart.joints_F.n_xyz = args.n_xyz_F; + stewart.joints_F.xi = args.xi_F; + stewart.joints_F.xi = args.xi_F; + stewart.joints_F.step_file = args.step_file_F; + + stewart.joints_M.M = args.M_M; + stewart.joints_M.K = args.K_M; + stewart.joints_M.n_xyz = args.n_xyz_M; + stewart.joints_M.xi = args.xi_M; + stewart.joints_M.step_file = args.step_file_M; + +end +#+end_src + +*** =initializeStewartPose=: Determine the initial stroke in each leg to have the wanted pose + +#+begin_src matlab :tangle matlab/src/initializeStewartPose.m :comments none :mkdirp yes :eval no +function [stewart] = initializeStewartPose(stewart, args) +% initializeStewartPose - Determine the initial stroke in each leg to have the wanted pose +% It uses the inverse kinematic +% +% Syntax: [stewart] = initializeStewartPose(stewart, args) +% +% Inputs: +% - stewart - A structure with the following fields +% - Aa [3x6] - The positions ai expressed in {A} +% - Bb [3x6] - The positions bi expressed in {B} +% - args - Can have the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% +% Outputs: +% - stewart - updated Stewart structure with the added fields: +% - actuators.Leq [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A} + + arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + [Li, dLi] = inverseKinematics(stewart, 'AP', args.AP, 'ARB', args.ARB); + + stewart.actuators.Leq = dLi; + +end +#+end_src + +*** =computeJacobian=: Compute the Jacobian Matrix + +#+begin_src matlab :tangle matlab/src/computeJacobian.m :comments none :mkdirp yes :eval no +function [stewart] = computeJacobian(stewart) +% computeJacobian - +% +% Syntax: [stewart] = computeJacobian(stewart) +% +% Inputs: +% - stewart - With at least the following fields: +% - geometry.As [3x6] - The 6 unit vectors for each strut expressed in {A} +% - geometry.Ab [3x6] - The 6 position of the joints bi expressed in {A} +% - actuators.K [6x1] - Total stiffness of the actuators +% +% Outputs: +% - stewart - With the 3 added field: +% - geometry.J [6x6] - The Jacobian Matrix +% - geometry.K [6x6] - The Stiffness Matrix +% - geometry.C [6x6] - The Compliance Matrix + + assert(isfield(stewart.geometry, 'As'), 'stewart.geometry should have attribute As') + As = stewart.geometry.As; + + assert(isfield(stewart.geometry, 'Ab'), 'stewart.geometry should have attribute Ab') + Ab = stewart.geometry.Ab; + + assert(isfield(stewart.actuators, 'k'), 'stewart.actuators should have attribute k') + Ki = stewart.actuators.k; + + J = [As' , cross(Ab, As)']; + + K = J'*diag(Ki)*J; + + C = inv(K); + + stewart.geometry.J = J; + stewart.geometry.K = K; + stewart.geometry.C = C; + +end +#+end_src + +*** =inverseKinematics=: Compute Inverse Kinematics + +#+begin_src matlab :tangle matlab/src/inverseKinematics.m :comments none :mkdirp yes :eval no +function [Li, dLi] = inverseKinematics(stewart, args) +% inverseKinematics - Compute the needed length of each strut to have the wanted position and orientation of {B} with respect to {A} +% +% Syntax: [stewart] = inverseKinematics(stewart) +% +% Inputs: +% - stewart - A structure with the following fields +% - geometry.Aa [3x6] - The positions ai expressed in {A} +% - geometry.Bb [3x6] - The positions bi expressed in {B} +% - geometry.l [6x1] - Length of each strut +% - args - Can have the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% +% Outputs: +% - Li [6x1] - The 6 needed length of the struts in [m] to have the wanted pose of {B} w.r.t. {A} +% - dLi [6x1] - The 6 needed displacement of the struts from the initial position in [m] to have the wanted pose of {B} w.r.t. {A} + + arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + end + + assert(isfield(stewart.geometry, 'Aa'), 'stewart.geometry should have attribute Aa') + Aa = stewart.geometry.Aa; + + assert(isfield(stewart.geometry, 'Bb'), 'stewart.geometry should have attribute Bb') + Bb = stewart.geometry.Bb; + + assert(isfield(stewart.geometry, 'l'), 'stewart.geometry should have attribute l') + l = stewart.geometry.l; + + Li = sqrt(args.AP'*args.AP + diag(Bb'*Bb) + diag(Aa'*Aa) - (2*args.AP'*Aa)' + (2*args.AP'*(args.ARB*Bb))' - diag(2*(args.ARB*Bb)'*Aa)); + + dLi = Li-l; + +end +#+end_src + +*** =displayArchitecture=: 3D plot of the Stewart platform architecture +:PROPERTIES: +:header-args:matlab+: :tangle matlab/src/displayArchitecture.m +:header-args:matlab+: :comments none :mkdirp yes :eval no +:END: +<> + +This Matlab function is accessible [[file:../src/displayArchitecture.m][here]]. + +**** Function description +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab +function [] = displayArchitecture(stewart, args) +% displayArchitecture - 3D plot of the Stewart platform architecture +% +% Syntax: [] = displayArchitecture(args) +% +% Inputs: +% - stewart +% - args - Structure with the following fields: +% - AP [3x1] - The wanted position of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% - ARB [3x3] - The rotation matrix that gives the wanted orientation of {B} with respect to {A} +% - F_color [color] - Color used for the Fixed elements +% - M_color [color] - Color used for the Mobile elements +% - L_color [color] - Color used for the Legs elements +% - frames [true/false] - Display the Frames +% - legs [true/false] - Display the Legs +% - joints [true/false] - Display the Joints +% - labels [true/false] - Display the Labels +% - platforms [true/false] - Display the Platforms +% - views ['all', 'xy', 'yz', 'xz', 'default'] - +% +% Outputs: +#+end_src + +**** Optional Parameters +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab +arguments + stewart + args.AP (3,1) double {mustBeNumeric} = zeros(3,1) + args.ARB (3,3) double {mustBeNumeric} = eye(3) + args.F_color = [0 0.4470 0.7410] + args.M_color = [0.8500 0.3250 0.0980] + args.L_color = [0 0 0] + args.frames logical {mustBeNumericOrLogical} = true + args.legs logical {mustBeNumericOrLogical} = true + args.joints logical {mustBeNumericOrLogical} = true + args.labels logical {mustBeNumericOrLogical} = true + args.platforms logical {mustBeNumericOrLogical} = true + args.views char {mustBeMember(args.views,{'all', 'xy', 'xz', 'yz', 'default'})} = 'default' +end +#+end_src + +**** Check the =stewart= structure elements +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab +assert(isfield(stewart.platform_F, 'FO_A'), 'stewart.platform_F should have attribute FO_A') +FO_A = stewart.platform_F.FO_A; + +assert(isfield(stewart.platform_M, 'MO_B'), 'stewart.platform_M should have attribute MO_B') +MO_B = stewart.platform_M.MO_B; + +assert(isfield(stewart.geometry, 'H'), 'stewart.geometry should have attribute H') +H = stewart.geometry.H; + +assert(isfield(stewart.platform_F, 'Fa'), 'stewart.platform_F should have attribute Fa') +Fa = stewart.platform_F.Fa; + +assert(isfield(stewart.platform_M, 'Mb'), 'stewart.platform_M should have attribute Mb') +Mb = stewart.platform_M.Mb; +#+end_src + + +**** Figure Creation, Frames and Homogeneous transformations +:PROPERTIES: +:UNNUMBERED: t +:END: + +The reference frame of the 3d plot corresponds to the frame $\{F\}$. +#+begin_src matlab +if ~strcmp(args.views, 'all') + figure; +else + f = figure('visible', 'off'); +end + +hold on; +#+end_src + +We first compute homogeneous matrices that will be useful to position elements on the figure where the reference frame is $\{F\}$. +#+begin_src matlab +FTa = [eye(3), FO_A; ... + zeros(1,3), 1]; +ATb = [args.ARB, args.AP; ... + zeros(1,3), 1]; +BTm = [eye(3), -MO_B; ... + zeros(1,3), 1]; + +FTm = FTa*ATb*BTm; +#+end_src + +Let's define a parameter that define the length of the unit vectors used to display the frames. +#+begin_src matlab +d_unit_vector = H/4; +#+end_src + +Let's define a parameter used to position the labels with respect to the center of the element. +#+begin_src matlab +d_label = H/20; +#+end_src + +**** Fixed Base elements +:PROPERTIES: +:UNNUMBERED: t +:END: +Let's first plot the frame $\{F\}$. +#+begin_src matlab +Ff = [0, 0, 0]; +if args.frames + quiver3(Ff(1)*ones(1,3), Ff(2)*ones(1,3), Ff(3)*ones(1,3), ... + [d_unit_vector 0 0], [0 d_unit_vector 0], [0 0 d_unit_vector], '-', 'Color', args.F_color) + + if args.labels + text(Ff(1) + d_label, ... + Ff(2) + d_label, ... + Ff(3) + d_label, '$\{F\}$', 'Color', args.F_color); + end +end +#+end_src + +Now plot the frame $\{A\}$ fixed to the Base. +#+begin_src matlab +if args.frames + quiver3(FO_A(1)*ones(1,3), FO_A(2)*ones(1,3), FO_A(3)*ones(1,3), ... + [d_unit_vector 0 0], [0 d_unit_vector 0], [0 0 d_unit_vector], '-', 'Color', args.F_color) + + if args.labels + text(FO_A(1) + d_label, ... + FO_A(2) + d_label, ... + FO_A(3) + d_label, '$\{A\}$', 'Color', args.F_color); + end +end +#+end_src + +Let's then plot the circle corresponding to the shape of the Fixed base. +#+begin_src matlab +if args.platforms && stewart.platform_F.type == 1 + theta = [0:0.01:2*pi+0.01]; % Angles [rad] + v = null([0; 0; 1]'); % Two vectors that are perpendicular to the circle normal + center = [0; 0; 0]; % Center of the circle + radius = stewart.platform_F.R; % Radius of the circle [m] + + points = center*ones(1, length(theta)) + radius*(v(:,1)*cos(theta) + v(:,2)*sin(theta)); + + plot3(points(1,:), ... + points(2,:), ... + points(3,:), '-', 'Color', args.F_color); +end +#+end_src + +Let's now plot the position and labels of the Fixed Joints +#+begin_src matlab +if args.joints + scatter3(Fa(1,:), ... + Fa(2,:), ... + Fa(3,:), 'MarkerEdgeColor', args.F_color); + if args.labels + for i = 1:size(Fa,2) + text(Fa(1,i) + d_label, ... + Fa(2,i), ... + Fa(3,i), sprintf('$a_{%i}$', i), 'Color', args.F_color); + end + end +end +#+end_src + +**** Mobile Platform elements +:PROPERTIES: +:UNNUMBERED: t +:END: + +Plot the frame $\{M\}$. +#+begin_src matlab +Fm = FTm*[0; 0; 0; 1]; % Get the position of frame {M} w.r.t. {F} + +if args.frames + FM_uv = FTm*[d_unit_vector*eye(3); zeros(1,3)]; % Rotated Unit vectors + quiver3(Fm(1)*ones(1,3), Fm(2)*ones(1,3), Fm(3)*ones(1,3), ... + FM_uv(1,1:3), FM_uv(2,1:3), FM_uv(3,1:3), '-', 'Color', args.M_color) + + if args.labels + text(Fm(1) + d_label, ... + Fm(2) + d_label, ... + Fm(3) + d_label, '$\{M\}$', 'Color', args.M_color); + end +end +#+end_src + +Plot the frame $\{B\}$. +#+begin_src matlab +FB = FO_A + args.AP; + +if args.frames + FB_uv = FTm*[d_unit_vector*eye(3); zeros(1,3)]; % Rotated Unit vectors + quiver3(FB(1)*ones(1,3), FB(2)*ones(1,3), FB(3)*ones(1,3), ... + FB_uv(1,1:3), FB_uv(2,1:3), FB_uv(3,1:3), '-', 'Color', args.M_color) + + if args.labels + text(FB(1) - d_label, ... + FB(2) + d_label, ... + FB(3) + d_label, '$\{B\}$', 'Color', args.M_color); + end +end +#+end_src + +Let's then plot the circle corresponding to the shape of the Mobile platform. +#+begin_src matlab +if args.platforms && stewart.platform_M.type == 1 + theta = [0:0.01:2*pi+0.01]; % Angles [rad] + v = null((FTm(1:3,1:3)*[0;0;1])'); % Two vectors that are perpendicular to the circle normal + center = Fm(1:3); % Center of the circle + radius = stewart.platform_M.R; % Radius of the circle [m] + + points = center*ones(1, length(theta)) + radius*(v(:,1)*cos(theta) + v(:,2)*sin(theta)); + + plot3(points(1,:), ... + points(2,:), ... + points(3,:), '-', 'Color', args.M_color); +end +#+end_src + +Plot the position and labels of the rotation joints fixed to the mobile platform. +#+begin_src matlab +if args.joints + Fb = FTm*[Mb;ones(1,6)]; + + scatter3(Fb(1,:), ... + Fb(2,:), ... + Fb(3,:), 'MarkerEdgeColor', args.M_color); + + if args.labels + for i = 1:size(Fb,2) + text(Fb(1,i) + d_label, ... + Fb(2,i), ... + Fb(3,i), sprintf('$b_{%i}$', i), 'Color', args.M_color); + end + end +end +#+end_src + +**** Legs +:PROPERTIES: +:UNNUMBERED: t +:END: +Plot the legs connecting the joints of the fixed base to the joints of the mobile platform. +#+begin_src matlab +if args.legs + for i = 1:6 + plot3([Fa(1,i), Fb(1,i)], ... + [Fa(2,i), Fb(2,i)], ... + [Fa(3,i), Fb(3,i)], '-', 'Color', args.L_color); + + if args.labels + text((Fa(1,i)+Fb(1,i))/2 + d_label, ... + (Fa(2,i)+Fb(2,i))/2, ... + (Fa(3,i)+Fb(3,i))/2, sprintf('$%i$', i), 'Color', args.L_color); + end + end +end +#+end_src + +**** Figure parameters +#+begin_src matlab +switch args.views + case 'default' + view([1 -0.6 0.4]); + case 'xy' + view([0 0 1]); + case 'xz' + view([0 -1 0]); + case 'yz' + view([1 0 0]); +end +axis equal; +axis off; +#+end_src + +**** Subplots +#+begin_src matlab +if strcmp(args.views, 'all') + hAx = findobj('type', 'axes'); + + figure; + s1 = subplot(2,2,1); + copyobj(get(hAx(1), 'Children'), s1); + view([0 0 1]); + axis equal; + axis off; + title('Top') + + s2 = subplot(2,2,2); + copyobj(get(hAx(1), 'Children'), s2); + view([1 -0.6 0.4]); + axis equal; + axis off; + + s3 = subplot(2,2,3); + copyobj(get(hAx(1), 'Children'), s3); + view([1 0 0]); + axis equal; + axis off; + title('Front') + + s4 = subplot(2,2,4); + copyobj(get(hAx(1), 'Children'), s4); + view([0 -1 0]); + axis equal; + axis off; + title('Side') + + close(f); +end +#+end_src + + +*** =describeStewartPlatform=: Display some text describing the current defined Stewart Platform +:PROPERTIES: +:header-args:matlab+: :tangle matlab/src/describeStewartPlatform.m +:header-args:matlab+: :comments none :mkdirp yes :eval no +:END: +<> + +This Matlab function is accessible [[file:../src/describeStewartPlatform.m][here]]. + +**** Function description +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab +function [] = describeStewartPlatform(stewart) +% describeStewartPlatform - Display some text describing the current defined Stewart Platform +% +% Syntax: [] = describeStewartPlatform(args) +% +% Inputs: +% - stewart +% +% Outputs: +#+end_src + +**** Optional Parameters +:PROPERTIES: +:UNNUMBERED: t +:END: +#+begin_src matlab +arguments + stewart +end +#+end_src + +**** Geometry +#+begin_src matlab +fprintf('GEOMETRY:\n') +fprintf('- The height between the fixed based and the top platform is %.3g [mm].\n', 1e3*stewart.geometry.H) + +if stewart.platform_M.MO_B(3) > 0 + fprintf('- Frame {A} is located %.3g [mm] above the top platform.\n', 1e3*stewart.platform_M.MO_B(3)) +else + fprintf('- Frame {A} is located %.3g [mm] below the top platform.\n', - 1e3*stewart.platform_M.MO_B(3)) +end + +fprintf('- The initial length of the struts are:\n') +fprintf('\t %.3g, %.3g, %.3g, %.3g, %.3g, %.3g [mm]\n', 1e3*stewart.geometry.l) +fprintf('\n') +#+end_src + +**** Actuators +#+begin_src matlab +fprintf('ACTUATORS:\n') +if stewart.actuators.type == 1 + fprintf('- The actuators are modelled as 1DoF.\n') + fprintf('- The Stiffness and Damping of each actuators is:\n') + fprintf('\t k = %.0e [N/m] \t c = %.0e [N/(m/s)]\n', stewart.actuators.K(1), stewart.actuators.C(1)) +elseif stewart.actuators.type == 2 + fprintf('- The actuators are modelled as 2DoF (APA).\n') + fprintf('- The vertical stiffness and damping contribution of the piezoelectric stack is:\n') + fprintf('\t ka = %.0e [N/m] \t ca = %.0e [N/(m/s)]\n', stewart.actuators.Ka(1), stewart.actuators.Ca(1)) + fprintf('- Vertical stiffness when the piezoelectric stack is removed is:\n') + fprintf('\t kr = %.0e [N/m] \t cr = %.0e [N/(m/s)]\n', stewart.actuators.Kr(1), stewart.actuators.Cr(1)) +elseif stewart.actuators.type == 3 + fprintf('- The actuators are modelled with a flexible element (FEM).\n') +end +fprintf('\n') +#+end_src + +**** Joints +#+begin_src matlab +fprintf('JOINTS:\n') +#+end_src + +Type of the joints on the fixed base. +#+begin_src matlab +switch stewart.joints_F.type + case 1 + fprintf('- The joints on the fixed based are universal joints (2DoF)\n') + case 2 + fprintf('- The joints on the fixed based are spherical joints (3DoF)\n') +end +#+end_src + +Type of the joints on the mobile platform. +#+begin_src matlab +switch stewart.joints_M.type + case 1 + fprintf('- The joints on the mobile based are universal joints (2DoF)\n') + case 2 + fprintf('- The joints on the mobile based are spherical joints (3DoF)\n') +end +#+end_src + +Position of the fixed joints +#+begin_src matlab +fprintf('- The position of the joints on the fixed based with respect to {F} are (in [mm]):\n') +fprintf('\t % .3g \t % .3g \t % .3g\n', 1e3*stewart.platform_F.Fa) +#+end_src + +Position of the mobile joints +#+begin_src matlab +fprintf('- The position of the joints on the mobile based with respect to {M} are (in [mm]):\n') +fprintf('\t % .3g \t % .3g \t % .3g\n', 1e3*stewart.platform_M.Mb) +fprintf('\n') +#+end_src + +**** Kinematics +#+begin_src matlab +fprintf('KINEMATICS:\n') + +if isfield(stewart.kinematics, 'K') + fprintf('- The Stiffness matrix K is (in [N/m]):\n') + fprintf('\t % .0e \t % .0e \t % .0e \t % .0e \t % .0e \t % .0e\n', stewart.kinematics.K) +end + +if isfield(stewart.kinematics, 'C') + fprintf('- The Damping matrix C is (in [m/N]):\n') + fprintf('\t % .0e \t % .0e \t % .0e \t % .0e \t % .0e \t % .0e\n', stewart.kinematics.C) +end +#+end_src + +* Footnotes + +[fn:1]Different architecture exists, typically referred as "6-SPS" (Spherical, Prismatic, Spherical) or "6-UPS" (Universal, Prismatic, Spherical)