CPS196 - Fall 1999
Course Intro
Background: In the classical programming paradigm, programs take
"input" data, produce "output" data, and terminate. While this
approach makes sense for many applications, it is not appropriate for
programming robots. A robot controller uses sensory input to respond
to and interact with the uncertainty it encounters in its environment.
Writing programs that produce reasonable behavior in the face of this
type of uncertainty is challenging and can involve techniques quite
different from those used in classical programming.
In this specialized programming course, students will be introduced to
concepts integral to designing interactive systems. They will gain
hands-on experience in a series of projects with Lego Mindstorms(TM)
robots. Lectures will include background information on robotics,
artificial intelligence, probability theory, machine learning,
"agents", and "programming as interaction".
We'll use a seminar style: do the reading, do the assignments, and
you'll get much more out of class. I'll assign discussions questions
with each of the readings: write out your answers, which I'll collect
(but not grade) after class. Each class will also have a designated
note taker... we'll put the notes up on the web to help document our
progress.
This will not be a "hard" class. However, it will definitely be time
consuming. Please... if you have a heavy schedule or don't enjoy
throwing yourself into programming and building things out of legos,
drop the course. You won't enjoy it and it'll be frustrating for
everyone. However, if you spent countless hours on your bedroom floor
building lego space ships or motorized transports for your toys,
welcome!
Questions:
- What are some different types of uncertainty? Which of these
come up in traditional programming? Which in operating systems?
Which require online learning to address?
- What is learning?
Offline: Mars Landing Simulator
Background: The Mars Lander is 1000m above the Martian surface falling
at 2m/s, tugged by the 3.69m/s2 Martian gravity. Each second, a
controller is given information on the altitude and speed of the
craft. It can then instantaneously fire the thrusters with from zero
to ten units of fuel. When the craft makes contact with the surface,
if it is going faster than 1m/s, it will crash.
The goal is to land the craft safely using as little fuel as
possible. We'll make use of a perl simulator with four user commands:
- initialize();
- $done = landed();
- ($alt,$speed) = sensors();
- firethrusters($thrust);
- cleanup();
Questions:
- What kinds of uncertainty do we get in this example?
- What would a traditional program for this problem be?
- What would a "reactive" approach look like?
- How about an "optimal" or a learning controller?
- In what ways would a real lander be harder to control? Easier to
control?
Notes: by Dan Mills
Kinds of Uncertainty:
- kinds we can't control
- we don't know what other people will do
- (not mentioned) sensor information
Ways to deal with it:
- Do things for the "avg." case
- Adapt, learn
Mars Lander
- It's unclear how effective different thrust settings are.
- We could experiment in the 1st couple of seconds
Idea: Check speed, if less than previous speed, fire thrusters. Do
this until we hit a low altitude
So, we can freefall for a while before the last alg.
Here's the script that we had when class ended.
Homeostatic control: change effectors to try to get sensors to reach
some "set point".
Modified: Tue Aug 24 10:50:11 EDT 1999
by Michael Littman, mlittman@cs.duke.edu