Older blog entries for Magnum (starting at number 8)

21 Nov 2006 (updated 21 Nov 2006 at 07:07 UTC) »

Has anyone of you out there ever tried to build a robot inteligence based on neural networks? Im pretty sure many of you have tried the "bottom-up" aproch to robot intelignce as described by Rodney Brooks, in one way or another. Ive seen many atempts to do this, but i have not been able to find any amateur projects that realy utilize the full power of deisigning a subsumption architecture behavior level based robot AI based on a neural network.

Im currently trying this aproch myself, implementing a neural network in software in a PIC18F452. The way ive decided to implement the neurons is as a combination of data structs and a state machine function (one for each neuron). The structs hold the input and output data to each AFSM(augmented finite state machine). The function the handles all the states and conditions of state chaning in order to operate on the data of the neuron. The functions then has to be run in paralel, starting at level 0 and going upwards. The inhibit effect is done thru letting the higher level neurons overwrite the lower levels (similar to what Devantech does in their example robot "Chucky").

So far this aproch seems to work very well. With adding alitle convention to the way variables are named its quite easy to keep track of what data is inputs, what is outputs (what variables should be read and what should be written, its important to keep those apart).

If anyone have ever done anything along this path, it would be intresting to hear your thouights on the thing.

Im basing my design on Brooks own design ideas behind his hexapod "Ghenigs" , as discribed in an article i found in his book "Cambrain Intelignce"(highly recomend this book to anyone who is serius about robot AI).

Been a while now. Been working on the aluminum chassis. Today i finished all the wireing on the electronics mounted in the chasis. I have 14 LED's, 4 flip-switches and 4 pushbuttons. All this is conected to the GPIO modules, so it can be read and set over the i2c buss. Then thers a flatcable conecting evrything together.

In a few more days i should be ready to start programing the real logic. Then all the sensors, inputs and outputs should be ready. I do have some future plans tho. I will add some load sensors, pushbuttons on the leggs (preasure switches), and also a compas.

First tho i will get the input panel working (buttons, leds and LCD display)

Been working on mounting switches, keypad, and status leds, and lcd display in the aluminum shell. I want some onboard controls for changing gait, halting, running difrent programs on it, indicating status on difrent parts of the code. Its all hooked up to 2 GPIO chips with I2C interface. The LCD display has its own i2c conection tho. The i2c cables will also hook onto 3 ultrasound rangers and the main servo gait control, pluss the main brain card.

When its all done the shell of the bot will work kinda like an operator panel, with one flatcable hooking it to the main body of the bot. Ill load up some pics when i get the time, if anyone is intrested. The aluminum shell is alitle comlicated to make. It has several 45 degre bends in more 3 planes, so it took some fideling to build it. Im happy with the result tho. It has a cool "stealth" look to it.

Ive been working on ideas for doing load sensing on my servos. The concept so far is to use a 0.2 ohm resistor and run the common ground of all the servos thru that, so i can use the uC internal A/D to sense how much current they are drawing. Then i can test each individual servo, one at the time, to figure out wich one is causing the increased current.

Of course the best option would be to sense the current on all the servos directly, but then i would need to use either a MUX or several external A/D's. The information i get from this should tell me if any of the servos are loaded more then they are during a normal walking cycle.

Im currently working on this idea. Im gonna run a few tests on this, before implementing anything.

If anyone have any ideas id love to hear them. What is the normal way to do loadsensing ( in a simple way ... obviusly there are plenty of large expensive current sensors that could be used, but they wont fit the robot or my budget). Is there any IC's that have already finishe built in current sensing?. Any ideas is welcome ;)

Cheers Magnum

Just finished todays work on my robot: Mounting the aluminum protective shell. It has 2 practical purposes, protection and rigidnes, and obviusly it has to look cool. For the last part of that, it has 6 red leds mounted (kinda looks like the shadows from B5).

I will figure out some cool things to do whit those later. I like to make robots that can express themselfs in some way. Using flashing leds, voice syntisiers, or just plain text (lcd or on monitor). It makes sense to me that even a robot based on a simple bottom up insect moddel should have some expresion. I mean, even ants and wasps can get angry, scared, anoyed, drunk, confused, and what not. I want my robot to be able to express similar things.

Im a firm beliver that motion breeds inteligence, and not the other way around. Its moving aournd in the world that exposes us to new chalangegs, and that in turn breeds intelignce(adding new levels of behavior if you will).

I have similar reasons for giving my robot the ability to express things. That way i will let it develop simulated expressions later on. ( im thinking of flasshing all 6 red eyes, indicating anger, if the motion sensors detecs sudden decrese in range to front obstacle, indicating somone stepped in its way)

