A Brief(ish) History of Rodney the Robot
by creator Bob Mottram
One more robot
To me it seemed like a perfectly logical progression to turn what was initially an experiment with pair of cameras and a few bits of aluminium into a humanoid robot, but perhaps this has more to do with my general obsession with all things of a technological nature.
The stand for the cameras was just a box frame made from angled aluminium strips procured from a local DIY store and
crudely bolted together. It had enough space inside it for some electronics,
and with some radio control servos and judicious use of a junior hacksaw I
could even give it some arms and a
rotating waistline! I modelled the
emerging robot upon the only reasonably competent humanoid robot which I knew of at the time – the Cog robot built at MIT - and named it after artificial intelligence guru Rodney Brooks who had masterminded that project.
The first version of Rodney was a clumsy affair. The robot had two servo motors - the type normally used to control model aircraft to rotate its 'head' from side to side or up and down. With both webcams connected to my computer and a bit of programming I could take a picture with one camera, then switch to the next and about a second later take another picture giving me a stereo pair of images. A second's worth of delay between taking one picture and another may not sound like much, but to a robot that's an eternity. Things could happen or people could move in or out of view so that the two images were substantially out of synch. What I really needed was for both of the webcams to be running at the same time so that both pictures could be taken together. This seemingly simple problem was to turn out to be of devilish complexity, and it took the best part a year of investigation before I managed to achieve it.
Actually, when I say "a year of investigation" what I really mean is a year of occasional evenings and weekends spent tinkering about trying to solve the problem. I'm not a professional researcher and Rodney is merely a spare time hobby project done on a very low budget. In emails which I occasionally get relating to the robot people often assume that I work on him all the time, and that I am some kind of mad professor or wizard of Oz figure (pay no attention to that man behind the curtain).
Rodney has been through four incarnations now. With each version I added a little extra to the robot, but in terms of his construction there is nothing particularly special about him. Any schoolboy capable of building a radio controlled car or model aircraft could easily build a robot like this. All the components which I've used are standard parts which can be bought off the shelf. This was quite a deliberate strategy because it means that if a part breaks it can easily be replaced at minimal expense. The total cost of materials for Rodney stands at about £500 - less than the cost of an average desktop PC.
Another design decision was to make all the software for the robot open source. Since Rodney isn't a commercial project this seemed sensible to me, and things always move more quickly when people cooperate and exchange ideas rather than adopting a bunker mentality. Thus far the open approach has served me well. I've had countless enquiries, and a few people have even used parts of the software which I developed for Rodney in their own projects.
One notable absence from the robot is a pair of legs. Rodney is an upper torso only robot, and I've no intention of having him walk across the room. Robots capable of walking on two legs are very interesting (see the Honda and Sony bipeds for some state of the art examples), but I thought that legs would be mechanically difficult to make and that the radio control servos which I've used to control the upper half of the robot probably wouldn't be sufficiently powerful to support its entire weight. Also dynamic walking on two legs requires a sense of balance, and in practice this would mean adding a gyroscope, which is a costly item. Most of the things which I wanted to investigate using the robot were problems of intelligence rather than problems related to locomotion. Even a legless robot sat in a fixed position on my desk can still look around, point to things with its arms and generally try to interact with its immediate environment in a fun way.
With any robot people inevitably ask, "what can it do?” To be perfectly honest even after three years of development Rodney is relatively incompetent even when compared to a human baby. With the first version of the robot I harboured grand ambitions of having it engage in friendly chit-chat and playing with toy objects. In practice even the most primitive abilities are fiendishly difficult to implement in software and I soon realised that most if not all of my plans for him would need to be shelved until I had done a lot of fundamental ground work. The basic problems which I tackled initially were being able to:
1. Move the arms, body and head in a smooth way without a lot of jerkiness.
2. Observe a moving object and orient the eyes, head and body towards that object so that it doesn't move out of view.
3. Detect human faces reliably, and notice people's facial expressions and the direction in which they're looking.
4. Once a persons face has been detected, detect the whole body and estimate their pose (positions of the arms and legs).
5. Judge how far things are away by comparing the images from both left and right eyes, and build up a rough three dimensional map of the space surrounding the robot.
6. Selectively pay attention to (or ignore) different things depending upon the robot's current priorities.
7. Develop a very simple speech interface in order to be able to give the robot feedback on how well or badly it had performed on a particular task, and for it to be able to ask questions in situations where there it was uncertain about what it is going on.
8. Have a simple emotional model which drives the robot's behavior. So it gets bored, over-excited, lonely, contented and so on.
After three years I've made good progress on all of these basic software systems, except for number 5 - stereo vision - which has steadfastly refused to surcome despite many attempts with a variety of algorithms. The best I've been able to achieve so far is for the robot to be able to decide whether there is a large object within a two metre range, but the distance accuracy of its stereo vision is currently very poor.
Also fans of neural networks and genetic algorithms will be disappointed to hear that none of their favourite methods have yet featured within Rodney's system. This isn't because I am in some way ideologically opposed to these techniques, nor even because I am particularly enamoured with Good Old-Fashioned AI (GOFAI). I've always adopted an entirely pragmatic approach to developing software for the robot, rather than trying to straight jacket it into any one particular ideology, and thus far I've found that classical programming and feedback methods have been quite sufficient in order to implement some of the more basic functions of the robot. However, as things progress further I may well need to use neural networks in order to take on some of the more difficult issues.
1 2 3 next>