Note: I plan to have kits available this summer... Stay tuned!
Step 1: Overview
1. Control RoboRealm
2. Control the Roomba via the RooStick 3.
3. Run Skype
RoboRealm (http://www.roborealm.com/) is an amazing program which is perfect for this project. It enables you, with some work, to control just about any robot. The files needed for RoboRealm to control the Roomba are here:
http://www.mediafire.com/?8m4feeffoqijmnx NOTE: You must have a License, or the trial, to use these files.
RooStick: It is the conversion from the SCI (Serial Command Interface) Port, or on newer Roombas, ROI (Roomba Open Interface), to USB. NOTE: Same port, different names. It is possible to create your own cord, by hacking a serial to usb cell phone cable. t.com/blog/2006/07/19/roombongle-a-roomba-usb-dongle/ Drivers for RooStick available here: http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx
Skype: Skype is used to transmit audio. I may switch this up later, but for now it works.
For the webserver to work out of your home network you have to port forward 80, 8080 to your internal IP. (On an Airport Extreme, it's 10.0.1.X. On most other one's it's 192.xxx.xxx.The Webcam used is auto focus which is best for robots. (Rocketfish) If you use a regular webcam, the picture will probably be out of focus a lot. I got it for $20 off of Cowboom.com
Any LCD display, as long as it's not too heavy should work. I got an I-Ink 15" Display form Amazon that weighs about 2 pounds, and was 60 dollars.
Step 2: Connecting
Connect the speakers, webcam, RooTooth and display to the computer.
Plug the computer and Monitor into an inverter. Connect the inverter to the battery.(If you don't want to open the inverter up, there are parts on amazon which converts it to flat out regular positive and negative.
Connect to Battery.
Solder Wires to the docking pads and then into the 22-12v converter. Just to verify it is converting the voltage, take a multimeter and make sure your getting 12v.
Connect the Battery to the OUTPUT of the voltage converter. I found that if you don't want to solder it on, you can take aligator clips and turn them side ways for a great fit. (Splice an alligator clip wire in half, solder to those) POLARITY IS IMPORTANT! You could end up blowing the Roomba, the Dock, the Computer, the inverter etc. From experience, check then recheck. If the roomba is upside down on a table, with the bumper towards the top, positive is on the left, negative is on the right.
<Picture to be Inserted>
Plug the RooTooth, or custom made serial cable, to the Roomba. If you are going to create one a schematic is posted below. Like said, you do not need to create your own, but it is much less. You can use the cable from some data sync cords at radioshack. Check out the article mentioned on the previous slide.
Step 3: Software
The WebServer module allows you to view images being processed by RoboRealm over the web using a regular web browser. The webserver within RoboRealm is off by default and needs to be turned on before becoming active. To activate the RoboRealm WebServer select the checkbox in the options dialog as seen below. You can view this interface by clicking on the "Options" button in the main RoboRealm dialog.
Activating the WebServer RoboRealm will transmit images over a TCP/IP network using port 8080. To connect to these images (after activating the webserver) point your browser at http://localhost:8080/ or use your machine name in place of localhost if you are accessing the images remotely.
Images are transmitted using an MJPEG encoding to a Java applet running within your web browser. Alternatively, if you are using FireFox or other MJPEG compliant browser (this does NOT include IE) you can access the image stream directly using http://localhost:8080/mjpeg.cgi This allows you to connect the video stream to other streaming systems that are typically used with Internet WebCams that stream their video also using an MJPEG format.
The webserver is configured to only return a few types of files. Most of those files are located in the RoboRealm/webroot directory that you unzipped RoboRealm into. The following are the files returned and their usage:
* index.html - contains the HTML for the Java applet and is returned on initial contact to the webserver. The page is very simple and only contains the needed Java applet code to configure the browser to contact RoboRealm and start streaming video.
* favicon.ico - the favicon is the icon used when bookmarking or indicating the link type in many web browsers.
* RoboRealm.class - the actual Java applet class returned to the web browser to start streaming.
* mjpeg.cgi - this is a virtual filename that does not exist on the file system but instead signals to the webserver to start streaming.
You can specify different variables to be communicated back to the RoboRealm Webserver based on HTML buttons/checkboxes/etc. If you look at the HTML code for the buttons you will see the onclick specified as
To then react to this variable (for example in driving a robot) you will need to hook that variable into whatever module you are using (typically seen as a variable dropdown). For example, suppose you are using one of the Servo modules (like the SSC) to control a servo. The variable you used in that module's variable dropdown is called "move_servo" and ranges from 0 to 255. You would then ensure that this variable is in the SSC module under the variable dropdown (either select it if already existing or type it in). Then edit your HTML page and add a new HTML button with an onclick attribute in it like:
<input type="button" value="GO" onclick="setVariable('move_servo=255')">
which would set the servo to 255 if that button is pressed. You can add more buttons to stop it, something like
<input type="button" value="STOP" onclick="setVariable('move_servo=128')">
would set the servo back to neutral 128. Using this technique of communicating back values to RoboRealm and interfacing them with various modules can provide a easy way to web enable the control of many devices.
Note that the RoboRealm WebServer is NOT intended as a replacement for industry standard webservers such as Apache or IIS and therefore does not have any additional functionality other than basic video streaming.
For security reasons, RoboRealm does NOT allow access to other folders other than the RoboRealm folder. If you wish to put images into a /images folder you will need to do so using another WebServer with the appropriate reference. Adding images to the RoboRealm installation folder (typically c:\program files\RoboRealm) WILL be accessible to the browser and served by the webserver.
Step 4: Body
The VCR deck was to used basically like spare sheet metal, to make two long strips that intersect to hold the trashcan which has a slightly larger circumference than the Roomba. It is screwed on to the casters on the back.
Towards the rear of the roomba, (near the dustbin), if you flip it upside-down, there are two screw holes. Got 2 1" casters, and made two brackets. I think the pictures best describe this. Then, an additional 2 brackets were drilled onto the trashcan so it sits on the back wheels and the front goes inside the holders made in front. A hole was also made for the IR sensor so it can still dock normally, and a whole on top for the wires. The monitor was drilled on top. (Pictures in final slide)
Step 5: Charging
Step 6: Complete
Step 7: Extend: Arm
http://www.hvwtech.com/products_view.asp?ProductID=449<br><br>All the servos get plugged in to the Propeller which in turn is plugged into the computer. I'll be releasing an updated web interface to handle the servos. <br><br>Any questions? Again, just leave a comment. To stay updated, subscribe to mayarover.blogspot.com<br><br>P.S. I entered this in the contest for the Zing. I'd love to mass produce this for Retirement Homes and small businesses around the world for an extremely low cost. It is too hard to mass produce it now using a friends band saw, as it isn't precise enough. I would also like to add a door in the body for easy access. <div id="myEventWatcherDiv" style="display:none;"><div id="myEventWatcherDiv" style="display:none;"><div id="myEventWatcherDiv" style="display:none;">