This was a project that i did for a class at the University of Minnesota along with another classmate, who shall remain nameless. He was a mechanical engineer who managed to not do the only mechanical aspect of this project: mounting that rangefinder on the top of the robot.

Our final result of the project was relatively interesting. We successfully built a robot that stored a memory of its environment and attempted to find walls using the sensor data acquired from a $10 sensor on top of a $120 robot. The data was then output graphically by uploading the generated map code snippet into a Java program.

Here are the results of running said program in the kitchen:

This program was extended slightly to try and correlate newly found walls with previously found walls. Below is a video of the robot running through the robotics lab within an L-shaped world. The path it chooses is a random walk circuit, by which i mean it does several random positions, and then finds a random path back to its starting place. Taking obstacles into account the entire time, of course.

The perceived workspace from this run is shown below. Note that the blue lines are walls that have not be confirmed, the orange lines are 'walls' that have been re-correlated using its current algorithm, which is a slight variation on RANSAC: it finds all adjacent points and then chooses a random number of them to create a line, which is fitted using the "least squares" method.

This program was also an experiment in multithreaded programming, which allowed one software module, aptly named medulla, to watch out for any immediate threats, such as a bump or sudden drop. The other, more time intensive threads then could feel free to run without fear of a broken robot.

This continued into two other threads. One contained the process responsible for mapping data points to a map. And the other was responsible for building a path through this new map.