The way we did this was to use one of the Sharp long-range IR scanners to find an object within range of the sensor. Basically, start at the far left angle of your servo (IR sensor is mounted on the servo) and jump every 5 degrees looking for something whose range indicates that it's close (uses an Analog channel for the voltages coming back from sensor and a formula to convert to distance). If you find something in range, start backing up until the distance falls off by a ball radius (this is the leading edge of the object). Then jump forward and do the same thing to find the training edge of the object.
Knowing the leading and trailing edges of the object as well as the closest distance (the closest face of the ball), you can use trig to calculate size of the object. If it's within the approximate size of a ball, then write the angle and distance to a message queue to be read by the robot control code to go kick it.
The whole detection is pretty fast (1.5-2 seconds) and could be made faster with multiple IR sensors scanning smaller sweeps. And, it is pretty good at being able to tell the difference between balls, robots and miscellaneous junk on the field. The code can be found here for your perusal...
http://www.chiefdelphi.com/forums/sh...ad.php?t=85509
Mike