CSE 473 Project 2

Particle filters for mobile robot localization

Spring 2001

Objective

The objective of this project will be to gain an understanding of how you can build a system that can deal with uncertain sensor information. We will analyze this problem in the context of mobile robot localization.
 

Dates

The project will have two parts. The first part will be to fill in the missing functions in the code base provided. The second part will involve experimentation with your localization code.

Assigned: Thurs, May 9.
Part I due: Wed, May 23.
Part II due: Wed, May 30.

Part I

To begin, download the project package. (This package is for UNIX only!) Unpack it by typing "tar zxvpf cse473-project2.tgz"; the project files will be extracted into a directory called "cse473-project2". Read the README file contained within for further instructions.

Here is the new binary particleFilterDemo. Put this file into the cse473-project2/bin directory. After that, the demo-laser, demo-sonar, and demo scripts should work.

Part II

Here is an update of the script class.

The change is that now the script acts like a real robot, i.e. it considers the time it takes to integrate the sensor information. You can switch between real time and non realtime (the current script class) by setting _realTimeMode(false) in script.cc. Please compile and try it out.

You should do the following experiments:

Determine the quality of localization for different sizes of sample sets. To do so, you have to do several test runs with the floor data (about 10 for each sample set size). The test runs for each sample set size should differ in the start points for script data. This start point can be set in ParticleFilter.cc when the script is initialized. To set the start point of the script to 200 seconds, you would have to do:

_script = new script( scriptFile, refPosFile, useSonar, useLaser, 0.0, integrationThreshold, 200, 2, SCRIPT_TYPE_NOT_SET);

Next, use a new floor script. This data log is the same as the old one, it's just longer. Again, you should use the scripts with different start points (e.g. 0 seconds, 200 seconds, 400 seconds, 800 seconds). You should do this for different sample set sizes (1000 - 50000). For each run, you should compute the average distance of all samples from the reference position stored in _referencePosition of the sensor scans. Averaging over all runs and all time points gives a pretty good estimate for how good this sample set size works. The result should be a graph plotting average distance against number of samples. Please provide the mean and standard deviation of your results.

You should generate this graph for sonar and laser and discuss your findings.

For the best sample set size determined above, you should generate an additional graph. This time, the graph should plot the average distance against time since the start of the localization runs (again averaged over the different runs for this sample set size). This should give a high error in the beginning and the error should go down over time as the robot determines its position. In addition to computing the average distance from the reference position, you should compute the distance between your mostlikely state estimate and the reference position. You should generate a graph plotting distance of most likely position from reference position against time since start of the test run (i.e., you have to average over the different test runs for this sample set size). You should also describe how you determine the most likely position.

Background information