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.

