The libra complex is notorious for causing people new to Harvey Mudd to get lost on their way from Galileo to Olin or any of the destinations in between. In this project you will attempt to program a robot to solve this problem that has foiled Mudd freshmen through the years.
With whatever platform you choose (Handyboard, Pioneer, Nomad, Lego RCX (this would be quite a feat!), or a simulator) and the sensors available (without a range sensor of some sort, this becomes a challenging, research-level problem!), your task in this project is two of these tasks:
Implement localization for a small part of the environment first. This will require creating a low-level obstacle-avoidance routine, as well as a hand-crafted map of the area you're interested in. Then, the robot can simply wander and avoid obstacles: with each sensor reading (from a range sensor) it should increase its certainty about its location in the provided map.
Once you have localization working, the simplest approach to navigation is to add a module that discretizes the map's free space and then searches for a path from current location to a desired location through the discretized graph. It can then wall-follow or use some other low-level control strategy to get from node to node in the graph.
If you choose the mapping option, try first to extend the existing map in which the robot can already localize itself. Use the right-angle and parallel-corridor constraint of most indoor environments to help your system. Also, consider using active techniques for determining what a small piece of the environment looks like (a single wall) and then splice those small pieces together to create a map.
Localizing: to test this module, you should be able to place your robot anywhere in the environment that it has mapped. After wandering (either randomly or by actively choosing where to go -- that choice is up to you) it should indicate when it thinks it has a confident estimate of its position and then report that position (to verify it).
Mapping: to test this, you should be able to place your robot in a reasonably-sized area (the larger and less regular, the better) and it should create a map of the area either through random wandering or active search. The map may be feature-based (e.g., consist of a set of lines indicating walls), topological and landmark-based (consist of a graph of distinguishable landmarks), or metrical (an evidence grid, for example). Your robot should be able to download the map for display. If you want (or need) to implement some of the mapping off-line by downloading data and processing it on a desktop machine, that is completely OK.
Navigating: testing this module will depend entirely on the interface you provide. For example, a surveillance robot should keep track of how often it surveys each section of the environment. A delivery robot should (ideally!) be able to reach a specified destination.
This project is extremely open-ended, because it involves techniques at the heart of autonomous robotics. For the foreseeable future, there will be research efforts that will try to push the limits of these capabilities as far as they can. You should feel free to take advantage of this open-endedness if you wish. Some possibilities include