This is a little late, but we would like to announce the release of the 3pi robot, a small, high-performance, autonomous robot designed to excel in line-following and maze-solving competitions. Powered by four AAA batteries (not included) and a unique power system that runs the motors at a regulated 9.25 V, 3pi is capable of speeds up to 100 cm/second while making precise turns and spins that don't vary with the battery voltage. This results in highly consistent and repeatable performance of well-tuned code even as the batteries run low. The robot comes fully assembled with two micro metal gearmotors, five reflectance sensors, an 8x2 character LCD, a buzzer, three user pushbuttons, and more, all connected to a user-programmable AVR microcontroller. The 3pi measures approximately 3.7 inches (9.5 cm) in diameter and weighs 2.9 oz (83 g) without batteries.
The 3pi is based on an Atmel ATmega168 microcontroller running at 20 MHz with 16KB of flash program memory and 1KB data memory. The use of the ATmega168 microcontroller makes the 3pi compatible with the Arduino development platform, and an extensive set of Arduino libraries make it a breeze to interface with all of the integrated hardware. Sample programs are available to show how to use the various 3pi components, as well as how to perform more complex behaviors such as line following and maze solving.
Note that the 3pi does not come with a USB-to-serial adapter, nor does it come with the Arduino bootloader. We recommend programming it with an external ICSP such as our Orangutan USB programmer, which can be purchased in combination with the 3pi and a USB cable for an additional $20. Our documentation explains how to configure the Arduino IDE to work with our ICSP programmer and the 3pi robot.
The unit price is $99.95. Please see the product web page for more information, including pictures, videos, users' guides, sample code, and additional resources.
Very nice robot, I like the way you (Pololu team) thought it out. I was playing with a round chassis design but using servos, wich lack speed, so using DC motors is a big improvement. I also like the way you can connect or disconnect the sensors with jumpers. This way you can enable just the things you need at the time. The only thing that is missing from my point of view is encoders. Having even a simple encoder on one wheel makes the robot suitable for mapping. An add on deck with a panning range sensor shouldn't be hard to build and I guess the encoders could be hanging underneath the new deck so they can read a striped disk mounted on the wheels.
All in all, a good desing at an affordable price, well done!
Thanks for the positive comments! We have now released two expansion kits for the 3pi that allow you to add a second level complete with your own custom electronics. We are also almost through designing a serial-slave program that will run on the 3pi and turn it into a "smart base" controlled by serial commands sent from another microcontroller or microcontroller board of your choosing, such as an Arduino Nano or Basic Stamp. This secondary microcontroller could interface with the custom electronics (e.g. servos or extra sensors) on the expansion deck and then send the base commands that make it drive around, read the line sensors, play the buzzer, or write to the LCD. Essentially, with this serial slave program and expansion kit, the 3pi becomes a convenient mobile platform for your favorite microcontroller board and its attached electronics.
One expansion kit replaces the LCD: 3pi Expansion Kit Without Cutouts. It is useful for applications that don't require an LCD, such as those that rely on wireless communication between the robot and a PC, and instead could use more prototyping space and free mega168 I/O lines.
The other expansion kit has cutouts that allow you to view the LCD below and to reach the programming header and power/reset buttons.
I appreciate the suggestion about adding encoders. There really wasn't much room for them on the 3pi (both in terms of physical space on the chassis and in terms of free mega168 I/O lines), but we plan on building a larger version of the 3pi at some point (the 4pi, perhaps?) that will have a bigger microcontroller with more I/O lines and program memory (such as the ATmega644) and will feature encoders that track the teeth on the bigger Pololu Wheel 42x19 mm.
As far as I know, a lot of the Arduino code is flexible enough to be able to handle different clock speeds by checking to see how F_CPU is defined. I think delayMicroseconds() and pulseIn() will not work correctly, but it's fairly easy to write your own delayMicroseconds() using _delay_us() in <util/delay.h>, and I believe you can scale the result of pulseIn() appropriately to account for a different clock speed. On top of this, the Arduino libraries we provide for interfacing with all of the on-board hardware are designed to work optimally at 20 MHz. Still, you could conceivably reconfigure the 3pi to be clocked off of the internal 8 MHz RC oscillator (using the fuse bits), or you could replace the 20 MHz resonator with a 16 MHz one if you are comfortable with surface-mount soldering and desoldering (this wouldn't require any changes to the fuses).
The maze-solving demo video on the 3pi web page, for example, shows a 3pi that was programmed using the Pololu Arduino libraries under the Arduino environment. The 20 MHz resonator on the 3pi didn't cause me any problems while programming it.
I should also mention that we have now released a serial slave program as an example project for the 3pi Robot. The slave program, together with an expansion kit, allows you to control the 3pi with a secondary microcontroller board, such as an Arduino Nano. It turns the 3pi into a "smart base" that responds to commands for writing to the LCD, reading the line sensors, playing music on the buzzer, automatically calibrating itelf to the line, following a line based on settable PID and maximum speed parameters, and more.
A hex file for the slave program is included with the library distribution for loading directly onto the 3pi, but you might want to add some commands of your own and recompile it yourself.
A master/slave configuration is also useful for expanding your 3pi to gain more sensors (for example, distance sensors or an IR beacon) or actuators, or just to get additional processing power so that slow computations don't interfere with a high-speed sensor feedback loop.
The slave code and an example master program are both included in the latest version of the Pololu AVR Library. The examples are based on serial communications functions that are now included in the library, so you could also use these functions to control serial slave devices from a 3pi or LV-168.
Set your Arduino free; let it drive itself around your house!