Older blog entries for motters (starting at number 28)

I now have a little forum on my site, which hopefully will allow people to ask or look up answers to questions about the various robotics projects on my site.


In other news, I'm now beginning to work on a new piece of software which I've called "robocore". This is an implementation of the "dynamic core" hypothesis developed by Gerald Edelman. Edelman did try to test his theory using a series of robotics experiments called "Darwin", but to my knowledge the more advanced parts of his ideas about consciousness have never been tested experimentally.

The nice thing about robocore is that it is entirely self-organising. Concepts of various kinds may arrise spontaneously according to a selectionist principle without explicit supervision. Edelman's original Darwin experiments included quite detailed simulations of neurons and their interconnections, but in order to keep things as simple as possible my implememtation only preserves the basic essence of the theory, such as topological organisation, value mediated association and reciprocal connections between cortical maps.

I've made a sourceforge site for my Human Body Project, which is a spinoff software component originally developed on my Rodney robot for detecting and learning about people.


Work continues on the Flint ape-bot. I've added some arms and legs to enable it to interact with its environment in more interesting ways. Each arm has six axes and the legs are only four. Whether the robot will ever be able to walk (supporting its own weight) is an open question at the moment, but walking isn't my main aim.

I've added force sensitive resistors to the hands, body and legs which should give some tactile feedback, allowing Flint to nudge objects and observe the effects. The hands aren't strong enough or sufficiently mobile to actually pick things up though.

I've updated some of the primal sketch stuff which I started a couple of years ago, and used it for detection of box-shaped objects and geometric scene analysis.

In a simple test the geometric information from primal sketches can be used for recognition of different scenes. I had Flint look left, right and straight ahead and remember what he had seen. I then dissconnected power to the servos and manually moved his head into different positions, then had him guess in what direction he was looking based only upon what he could see. With some tweaking of weightings the recognition is pretty much completely reliable. These are only basic tests, but they do prove that relative geometry matching methods work.

I've found the best way to test any new vision algorithm is firstly to test it with natural lighting during the day, then close the curtains and switch on artificial lights and check if the recognition still performs in the same way. Under artificial lighting the contrast decreases and the apparent colour of things changes quite substantially, so most vision systems fail to generalise between the two lighting situations. By using a primal sketch this problem is greatly reduced, since only edges information is considred, with the edge detection threshold adjusting automatically as contrast reduces.

I'm now doing the final testing on what will be my second generation humanoid. This project is more animatronic than the previous one, but uses much the same technology as Rodney. My aim was to build something which doesn't obviously look like a robot (looks more like an animal) in order to encourage social interactions.

So far the new robot has 8 axes all related to head and face movements. Although it does have arms and legs these are just passive at the moment. All the existing axes checked out apart from the neck tilt which wasn't quite geared enough to prevent the motor from stalling as the head tilted back. Replacing the neck tilt servo with a 5.5Nm unit fixed the problem. The cameras in both eyes also checked out ok. I was a little unsure as to whether they would both work since they've been hacked about a fair bit. For reasons of fitting the cameras within the space available inside the head one of them is mounted upside down, but this can easily be corrected in software.

The new robot isn't designed to be a replacement for Rodney. I'll still be using both robots, with Rodney mainly focussed on pure research while the new one (as yet unnamed) will be used as a technology demo geared towards social interaction due to its more organic appearance.

Another milestone passed on the Rodney project. I've now got him to recognise quite a few different facial expressions. This ability will come in very useful for experiments involving immitation and learning. For example, I could use a smile or a frown as positive/negative feedback when training the robot to perform a particular operation.

First of all I'd like to make clear that I'm not selling anything on ebay.

Thought my sourceforge site was abandonware? Then think again. I've started putting some of the components for the new version of Rodney's software on there https://sourceforge.net/projects/rodney/ Hell, I might even do some documentation.

There are a few bugs in the VB demos that need ironing out, but otherwise progress is going ok. Turning stuff into DLLs is definately a wise move I think, because it considerably simplifies the overall design. There is more stuff to do on the visual memory, and I have a behavior model based upon the Kismet robot which will need testing once some of the other bits are in place.

In order to get better occupancy grid results I'm trying to improve the accuracy of the stereo matching algorithm.

Pretty much all the stereo algorithms which other people have devised perform abominably, even on high quality images. There are some examples of stereo matching from various researchers which at first glance appear to give impressive results, but when I substitute in my own images these algorithms produce an unintelligable fog. Traditionally stereo matching algorithms look for unique feature points in both images and then attempt to match them. The only system to date which performs half decently is one devised by Stan Birchfield, and my own system is based on his idea.

Instead of trying to look for identifiable feature points I decompose the image into a set of horizontal slices, where eash slice represents an area of continuous colour or texture. I then attempt to match the slices between the two images. Matching of the slices occurs using the weighted sum of various attributes, such as colour, length and position relative to neerby slices.

Until recently my stereo matching system only used mono images. The original colour images were converted to mono and then matched. However, I found that using colour gives a huge improvement in matching accuracy.

The algorithm that I've got at the moment is pretty good, but there is still room for improvement. Matching of horizontal slices is now about 90% accurate, but the estimation of distance based upon horizontal displacement still seems fairly inaccurate.

I'm developing the new stereo algorithm in isolation at the moment using VB and taking images from the robot in order to test the accuracy of the depth images. The system runs sluggishly in VB, but once perfected I'll tansfer it back to C++.

I've now done some reorganisation of Rodney's control system and turned it into a subsumption architecture. Previously the main part of the control program - called "executive control" - wasn't particularly well structured, having been hacked about rather a lot during development.

Using the subsumption system makes it much easier for me to add and test new behaviors without disturbing older ones too much.

Using the new ASC-16 controller I've been able to get significantly better movement of the robot, with control over speed and acceleration of the servos. Consequently I've improved the "blink" behavior so that it looks a lot more realistic.

I've implemented a crude 3D occupancy grid in the style of Moravec. This doesn't work brilliantly at the moment, and I'm not sure that my maths is correct for transforming camera coordinates into 3D coordinates. It needs more testing and debugging, but I think in principle I should be able to get it to work (although it won't be as accurate as Moravec's system).

I've now got Rodney version 4 up and running, and have been working on his head and eye movements. The system which I've used is similar to the previous tracking system. It's still pretty simple and uses a "centre of gravity" type algorithm to calculate a target position for the eyes.

It took quite a long time to tune the feedback loop which controls the saccade movements of the eyes, but I've now got them moving fairly accurately. If I place any object within stereo vision range the robot quickly moves its eyes and orients its head/torso to focus on it. The head and torso movements are just slaved from the eye movements, such that if the eyes move towards the limits of their motion the head and body make compensating movements to bring the eyes back to a central position. This orientation behavior looks fairly natural, and fixation of a nearby target by the eyes is almost completely accurate.

A new feature which I've added is a visual attention system. This is based on a similar system used on the MIT Cog and Kismet robots. Rodney presently pays attention to both stereo and motion cues. Physical movement of the robot's head supresses attention to visual motion in a classical subsumption style.

There are a couple of things to work on next. Firstly Rodney's behavior at the moment is entired "bottom up". He is entirely driven by events in his immediate environment. I need to add some internal goals and motivations which help to structure the behavior in a rational manner (for example a desire to explore his surroundings, rather than just being obsessed by whatever object is closest to him). This leads on to the second thing which I'll have a go at, which is a 3D occupancy grid similar to those devised by Hans Moravec. Using some crude stereo methods and servo position feedback I may be able to have the robot build up a rough 3D model of his immediate surroundings.

19 older entries...

Share this page