Back in April I got an Arduino Duemilanove and a variety of sensors and actuators, which promptly caused me to go order a rover base from RobotShop.ca, and a few days later, I had put this little guy together! Truly, Arduino is an easy-to-use platform for this sort of thing. I went on to put together an iPad-controlled version as well as a wireless Wii-Chuck-controlled version but I'll post about those later.
I only had a single infrared proximity sensor but I had a servo as well, so I was able to make the rover avoid obstacles by scanning the sensor side to side on the servo. The algorithm is pretty simple: sweep the sensor back and forth unless the sensor sees something, and roll both treads forward unless the sensor sees something, in which case roll the tread furthest from the sensor direction backwards. The idea being that if the object seen by the sensor is not moving, the robot will swing away from it until the sensor can't see it any more and will therefore be able to continue moving forward. I like this sort of "continuous parallel application of simple rules" approach to robot behaviour more so than "modal" behaviour (e.g. a robot that always either explicitly switches between "go" mode and "turn around" mode) because I find it leads to smoother, more emergent behaviour. With two sensors mounted one in front of each tread, but able to reverse the direction of the opposite tread at a speed proportional to the distance to the obstacle, this motion could be even smoother.
Code from this post is up on Github at nicolaskruchten/arduino