Stewart/Gough
Platform
A Stewart/Gough
Platform (AKA motion base) is an incredibly versatile parallel manipulator that
parameterizes prismatic actuators (linear movement) to achieve a desired
pose. This kinematic structure uses
linear algebra to efficiently perform inverse kinematics calculations that
parameterize actuations and yields the desired
platform position and orientation.
The degrees of
freedom (DOF) depend on how the system’s kinematics are mathematically
modeled. I will introduce the inverse
kinematics calculations with a 3-DOF system (x, y, θ), then expand upon it with
a 6-DOF system (x, y, z, α, β, γ).
6-DOF Systems
|
|
|
|
6-DOF systems with 3, 4, and 6 actuation
links
The base frame
is fixed to a ground surface and secures the actuators. The actuators are oriented upwards and link
to a platform frame that outputs the desired pose. Objects can be mounted to the platform frame
to harness its movement for various applications, including flight simulators,
robotics, and entertainment (theme park attractions, movie/television
production sets, videogaming, etc.).
3-DOF
A 3-DOF system
allows the platform frame to translate along the X and Y axes, and rotate an
angle,
, on a 2D plane. We will first focus on translating the
platform frame along the X-axis without rotation, then introduce translating
along the Y-axis and rotation.
|
|
3-DOF Stewart/Gough Platform expressed
in the base frame
This example
will follow the 2D diagram shown above. The purple line represents link 1 and
the green line represents link 2. The
bottom dashed line represents the base frame and the
top dashed line represents the platform frame.
We begin by
defining the link joint coordinates in the joints’ respective frames:
|
|
System diagram indicating the base frame
and platform frame
We need to
express these joints in their respective frames to properly define the system
kinematics. The goal is to represent the
joints so that their coordinates do not change within their frames. To better illustrate this, I’ve represented
each joint coordinate relative to its frame origin with the orange vectors and
indicated their coordinates within their respective frames:
|
Base Frame |
Platform Frame |
|
|
|
Let’s
Understand Reference Frames!
Imagine there’s
an observer at the base frame origin observing the base frame joints, and
there’s another observer at the platform frame origin observing the platform
frame joints. As the reference frames
move through space (translation or rotation), the joints’ positions appear
unchanged. This is like observing the earth’s rotation from inside
the earth – imperceptible!
Now let’s place
an observer at the base frame origin observing the platform frame joints. As the reference frames move, the observer
will see the platform frame joints moving relative to the base frame. This is like observing the earth’s rotation from the surface of the
moon – perceptible!
The math that solves the
inverse kinematics aims to observe the movement of the platform frame relative
to the base frame origin.
The platform
frame is arbitrarily placed relative to the base frame, but the frames are
related by prismatic actuators. As the
links actuate in the base frame, the platform frame’s pose will change relative
to the base frame. Links in this system
are prismatic joints that achieve linear movement with linear actuators,
hydraulic actuators, or servos (among others).
Base Frame
Coordinates
First, we
define the coordinates of the base of the prismatic joint,
in the base frame. These joints don’t change the position of the
base frame, so we can assume that they are permanently fixed in the base
frame. Frame joints are usually set on
passive U-joints or ball joints that allow the link to hinge freely during
actuation.
Platform
Frame Coordinates
Next, we define
the coordinates of the end of the prismatic joints,
, in the platform frame. These platform frame joints coordinates are
not defined in the base frame, so we define their coordinates relative to the
platform frame origin. These are the
points where the links are fastened to the platform frame, making the platform
frame’s position in the base frame a function of the links’ actuation in the
base frame.
Focus Point
Next, we define
a point on the platform that we are defining an end position for in the base
frame, denoted by
.
This end position achieves is the desired X, Y, and θ of the platform at
the end of actuation, which are the algorithm inputs when calculating the
inverse kinematics.
Link Joint Coordinates Expressed in
their Corresponding Frames
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
|
Link 1
Base Joint |
Base |
|
|
|
Link 2
Base Joint |
Base |
|
|
|
Focus
Point, Desired Pose |
Base |
|
|
|
Link 1
Platform Joint |
Platform |
|
|
|
Link 2
Platform Joint |
Platform |
|
|
* The subscript labels correspond to the
link number in the system
The variable
that this algorithm calculates is vector
, which represents the distance that a
prismatic joint on link
must actuate from its starting position at
so that the focus point in the platform frame
can achieve the desired pose in the base frame.
Remember – the platform joint coordinates in the are not known in the
base frame until the inverse kinematics calculate the actuation length vector,
.
We want to represent the
platform frame in the base frame as a result of
prismatic joint actuations such that the focus point arrives at its desired
pose.
Let’s do
some math!
We start by
defining our system kinematics relative to the reference frames’ origins. Let’s reference the labeled system below with
the understanding that the lengths of link 1 and link 2 from the base frame to
the platform frame are defined by vector
.
|
Base Frame |
Platform Frame |
|
|
|
Now that the
system coordinates are defined, we can set up an equation that sums vectors
that define the coordinates of the link joints in the platform frame. This allows us to relate the link vectors to
the focus point vector,
.
|
Vector
Sum Defining Link Joints in the Platform Frame |
|
|
Recall that the
vector we are solving for is the prismatic joints’ actuation distance,
.
Let’s rearrange the equation we derived from the system kinematics to
isolate
:
|
|
We now define
the known vector values based on the system kinematics:
and
.
These vectors are the joint coordinates we defined in the base frame and
platform frame. We continue to maintain
each coordinate in its corresponding reference frame.
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Link 1
Base Joint |
Base |
|
|
|
|
Link 2
Base Joint |
Base |
|
|
|
|
Link 1
Platform Joint |
Platform |
|
|
|
|
Link 2
Platform Joint |
Platform |
|
|
|
Next, we create
a vector that defines the desired end position of the platform frame:
.
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Focus
Point, Desired Pose |
Base |
|
|
|
Notice that all
the vectors in the kinematic model are represented in the base frame except for
.
All vectors need to be represented in a common
frame to ensure accurate calculations.
Let’s take
in the platform frame and represent it in the
base frame by right multiplying
and a rotation
matrix:
|
|
|
|
|
Right Multiplication of |
|
|
Right
multiplying with a rotation matrix now accounts for rotations in the platform
frame that may influence the pose calculations.
Since this transformation does not have any rotational inputs, we set
to 0, which yields an identity matrix:
|
|
|
|
Now that we have
our system defined, we can calculate the distance that each prismatic joint
must actuate the base frame so that the focus point in the platform frame
achieves the desired focus point pose, represented in the base frame:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
We notice that
is
comprised of the ‘x’ and ‘y’ displacement component vectors. Prismatic joints typically require a single
displacement vector input, so we use the distance formula to calculate the
resultant vector of
:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
Now we know
that prismatic joint 1 will need to actuate 3.04 units, and prismatic
joint 2 will need to actuate 3.04 units.
Let’s confirm that the actuations we calculated for each joint yields
the desired pose:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
These
calculations confirm that the actuation on each prismatic joint yields the same
pose at the focus point!
Horizontal Translation Example
Let’s perform
the same calculations to horizontally translate the platform frame to
with
rotation:
|
|
Define the
joint coordinates in the system:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Link 1
Base Joint |
Base |
|
|
|
|
Link 2
Base Joint |
Base |
|
|
|
|
Link 1
Platform Joint |
Platform |
|
|
|
|
Link 2
Platform Joint |
Platform |
|
|
|
Define the
desired final pose:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Focus
Point, Desired Pose |
Base |
|
|
|
Perform the inverse
kinematics calculations using the kinematic model that we derived to solve for
:
·
There’s
no rotation performed in this transformation, so we can use the identity rotation
matrix
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Let’s confirm
our calculations:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
These
calculations confirm that the actuation on each prismatic joint yields the same
pose at the focus point!
Horizontal Translation and Rotation
Example
Now let’s
perform the same platform frame horizontal translation to
with 45
rotation:
|
|
Define the
joint coordinates in the system:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Link 1
Base Joint |
Base |
|
|
|
|
Link 2
Base Joint |
Base |
|
|
|
|
Link 1
Platform Joint |
Platform |
|
|
|
|
Link 2
Platform Joint |
Platform |
|
|
|
Define the
desired final pose:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Focus
Point, Desired Pose |
Base |
|
|
|
Perform the
inverse kinematics calculations using the kinematic model that we derived to
solve for
:
·
There
is a rotation performed in this transformation, so we calculate the rotation
matrix:
|
|
|
|
|
|
·
Now
we substitute this rotation matrix in for
to express
in the base frame:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Let’s confirm
our calculations:
|
Link
1 |
Link
2 |
|
|
|
|
|
|
|
|
|
|
|
|
These
calculations confirm that the actuation on each prismatic joint yields the same
pose at the focus point!
6-DOF
Now that we
understand how to calculate the inverse kinematics for a 3-DOF system, we can
expand the calculation to a 6-DOF system!
A 3-DOF system allows the platform frame to translate along the X, Y,
and Z axes, and rotate angles
on a 3D plane.
The 6-DOF
system that we are going to solve will have 6 links, making it a hexapod.
Multi-Axis Translation and Rotation
Example
Let’s translate
the platform along the y-axis and the z-axis to (0.00, -2.00, 3.00), and rotate
about the x-axis to (
,
,
):
|
|
6-DOF Stewart/Gough Platform expressed
in the base frame
Let’s define
the joint coordinates in the system:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y, z) |
Vector |
|
Link 1
Base Joint |
Base |
|
|
|
|
Link 2
Base Joint |
Base |
|
|
|
|
Link 3 Base
Joint |
Base |
|
|
|
|
Link 4
Base Joint |
Base |
|
|
|
|
Link 5
Base Joint |
Base |
|
|
|
|
Link 6
Base Joint |
Base |
|
|
|
|
Link 1 Platform
Joint |
Platform |
|
|
|
|
Link 2
Platform Joint |
Platform |
|
|
|
|
Link 3
Platform Joint |
Platform |
|
|
|
|
Link 4
Platform Joint |
Platform |
|
|
|
|
Link 5
Platform Joint |
Platform |
|
|
|
|
Link 6
Platform Joint |
Platform |
|
|
|
Recall:
·
is
a vector that represents a joint’s position in the base frame relative to the
base frame origin.
·
is a vector that represents a joint’s position
in the platform frame relative to the platform frame origin.
Define the
desired final pose:
|
Point Description |
Reference Frame |
Vector |
Coordinate (x, y) |
Vector |
|
Focus
Point, Desired Pose |
Base |
|
|
|
Recall:
·
is a vector that represents the desired
point’s position in the base frame relative to the base frame origin.
Perform the
inverse kinematics calculations using the kinematic model that we derived to
solve for
:
·
There
is a rotation performed in this transformation, so we calculate rotation
matrix:
|
|
|
|
|
|
|
|
·
Now
we substitute this rotation matrix in for
to express
in the base frame:
|
|
|
|
|
Movement Along x-Axis |
Movement Along y-Axis |
Movement Along z-Axis |
Calculating the inverse kinematics
for each link in this hexapod would be redundant, so I’m only calculating link
1.
These same calculations
can be performed for all links using the joint coordinates defined above.
·
Now
we perform the inverse kinematics calculations
o
Recall
that we substitute this rotation matrix in for
to express
in the base frame:
|
Link
1 |
|
|
|
|
|
|
|
|
|
|
Let’s confirm
our calculations:
|
Link
1 |
|
|
|
|
|
|
|
|
These calculations
confirm that the actuation on each prismatic joint yields the same pose at the
focus point!
Rotary
Actuation to Linear Actuation with Servo Motors
Stewart/Gough
platforms can use rotary actuators to linearly actuate the platform reference
frame. We will derive the calculation
for calculating the required servo horn angle to achieve a linear actuation.
We start with
the system below, which uses a crank (the servo
horn) to linearly acuate the end of a rod (steward platform link).
|
|
Motor rotation converted to linear
movement
We want to represent
the linear actuation as a function of the rotary actuator’s horn position,
.
Let’s label the diagram with knowns:
|
|
|
We start by decomposing
the rotary actuator’s motion into its ‘x’ and ‘y’ components:
|
|
|
Let’s isolate
the labels so we can look at the diagram as two triangles, then converge them
into one triangle:
|
|
|
|
Since we want
to represent the linear actuation vector,
, as a function of the rotary actuator’s
horn position, we can use the known link lengths and
to solve for
.
We know that
is fixed in the base frame and
is fixed in the platform frame.
Let’s solve for the system as a function of
:
|
|
|
|
|
|
|
|
|
|
|
|
|
Solve for |
|
|
|
|
|
|
|
|
|
Solve for |
|
|
|
|
|
|
|
|
|
|
We must define
the actuation limits of the system. The
minimum and maximum actuation that can be achieved with a rotary actuator is
constrained by the link length and the servo horn length:
|
|
This
equation works for systems where the end of the link (end-effector) is in line
with the rotary actuator’s axis of rotation.
However, that isn’t realistic for a Stewart/Gough platform since the
links actuate the platform across multiple degrees of freedom.
Like the
in-line derivation, the goal is to represent the linear actuation vector,
, as a function of the rotary actuator’s
horn position,
.
Let’s use a diagram that shows the end-effector out of alignment with
the rotary actuator’s axis of rotation:
|
|
|
We can drop a
vertical from A to create a right triangle, which simplifies the derivation.
Since we have all
3 sides of the main triangle defined, we can calculate its internal angles with
the law of cosines:
|
|
|
|
|
|
Define the
unknown side lengths of the right triangle created by the dropped using the
coordinates joint coordinates of A and C in the base frame. Now we can calculate
:
|
|
Knowing that
,
, and
sum to
, we can solve for
:
|
|
|
|
|
|
|
|
|
Stewart/Gough Platform with linear
actuator (left) and rotary actuator (right)
You’ll notice
that these calculations are performed with all coordinates in the base
frame. The servo calculations are
implemented after performing the inverse kinematics calculations to determine
the linear actuation necessary from each actuator to achieve a desired platform
pose. Once the Stewart/Gough platform
has been fully parameterized, we can calculate the servo horn angle that’s
needed to achieve the equivalent linear actuation distance.
Check it
out!
·
Millennium
Falcon: Smuggler’s Run
·
The
Amazing Adventures of Spiderman
This simulation
orients the link joints in the same configuration as the platform that a ride
vehicle may sit on. Developers can write
an algorithm that defines the platform’s desired poses in a sequence that
immerses audiences in exciting storylines!
|
|
|
Motion base simulating a spaceship
taking off!
Helpful
Links
· Stewart/Gough Platform – Wikipedia