Let's Make Robots!

Analog_Binary system with associative memory

Demonstrates non-numerical associative memory and learning.

Greetings! This first post will be an attempt to introduce one of the projects I've been working on lately.

If the photo can be enlarged, then you'll notice I've tagged the chips for identification....which also hints at what is being built. The base and wheels for the robot are not pictured, this is just the experimental board for a portion of the memory system and one of the A/D converter chips used for the CDS pair for detecting light amplitudes.
There is no mcu or processor used in this project, as it's more of a memory processing architecture. The Ram is a simple 1024 x 4 bit chip,of which there will be several. One of the ideas behind the process is that each sensor or sensory array has its' own memory processing circuitry with additional provisions for memory match detection, novelty, attention, etc...The basic rule to this type of architecture is separate memory regions for all inputs and outputs. There is also memory for "higher cognition" and further sensory I/O processing as it relates to the overall state of the machine.
The primary difference between this machine and other smaller scale robots is in the use of distributed functions and associative memory, at several "Orders" of processing, as I like to call them. Orders can be thought of as levels or layers of processing. Theoretically several orders are possible within a particular machine, but in practical terms, perhaps 3 is a realistic goal.

The associative memory scheme is  key to the robot's operation. Consider the address input to a ram chip as vector A, the data input as vector b and the data output as vector a'. In a very simple example, a sensory input vector A provided by possibly an analog to digital converter, activates particular address lines which in turn outputs an initially random 4 bit data pattern as vector a'. The ram defaults to read mode and will output whatever contents happen to be in the output register when a valid address pattern is activated (Vector A). The output vector a' can be considered to be associated with vector A, the address input pattern. In this example we can use 4 infrared obstacle detectors (  RB-Cyt-75 or equiv), connected to the input port, representing vector b. The detectors would be positioned to best detect possible interference from obstacles in the robots path (naturally). A comparison between the output data on vector a' and the input data from vector b, is constantly monitored by additional circuitry. When a mismatch between the 2 vectors is detected, the ram switches to write mode and writes the data on vector b into the register currently addressed by the primary input sensor, the A/D converter. Let's say the input to the A/D converter is an ultrasonic ranging sensor....the binary output from the converter is a representation of the distance between the robot and an obstacle. I never make direct connections from memory devices to motor controllers as I believe there should be at least several layers of "decision making" between the primary memory processes and any physical output; motors, end effectors, etc. But for the sake of this article we will allow motor control from output vector a', possibly with the aid of some minor steering logic. To continue, after the data pattern of vector b is saved in ram, the ram switches back to read mode and now outputs the vector b pattern through vector a' output which is now connected to a decoder and motor control. The motor, via the decoder, will adjust itself to steer away from the obstacles. The ram continues in the read mode as long as vector a' and vector b match. In essence, the robot is learning to associate the ultrasonic ranging data with the obstacle detection data.

More information will be included as the project advances...I'll also add plenty of photos and schematics when I can.
Later I will describe some of the analog functions and how the system integrates it all into a working robot.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I've taken a break for a few months to concentrate on another project....the robots had to wait but I feel I'm ready to start contributing again and finish the original project I had started here. Normally I would put a message like this on a blog for this site but not sure how to do it. If anyone could point out how to start a blog here, let me know...thanks.

Today I just wanted to comment on an interesting concept I ran across while reading a paper written by Ezequiel Di Paolo, School of cognitive and computing sciences, university of Sussex, Brighton, UK. It's called "Organismically-inspired robotics: Homeostatic adaptation and teleology beyond the closed sensorimotor loop." The title grabbed my attention since most of my designs hinge on the process of homeostasis.

To get to the point, the author describes a problem he wanted his robot to solve: Imagine a small robot that operates on phototaxis (follows light), and it has a learning mechanism to achieve this. The understanding is that only two photo sensors are used, in his case, two cds cells. Similar to a Braitenberg vehicle, the robot turns right when bright light is detected on the right cds, and turns left when bright light is detected on the left cds, otherwise the robot drives straight towards a centered light source. A very basic operation. For clarification of the circuit we will say cds1 connects to motor1 and cds2 connects to motor2, without mentioning the learning circuitry. Let's consider the task has been learned ( by whatever process, the author uses a simple neuro-net in his model). Now, in his scenario, being attracted towards light is the only correct move allowed and any other deviation from that target is considered a wrong move. Now let's consider what he does next; he swaps the cds wiring so that cds1 connects to motor2 and cds2 connects to motor1. Now the robot has to track the light source as before but with a reversed sensory connection. At first glance this seems pointless, but what is trying to be proved is interesting; adaptability. He uses the premise of an earlier experiment by a psychologist whereby a subject is given a special pair of glasses that reverses the observed scene and the subject is tasked with adapting his behavior accordingly. The glasses would cause the subject to see his left field of vision through the right eye,and the right field of vision through his left eye....very similar to what the author did with his robot. The point of the experiment by the psychologist was to measure and determine the amount of adaptability to the new environment by the subject. It was stated in the paper that the subject got to the point where he could navigate quite successfully with or without the glasses; the brain had learned to adapt and compensate for both visual scenarios. The author also mentions that he was able to get his robot to adapt similarly; it learned to navigate toward the light source whether or not the cds cells had been reversed.

