UP | HOME

Stewart Platform - Simscape Model

Table of Contents

In this document is explained how the Simscape model of the Stewart Platform is implemented.

It is divided in the following sections:

1 Parameters used for the Simscape Model

The Simscape Model of the Stewart Platform is working with the stewart structure generated using the functions described here.

All the geometry and inertia of the mechanical elements are defined in the stewart structure.

By updating the stewart structure in the workspace, the Simscape model will be automatically updated.

Thus, nothing should be changed by hand inside the Simscape model.

The main advantage to have all the parameters defined in one structure (and not hard-coded in some simulink blocs) it that we can easily change the Stewart architecture/parameters in a Matlab script to perform some parametric study for instance.

2 Simulation Configuration - Configuration reference

As multiple simulink files will be used for simulation and tests, it is very useful to determine good simulation configuration that will be shared among all the simulink files.

This is done using something called “Configuration Reference” (documentation).

Basically, the configuration is stored in a mat file conf_simscape.mat and then loaded in the workspace for it to be accessible to all the simulink models. It is automatically loaded when the Simulink project is open. It can be loaded manually with the command:

load('mat/conf_simscape.mat');

It is however possible to modify specific parameters just for one simulation using the set_param command:

set_param(conf_simscape, 'StopTime', 1);

3 Subsystem Reference

Several Stewart platform models are used, for instance one is use to study the dynamics while the other is used to apply active damping techniques.

However, all the Simscape models share some subsystems using the Subsystem Reference Simulink block (documentation).

These shared subsystems are:

  • Fixed_Based.slx - Fixed base of the Stewart Platform
  • Mobile_Platform.slx - Mobile platform of the Stewart Platform
  • stewart_strut.slx - One strut containing two spherical/universal joints, the actuator as well as the included sensors. A parameter i is initialized to determine what it the “number” of the strut.

These subsystems are referenced from another subsystem called Stewart_Platform.slx shown in figure 1, that basically connect them correctly. This subsystem is then referenced in other simulink models for various purposes (control, analysis, simulation, …).

simscape_stewart_platform.png

Figure 1: Simscape Subsystem of the Stewart platform. Encapsulate the Subsystems corresponding to the fixed base, mobile platform and all the struts.

4 Subsystem - Fixed base and Mobile Platform

Both the fixed base and the mobile platform simscape models share many similarities.

Their are both composed of:

  • a solid body representing the platform
  • 6 rigid transform blocks to go from the frame \(\{F\}\) (resp. \(\{M\}\)) to the location of the joints. These rigid transform are using \({}^F\bm{a}_i\) (resp. \({}^M\bm{b}_i\)) for the position of the joint and \({}^F\bm{R}_{a_i}\) (resp. \({}^M\bm{R}_{b_i}\)) for the orientation of the joint.

As always, the parameters that define the geometry are taken from the stewart structure.

simscape_fixed_base.png

Figure 2: Simscape Model of the Fixed base

simscape_mobile_platform.png

Figure 3: Simscape Model of the Mobile platform

5 Subsystem - Struts

5.1 Strut Configuration

For the Stewart platform, the 6 struts are identical. Thus, all the struts used in the Stewart platform are referring to the same subsystem called stewart_strut.slx and shown in Figure 4.

This strut as the following structure:

  • Universal Joint* connected on the Fixed base
  • Prismatic Joint* for the actuator
  • Spherical Joint* connected on the Mobile platform

This configuration is called UPS.

The other common configuration SPS has the disadvantage of having additional passive degrees-of-freedom corresponding to the rotation of the strut around its main axis. This is why the UPS configuration is used, but other configuration can be easily implemented.

simscape_strut.png

Figure 4: Simscape model of the Stewart platform’s strut

Several sensors are included in the strut that may or may not be used for control:

  • Relative Displacement sensor: gives the relative displacement of the strut.
  • Force sensor: measure the total force applied by the force actuator, the stiffness and damping forces in the direction of the strut.
  • Inertial sensor: measure the absolute motion (velocity) of the top part of the strut in the direction of the strut.

