Mechanism
Table of Contents
Computational Design of Mechanical Characters by Disney Research Group
%%html
<iframe
width="560" height="315" src="https://www.youtube.com/embed/DfznnKUwywQ" frameborder="0" allowfullscreen></iframe>
Art Studentās 407-Piece Hand-Carved Wooden Clock Literally Writes The Time
%%html
<iframe width="560" height="315" src="https://www.youtube.com/embed/WEbmYp5VVcw" frameborder="0" allowfullscreen></iframe>
%%html
<iframe
width="420" height="315" src="https://www.youtube.com/embed/0gjyVqwrf3E" frameborder="0" allowfullscreen>
</iframe>
%%html
<iframe
width="560" height="315" src="https://www.youtube.com/embed/rPGpOyIOwd8" frameborder="0" allowfullscreen>
</iframe>
%%html
<iframe width="560" height="315" src="https://www.youtube.com/embed/jYHawaGL90o" frameborder="0" allowfullscreen></iframe>
Kinematics refers generally to the study of robot geometry
Given a configuration of a robot (e.g., settings to joint angles), how does this affect the position of its parts?
For a desired position of the robot end-effector, are there joint angles that achieve this position?
%%html
<iframe
width="560" height="315" src="https://www.youtube.com/embed/eX2a9kr7tFM" frameborder="0" allowfullscreen>
</iframe>
$\implies$ kinematics is how we move back and forth between these represenations
Given $x,y$, can we find $\theta_1, \theta_2$ that achieve this position ?
$$ \begin{align*} \theta_2 & = \pm \cos^{-1} \left( \frac{x^2 + y^2 -l_1^2 - l_2^2}{2l_1 l_2} \right) \\ \theta_1 & = \tan^{-1} \left( \frac{y}{x} \right) - \sin^{-1}\left( \frac{l_2 \sin \theta_2}{x^2 + y^2} \right) \end{align*} $$
(do not worry about the above equations and their derivation)
In addition to the relationship between the joint angles and the end-effector configuration, one often makes use of the relationship between the joint and end-effector velocities.
L1 = 1;
L2 = 1;
theta1 = 15*pi/180;
theta2 = 30*pi/180;
omega1 = 0.5;
omega2 = 0.1;
r1 = [L1*cos(theta1) L1*sin(theta1) 0]';
r21 = [L2*cos(theta1 + theta2) L2*sin(theta1 + theta2) 0]';
r2 = r1 + r21;
v1 = cross([0 0 omega1]', r1);
v21 = cross([0 0 omega1 + omega2]', r21);
v2 = v1 + v21;
plot([0,r1(1)],[0,r1(2)],'k-o'), hold on
plot([r1(1), r2(1)],[r1(2), r2(2)],'k-o')
plot([r1(1), r1(1) + v1(1)],[r1(2), r1(2) + v1(2)],'r-o')
plot([r2(1), r2(1) + v21(1)],[r2(2), r2(2) + v21(2)],'b-o')
plot([r2(1), r2(1) + v1(1)],[r2(2), r2(2) + v1(2)],'r-o')
plot([r2(1), r2(1) + v2(1)],[r2(2), r2(2) + v2(2)],'m-o'), hold off
axis equal, xlim([0 2.5]), grid on
the workspace of a manipulator is defined as the set of all end-effector configurations which can be reached by some choice of joint angles.
We will use processing to visually demonstrate workspace of the end-effector of a SCARA robot
Processing is an open source programming language and integrated development environment (IDE) built for the electronic arts, new media art, and visual design communities with the purpose of teaching the fundamentals of computer programming in a visual context
processing download and installation
do not need to undertand the following processing code
%%processing
int L1 = 100;
int L2 = 50;
ArrayList<PVector> ppoints = new ArrayList<PVector>();
ArrayList<PVector> mpoints = new ArrayList<PVector>();
int i = 0;
void setup() {
size(500, 500);
background(255);
calpp();
smooth();
}
void draw() {
background(255);
translate(width/2, height/2);
if (i >= ppoints.size()) {
i = 0;
} else {
for (int j = 0; j <= i; j++) {
PVector temp = ppoints.get(j);
if (abs(i-j) < 100) {
fill(150, map(abs(i-j), 0, 100, 255, 50));
} else {
fill(150, 50);
}
noStroke();
ellipse(temp.x, temp.y, 10, 10);
}
PVector p1 = mpoints.get(i);
PVector p2 = ppoints.get(i);
stroke(0);
fill(0);
ellipse(0, 0,5,5);
ellipse(p1.x, p1.y,5,5);
ellipse(p2.x, p2.y, 10, 10);
strokeWeight(5);
line(p1.x, p1.y, p2.x, p2.y);
line(0, 0, p1.x, p1.y);
i++;
}
}
void calpp() {
int t1 = 0;
while (t1 < 360) {
PVector p1 = new PVector(L1*cos(radians(-t1)), L1*sin(radians(-t1)));
int t2 = 0;
while (t2 < 360) {
PVector p2 = new PVector(L2*cos(radians(-t2)), L2*sin(radians(-t2)));
ppoints.add(PVector.add(p1, p2));
mpoints.add(p1);
t2 = t2+10;
}
t1 = t1+15;
}
}
Functions
rotation $\rightarrow$ translation
translation $\rightarrow$ rotation
Question: think about how to geometrically find position $x$
4 unknowns + 3 constraints $\rightarrow$ 1 DOF (one of $\,\theta_1,,\theta_2, \,\theta_3, \,\theta_4\,$ will be provided as input)
it is possible to compute, but will be nasty
%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')