Almost a year ago my old friend Jacob and I were hanging out at Lake Samammish, waiting for another friend, Dan, to arrive with his boat so we could go water skiing. Dan was running late and Jacob and I killed time by talking about robots. We both wanted to build a robot, but neither of us could think of a useful task we could build a robot for, especially with our limited budgets. We talked about other peoples’ robots we’d seen on the internet. Other homebuilt robots did simple obstacle avoidance routines or balanced on two wheels like a Segway scooter. They did things that were mildly interesting but they didn’t really accomplish anything useful.
It was at this point we hit upon an idea: a robot doesn’t have to directly do anything useful in order to accomplish a worthy goal. For us that goal would be competition. We would each design, build, and program a robot to accomplish a simple task. Whomever’s robot completes the task first would be the winner.
I should mention that Jacob, who is a great guy in most respects, is also totally infuriating sometimes because he seems to have a natural talent for almost everything. I showed him how to wakeboard one spring and by the end of the summer he was doing better than most people who’ve been wakeboarding for years. He is a man who is difficult to beat. This is why I wanted to compete with him. This is a rare chance to be quantitatively better than him at something.
The challenge we set ourselves is as follows: to design, build, and program a robot capable of autonomously exploring and mapping a small, indoor space such as a one-bedroom apartment. The map must be accurate to within +/- 5 centimeters and it must be output in a common file format. All of the data collection and processing must be done by the robot itself. It cannot be controlled by a program running remotely on a separate computer.
Jacob and I both thought this would be a much easier task than it has turned out to be. It is one year later and there’s still no end in sight, although good progress has been made. Our problem: autonomous exploration was once a major issue in robotics. This wikipedia article on simultaneous localization and mapping (SLaM) does a good job of describing the problem.
I’ve been working on my robot for nearly a year now. It’s a small, differential drive robot that’s quite similar to a Roomba. I decided to name it Colin after the helpful security robot in Mostly Harmless by Douglas Adams. At the moment he’s controlled by an Arduino Duemilanove I had leftover from a previous project but I’ll probably need to upgrade to something like an Arduino Mega or Intel Edison before the project is done.
I’ll include info on Colin’s design and development process in subsequent posts. I will post design details and make my code available through GitHub so anyone can use and build upon my work. If you use my work to make something cool of your own I would love to hear about it. If you make improvements to my designs or code definitely tell me what you did and how it worked for you!