Pluss when people ask what it does, instead of telling them its a insectoid robot, utilizing behavior level architecture to exhibit intelignce ( and have them looking at me like im from the moon) , i can say it walks around, and gets angry if you block its path :P

Cheers, Magnum

Nothing much new to say today. Spend all afternoon constructing an aluminum shell for the hexapod. When i finish that later today, the next task will be constucting 6 feet, sensors for detecting objects while moving the feet. Needs to be some kind of preasure sensing, maybe just simple microswitches... Will think on this some more...

Hope to get some pictures of the thing online during weekend ;)

Cheers, Magnum

Been working all day with my water proof (ip68) POS terminal- Its an embedded XP based computer, using a PC104 card, with touchscreen and the works. The aplication in it self is not that intresting, but i thought i should mention it, as i think the pc104 cards could be a very nice option for robot control (using windows XP embedded).

Cheers, Magnum


Thought id tell you about my latest robot project. As mentioned before im working on a hexapod. Its a 2DOF per leg type, using a parralell leg design. Mechanicaly its relativly simple. Its similar to the 2DOF per leg robot that lynxmotion makes. I wanted to draw and cut evrything myself tho, as i prefer that over building kits.

Ive drawn evrything in AutoCAD and cut the pices out of gray PVC plastic. Using 12 servos (Hitec 422 for swing and 485 for lift) to generate locomotion. Ive put alot of effort into minimizing the weight of the thing, but still keeping it rigid and solid. And of course it has to look cool and fun ("1st rule of robotics: Have fun!").

The electronics is based on a 18f452 PIC controler, wich i programed using ccs c-compiler + a icd-2 system. I like that cus after building the vero-board brain i can plugg the icd directly into the robots brain and do programing and live debugging directly on the bot.

The servo PWM control signals is generated by 2 timers. Had to do some nifty trickering with the code there to get the PWM's to run completly on interupts so not to be disturbed by any other code going on. This controller then controls the gait of the robot, based on several parameters (like turning speed, forwar speed etc.). These parameters can be set over I2C buss interface. In adition the robot has 3 ultrasound range sensors pluss a compas, all on i2c buss. This is all connected thru i2c buss to a radio link, wich comunicates to a PC. I chose this option becays ultimatly i want this robot to do surveys, and i want some way of getting that information to the pc, where i can draw grafics maps and things like that.

On the PC i run a windows app that does the control logic, behvior level based. Ive spend alot of time perfecting the comunication from PC. As anyone who tried this knows, it can be a problem when trying to comunicate to a PC in a real time system. So i have built in a bunch of diagnosis (similar to what is done in a CANbus system) to avoid any faulty moduels messing up my com link. I have built in objects for joystick control (saves me from going to pick up the robot if the control logic fails, i can manualy return it to home :P ), pluss using skinned dialogs to make the program look good (and give me control of the windows grafixs engine, so i can draw maps and stuffs). I have over the years made a library of CStatic inharited objects that i use for representing stuff on screen, like compas arrows, level bars and the like. I also have one CStatic inharited object that works like a skinned button. I know there are lots of these out there, but i couldnt find one i liked, so i desided to make my own instead. Works better for me i feel.

The control logic is not quite finished yet, so this is mostly future plans. (im focusing on making teh gait work perfectly before moving on, finetuning the motion of the legs, sensor array placment etc.) It will use a behavior level architecture, and the basic goal is a survaying robot that has wall follwing behaviors. i will acomplish that thru 2 ultrasound rangers(as mentioned). These will tell me if there is any walls nearby. Im going to grid the room, and then basicly the robot will walk all over the place mapping out which grids are ocupied by an object.

I dont have any pictures of the thing yet, but i will see about that during weekend if anyone is intrested. Ill post them on the project webpage (www.bedko.com/robot). The pics on the site now is for the last hexapod i build. That one didnt work to well tho, cus i screwed up the mechanics of the legs. But thats ok, live and learn. And now i know how not to make a hexapod :P ... and my latest atempt on hexapod making works much better. This one walks very nicly now.(ill make a video of it too, and post)

Im no expert robot builder (yet) but after several more or less sucsessfull atempts i belive ive done my share of mistakes and learned from them, so if anyone wants to try making their first hexapod, iw ould love to help out with what info i can. When i started i didnt join any groups or anything, so it was alitle rough from the get-go. It was a learning by doing kind og thing for me. So id be happy to lend what litle insight ive gained, iff anyone is intrested.

Ok that was a very long entry so i gues i should thank anyone who actualy bothered to read it all ;)

Cheers Magnum

30 Oct 2006 (updated 14 Dec 2009 at 19:35 UTC) »
Share this page