Introduction: MAYA Budget Telepresence Rover
Telepresence Robots are robots which allow you to be somewhere you can't physically be, such as being at school while your sick or being at work while your on vacation. While it is amazing technology, most telepresence robots are in the thousands range. Maya, short for Me And You Anywhere, is here to change that. The entire project can be created for under $250 if you have your own netbook or laptop. Maya has something that most telepresence robots in the thousands range do not: It is easily expanded. Change the webcam, the monitor size, the laptop, or add on an arm. The software, RoboRealm, also allows for easy software upgrades such as object recognition and tracking. How is Maya created so cheap? The base! The base is one of those robotic vacuum cleaners also known as a Roomba. It was picked up from ebay for $50 dollars. If you follow the instructions, just about anyone can make it!
Note: I plan to have kits available this summer... Stay tuned!
Note: I plan to have kits available this summer... Stay tuned!
Step 1: Overview
We are using an Acer Aspire One A150-1126 as the computer on board, but any netbook/notebook running XP, or Linux/Mac if Wine is installed, should be fine. (ARM Processor's will not work) If you have trouble setting up Wine, contact me or leave a comment. The Computer will have to do 3 things,
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.
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
Its just a matter of connecting all the wires...
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.
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
WebServer
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
onclick="setVariable('move=1')"
in each of the buttons in the provided index.html file. What that does is call a Javascript routine called setVariable (also in the same HTML page) which will execute a background HTTP call to the RR webserver and tell it to create a variable called 'move' and set the value to 1. In this way any button can be created to set a variable to a specific value back in RoboRealm.
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.
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
onclick="setVariable('move=1')"
in each of the buttons in the provided index.html file. What that does is call a Javascript routine called setVariable (also in the same HTML page) which will execute a background HTTP call to the RR webserver and tell it to create a variable called 'move' and set the value to 1. In this way any button can be created to set a variable to a specific value back in RoboRealm.
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 body was the ultimate DYI, IMO. The Body was created from a trash can, an empty hose roll and a spare VCR deck. The Hose Roll was empty and laying in the back of sears, and they let us have it for free. Usually, they throw them out, so you probably can pick some up. It was used to have the laptop ontop and not in a mess of wires, and to wrap the wires around. The trash can was just something laying around, but still available at Big Lots. For exact model info, contact me.
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)
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
Here is a little more in-depth description on charging,<br> <br>The Roomba uses 22v to charge. The Roomba power source gives off 22v at 1.5a I believe. Obviously, that is enough to charge a Roomba, but not a 12v battery and a netbook/laptop. I had a universal laptop power adapter with the interchangeable tips which fit the dock perfectly and gave off 4a. When I tried to draw power from the dock, however, through the 22v to 12v DC converter, the dock would start flickering on and off. While the cause of this is unknown, here is the solution. I took the barrel jack and I disconnected the board's connection to the dock, and went from the barrel jack straight to the docking pads. (Wires go to the circuitry inside and to the docking pads, but not from the circuity to the docking pads.<br> <br>Picture of inside of dock shown, without mod but the one with the black wire is with the mod done. You won't have the feature of the docking pads being 3.5v when its not docked, as it will always be 22v, but its still a relatively safe voltage. So the battery and the netbook is connected to the Meanwell 22v to 12v converter. When the Roomba docks, it starts charging, and the Meanwell converter starts up and provides the 12v needed for both components. The part can be found here: http://www.jameco.com/Jameco/Products/ProdDS/212531.pdf<div id="myEventWatcherDiv" style="display:none;">
Step 6: Complete
Here are the pictures with the trash bin on top, and ultimately just everything put together. The first picture is Rev. 1. The 2nd picture is Rev. 2 with pan+tilt, a door to the computer, and an arm.
Step 7: Extend: Arm
I'll be putting together a robot arm very soon. If anyone doesn't want to wait for me to do it, or wants to order the parts ahead of time, here are the parts that will work natively with roborealm.
http://www.budgetrobotics.com/shop/?cat=159
http://www.amazon.com/Hitec-RCD-Inc-Servo-HS-422/dp/B0006O3WWI/ref=sr_1_1?ie=UTF8&qid=1299810368&sr=8-1
http://www.lynxmotion.com/p-579-base-rotate-kit-with-hs-422-servo.aspx
http://www.lynxmotion.com/p-287-lynx-b-pan-and-tilt-kit-black-anodized.aspx
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;">
http://www.budgetrobotics.com/shop/?cat=159
http://www.amazon.com/Hitec-RCD-Inc-Servo-HS-422/dp/B0006O3WWI/ref=sr_1_1?ie=UTF8&qid=1299810368&sr=8-1
http://www.lynxmotion.com/p-579-base-rotate-kit-with-hs-422-servo.aspx
http://www.lynxmotion.com/p-287-lynx-b-pan-and-tilt-kit-black-anodized.aspx
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;">