This is the first of many (fingers crossed) frequent (toes crossed, too) posts detailing the progress of my cognitive robot. I will use this blog to document the development process, share my project with friends and classmates, and to aid me in making weekly presentations about the robot.
Here’s a summary of what’s happened so far: This semester, I registered for a “Cognitive Robotics” seminar in which students are required to buy/aquire a robot and somehow program it to perform an interesting task through reasoning. It was suggested that we buy a suitable robot over winter break so we could begin working at the beginning of the semester. I chose to put my electrical engineering skills to use hacking together my own custom robot to save money and gain flexibility.
Over the break I bought a first-generation iRobot Roomba to use as a starting point. At about $30, it was cheap, but I still have a lot of extra work ahead of me getting it to the point where it can reason. In short, newer Roombas have a serial port that allows external computers to tell them what to do, and iRobot’s Create is even better because it is intended to be a workhorse robot. Instead, I must open up my Roomba, learn how it works, rip out it’s brain (CPU), and replace it with my own microcontroller brain. The microcontroller will then talk to a small computer mounted on top of the Roomba, enabling the Roomba to do the computer’s bidding. It gets a little more complex than that, but not much. Next I’ll outline that extra complexity, so skip it if you aren’t interested.
I think about my robot in three layers: the Roomba & microcontroller, the PC running a C application, and a Lisp application. The microcontroller solely collects commands from the PC via its serial port, it carries out these commands in the form of moving the Roomba, and it sends sensor data back up to the PC. The PC is a small FlexATX motherboard with an integrated processor and 4GB compact flash card. The PC runs VectorLinux Light (based on Slackware). It will run standard applications and I will be setting up an SSH server and wifi so I can log into robot while it is online. The PC will have one or more cameras directly installed to supplement the sensory input acquired by the Roomba. The planned C application will process the video and sensory input to medium-level tasks such as object recognition, movement planning, and obstacle avoidance. Hopefully, the middle layer (‘behavioral’ layer?) will be robust enough to provide meaningful facts to the highest layer (‘cognitive’ layer?). By this point, Lisp and SNePs will be used to process facts and beliefs in order to enslave mankind :P. I don’t know a great deal about knowledge representation and reasoning, so with any luck, the details of the cognitive layer will materialize in the coming weeks.
By classtime on January 26th, I had purchased all of the parts I need at the moment and presented a summary of cost and showed some pictures of my progress:
- Roomba ~$45
- Battery ~$33.49
- Rapid Charger $15
- 4GB CF card $45.62 – ($40) = $5.62
- CF-to-IDE $3
- FlexATX mobo ~$40 – ($20??) = $20
- Car ATX Supply $7.75
- Total: ~$130
I had installed Linux on the CF card, verified that the Roomba was undamaged, and begun disassembling it. The next step was to extract the circuit board inside the Roomba and begin reverse-engineering its functionality. I have some notes written by a team that hacked a Gen. 1 Roomba years ago, so I know that the motor drivers are active-low. That means I can begin writing my PIC microcontroller code and designing its circuit even before I am ready to solder to the Roomba itself. My plans for the robot are to implement some form of stereopsis (3D image processing) using one or more cameras and to run Lisp directly on the robot.