There is two main types of inertial sensor that can be used to measure the absolute motion of the top part of the strut in the direction of the strut:

  • a geophone that measures the absolute velocity above some frequency
  • an accelerometer that measures the absolute acceleration below some frequency

Both inertial sensors are described bellow.

6 Other Elements

6.1 Z-Axis Geophone

6.1.1 Working Principle

From the schematic of the Z-axis geophone shown in Figure 5, we can write the transfer function from the support velocity \(\dot{w}\) to the relative velocity of the inertial mass \(\dot{d}\): \[ \frac{\dot{d}}{\dot{w}} = \frac{-\frac{s^2}{{\omega_0}^2}}{\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1} \] with:

  • \(\omega_0 = \sqrt{\frac{k}{m}}\)
  • \(\xi = \frac{1}{2} \sqrt{\frac{m}{k}}\)

inertial_sensor.png

Figure 5: Schematic of a Z-Axis geophone

We see that at frequencies above \(\omega_0\): \[ \frac{\dot{d}}{\dot{w}} \approx -1 \]

And thus, the measurement of the relative velocity of the mass with respect to its support gives the absolute velocity of the support.

We generally want to have the smallest resonant frequency \(\omega_0\) to measure low frequency absolute velocity, however there is a trade-off between \(\omega_0\) and the mass of the inertial mass.

6.1.2 Initialization function

This Matlab function is accessible here.

function [geophone] = initializeZAxisGeophone(args)
    arguments
        args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % [kg]
        args.freq (1,1) double {mustBeNumeric, mustBePositive} = 1    % [Hz]
    end

    %%
    geophone.m = args.mass;

    %% The Stiffness is set to have the damping resonance frequency
    geophone.k = geophone.m * (2*pi*args.freq)^2;

    %% We set the damping value to have critical damping
    geophone.c = 2*sqrt(geophone.m * geophone.k);

    %% Save
    save('./mat/geophone_z_axis.mat', 'geophone');
end

6.2 Z-Axis Accelerometer

6.2.1 Working Principle

From the schematic of the Z-axis accelerometer shown in Figure 6, we can write the transfer function from the support acceleration \(\ddot{w}\) to the relative position of the inertial mass \(d\): \[ \frac{d}{\ddot{w}} = \frac{-\frac{1}{{\omega_0}^2}}{\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1} \] with:

  • \(\omega_0 = \sqrt{\frac{k}{m}}\)
  • \(\xi = \frac{1}{2} \sqrt{\frac{m}{k}}\)

inertial_sensor.png

Figure 6: Schematic of a Z-Axis geophone

We see that at frequencies below \(\omega_0\): \[ \frac{d}{\ddot{w}} \approx -\frac{1}{{\omega_0}^2} \]

And thus, the measurement of the relative displacement of the mass with respect to its support gives the absolute acceleration of the support.

Note that there is trade-off between:

  • the highest measurable acceleration \(\omega_0\)
  • the sensitivity of the accelerometer which is equal to \(-\frac{1}{{\omega_0}^2}\)

6.2.2 Initialization function

This Matlab function is accessible here.

function [accelerometer] = initializeZAxisAccelerometer(args)
    arguments
        args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % [kg]
        args.freq (1,1) double {mustBeNumeric, mustBePositive} = 5e3  % [Hz]
    end

    %%
    accelerometer.m = args.mass;

    %% The Stiffness is set to have the damping resonance frequency
    accelerometer.k = accelerometer.m * (2*pi*args.freq)^2;

    %% We set the damping value to have critical damping
    accelerometer.c = 2*sqrt(accelerometer.m * accelerometer.k);

    %% Gain correction of the accelerometer to have a unity gain until the resonance
    accelerometer.gain = -accelerometer.k/accelerometer.m;

    %% Save
    save('./mat/accelerometer_z_axis.mat', 'accelerometer');
end

Author: Dehaeze Thomas

Created: 2020-02-11 mar. 15:50