CMU RI 16-711: KDC: Assignment 1


This assignment explores simulation, control, and kinematics for a planar arm.

We are distributing a simple simulation in C that works on both Windows and Linux: code
It is easy to convert this to other languages (Java or Matlab for example) if you prefer. You can also explore implementing a simulation in ODE or OpenSim. You can use the mrdplot/matlab plotting software provided, or some other plotting software like gnuplot. Look for a readme.txt file in each directory.



By Jan 15:

Get this code or your own simulator running. Be able to plot data and make an animated movie. Email the Prof & TA a plot we haven't seen before. Put an exciting movie on youtube.com and email the URL to the Prof & TA. Identify who is in your group in these emails.



By Jan 24:


1. Implement a joint angle controller.

1a. Figure out how to get the arm close to a target. What control gains work well (are not unstable, do not overshoot or are too damped)? What control gains get the hand near the target in about a second and have it stay there? What control gains get the hand near the target in about 0.1 second and have it stay there (you may have to change the time step or use a better integrator for this)?

1b. How do you get to the target exactly? Explain to us how your approach works, and how you compute whatever you need to compute. The TA will test your code using several targets, so your solution should be general.


2. Implement a task (Cartesian) controller.

2a. How do you move the arm to a (x,z) target in Cartesian space? The TA will test your code using several targets, so your solution should be general.

2b. Given you are close to a Cartesian target, what direction in joint space should you move to move towards the target? ( x-error, z-error ) maps to ( shoulder-error, elbow-error ). Where does your approach fail? The TA will test your code using several targets, so your solution should be general.

2c. For 2b, what direction in torque space should you apply to move towards the target assuming you are in equilibrium in the erroneous position? Where does your approach fail? The TA will test your code using several targets, so your solution should be general.


3. Implement trajectory control.

3a. Design a trajectory to follow. The path might be a straight line in task space, and the velocity history can be a smooth curve of your choice. You must start and stop at rest. Get the arm to follow that trajectory. Provide a plot showing how well the arm follows the trajectory.

3b. Now try to get the arm to follow the trajectory very fast. Try to get maximum joint velocities above 1 revolution/second (6radians/second).

3c. Scan or capture your signature using the mouse. (Windows program Linux program) Get the arm to follow that trajectory.


4. Implement balancing.

The arm can be used to model upright standing, with the shoulder angle becoming PI and becoming the ankle, and the elbow angle becoming the hip.

4a. What are the minimum gains that allow the robot to balance upright?

4b. What happens if there is a 0.1sec delay in the feedback (so your controller get's info 0.1sec late, but the commands take effect immediately).



What to turn in?

Generate a web page describing what you did. Include links to your source and compiled code in either .zip, .tar, or .tar.gz format. Be sure to list the names of all the members of your group. Mail the URL of your web page to ewhitman@cmu.xxx and cc cga@cmu.xxx [You complete the address, we are trying to avoid spam.] The writeup is more important than the code. What did you do? Why did it work? What didn't work?


You can use any type of computer/OS/language you want. You can work in groups or alone.


Questions