Sep 22

I’m coding the neural network in Java primarily because it’s fast, it’s platform independent and it’s fairly easy to drive USB devices with it. Also it’s a language I already know fairly well so I can skip the learning curve.

The basic topology of the neural network will be a collection of neurons of different types with weighted connections between them which cause sequential firing. The neurons are divided into four categories:

  • Motor – Each servo will have a motor neuron attached to it and the servo will turn by an angle relative to the strength at which the neuron fires.
  • Sensor – Each sensor will have a sensor neuron attached to it and the reading coming in from the sensor will inhibit or strengthen the passed on signal.
  • Command – These neurons will be fired by commands entered by a user and start off the network activity
  • General – These are ‘general purpose’ neurons which don’t connect to the outside world.

All neurons contain a list of connections which define the index of another neuron, the delay between the neuron firings (to mimic differences in physical separation) and the signal attenuation (how much the of the signal strength is passed on – could also be negative, meaning that the signal strength is increased).

Given that real world neurons pass on a signal that is generated from the cumulative input signals given to them by connected neurons I will model this by producing an output signal that is the sum of the last few input signals with incrementally greater attenuation given to the older signals.

Active Robots have an example Java application which I will use as a basis for my servo controller libraries which I will need along with the drivers from Future Technology Devices.

Now of course a real neural network is massively parallel (not to mention powerful) in its processing, something which I am attempting to model in a multi-threaded yet ultimately serial processor. This will probably be the biggest hurdle in my development which is why I will be beginning with a fairly small network, controlling only eight servos (although I may also add some rigid, weighted arms so that it may learn to balance itself). The good thing about this type of project is that it can be scaled up or down relatively easily depending on processing restrictions. Also there will be no need for C.A.R.L.O.S. to move particularly fast (I’m hoping for slow yet controlled) so it’s not a big deal for the processing to be less than speedy.

Tagged with:
Sep 15

Well, the parts arrived and with a little help from a glue-gun, a couple of wire coat-hangers and some cable-ties C.A.R.L.O.S. mark one is here!

Using eight servos I’ve given it pretty much the full range of movement of human legs except for leg twisting and the additional roll/yaw movements at the ankle. If these appear to be necessary I can easily add them in future refinements. I just don’t want to over-complicate things at such an early stage.

The circuit board you can see is the servo controller so the only connection needed to bring this to life is the USB cable.

CARLOS Front

CARLOS Rear

Sep 08

First things first, here is a rundown of the hardware I will be using to build the Robot:

Tagged with:
Sep 08

Hello and welcome to my blog all about my work with robotics.

A few years ago I did a degree in Artificial Intelligence and Computer Science at Birmingham University in the UK. In this degree I learned all about the construction of neural networks and even took a course in Intelligent Robotics (20 credits for playing with Lego!). However in the seven years that have passed since then my skills have lain dormant so I thought it was about time to revive them with a decent challenging project.

The idea is to build a set of robot legs which will be driven by servos connected to a neural network. The legs will also have an array of tile switches to detect orientation. The neural network will be a collection of motor neurons (one per servo), sensor neurons (one per sensor) and normal processing neurons. From an initially random topology these will then use a fitness function, based upon reading from the orientation sensors (upright = good) and servo position (straight hips and knees = good) to evolve and ‘learn’ to stand up.

If I get that far, I’ll set it the task of learning to walk, then see about expanding its range of sensors. I’m building The Whole Iguana.

Sound tricky? I’m thinking so too. But it’ll be a great challenge. I’m going to blog the whole process including pictures and code snippets so stay tuned for my progress.

Tagged with:
preload preload preload