+ MSI Wind L1300 netbookCompUSA; $285
+ Motor mount and wheel kitParallax; $280
+ HB-25 motor driversParallax; $50 (x 2)
+ Ping ultrasonic sensorParallax; $30
+ SLA-12V18 lead-acid batteryBattery Mart; $35
+ ACC-1206S charger for lead-acid battery Battery Mart; $33
+ In-car adapter to power netbookeBay; $18
+ Arduino Duemilanove microcontrollerSparkfun Electronics; $30
+ Logitech C905 webcamStaples; $80
+ SPT-50 pan-and-tilt mechanismServocity.com; $20
Note: This list reflects prices at the time the project was built.
In last month's issue, my fellow IEEE Spectrum editor Erico Guizzo investigated the up-and-coming universe of telepresence robots—electromechanical proxies that allow you to be there without actually being there. As a telecommuter, I was intrigued by the possibility of being able to "walk" over to a colleague's office, just as if I were working down the hall. The problem is that commercial telepresence robots are pricey. The one Erico tested, made by the company Anybots, will sell for close to US $15 000. I'm too sheepish to ask the boss to shell out for something like that.
But I'm not too sheepish to try to build one.
So with Erico's help I cobbled together a simple telepresence robot for about $1000 in parts. Initially, we thought about copying Sparky Jr., a telepresence robot built on an iRobot Create base. Construction is detailed at http://sparkyjr.ning.com, a Web site "dedicated to DIY, open-source mobile telepresence." But this robot's cat-size stature wouldn't be adequate for office life; I'd need something taller to gossip with others around the water cooler and Xerox machine. And the iRobot Create is too small and light to support much of a superstructure. So instead I rolled a robotic base of my own design.
To propel it, I used the motor mount and wheel kit ($280) from Parallax, of Rocklin, Calif. The kit includes a pair of 12-volt DC motors with worm-screw reduction gearing that were surely designed for automobile electric windows. The gearing has more play than I would have liked, but Parallax integrated these motors with nice aluminum mounts, axles, and wheels. Each kit also includes an optical encoder and a position-controller board, providing closed-loop control of wheel movements. But the kit doesn't contain any motor-driver circuitry, so I purchased separate 25-amp units ($50 each), also from Parallax.
Many mobile robots, including the iRobot Create, have four wheels spaced around a circle at 90-degree intervals. Only the two wheels at either side are driven, the two at front and back merely being swiveling casters to keep things level. The nice thing about such an arrangement is that the robot can rotate in place.
I was set to arrange mine the same way, but a friend with considerable experience advised me otherwise. The problem with four wheels, he explained, was that an irregularity in the floor could cause one of the drive wheels to lift, sending the robot off in an unintended direction.
With three wheels, that can't happen. So I mounted the two driven wheels forward on each side and put just one swiveling caster in the rear. In truth, I incorporated five wheels in all, if you include the two small casters I added to the very front. These don't touch the floor: I added them only to prevent the robot from tipping over if it stopped suddenly or was bumped from behind. To be sure, with a heavy 18-ampere-hour lead-acid battery ($35) mounted on the base, there's really not much chance that this robot could topple anywhere.
An MSI Wind L1300 netbook ($285) provides most of the robot's smarts, along with a screen that shows my face when I operate it. Running it from the lead-acid battery required an "in-car" adapter ($18). The netbook sits atop a salvaged camera tripod, which is affixed to the base with hinges, making it easy to adjust the screen position to shoulder height.
At a lower level, literally and figuratively, sits an Arduino Duemilanove microcontroller ($30), a device that regular readers of this column will surely recognize. The netbook communicates over a USB cable with the Arduino, which in turn talks to the two motor-controller boards via 5-V serial lines. The Arduino is also hooked up to two small limit switches attached for right and left bumpers. And this little computer operates two radio-control servos I had on hand, which I rigged into a simple pan-and-tilt mechanism for the robot's webcam. (You could purchase a much better engineered unit for as little as $20.) In addition, the Arduino runs a Parallax Ping ultrasonic distance sensor ($30), which is mounted to the tripod at waist height.
As mobile telepresence robots go, I suspect that this collection of hardware is about as simple as you could get by with. The software that operates it all is, however, reasonably complicated. And for that, I must credit Hari Wiguna and the good people who gave us Skype. Let me explain.
Before purchasing any of the hardware, I wanted to be sure that I could turn this collection of components into a functioning robot without months of programming. That's when I stumbled on Hari Wiguna's SkyDuino project, a DIY pan-and-tilt webcam that's remotely operated. Wiguna's code for SkyDuino, written in C#, makes use of Skype's application programming interface to send one-character messages to a remote Arduino. I'd just have to expand the repertoire of messages to include a set of robot-motion commands.
I downloaded Microsoft's (free) Visual C# package and modified Wiguna's code so that in addition to controlling the remote webcam, I could also command the robot to rotate in place or move forward and back by given amounts, all while conducting a Skype video call. I also added some code so that the robot could communicate information back to its master. If the robot bumps into something, it halts and tells the operator whether the right or left bumper hit. Also, with each command sent to the robot, the ultrasonic sensor sends out an inaudible ping and listens for the echo. The Arduino then gauges the distance to the nearest obstacle and relays that information back to the person driving.
It took a while to get the hang of steering, mostly because of the delays inherent to Skype. It's a bit like maneuvering a Mars rover: Send a command, wait for the response, send the next command, and so forth. But with practice, even my 7-year-old son could manage it.
More problematic was a nasty software bug. I eventually traced the problem to the way that the SkyDuino code handled communication with the Arduino: For each command sent to that board, a virtual serial port is opened and closed. But my Arduino reset each time this serial port was opened, creating havoc. The remedy was simple—have the C# code open that port only once, at the beginning of the session.
This system is admittedly a bit fragile—it requires the interaction of three separate computer processes, one running on the Arduino, another on the netbook, plus the Skype application—and they must be started in sequence or else errors occur. And Skype suffers from dropped calls, which means that a person familiar with the robot needs to be available to nurse it back to life from time to time. But judging from Erico's experience test-driving Anybots' robot, such problems dog commercial models too.
My sense is that these machines are a bit like early personal computers—cool for hackers but not quite ready for prime time. Still, exploring the practicality of a telepresence robot is a lot of fun when you've laid out only a small fraction of what it costs to buy one.
This article originally appeared in print as "I, Office Worker."