Sunday, July 31, 2011

DIY Telepresence Robot - Part 2

Parts List

Construction of the robot is more of an assembly task than a true manufacturing task.  A collection of high level parts loosely thrown together - the robot can be assembled quite quickly.  Construction of the body frame requires a small amount of craftmanship but even so - the whole robot can be built in a day (a weekend at most) using common tools.  Many of the parts are only found online, but some may be purchased locally if the price is competitive.  Here is the list of parts...

- iRobot Create Programmable Robot  $130

- APS Battery $70
Since we're going to be tapping the battery for the netbook, we want the highest capacity, fastest charging battery.

- Home Base Charger $70

- Create USB to Robot Cable $20

- Asus Eee PC 1015PE (or similar) ~$250
Stock in this exact model may be diminishing or hard to find at a good price.  Any netbook in that class should do however.  Higher priced ones are not better.  They just add stuff like larger hard drives, better battery, etc which you DO NOT NEED.  The battery is going to be removed from the unit and the software requirements are minimal.  Your primary constraint is weight.  2 to 2.5 lbs is ideal.  The voltage requirements on different models may vary from the 1015PE but the electrical components we will be using can accommodate a wide range of voltages so different computer models should not effect the electrical design.  More troublesome might be the form factor of the netbook.  The platform we will be building integrates the netbook battery cavity into the structure, so if another model's chassis differs dramatically from the 1015 then the build instructions may not transfer to it, and you will have to come up with your own structural solution.

- Microsoft LifeCam Cinema WebCam $55 (or less)
The netbook webcam sucks.  Picture quality, motion, light correction, and auto-focus are of utmost importance for navigation so you want a decent webcam.

- Eagletron PowerPod $180
A nifty little gadget that we will be used as the robot's neck.  It has a very strict weight limit of 3lbs.  That's why the netbook has to be very light.

- AnyVolt 3  $55
An awesome little gadget for generalized voltage conversion.  This will be used to convert the iRobot's battery voltage to the laptop's voltage.

- DB25 Breakout Board (BRKSD25M-R) $22
This is a bit of a splurge item.  Honestly you could just a get a $2 connector from Radio Shack and solder it, but I am lazy and terrible at soldering so this little item was gold for me.  I built the entire robot without having to do a single solder!  If you feel comfortable soldering, then save yourself a few bucks.

