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 17:

Get this code or your own simulator running. Be able to plot data and make an animated movie. Email the Profs a plot we haven't seen before. Put an exciting movie on youtube.com and email the URL to the Profs. Identify the course and 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 becoming the ankle, and the elbow 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 hgeyer@cs.cmu.xxx, cga@cmu.xxx, and gswagner@andrew.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


If we're working in a group, do we each need to turn in our own website, or does the group turn in a single website?

Each group turns in one URL.


For questions 2b and 2c, it says that the TA will test our code, but it seems like the primary result of those two questions is a quantitative expression. Is there an implementation that we need to do specifically for questions 2b and 2c, or do we just need to give the proper expression?

You need to both explain what you are doing, and implement it. For example, the most robust way to do 2b and 2c is an iterative search procedure, rather than a one-shot formula. 2b: The TA should be able to specify a arm configuration and a target, and get back a joint angle velocities that will move the end effector directly towards the target. 2c: do something similar for forces and torques.


Do we need to implement the controller with a delay in 4b?

Yes.


What is the difference between 2b and 2c?

In 2b you need to do differential inverse kinematics. In 2c you also need to do inverse dynamics. (Note to future: Add 2d that asks what direction in torque space to apply a force towards the target.)