(this review was originally published on robots.net)
I think this review marks some kind of record for how extensively we’ve tested a hardware product. Normally, when we receive a piece of hardware here at robots.net, we give a brief evaluation and write a basic review of it. So when Pololu sent a 3pi robot in late 2008, I expected to write and post a quick review. As it has turned out, here it is June of 2009 and the 3pi has been more thoroughly field tested than any other robot we’ve worked with. We’ve had way too much fun with this little robot and by the time you finish reading the review, you’ll probably want to buy one or two for yourself. Read on for all the details as well as loads of photos.
First of all, I should probably describe the Pololu 3pi. The name comes from the size. The diameter in centimeters is the value pi times 3 or 3pi. In inches it’s about 3.7″ in diameter. The 3pi is a self-contained robot with dual motors, five reflectance sensors, an 8×2 character LCD, a buzzer, 4 AAA batteries, and three user pushbuttons. One minor lack is wheel encoders, without which you’ll never get the little robot to go in a straight line. The 3pi is designed primarily as a line-follower, so this isn’t much of a concern. Still I’d love to see a 3pi v2 (or a 4pi?) that added encoders.
Controlling it all is an Atmel ATmega168 (newer models have the ATmega328, which is identical except for having twice the memory). The Free Software and Open Source GNU GCC tool chain provides a mature, powerful compiler that can do just about anything you need. To make things even more interesting, the controller is compatible with the Arduino microcontroller and all of its software.
I knew almost as soon as I got my hands on the 3pi that it was a really nice little piece of hardware. We included it on the robots.net 2008 Top 10 Robot Christmas Gift Ideas list and it kept rising higher on the list throughout the editing process and finally ended up as your number one recommendation for 2008. I anticipated posting a review shortly after that but playing with the 3pi was so much fun I kept finding new excuses to extend the review process.
The first thing I wanted to do was present the robot to some other robot builders and get their thoughts, so I took it a meeting of the Dallas Personal Robotics Group and showed it off. Most people who saw it were impressed and several ordered their own shortly afterward. At last count there were at least 10 3pis rolling around the DPRG world headquarters.
Also in late 2008, the DPRG did a robot demonstration at FenCon, a local literary science fiction convention. I brought along the 3pi as did several other DPRG members. So we had several following each other around a simple hand-drawn, tabletop course as SF fans and guests like Gregory Benford watched in amusement. Later, someone produced a laser printed course made on interchangeable 8.5 x 11 paper. The 3pis are remarkably adaptable to any sort of line; white on black, black on white, narrow, wide, even hand drawn.
By now I’d determined the basic robot was a pretty neat little device, so I decided to investigate the development tools and ease of setting up a development environment. One thing that really annoys me with some microcontrollers and robot kits is that they rely on arcane proprietary tools that only run on a particular OS. I was pleased to discover the 3pi relies on the GNU GCC tool chain. GCC is free software, which means among other things the source code is available and easy to port. So it will install and run on nearly any computer system and OS you can name.
I run Redhat Fedora GNU/Linux on my laptop and desktop. The first step towards a working development environment is making sure the AVR ISP worked. The 3pi came with a Pololu USB AVR ISP. I plugged one end into the 3pi and the other into my laptop’s USB port. Fedora immediately recognized the ISP and started the built-in driver. From what I’ve heard this step may be more complicated for Windows users. Unlike Linux where drivers for nearly everything are built in, Windows often requires the user to search online, download drivers, and install them manually. But on GNU/Linux at least, the Pololu USB AVR programmer works out of the box.
The next step is to get the AVR-GCC tool chain for cross-compiling from GNU/Linux to the AVR ATmega168. This is easier than it sounds. Just type “yum install avr*” and you’re done. This will install the AVR libraries, the GCC cross-compiler and tools, documentation, and the avrdude utility for moving code from your computer to the 3pi. As with the driver, this may be more involved for Windows users but probably no harder than installing any other Windows program.
The final step in setting up the 3pi programming environment is to install the Pololu libraries. These need to be downloaded from the Pololu website and compiled. Here’s how I did it:
- Go to this web page to get a link to the current version of the library:
- Download the compressed .zip file and unzip to a working directory
- Type “make install PREFIX=/usr/avr”
You should now be ready to test things out by building one of the demo programs and downloading it to the 3pi. Building it should be just a matter of changing to the directory and typing “make”. Downloading it requires using avrdude. If you haven’t done that before, I’ll save you some time: here’s the command I use, which should get you started:
avrdude -p m168 -c avrisp2 -P /dev/ttyUSB0 -U flash:w:test.hex
Most of the demo programs compile to a file called “test.hex” but you may need to adjust that name if you’re working with other source code that is named differently. Also the port I use on my laptop is /dev/ttyUSB0 but your port name may vary depending on what other USB devices are attached and which physical port you’ve chosen to plug the ISP into.
Running avrdude will download the code to the 3pi and you should be ready to go. Overall, I found this process remarkably easy compared to other robots and controllers I’ve worked with which sometimes take days of work to get a cross-compiler working. With the 3pi, I was writing and executing custom code in less than hour.
It was during this process, however, that I found the one major complaint I have with the 3pi. The software library that Pololu provides claims to be licensed under the Creative Commons Share-Alike license version 3.0. Unfortunately, Creative Commons licenses should never be used for software for a variety of reasons including issues related to distinguishing source code from object code. But more importantly, the CC license is incompatible with the GNU GPL license used on most FLOSS software. The intent of the CC-SA license is to take the terms of the GNU GPL software license and apply them to non-software works such as music, art, and photography. Both the Creative Commons FAQ and the Free Software Foundation license guide warn that CC licenses should not be used for software.
So what does this actually mean for the typical user? As long as you’re writing software only for your own use and not sharing it with others or selling it commercially, you should be fine. If you do intend to share or sell the software you write, your best bet is to avoid using the Pololu AVR library altogether, or contact Pololu about getting a compatible license for your application. I’ve spoken with Pololu about this and they are aware of the issue so there’s a chance they may relicense the library under a Free Software license such as the GNU GPL or some other compatible software license such as the BSD license.
License complaints aside, I now had working code and what better way to test it than in a real life robot competition. The Dallas Personal Robotics Group had one of their annual Roborama contests coming up and these always include a line following event. So I started with the sample PID line following software provided by Pololu and made a few minor tweaks. As I began to test the code on the line following course, it hit me just how fast the 3pi is.
The specs say 3 feet per second. Reading that figure doesn’t make the same impression as seeing the tiny robot zipping across the floor. It can easily go so fast that on tight turns, the narrow wheels lose traction, allowing it to fly off the course. With some trial and error I adjusted the robot to have the maximum speed possible given the wheel traction and course material. The final code was so finely tuned that it was necessary to clean the wheels and course prior to each run. A little dust on the wheels was enough to result in a crash.
When contest day arrived, the 3pi not only completed the course successfully but won first prize. Even more interesting, the second and third place robots were also 3pis. I’m fairly sure several spectators at the contest were planning to buy 3pi robots by the end of the day.
So what else could I possibly test at this point? The DPRG, always ready with some new challenge, had been asked to host a “robot petting zoo” at a local science fiction convention called AllCon. The idea was to come up with robots that could survive being handled by a lot of children in a large play area. We ended up getting some white VCT floor tiles and creating portions of line following paths on them. The tiles could then be laid out on the floor and re-arranged like puzzle pieces to make all sorts of different line following courses.
Not surprisingly things quickly got out of control and kids were trying to slide tiles back and forth in real time while several 3pis raced around the lines at top speed. 3pis were flying all over the place, getting kicked and, in one case, stepped on. How did they hold up? All but one survived with no damage at all. The one that was stepped on lost a wheel but was functional otherwise. With a little superglue, the wheel was reattached and it’s as good as new. Obviously, I don’t recommend you treat your 3pi this way but it’s good to know how sturdy they are.
Finally, just before I completed this review, I joined the DPRG for a demo at the A-Kon Anime convention where they were demonstrating a full-size R2-D2 robot built by group member Glenn Pipe. I brought along a 3pi just for fun and demonstrated it for anyone who was interested. It was here that the 3pi received its biggest endorsement yet. When you get a thumbs up from Jesus Christ, you know you’ve got a good product!