Project 1: Kinematics of the Stewart Platform

Eadom Dessalene, Brendan Gramp

Contents

Background

http://math.gmu.edu/~tsauer/class/447/proj/447proj1.html

Problem: Chapter 1 Reality Check Steps 1-6.

Step 1

Kinematics code

Write the Matlab function file for f(theta). The parameters L1, L2, L3, gamma, x1, x2, y2 are fixed constraints, and the strut lengths p1, p2, p3 will be known for a given pose. To test your code, set the parameters L1 = 2, L2 = L3 = sqrt(2), gamma = pi/2, p1 = p2 = p3 = sqrt(5) from figure 1.15. Then, substituting theta = -pi/4 or theta = pi/4, corresponding to figures 1.15(a, b), respectively, should make f(theta) = 0.

kinematicsstep1(pi/4)
kinematicsstep1(-pi/4)

As can be seen from these results, a near zero value is obtained for the theta values pi/4 and -pi/4.

ans =
    -4.547473508864641e-13
ans =
    -4.547473508864641e-13

Step 2

Plot f(theta) on [-pi,pi]. As a check of your work, there should be roots at ±pi/4.

theta = -3.2:0.01:3.2;
plot(theta, kinematicsstep1(theta), theta, zeros(size(theta)));

Step 3

Reproduce Figure 1.15.

2D Stewart Platform code

drawStewart3(pi/4);
close;
drawStewart3(-pi/4);

Step 4

Bisect code

Kinematics code

2D Stewart Platform code

Solve the forward kinematics problem for the planar Stewart platform specified by x1 = 5, (x2, y2) = (0,6), L1 = L3 = 3, L2 = 3*sqrt(2), gamma = pi/4, p1 = p2 = 5, p3 = 3. Begin by plotting f(theta). Use an equation solver to find all four poses, and plot them. Check your answers by verifying that p1,p2,p3 are the lengths of the struts in your plot.

close;
theta = -3.2:0.01:3.2;
plot(theta, kinematicsstep4(theta), theta, zeros(size(theta)))
close;
f = @(x) kinematicsstep4(x);
format long
theta1 = bisect(f, -1, -0.5, 0.5*10^-11)
theta2 = bisect(f, -0.5, 0, 0.5*10^-11)
theta3 = bisect(f, 1, 1.5, 0.5*10^-11)
theta4 = bisect(f, 2, 2.5, 0.5*10^-11)
theta1 =
  -0.720849204462866
theta2 =
  -0.331005184281821
theta3 =
   1.143685517821723
theta4 =
   2.115909014089993
drawStewart4(theta1);
close;
drawStewart4(theta2);
close;
drawStewart4(theta3);
close;
drawStewart4(theta4);

Step 5

Kinematics code

2D Stewart Platform code

2D Stewart Platform combination code

Change strut length of p2 to a value for which there are six poses.

We chose p2 = 7.017.

close;
theta = -3.2:0.01:3.2;
plot(theta, kinematicsstep5(theta), theta, zeros(size(theta)))

To get a closer look at these values, we zoom in on the graph slightly.

close;
theta = -1:0.01:2.6;
plot(theta, kinematicsstep5(theta), theta, zeros(size(theta)))
close;
f = @(x) kinematicsstep5(x);
theta1 = bisect(f, -0.7, -0.6, 0.5*10^-11)
theta2 = bisect(f, -0.6, -0.4, 0.5*10^-11)
theta3 = bisect(f, 0, 0.1, 0.5*10^-11)
theta4 = bisect(f, 0.4, 0.5, 0.5*10^-11)
theta5 = bisect(f, 0.9, 1, 0.5*10^-11)
theta6 = bisect(f, 2.5, 2.6, 0.5*10^-11)
theta1 =
  -0.608346700129914
theta2 =
  -0.457770423396141
theta3 =
   0.069825239010970
theta4 =
   0.463671212657937
theta5 =
   0.977225821986213
theta6 =
   2.515667729053530
drawStewart5(theta1);
close;
drawStewart5(theta2);
close;
drawStewart5(theta3);
close;
drawStewart5(theta4);
close;
drawStewart5(theta5);
close;
drawStewart5(theta6);

For a better idea of how these Stewart platform positions relate to each other, a graph displaying all 6 of them is displayed here.

drawStewartall();

Step 6

Kinematics code

2D Stewart Platform code

Find a strut length p2, with the rest of the parameters as in Step 4, for which there are only two poses.

We chose p2 = 3.8.

close;
theta = -3.2:0.01:3.2;
plot(theta, kinematicsstep6(theta), theta, zeros(size(theta)))
close;
f = @(x) kinematicsstep6(x);
theta1 = bisect(f, 1, 1.5, 0.5*10^-11)
theta2 = bisect(f, 1.5, 2, 0.5*10^-11)
theta1 =
   1.416440910430538
theta2 =
   1.662328714828618
drawStewart6(theta1);
close;
drawStewart6(theta2);