CSE 694A: Lab 5
Due Wednesday, Oct. 29

LAB 5: Implement inverse kinematics


ASSIGNMENT

Modify the linkage from Lab #4 (i.e., 3-joint; 5-DoF; 3-1-1 DoF/joint)

These comments are mainly for the Jacobian-transpose method but are applicable to some of the other techniques.

Procedurally generate a new randomly positioned goal every time the end effector gets within some epsilon of the goal. Move the end effector from one goal to the next.

Here is a pseudo-code snippet to keep track of joint positions and orientations in global coordinates:

  set_identity_matrix();

  set_material("redPlasticMaterial");
  for (i=0; i<NUMDOFS; i++) {  
    record_transformed_joint(i); 
    glRotatef(angle[i],axis[i][0],axis[i][1],axis[i][2]);
    append_rotation(angle[i],axis[i][0],axis[i][1],axis[i][2]); 
    if (linkLen[i] != 0.0) {
      append_translation(0.0,linkLen[i],0.0);
      draw_linkage(linkLen[i]);
      glTranslatef(0.0,linkLen[i],0.0);
    }
  }
  record_endEffector();
  glPopMatrix();

The append routines (rotation and translation) form the corresponding matrix and post multiplies the transformation matrix.

The routine that records the transformed joint gets the position and axis of rotation in global coordinates. It extracts the position from the 4th column of the transformation matrix and computes the axis of rotation by multiplying the rotation axis by the transformation matrix.

After forming the Jacobian and taking the transpose, mutlipling by the desired motion vector, V, will produce a vector of delta-thetas. If the maximum value of the delta-thetas is above some threshold, then scale the vector down to get the largest delta-theta equal to the threshold. If the maximum is already smaller than the threshold, then leave it alone.


Extra Credit: