The heart of the kit is the big yellow brick, the RCX. This contains a microprocessor which can be programmed (you download a program into the brick through the infra-red transmitter which takes up one end of the brick).
The brick has three input ports (1, 2, 3) to which you can connect sensors, and three ports for output (A, B, C). You can just about see those in the photo above.
The standard Mindstorms kit available from LEGO comes with two different kinds of sensor that can be attached to the input ports; sensors that detect touch, and sensors that detect light. Motors are the only devices from the basic kit that can be attached to the output ports. Here is a typical robots that one can construct from these basic parts:
The robot uses tracks since these simplify the drivetrain, has "whiskers" connected to the touch sensors, and has two light sensors in front of the tracks to stop the robot rolling off the edge of its tabletop environment.
This restricted set of parts limits what one can achieve in terms of the behaviour of a given robot design, but with a little ingenuity an amazing variety of mechanical designs can be created. Two examples are given below:
The one on the left is a stable two wheel design, that on the right can rotate the chassis relative to the RCX. There are many other neat designs out there, including synchro drives and some incredible static robots (VCR anyone?).
The offical routes to programming the RCX are to use a visual programming language called RCX Code which is supplied with the kits, or RoboLab, an environment specially designed for schools and education. Both of these use the Lego-provided operating system or firmware, and the firmware puts harsh limits on programming possibilities (restricting one to use at most 32 8-bit integers as variables for example).
To overcome some of these obstacles, a legion of serious LEGO hackers has grown up, reverse engineering the RCX to discover the internals, and figuringout how to build new homebrew sensors.
Links to such sites can be found on the unofficial Mindstorms homepage.
This community has also provided alternative languages for programming the RCX with. We have:
We will use Not Quite C for this class.
Finally, if you want to program using these non-standard languages but have a graphical environment, this is provided by BricxCC (well if you run Windows; Linux and Mac users have to use the usual editor/command line approach).