This semester, I'm taking an Embedded and Real-Time Systems course that doesn't actually have much to do with, you know, embedded and real-time systems. The alternate name for the course is "Experiments in Autonomous Robotics", and that name's slightly better. Here's what it's really about: there's a golf cart, it runs Ubuntu, and we write programs to get it to drive around places.
From where I sit, the whole write-code-to-control-a-robotic-golf-cart business has an overwhelmingly ICFP contest-like flavor to it. We had to do the "figure out which way to turn, assuming you're at location so-and-so and you're trying to get to location thus-and-such" thing, and that felt pretty familiar.1 And in fact, a few weeks ago, when we were direly in need of a simulator so that we could test our code without actually going out on the golf cart, my colleague Dave hacked one together out of his own ICFP 2003 leftovers.
Now that we've mastered the basics of steering the cart, we've moved on to navigating a series of GPS waypoints. We receive the waypoints in a file format called RDDF. RDDF, as far as I've been able to tell, is a format invented specifically for the 2005 DARPA Grand Challenge, which was a competition for driverless cars navigating through the desert, and looking at the RDDF spec is once again giving me an overwhelming sense of "This is like an ICFP contest problem, except that it's real."2
When I was applying to grad school, I wrote, "I don't want to sequence DNA and I don't want to build robots. I just want to move symbols around on pieces of paper. ... Is that so weird?" And it's still true. I'd rather be writing inference rules than doing any of this, I think. But all the same, it's kind of exciting when running a program actually makes stuff happen in the perceivable physical world, and not just the world of electrons.
- I even explained atan2 to some people! Well, sort of. "Explain" would imply that I understand it, and in fact I mostly just take it on faith. I know. Sorry.
- Also, I wonder how long someone spent designing RDDF, which was, of course, only one tiny, tiny part of everything that I imagine needed to be done for the Grand Challenge project. Who did it? Did they spend weeks, or five minutes? Does it make any sense for me to sit here sweating over how to design just the right WaypointList abstractions so as to remain faithful to their intent?