From 2122ecbf74bf44951d7e6df8f83e91089407aa2b Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Thu, 13 Feb 2020 15:01:45 +0100 Subject: [PATCH] Rework - New Simscape --- docs/cubic-configuration.html | 88 ++++++++++++++++++++++++----------- org/cubic-configuration.org | 66 +++++++++++++++++--------- 2 files changed, 107 insertions(+), 47 deletions(-) diff --git a/docs/cubic-configuration.html b/docs/cubic-configuration.html index 15077f9..8303f92 100644 --- a/docs/cubic-configuration.html +++ b/docs/cubic-configuration.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Cubic configuration for the Stewart Platform @@ -274,33 +274,33 @@ for the JavaScript code in this tag.
  • 1.2. Cubic Stewart platform centered with the cube center - Jacobian not estimated at the cube center
  • 1.3. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the cube center
  • 1.4. Cubic Stewart platform not centered with the cube center - Jacobian estimated at the Stewart platform center
  • -
  • 1.5. Conclusion
  • +
  • 1.5. Conclusion
  • 2. Configuration with the Cube’s center above the mobile platform
  • 3. Cubic size analysis
  • 4. Dynamic Coupling in the Cartesian Frame
  • 5. Dynamic Coupling between actuators and sensors of each strut
  • 6. Functions @@ -836,8 +836,8 @@ stewart = initializeCylindricalPlatforms(stewart, 'Fpr' -
    -

    1.5 Conclusion

    +
    +

    1.5 Conclusion

    @@ -1162,8 +1162,8 @@ FOc = H + MO_B; % Cente

    -
    -

    2.2 Conclusion

    +
    +

    2.2 Conclusion

    @@ -1237,8 +1237,8 @@ We also find that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) are varyi

    -
    -

    3.2 Conclusion

    +
    +

    3.2 Conclusion

    We observe that \(k_{\theta_x} = k_{\theta_y}\) and \(k_{\theta_z}\) increase linearly with the cube size. @@ -1373,6 +1373,15 @@ stewart = initializeInertialSensor(stewart);

    +

    +No flexibility below the Stewart platform and no payload. +

    +
    +
    ground = initializeGround('type', 'none');
    +payload = initializePayload('type', 'none');
    +
    +
    +

    The obtain geometry is shown in figure 10.

    @@ -1388,19 +1397,19 @@ The obtain geometry is shown in figure 10. We now identify the dynamics from forces applied in each strut \(\bm{\tau}\) to the displacement of each strut \(d \bm{\mathcal{L}}\).

    -
    open('simulink/stewart_active_damping.slx')
    +
    open('stewart_platform_model.slx')
     
     %% Options for Linearized
     options = linearizeOptions;
     options.SampleTime = 0;
     
     %% Name of the Simulink File
    -mdl = 'stewart_active_damping';
    +mdl = 'stewart_platform_model';
     
     %% Input/Output definition
     clear io; io_i = 1;
    -io(io_i) = linio([mdl, '/F'],   1, 'openinput');  io_i = io_i + 1; % Actuator Force Inputs [N]
    -io(io_i) = linio([mdl, '/Dm'],  1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m]
    +io(io_i) = linio([mdl, '/Controller'],        1, 'openinput');  io_i = io_i + 1; % Actuator Force Inputs [N]
    +io(io_i) = linio([mdl, '/Stewart Platform'],  1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m]
     
     %% Run the linearization
     G = linearize(mdl, io, options);
    @@ -1508,6 +1517,15 @@ stewart = initializeInertialSensor(stewart);
     
    +

    +No flexibility below the Stewart platform and no payload. +

    +
    +
    ground = initializeGround('type', 'none');
    +payload = initializePayload('type', 'none');
    +
    +
    +

    The obtain geometry is shown in figure 12.

    @@ -1522,19 +1540,19 @@ The obtain geometry is shown in figure 12. We now identify the dynamics from forces applied in each strut \(\bm{\tau}\) to the displacement of each strut \(d \bm{\mathcal{L}}\).

    -
    open('simulink/stewart_active_damping.slx')
    +
    open('stewart_platform_model.slx')
     
     %% Options for Linearized
     options = linearizeOptions;
     options.SampleTime = 0;
     
     %% Name of the Simulink File
    -mdl = 'stewart_active_damping';
    +mdl = 'stewart_platform_model';
     
     %% Input/Output definition
     clear io; io_i = 1;
    -io(io_i) = linio([mdl, '/F'],   1, 'openinput');  io_i = io_i + 1; % Actuator Force Inputs [N]
    -io(io_i) = linio([mdl, '/Dm'],  1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m]
    +io(io_i) = linio([mdl, '/Controller'],        1, 'openinput');  io_i = io_i + 1; % Actuator Force Inputs [N]
    +io(io_i) = linio([mdl, '/Stewart Platform'],  1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m]
     
     %% Run the linearization
     G = linearize(mdl, io, options);
    @@ -1577,8 +1595,8 @@ This was expected as the mass matrix is not diagonal (the Center of Mass of the
     
    -
    -

    4.3 Conclusion

    +
    +

    4.3 Conclusion

    @@ -1645,6 +1663,15 @@ stewart = initializeInertialSensor(stewart);

    +

    +No flexibility below the Stewart platform and no payload. +

    +
    +
    ground = initializeGround('type', 'none');
    +payload = initializePayload('type', 'none');
    +
    +
    +

    stewart_architecture_coupling_struts_cubic.png @@ -1703,6 +1730,15 @@ stewart = initializeInertialSensor(stewart);

    +

    +No flexibility below the Stewart platform and no payload. +

    +
    +
    ground = initializeGround('type', 'none');
    +payload = initializePayload('type', 'none');
    +
    +
    +

    stewart_architecture_coupling_struts_non_cubic.png @@ -1730,12 +1766,12 @@ And we identify the dynamics from the actuator forces \(\tau_{i}\) to the relati

    -
    -

    5.3 Conclusion

    +
    +

    5.3 Conclusion

    -The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut. +The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut and thus provides no advantages for decentralized control.

    @@ -1902,7 +1938,7 @@ stewart.platform_M.Mb = Mb;

    Author: Dehaeze Thomas

    -

    Created: 2020-02-12 mer. 18:26

    +

    Created: 2020-02-13 jeu. 15:01

    diff --git a/org/cubic-configuration.org b/org/cubic-configuration.org index fad97c3..f2270aa 100644 --- a/org/cubic-configuration.org +++ b/org/cubic-configuration.org @@ -647,6 +647,12 @@ And we set small mass for the struts. stewart = initializeInertialSensor(stewart); #+end_src +No flexibility below the Stewart platform and no payload. +#+begin_src matlab + ground = initializeGround('type', 'none'); + payload = initializePayload('type', 'none'); +#+end_src + The obtain geometry is shown in figure [[fig:stewart_cubic_conf_decouple_dynamics]]. #+begin_src matlab :exports none @@ -664,19 +670,19 @@ The obtain geometry is shown in figure [[fig:stewart_cubic_conf_decouple_dynamic We now identify the dynamics from forces applied in each strut $\bm{\tau}$ to the displacement of each strut $d \bm{\mathcal{L}}$. #+begin_src matlab - open('simulink/stewart_active_damping.slx') + open('stewart_platform_model.slx') %% Options for Linearized options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File - mdl = 'stewart_active_damping'; + mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Dm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m] %% Run the linearization G = linearize(mdl, io, options); @@ -826,6 +832,12 @@ And we set small mass for the struts. stewart = initializeInertialSensor(stewart); #+end_src +No flexibility below the Stewart platform and no payload. +#+begin_src matlab + ground = initializeGround('type', 'none'); + payload = initializePayload('type', 'none'); +#+end_src + The obtain geometry is shown in figure [[fig:stewart_cubic_conf_mass_above]]. #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false, 'view', 'all'); @@ -842,19 +854,19 @@ The obtain geometry is shown in figure [[fig:stewart_cubic_conf_mass_above]]. We now identify the dynamics from forces applied in each strut $\bm{\tau}$ to the displacement of each strut $d \bm{\mathcal{L}}$. #+begin_src matlab - open('simulink/stewart_active_damping.slx') + open('stewart_platform_model.slx') %% Options for Linearized options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File - mdl = 'stewart_active_damping'; + mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Dm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m] %% Run the linearization G = linearize(mdl, io, options); @@ -1016,6 +1028,12 @@ Let's generate a Cubic architecture where the cube's center and the frames $\{A\ stewart = initializeInertialSensor(stewart); #+end_src +No flexibility below the Stewart platform and no payload. +#+begin_src matlab + ground = initializeGround('type', 'none'); + payload = initializePayload('type', 'none'); +#+end_src + #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false, 'view', 'all'); #+end_src @@ -1032,19 +1050,19 @@ Let's generate a Cubic architecture where the cube's center and the frames $\{A\ And we identify the dynamics from the actuator forces $\tau_{i}$ to the relative motion sensors $\delta \mathcal{L}_{i}$ (Figure [[fig:coupling_struts_relative_sensor_cubic]]) and to the force sensors $\tau_{m,i}$ (Figure [[fig:coupling_struts_force_sensor_cubic]]). #+begin_src matlab :exports none - open('simulink/stewart_active_damping.slx') + open('stewart_platform_model.slx') %% Options for Linearized options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File - mdl = 'stewart_active_damping'; + mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Dm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m] %% Run the linearization G = linearize(mdl, io, options); @@ -1101,8 +1119,8 @@ And we identify the dynamics from the actuator forces $\tau_{i}$ to the relative #+begin_src matlab :exports none %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Fm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N] %% Run the linearization G = linearize(mdl, io, options); @@ -1181,6 +1199,12 @@ Now we generate a Stewart platform which is not cubic but with approximately the stewart = initializeInertialSensor(stewart); #+end_src +No flexibility below the Stewart platform and no payload. +#+begin_src matlab + ground = initializeGround('type', 'none'); + payload = initializePayload('type', 'none'); +#+end_src + #+begin_src matlab :exports none displayArchitecture(stewart, 'labels', false, 'view', 'all'); #+end_src @@ -1197,19 +1221,19 @@ Now we generate a Stewart platform which is not cubic but with approximately the And we identify the dynamics from the actuator forces $\tau_{i}$ to the relative motion sensors $\delta \mathcal{L}_{i}$ (Figure [[fig:coupling_struts_relative_sensor_non_cubic]]) and to the force sensors $\tau_{m,i}$ (Figure [[fig:coupling_struts_force_sensor_non_cubic]]). #+begin_src matlab :exports none - open('simulink/stewart_active_damping.slx') + open('stewart_platform_model.slx') %% Options for Linearized options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File - mdl = 'stewart_active_damping'; + mdl = 'stewart_platform_model'; %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Dm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'dLm'); io_i = io_i + 1; % Relative Displacement Outputs [m] %% Run the linearization G = linearize(mdl, io, options); @@ -1266,8 +1290,8 @@ And we identify the dynamics from the actuator forces $\tau_{i}$ to the relative #+begin_src matlab :exports none %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] - io(io_i) = linio([mdl, '/Fm'], 1, 'openoutput'); io_i = io_i + 1; % Displacement of each leg [m] + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Force Inputs [N] + io(io_i) = linio([mdl, '/Stewart Platform'], 1, 'openoutput', [], 'Taum'); io_i = io_i + 1; % Force Sensor Outputs [N] %% Run the linearization G = linearize(mdl, io, options); @@ -1323,7 +1347,7 @@ And we identify the dynamics from the actuator forces $\tau_{i}$ to the relative ** Conclusion #+begin_important - The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut. + The Cubic architecture seems to not have any significant effect on the coupling between actuator and sensors of each strut and thus provides no advantages for decentralized control. #+end_important * Functions