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
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.
drawStewart3(pi/4);
close; drawStewart3(-pi/4);
Step 4
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
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
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);