- EZ Tube Construction materials ~$20 ??? (lost my receipt so I don't have the exact pricing)
  - 1 x 100-100 Plain square aluminum tubing
  - 3 x 100-305 Composite T
  - 1 x 100-328 Adjustable Foot with plastic insert
These will form the body of the robot.  These guys have an unusable online ordering system so just phone in the order instead.

- Aluminum Sheet (6.5" x 12" x 0.04") $4
This sheet will be fashioned into a little "table" for the laptop and needs to be light but sturdy enough to support the laptop.  You can buy aluminum sheeting at Home Depot, but I think the thickness may be 0.032" which is a little too thin.  I found that 0.04 or even 0.05 thickness is about right.  I ordered mine online from this site because they offer a range of thicknesses and also can provide a custom cut which is convenient.  It is probably a good idea to pick up 2 of these because constructing the table is a precision task and is easy to mess up.

- Construction Materials
A few extra items that can be picked up at Home Depot, Lowes, and Radio Shack.
  - 4 x 1 1/4" 6-32 bolts
  - thin electrical wiring (20 or 22 gauge)
  - 1 1/4" x 1/4"-20 bolt (standard camera tripod size)
  - flange nut that fits the bolt
  - velcro
  - wire management clips

So all told, the total is something like $875 (parts) + $100 (shipping fees) + $25 (extras) = $1000
Tax isn't included here but the price is still pretty close to accurate.

Next -> Part 3: Building the Head

Wednesday, July 27, 2011

DIY Telepresence Robot - Part 1

This is the first in a series of posts on how to build a telepresence robot.  As I mentioned in the previous post - my robot has fundamentally improved my telecommuting experience.  It facilitates casual and more personal contact with coworkers, improves the quality of communication with them, allows me to participate in impromptu discussions and meetings, enhances my feelings of involvement at the office, and improves the perception of my availability and work ethic among my coworkers.  I highly recommend it to anyone who telecommutes regularly.

First off - I owe a huge amount of thanks and credit to Johnny Lee and his blog for the idea.  I have been following the development of professional telepresence robots for the last 3 or 4 years with growing anticipation, because I immediately understood what a huge impact they could have on my telecommuting experience.  Unfortunately their development has been slow and the few that are available are all marketed towards CEO's and upper management and thus cost on the order of $10K+.  When Johnny's robot hit the Web a few months ago, it was a revelation to me.  Instead of waiting for the market, I realized that even a software guy like me could assemble a working robot without too much cost or engineering expertise.  I started designing my own robot almost immediately.

The result is what I consider an incremental yet much improved design over Johnny's robot.  The basic design is the same.  A small netbook on a raised platform mounted on a Roomba vacuum cleaner - basically just a roving netbook.  Wireless communication and custom software loaded on the netbook is used to control the Roomba from a remote location and move the whole contraption around.  Skype video conferencing is used to see during navigation and also to communicate face-to-face with other people.  A self-charging docking station is used to keep the batteries charged and the unit powered.

Telepresence Robot

Additionally I developed a number of improvements over the original design.  They are...
  • The power system has been completely redesigned to power the netbook directly from the iRobot battery.  The electrical system is simpler, easier to construct, and more elegant.  Also no dangerous and warranty voiding electrical modifications need to be made to any of the components which makes the robot much safer to install in a place of business.
  • A rotating "neck" has been added to the robot so that it can look up/down and side-to-side independently from the robot base.  This comes in handy during navigation (avoiding floor obstacles) and when looking upwards to talk to a person that is standing.
  • The body frame and netbook have been reversed so that they face towards the front of the iRobot allowing the front bumper sensors to be used.  The robot immediately stops when it bumps into obstacles
  • The body frame is simple, light, and easy to construct
  • The structural weight has been reduced to less than 5lbs (the carrying capacity of the iRobot).  At this weight the robot has no trouble auto-docking.
  • A high quality webcam was added to improve vision and navigation.
  • The control software transmissions piggy-back over the Skype connection.  No custom ports must be opened on the corporate firewall.  If Skype can get out of the network, then the robot can be accessed.  Likewise, the controller software only needs Skype access, so I can just as easily use the robot from my laptop at Starbucks or from an airport as I can from my home.

To be fair there are also a few disadvantages to my design.  With more parts and more complexity comes less stability.  Software exceptions, hardware errors, or battery drains occur fairly frequently (two or three times a week), and I often require assistance from coworkers to tinker with the robot.  However, each software iteration has gradually reduced these problems.  Also the additional parts are an additional expense.  I created my robot for about $1000 instead of Johnny's purported $500 - although I don't actually believe his figure.  That quote really only includes two major parts (iRobot and netbook) and cannot possibly include things like the docking station, body frame, etc..  The actual cost of his robot I speculate is closer to $700.  My cost estimate includes all of these additional parts plus the shipping costs.

In the coming posts I will give the parts list and a detailed construction tutorial.  The construction is actually quite easy requiring no special skills or knowledge (not even soldering) and utilizing only basic tools and an electrical kit.  The source code, binaries, and installation instructions will be provided as well.

WARNING: The hardware design and software are offered for free without any guarantees of quality or obligations of support.  I have done my best to disclose accurate information about the performance, successes, and shortcomings of the robot.  Make no mistake - this is very much a prototype piece of equipment and there are still many unresolved issues, so if you decide to build one you should expect some problems and you should plan on having to monitor the robot and make frequent adjustments.

Next -> Part 2: Parts List

Telecommuting Tools

My current toolset includes the following in order of importance:

1. VPN
Having a VPN into the corporate network is an obvious must.
2. Microsoft Remote Desktop
We are a Windows shop so Remote Desktop is a given.  Some people like to fool around with VNC, but honestly that is only useful if you are dealing with Linux.  In Windows, Remote Desktop is really the only way to go for the simple reason of speed.  All of the VNC variants out there suffer from the same fundamental weakness.  They are all essentially "screen scrapers" that sample pixels from the screen buffer and transmit compressed images.  Remote Desktop is hooked into the Windows interface at a lower level and instead transmits GDI type calls like FillRect and DrawText which are orders of magnitude smaller and more efficient than transmission of image data.  VNC can never equal the speed and responsiveness of Remote Desktop.  I really don't even notice the difference between remotely controlling computers from the office or from home.  I can remotely manage our entire server room with virtually zero loss of efficiency. 

3. Telepresence Robot
My robot is the most recent addition and has had an enormous impact on the quality of my interactions at work.  I used to spend a lot of time drafting emails or on the phone with my coworkers, but both of those methods tend to infuse conversations with a bit of distance and formality.  They are nothing like the casual conversations and informal pow-wows that occur in person where so much crucial information is created and shared.  In my company you will often stumble upon small hallway meetings that evolve into design discussions where important decisions are made.  Communication by email, IM, phone, video-conferencing all miss out on these impromptu events.  You only get the summary of the discussion afterwards once everything has already been decided.

My robot changed all that.  Now I can cruise around just as I would at the office and engage people casually.  I can feel the daily "pulse" of the office.  It really makes me feel much more involved.  Even if I just have a quick question that would take me 30 seconds to send via email, I will often take the extra 5 minutes to do it with the robot because the quality of communication is so much better.  It also has a psychological effect on coworkers (and bosses) because it gives the impression that you are more available.  Even if you spend 10 minutes everyday just buzzing around to say hi, doing nothing but wasting time - the perception is that you are actually doing more work because people notice your presence.

Stay tuned, because I will soon begin a series of posts that will give detailed instructions on how to build this telepresence robot.

4. Email
Of course for detailed or formal communications, there is no substitute for email.

5.  Custom "Screen Sharing" Software
The one major weakness of Remote Desktop is that it does not allow the sharing of a desktop between users so you can't do joint development and trouble shooting, code reviews, etc. which is crucial for a software team.   Of course Remote Assistance is Microsoft's answer to this and it works really well once you have established a session.  It uses the same API as Remote Desktop so responsiveness and fidelity are fantastic.  Unfortunately the process of establishing a session is so cumbersome that it is burdensome to use.  So instead, I wrote my own desktop sharing application that uses the Remote Assistance API but bypasses or streamlines the process of creating a session.  The goal is to be able to come into someone's office (via robot) and then take a look over their shoulder at their computer to discuss what they are working on - just as you would in person.  My app comes close to achieving this.  At some point I will be sharing the code for that software on this blog.

6. Skype Voice and Video Conferencing
I still rely on Skype for some communication - particularly if I am going to be engaged in long debugging or code review sessions.  In those situations, the robot can be a bit of a distraction and simple hands-free voice is more appropriate.

With these 6 tools, I can do just about everything that I would normally do in person.  The only thing that is really missing is white-boarding.  So far I have not found an adequate substitute for standing in front of a whiteboard with a few people and sketching out designs and exploring concepts -- but I'm still working on it.

Tuesday, July 26, 2011

Hello World

I work as a lead developer at a small software company.   I also live about 200 miles from the job site, and so for the past four years I have been primarily telecommuting to work.  During that time I have experimented with many approaches, tried a lot of available software, and developed many of my own tools to improve the telecommuting experience.  I work closely with about 5 - 7 teammates on a daily basis and my current experience is about 80-85% as effective as being there in person.  This site is intended to be a sort of brain-dump of my thoughts, experiences, and tools for effective telecommuting.