Table of Contents
BrmBot Turing
~~META: status = suspended &relation firstimage = :project:roomba.jpg ~~
We would like to create autonomous robot with reconnaisance abilities, artificial personality and practical abilities. The codename for the approach and iteration described here is “BrmBot Turing” - we will use Roomba as the robotic platform, Player Project for the software.
We can change the licenses if anyone has problems with it.
Status
The technical setup of this project is work in progress. We can control the Roomba per se, but we had some trouble getting everything required going on the Asus routerboard. Pasky hasn't given up on this project, but prefers spending time on other brmlab affairs and projects for the time being.
Related Projects
We also have a GPS-navigated outdoor robot brmbot_outdoor. And we also use the Roomba platform for the experiment of BrmRat.
Goals of the Project
We would like to create a working robotic platform with reasonable sensors, computational power and mobility to play with. Pasky has no clear idea about exact practical things he would like to accomplish yet, but we will see that as we go, let's just start tinkering around.
Aside of other things, the robot should be able to somehow try to recognize different people and interact with them. Voice recognition is planned for recognizing people.
Brmlab Gatekeeper
One application is to build a gatekeeper bot who will stand near the Brmlab entrance and be able to recognize people by face, voice and will try to communicate. Inspired by Muaddib. Proposed Arabic name is al-Bwab, which means gatekeeper.
Areas of research and application: face recognition, voice recognition, speech synthesis, language understanding, AI. Nao hadr.
We can start by simple greeting of course.
Real Pacman
Just add yellow paint It can eat ping-pong balls and (evil) spiders from floor.
Robotic Platform
We already have iRobot Roomba 505 model (coul be bought in alza.cz with discount in July 2010). It doesn't have large range and RF-navigation (for docking station and lighthouses), but it can still be fairly nifty - it is controlled with black-box ARM processor (encrypted firmware) and has vacuum machine, some IR sensors, bump sensor, and 3000mAh 14-16V battery. Most importantly, it has a TTL-level miniDIN serial port with battery voltage and talking in an openly documented protocol!
We want to glue an Asus WL 500gPv2 wifi router with OpenWRT on top of the Roomba to obtain a wifi-controlled robot! The router has 16M flash, 32M RAM, which is not bad at all; some things can be dealt with directly in the router, more complicated stuff can be outloaded to a more powerful machine at the other side of the wifi. The router has two USB ports; the current plan is to connect a webcam in one and USB audio (in/out jacks) in another to get visual and audio in/out abilities.
How to connect the router to the Roomba? I would like to avoid opening the Roomba and voiding the warranty for now, so we will just connect to the 8-pin MiniDIN connector. On the Asus side, we will use the (conveniently also TTL-driven) serial port, we will just need to solder the connection directly on the PCB since it does not have a connector mounted.
How to power the router? The current idea is to power it from the Roomba battery using a simple circuit based on the LM2576 DCDC-converter; the efficiency should be around 80%, which means 2.5A 5V should be around 1A at 14V, meaning reasonable battery draw and 0.5A per MiniDIN pin, which should be workable. And this is purely a theoretical maximum, in practice the drawn current should be less than that.
A construction consideration is that the Roomba should be still quickly available for “headless” use, and the same holds for the Asus router + DC-DC converter. Later, we can extend the project by buying a dedicated iRobot Create (should be around $120, dock space instead of vacuum, more hacker-friendly) and possibly a separate battery for the router + accessories.
Robotic Software
Details to be decided yet. The Player Project is a well-established robotic software platform and already has Roomba drivers. The client-server architecture fits our design very well. At any rate, the hardware is currently much bigger challenge.
Status and Roadmap
We have the Roomba. The Asus router, parts for the DCDC converter and the USB audio should arrive in upcoming days. Then:
- [DONE] Solder the MiniDIN connector for the Roomba side.
- It's horrible job, but appears to be shortless for now.
- 2x red: 14V-16V raw battery; 2x black: GND; green: device wake; yellow: 5V TTL TX; blue: 5V TTL RX
- [DONE] Solder the DC power supply connector for the Asus side.
- Not used for anything for now, but it is lying there.
- [DONE] Solder a connector on top of the Asus PCB serial port joints.
- From bottom to top - pin 1: 3.3V, pin 2: 3.3V TTL RX, pin 3: 3.3V TTL TX, pin 4: GND
- [DONE] Connect Asus and Roomba serial line.
- This was quite adventurous… it's a small wonder I did not fry the Asus serial port with all the horrible things I did.
- It turns out Roomba's RX sense can deal with 3.3V TTL all right
- To convert Roomba 5V TX to Asus 3.3V RX, I use simple resistor divider: roombablack - 10kohm - yellow' - 10kohm - roombayellow
- asus1 unconnected; asus2: yellow'; asus3: roombablue; asus4: roombablack
- [DONE] Install 2.6-kernel OpenWRT on the Asus, get basic wire networking functional.
- [DONE] Try out basic Asus-Roomba communication.
- I have received sensor packets (did not verify if they are ok yet) and verified that I'm able to set the Roomba LEDs to arbitrary colors and can do basic motor control. The Asus is still tied by two cables!
- Serial mode:
stty -F /dev/ttyS0 19200 raw -parenb -parodd cs8 -hupcl -cstopb clocal
- Sensors:
while true; do echo -ne '\x80\x82\x8e\x0' >/dev/ttyS0; sleep 1; done
- Light:
echo -e '\x80\x82\x8b\xff\x80\xff' >/dev/ttyS0
- Liberty Bell:
echo -e '\x80\x82\x8c\x00\x0e\x40\x20\x40\x10\x40\x10\x3f\x10\x40\x10\x48\x20\x43\x10\x43\x20\x40\x10\x41\x20\x40\x10\x41\x20\x43\x10\x45\x40\x8d\x00' >/dev/ttyS0
- Aheaaaaad!
echo -e '\x80\x82\x89\x7f\x7f\x01\x01' >/dev/ttyS0
- [DONE] Wire out the Asus serial tty to the computer instead, using Arduino as TTL serial shifter.
- Works beautifully, see photo. Same wiring as to Roomba, just using RX/TX pins of Arduino and connecting RESET to GND on Arduino so the ATmega does not wake up and all communication goes to Roomba instead.
- [DONE] Get wifi working on the Asus to get rid of the ethernet wire.
- It turns out that with current kamikaze SVN head, wireless works fine in the client mode!
- But you need to make sure wifi is configured as real interface instead of being a bridge - in /etc/config/wireless, the 'network' should be 'wifi' instead of 'lan'. This is what I did not realize is neccessary before.
- [IN PROGRESS] Solder the DC-DC converter circuit on a universal PCB board, try powering Asus from the Roomba.
- Kind of done (see photo - a bit older and wrong version). A heat sink is missing on the DCDC chip.
- Kind of works now.
- Extra pins need to be soldered to match the connectors.
- Both design and realization is just horrible and just needs to be redone soon. For initial testing, it might suffice.
- [NOT DONE] Try powering Asus from separate battery.
- [NOT DONE] Stick everything to the Roomba somehow so that it does not fall off.
- [NOT DONE] Set up Player on Asus and a “base station”.
- [NOT DONE] Set up basic Roomba control interface (motor control / sensor info / “music” output control).
- [NOT DONE] Get USB gadgets (webcam, audio, …) working.
- [NOT DONE] Set up webcam video streaming.
- [NOT DONE] Set up a mic and audio input streaming.
- [NOT DONE] Set up some low-power reproductor (or take apart Roomba and connect to its piezo) and audio output streaming.
Hacking Point
All parts are at Letnany, and we have some (limited) space to hack there. Anyone is welcome to visit! Please write a short note to the mailing list if you are interested and we will arrange some hacking sessions.
Resources
- How to hack Asus routers to do fun things: http://mightyohm.com/blog/2009/05/building-a-wifi-radio-part-10-building-the-box/
- Serial interface specs: http://www.robotreviews.com/chat/viewtopic.php?f=4&t=7126
Fun Existing Hacks: