Oculus Netbook Telepresence and Surveillance Robot

Hi Everyone,
Oculus (www.xaxxon.com/oculus) is an arduino-based netbook ROV-robot platform, with features and software that allow it to be used as a long-term remote-surveillance system, or telepresence robot.

It consists of an adjustable frame that holds most small laptops with 11" screens or smaller, complete with powered wheels and a tilting periscope for the laptop's built-in webcam. You can control it over the internet using any PC web browser, or iOS or Android device
Open source control software is available as a free download; project link: code.google.com/p/oculus
OR it can be controlled via RoboRealm Computer Vision software and their Oculus plugin (www.roborealm.com), allowing autonomous navigation

Power and communication to the system is supplied entirely via USB. The laptop's battery is charged using its own stock charger, routed through the included charging base. The bot docks automatically with the charging base through computer-vision navigation.

It uses an arduino based microcontroller with integrated L293D H-bridge for low-power DC motor control
Remaining ATmega328 pins have been brought out to headers on the board, so sensors, lasers etc. can easily be added

We've recently launched the kits for pre-sale, on our kickstarter page:
Prices start at $225, and bundles with reduced-price RoboRealm software are available.

Please post any questions/comments, and visit our home page for more info www.xaxxon.com

Thought I'd mention some circuit-design and code tweaking we had to do to optimize performance:

We had to set the ATmega PWM registers directly, since the 'stock' Arduino servo library PWM frequency of 500Hz didn't allow maximum power to the wheel's DC gearmotors. (The board and motors are ONLY powered by the max 2.5W power from the netbook's USB port, and this has to haul around the 2.5Kg total weight of the robot... so optimization was a necessity.)

We used the following code to set the 4 pins going to the H-bridge PWM frequency to a low 30Hz:

pinMode(motorA1Pin, OUTPUT);
pinMode(motorA2Pin, OUTPUT);
pinMode(motorB1Pin, OUTPUT);
pinMode(motorB2Pin, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20); // phase correct (1/2 freq)
TCCR2B = _BV(CS22) | _BV(CS21) | _BV(CS20); // divide by 1024

which allows us to thereafter set the speed of the left and right motors with:

OCR2A = 0; // 0-255, motor A duty cycle 
OCR2B = 0; // 0-255, motor B duty cycle

This gave the motors much more torque at lower speed settings.

For fine control of PWM frequency, this resource helped: http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM, as did the detailed spec sheet for the ATmega chip.

We went through a lot of trial and error in capacitor size/number/physical placement to eliminate decoupling gremlins in the circuit, since the Atmega chip and the H-bridge/motors were sharing the same power source. This tutorial proved invaluable:

Similarly for the light accessory, which has its own Arduino-based microcontroller and is powered solely by a 2nd USB port, the stock PWM frequency DIDN'T do the trick for setting the brightness of the Cree LEDs. At 500Hz, any duty cycle setting above 128 was full on, and anything below was full off. We found 240Hz to be a happy medium to be able to finely-tune the brightness of the light, yet not exhibit any flicker.
Also worth noting about the light circuit is we didn't need an external timer crystal, so to save a couple bucks per board we set the chip to use its own internal timer. Less accurate, but does the job.

This is awesome and very well done, congrats.
I'd love to build one of these to communicate with my family on the other side of the planet :grin:
What sort of software do you use for communication? Is it based on Skype or something similar?

We made our own 2-way video software based on flash and the red5 streaming media server. It also uses that same link to send and receive real-time text commands and messages from the bot.
You can download it and check out the source code here--doesn't need the hardware to run
Some other DIY netbook/telepresence robot projects have used Skype, which has an API you can build on, and offers better audio echo cancellation. The skype interface isn't as flexible though