I believe I have created a robot that's functional, helpful, entertaining, whimsical AND simply amazing.
The ServerBot. Built upon an iRobot Create.
A robot with the ability to move reliably between any room in the house while carrying a payload, in our case, a serving tray on top. The ServerBot has a much greater potential with other tasks of moving laundry and such. The elderly could appreciate a ServerBot to help transport just about anything around the house.
You are in the Kitchen with a tray of popcorn and drinks for movie night. You have more to take out but can't carry everything in one load (or you are physically disabled and are unable to carry everything). Just push the ServerBot CALL button and within a minute or two ServerBot arrives to assist you. Place your items on top and press the button on the ServerBot for the room you want it to deliver its payload to. Off it goes.
It knows its way around, carrys things for you, talks to you, and won't bump into things.
This is a Live Working Model that we are actively using at my house. My goal with the Create has always been to make something USEFUL out of it. So far this is IT. This project will continue to evolve. We have plans for interchangable bodies, one of which will be a big Ice-Bucket so it can roam around with cold drinks at a party. As-is, it can roam around at a party to deliver drinks and horsdevours and return to the kitchen for re-stocking.
The ServerBot can be covered and re-covered in different fabrics to match your decor or a party theme. This covering is held on with scotch-tape, I'd suggest something less tacky. Ha!
The current ServerBot has evolved over a period of time so I don't have good pictures of it's construction. I am now documenting the building of the next one in more detail so keep watching.
This bot is not as complicated as it may look with all the following technical mumbo-jumbo. If you can solder, then you can build the circuits without any trouble. You don't have to use the same body I did, anything will work (a cardboard box would do just fine). Very few parts are required and all parts are readily available online or at your hardware store.
Step 1: Video
Step 2: The Hardware
I Started with the basic iRobot Create with APS Battery and Docking station. The wheels are locked in the UP position and the rear-wheel is installed for stability.
The body is a 10" concrete form tube from the hardware store. The lid is a large (cheap) plastic serving platter, also found at a hardware store (I tried to find something a little more high-tech, but no). The body is wrapped in fabric.
I am using the Parallax Propeller chip (Proto Board) to communicate with the Create as well as two SRF02 Sonars, an XBee Radio for remote communications, an HM55B Compass module, a SP03 text-to-speech module, four buttons, and an LED.
Step 3: Construction
The 10" tube was real easy to cut to size (30 inches high in this case) and easy to drill holes in for the sonars and buttons. I used a dremel with a cutting disk to cut the tube.
The tube is screwed on to the base with just two screws in the side which go in to some slots on the brackets mounted on the Create with parts from my VEX Robotics kit. The back of the tube has an extra lip on it that dips in to the back end of the cargo bay, which helps prevent front-to-back rocking motions. The two screws are simple yet strong enough to be able to pickup the bot by the tube and place it wherever you want.
Physical connections from the Propeller to the Create itself consist of the Serial TX and RX pins, the 5v Regulated pin on the Create is connected to detect when the Create is powered ON, the Power Toggle pin is also connected. Also the Dock detect pin is connected so we know when we are Docked.
Holes for the Sonar were drilled and rubber grommets were inserted to hold the sonars. Five additional holes were drilled on the back for the buttons and an LED.
A board was added to hold the i2c bus and the Compass module. The Sonars and Text-to-Speech module are connected to the i2c bus. The Compass module is connectected to the Propeller via a jumper wire.
A Variable Voltage Regulator was used to drop the Creates VPwr voltage down to 9v before feeding the Propeller ProtoBoard, which has a 5.0v and 3.3v regulator. A fixed 9 Volt regulator would be fine as well, I just couldn't find one at the time. You must drop the 18v from the Create Vpwr down to 9 Volts before going to the Proto Board because the 3.3v and 5v regulators can't handle 18v input directly. Plus, the Proto Board doesn't have room for Heat Sinks so you want to drop the voltage as much as possible before getting to them.
Another board was added for the XBee Radio interface. The XBee has 2mm pin spacing so it doesn't fit on standard .001" breadboards without making a custom board.
The 9v regulator, XBee Interface, and maybe the HM55B Compass will all be mounted directly on the ProtoBoard on the next build.
Step 4: Connecting the Propeller to the Create
This is the basic setup to get a Propeller Proto Board connected to the iRobot Create without any external Sensors involved. This will allow you to write a Spin program on the Propeller to control the Create and analyze it's sensor data.
You will need:
*An iRobot Create (APS Battery and Dock are Optional)
*A Parallax Propeller Proto Board (Parallax Part #32212)
*A PropClip or PropPlug to program the Propeller Board.
*A 9v Regulator (LM7809)
*A DB25 Connector to plug into the Create's DB25 Port
First, take a CAT5 Network Cable (since it has 8 wires in it) and connect seven of them to the designated pins on the DB25 connector.
Then, solder the other end of the wires to the Proto Board as follows:
DB25-1 -> P2
DB25-14 -> 10K Resistor -> P3
DB25-2 -> P4
DB25-8 -> 10K Resistor -> P5
DB25-9 -> LM7809 Input (Pin 1)
DB25-13 -> 10K Resistor -> P6
DB25-25 -> Vss (Gnd)
The 10K Resistors are used for anything that sends 5v into a Propeller port since the Propeller is a 3.3v device, the resistor limits the current to keep the Propeller from getting hot.
Solder the LM7809 GND (Pin 2) to Vss.
Solder the LM7809 Output (Pin 3) to the TIP of the 9 Volt Power Connector.
I would suggest putting a heatsink on your LM7809 9 Volt Regulator because it does get rather HOT since it has to dissipate the extra 9 volts (from the 18v Create battery) as Heat.
That's it for connecting the Propeller Proto Board to the iRobot Create. All other connections are between the Proto Board and the Sensors you choose to use.
Step 5: Connecing the Compass Module
The HM55B Compass Module has turned out to be a necessity to get the Create to go where I want it to go. Since the Create will never turn exactly as far as you want it to, and you have no way to know if it did or not, I found I needed the compass so I would know definitively what direction I (it) was heading.
The Create Distance and Angle sensor data can be pretty accurate, as long as the flooring surface is consistent and you only perform right-angle turns at the proper speed while reeding the sensor data at the proper rate. It turned out it just wasn't consistently reliable to use an X,Y coordinates mapping system based solely on the Creates sensors. So the Compass in integral in maintain heading accurancy.
The Compass returns a reading of 0 to 359 degrees indicating what direction the Create is pointing, just like your every day magnetic compass (except you read it as North, North/East, East, etc.. The compass returns 0 for North, 45 for North/East, etc..
The HM55B Module from Parallax is an 6-pin DIP module that could be soldered directly onto the Proto Board. HOWEVER, it is very susceptible to anything metal (motors, rebar, refrigerators, lamps). The electrical characteristics of the Proto Board may affect it, but more likely the MOTORS of the Create will cause the most disturbance. And since the Proto Board is mounted in the bottom of the cargo bay, it is rather close to the motors. So, I suggest mounting it on a separate board and mounting it higher up and in-between the motors (about 3 or 4 inches seemed to do ok, your mileage may vary).
You will require five wires to connect the HM55B to the Proto Board. +5v, GND, DATA, CLOCK, and ENABLE. Mount the HM55B on a small circuit board, then bring five wires from the HM55B to the Propeller ProtoBard.
Connect pins HM55B-1 and HM55B-2 to ProtoBoard-P13.
Connect pin HM55B-5 to ProtoBoard-P14.
Connect pin HM55B-4 to ProtoBoard-P15.
Connect pin HM55B-3 to ProtoBoard-Vss.
Connect pin HM55B-6 to ProtoBoard-+5V.
Mount the board up/away from the Motors and anything that might cause magnetic/electrical disturbances. And keep it LEVEL.
The CreateOI.spin Object (software) takes care of reading the compass and adjusting our heading as appropriate while driving to maintain the requested direction/heading/bearing (so many ways of saying it).
Step 6: Connecting the Sonar(s)
So at this point the robot went pretty much where I told it to, but sometimes there would be something in the way. The Bumpers would make it stop and back-up and try to go around, but that's not very proactive at avoiding obstacles.
I needed EYES! But, I settled for some good ol' Bat Ears. Sonar. Ultrasonic. (although you can hear it making a tick-tick-tick sound if you listen real close)
The Sonar sends out a sound wave and waits for it to bounce back, then calculates how long it took for the sound to return to determine the distance (based on the speed that sound travels at sea level). The ones I use are accurate from about six inches to 40 inches.
I can detect the distance of an object and tell the robot to slow down or stop depending on the distance of the object.
Sonars worked better then Infrared Range sensors (in this case) because of the wider cone-of-detection. Infrared range sensors have a very narrow beam and won't pickup object slightly off-center like the sonars do.
Since I don't want to veer too far off-course, I am simply having the robot slow down and stop until the object moves out of range. Since I am using the text-to-speech module, I have the robot say "pardon me" if it has to stop, so you know you are blocking it and can move.
The Sonars connect to the Propeller via an i2c bus. i2c is just another fancy way of talking to a bunch of devices connected to the same two wires, but each device has it's own Address so you can talk to them individually.
I have two sonars on my ServerBot, but one could be sufficient. All sonars are connected the same way to the same wires (in parallel).
Build i2c Circuit with the 1K series resistors and 2.2k Pull-Up resistors on the Proto Board (see image).
Connect the sonars (in parallel) to the +5, Gnd, SCL, and SDA connection points on the Proto Board (see image).
Step 7: Connecting the Speech Module
I had this Text-to-Speech module so I had to use it, of course.
When an object is blocking it's path, it says "Pardon Me".
You can send it text strings from a remote application on the Internet and it will speak them.
When you give it a destination, it announces where it is going before leaving.
When it arrives at its destination it says "Mission Complete, I am ready to serve.".
When the battery is low, it start's complaining.
Connect this module exactly like the Sonar, except you'll need to make a connector to connect to the Speech Module.
Step 8: XBee Radio
The Radio is used for remote control, uploading scripts, and viewing sensor data. It's really handy having a wireless connection for soooo many reason.
You can't reprogram the Propeller via the radio, you still have to physically plug-in to the Proto Board to program the Propeller.
The wireless connection could be ANY kind of wireless, like bluetooth, or, well, Anything.
XBees are about the size of a Quarter. I've gotten almost a mile range, outside, but not exactly a clear path. The pin spacing is not standard circuit-board spacing so I had to make a daughter-board for it. This daughter-board allows me to put a socket on the Proto Board and just plug-in the Radio Module that I want to use.
The XBees run on 3.3v so we simply connect the Power Pin to +3.3v, the Ground pin to Vss, the DataOut pin to the Proto Board P0 and the DataIn pin to Proto Board P1.
Any other device is the same. If you are using a 5v wireless device, then put a 10k resistor in series with P0 to limit the current.
Step 9: Operation
The ServerBot is loaded with very simple "Scripts" which tell it how to get from one point to another (turn to heading, drive to beacon, turn to heading, drive distance, etc.). Button are placed on the robot itself so you can press a button to get it to go to a different location. You can also control it via Telnet or IR Remote or a stand-alone PC application which can also be used to load scripts, view sensor data, and issue other commands.
I haven't built one yet, but I intend to place "CALL" buttons in each room which will use an XBee Radio to send a message to the ServerBot, requesting it to come to the room you are in.
Paths can be uploaded at any time. I intend to write a path-builder app to make for easy setup.
A path consists of a list of instructions to get from point-A to point-B. There are three instructions. Turn to Heading (degrees on a compass), Drive x Inches, and Drive to Beacon #x.
It is programmed with how to get from 1 to 2, 2 to 3, 3 to 4, 4 to 5, 3 to 5, and all in reverse. The program will then determine which paths to take to get to the requested destination.
The ServerBot starts and stops gradually so as not to topply anything on the top. When the sonars detect an object the ServerBot will begin to slow-down and eventually stop if something is within 18" in front. It will then continue on it's path when the object (dog) goes away. A physical Bump will cause the ServerBot to backup, move to the side a few inches, and continue in the proper direction.
In Loop mode the ServerBot will continuously travel from room to room, which could be useful in an office enviroment for mail delivery or coffee service. When you need to add or remove something to the tray, you just stand in front of it and it will stop and wait as long as you are blocking it's path.
Step 10: Software
The software is all written in Spin for the Propeller. All of the software components used are on my robot page at iRobotCreate.googlepages.com in the Propeller section.
I have other experimental applications written in Delphi and Java for remote control and monitoring.
You can also connect via the internet through an XBee Radio to Ethernet gateway to control the robot with simple vt100 Telnet application (Hyperterminal) or Java or Delphi or whatever Application.
All Sensor data collected by the Propeller (distance, compass heading, etc) is also available to remote applications.
You can initiate and upload scripts via any interface using the Internet.
With a wireless connection, sing the Arrow Keys on your keyboard you can drive the robot and correct the robots heading while testing scripts.
(I can even send commands to come to the livingroom from my PalmOS Treo via a telnet application and gprs data connection.)
Additional hardware specs and sourcecode for the IR Beacon are also available at iRobotCreate.googlepages.com. The current complete source is attached here as well.
Step 11: IR Beacon
To help aid in navigation, I created an IR Beacon which transmits the same IR codes as the Create and Roomba IR Remotes, except you can tell it to transmit whatever byte you want. It transmits the desired byte about every 200ms. If the Create is driving by the beacon then you'll see the IR Char in the Sensor Data of the Creates built-in IR Receiver (you don't have to build an IR receiver for this IR Beacon, it's Create Compatible).
The Create does a pretty good job with Distance calculations based on it's wheel encoders. But there is still a little slippage here and there to cause it to get skewed over time. Something was necessary to re-orient the Create every so often so these Beacons (after testing with RFID) were the easiest to implement. With one beacon to cross somewhere on the X axis, and the Docking Station somwhere on the Y axis, the Create has been able to traverse the same path endlessly without intervention.
I put a 1" piece of Drip Tubing on the LED to narrow the beam to increase the Creates distance accuracy.
So far, this beacon has been running off 2 AA batteries for several weeks straight. I'm sure it could be tweaked much more for optimal run-time.
This could be a perfect lead-beacon for the Robo-Bellhop. Easier to build and smaller to conceal in a belt or strap. It works great with Adaptive Mapping as a way to occasionally recalibrate it's position.
Step 12: Cost
Looks like about $350.00 MINIMUM if you already happen to have all the right connectors and plugs and resistors and other miscellaneous hardware. PLUS maybe another $6.00 per beacon.
iRobot Create = $130
iRobot Create + APS Battery + Docking Station = $260
Parallax Propeller ProtoBoard = $25
HM55B Compass = $30
SRF02 Sonars = $23 each (optional, but I recommend at least one)
SP03 Text-to-Speech Synthesizer = $108 (optional)
XBee 2.4Ghz transceiver = $20 (optional)
Supplier: Home Depot
Body - 10" Concrete Form = less then $10
Beacon Parts: (optional, but recommended)
Microchip PIC16F690 = $1.85
Radio Shack High-Output Infrared LED = $1.79
100ohm Resistor or 1k Potentiometer = $0.05
2 x AA batteries (or any 3v supply)
Step 13: Possibilities
- A Greeter at the door to guide guests to the appropriate room of an office or such.
- HelperBot to hold and cary miscellaneous items for the Elderly around Assisted Living facilities. A bot could know where the tables in a dining area are and deliver the food directly to the table.
- IceBot to carry an ice-bucket around with drinks in it at a party.
- I am considering adding a Glass-Holder at the proper height of the Ice and Water dispenser on the refigerator and automate the process of getting a glass of ice-water then delivering it to you.
- MailBot to deliver and pickup mail between offices.
- Alarm functionality so it can go wake-up the kids, going room to room, making lots of noise.
- Robot can be fitted with PIR motion sensors to act as an Alarm System during the night when nothing should be moving around. Could even take a picture when motion is sensed and send the picture to your cell-phone or alert an Alarm Monitoring Center.
- CoffeeBot to drive around the office with a fresh pot of coffee, returning to the coffee maker for a refill when it senses the pot is empty.
Watch my web site at http://irobotcreate.googlepages.com to see the latest and greatest updates.
Step 14: Disclaimer
Use my software at your own risk.
It's not my fault if your drink get's spilled.
The program MAY not be perfect, yet, so keep one hand on the serving tray while testing.