Jack's Explorer Bot


Developing an Explorer Bot with RCX to PC Communication


This is a little project that was done as a project... for a class...

So, officially, I wasn't _really_ goofing off when I stayed up to the wee hours of the the night playing with Legos.

But it sure felt like I was.

In any case...

For the summer, I took a 5-week robotics course. A project was required and the recently acquired Lego Mindstorm kits were suggested as a way to achieve a completed project in the time provided. We were told we could use them for a week, as we had to share the kits available.

Figuring demand for the kits would be lower the first week they were available, I spent the weekend between the first and second week of the class looking for info on what I might be able to do with said kit once I could lay my hands on one. Although initially disappointed with what a Mindstorm RCX "brick" could do in terms of programming, I was soon excited by all the ways people had found to get around these limitations.

Russell Nelson's Lego Mindstorms Internals is a good place for information.

Anyway, I grabbed a kit the first day they were available to the class with the idea of making an explorer bot that would report back to the PC what it had found so that the PC could tell it what to do next.

The biggest problem to overcome was how to get the PC and the bot to exchange data. The PC needed to be able to know what the bot had found in its explorations. It also needed to be able to give the bot new instructions as more of the environment was explored.

Fortunately, people like Kekoa Proudfoot and Dave Baum had already layed quite a bit of groundwork in making this easy for me to accomplish in the week I thought I had. Kekoa's RCX Internals page and Dave's NQC provided everything I needed.

And, of course, some thanks has to be given to Legos for not clamping down on the internals so that their customers can improve upon the product as they see fit.

I was going to add more here... but I just wrote a report about this, so why do it again. See the next link...

Project Report [click here]

Click on the above to see the HTMLized version of my report. If you'd like a compressed Postscript (can't imagine why you would), click here.


The hardware for the bot consisted of a (laptop) PC, a rubber band, a piece of red tape, a small piece of paperboard, and a subset of the parts from one Lego Mindstorms Robotics Invention System kit.

Here are some scans of the bot (click for closeups). They are actual scans of the bot. My Polaroid Instant doesn't take very clear pictures up close, so I just threw the bot on the scanner. I honestly didn't think it would work at a focal point beyond a sheet of paper, but they turned out pretty well.
[The ragged edge on the sheet of paper is due to the fan that was blowing in the room while scanning.]

On the left is a top view with the vertical feelers removed and the RCX frame slightly disconnected (to provide a closer scan -- the girders facing the other way are the RCX frame). On the right is a scan from the side with the bot balancing on the feelers and RCX frame. One of the touch sensors was less sensitive, thus the red tape on the left feeler.
The left scan is a bottom shot showing what went where (I wanted to be able to rebuild it after I took it apart). The center provides a view from the top with the RCX frame and feelers propping it up. The rubber band's job is to center the feelers after a contact has been made and backed away from. The right scan is another bottom scan with the right wheel propped up on some bricks (for a slightly different view angle).
Here's another bottom scan with the RCX and vertical feelers removed.


explorer1.nqc - the NQC program run by the bot
controller1.c - a gcc/Linux program that issues NQC queries to the bot (this could have been a shell/perl/whatever script, but, for me, hacking out some C was easier/quicker... plus, it should work as a Win95/98 console app as well [haven't actually tried]).
AltaVista Search and Display the Results

Last updated: August 9th, 1999
Jack Perdue/jkp2866@cs.tamu.edu
Department of Computer Science
College of Engineering
Texas A&M University