I think this is an excellent example of learning and adaptation which goes beyond just visual navigation, but can be further refined to accommodate for generalization. In other words, given certain tasks or scenarios, the robot would be able to execute them in a wide range of environmental conditions, and should be also able to compensate for broken or damaged sensors.

If anyone else thinks this is interesting, drop a line or comment. I think it would be interesting to see how many robots in this group could execute a similar experiment. Or even if anyone has an interesting or novel way of producing this behavior, let us all know.

Personally, I'll be looking into this and see if this form of generalization can be built in using my circuits.




Thanks for the interest Mmlad....I addressed the "punishment" issue in another post to Jorgen, you can read that and see what you think.

If your nets are as smart as an ant, then you're doing pretty well....they are smart little buggers.

This design is uncommon for nnets...as a matter of fact it has no weights to adjust, it learns it's associations with 1 pass and will update that knowledge when similar situations occur again. On the binary side of things, the circuit is a self-learning dynamic look-up table. Dynamic in the sense that the ram contents are constantly changing to correspond with other memory regions and functions. The original idea is very neural net-like.....but the hardware just isn't available and after years of fiddeling around with discreet components for memory cells, I decided that an inexpensive ram chip would fit the bill. It has plenty of I/O lines, it remembers the data you feed it and is by design, associative...meaning the pattern of address lines that are active will elicit an output associated with just that input pattern. This model is using a myriad of 2114A static ram chips that are 1024x4 bits capacity. So thats 1k memory per chip. Doesn't sound like much,,,but I'm not running any code or software or anykind of operating system. On the larger model I'm designing for home and security use, the rams will be a much larger type, probably 32k to 64k or higher per chip...and preferably the non-volatile type ( tiny battery built into the case). As it is now, when I shut off the power, I lose all the memory....so as a private challenge to myself, after this small model is built, it can never be turned off for fear of "killing" it, or at least the personality it may assume. It takes a lot of time to build up the experiences it needs to get around on it's own,,,and I'm impatient, haha. As I stated in another post, I will try to get some basic schematics online so you guys can take a look at it. It's definitely nothing you've seen before ( I don't think), so don't let the novelty scare you off. Personally I'd love nothing more than to see a bunch of LMR'ers try their hand at non-numerical robotics......there is just so much more than can be done....code tends to restrain imagination, in my opinion.

Thanks Monkey

yes, my nns doesn't even have any weight either,

on yer circuit, you must mean that it already had a "learned" process created by connecting the circuit up, right? and it would learn more by adding some things that it "chaotically learned"* by itself, right? so....you don't know what will happen after this? if yes, then that's great! random(chaotic) things happening on a machine learning project is a great expectation!

 one thing i like about analogue is that you are the one who's making and inventing yer own circuit rather than buying an arduino and programming it just as buying a robot kit, you're not making the robot, you are just assembling it (in the arduino or other ucontrollers sense).

*chaotically learned= learned by mistake or something like that.

Your on track in a way. For now there would be motor behaviors connected to some obstacle detectors....hardwired, not actually learned (more on that later, they can be learned also)....Whatever other sensors are active at the same time an obstacle detector is triggered, the circuits will associate those actions together....so the next time the other sensor detects the same or similar pattern, it will activate the same behavior that the first obstacle detector produced. With several of these circuits connected and all feeding and learning from each other, it's hard to tell at this point how the machine will eventually behave....so instead of a chaotic system, it's more of a self organizing scheme. I'm sure chaos finds its way in there somehow..haha.

On your statement about building your own creations from scatch.....I have exactly the same thought....the skys the limit when you use your imagination and conceive of your own creation ;))


Some schematics would be nice. 555 timers are from my experience not accurate enough. I would recommand a clock based on a quartz oscillator and according dividers.

@MarkusB...It turns out the 555 does drift a bit to be bothersome....did you have a good suggestion?

Thanks for any info.


I would recommand a quartz clock oscillator (for example here) and according dividers (flip-flops, binary counters etc.). You could use a clock crystal (32768 Hz), see here.

I've seen the TTL type circuits before....What's nice about the 555 is the ability to do pwm with voltage control ( as on pin 5 of the 555). Currently that's how I'm controlling the servo; by feeding proportions of the 5 volt power supply to the 555 (pin 5). For example, 2.5vdc creates a 1.5ms pulse (center) on the servo. It's actually a very useful way to control the servo. Any ideas?


So far the 555s have worked ok with the exception of the Dagu pan and tilt unit....it's hard to keep them from chattering. The same circuit works fine for a GWS servo but the Dagu type maybe a little too cheap.

Thanks, I'll consider the oscillator....I'm just getting the circuits to all cooperate with each other now, so a (somewhat) flimsy 555 will do the job....Thanks.


how do you "punish" it?

I think maybe in a system like this, punishment is the same as for us... injury or death.   Survival = success?

What an amazing project!