Let's Make Robots!

Quick Update - 4/7/13: I've moved the sensor down below the top deck temporarily as I experiment with placement. I also took edwin to the regional and state science fair, but haven't had time to post anything because i've been swamped with homework and college paperwork and whatnot (EE @ GT in the fall!). Thanks again to everyone who gave input! I'll try and post some more when I feel like it's more noteworthy. -ben

Update 11/04/2012 @ 6:30 P.M. EST:

I've been very busy but here is a very quick update:

I've finished the construction of the decks. The motors; driver; arduino; computer; power supplies,etc. are all mounted and wired up.

I now need to experiment with finding an ideal height at which to mount the xtion sensor and then i will move on to programming.

A few  Pictures:

 




 

Hopefully it won't be too long before i get Him up and running. Charging and power up work well and the base seems solid so It shouldn't be too dificult to get some simple obstacle avoidance up and running.

He's come a long way from an arduino stuffed into an old computer.



Update 9/16/2012@3:14 EST:

I've tweaked the caster mount to make things more level and mounted the second deck. Next I'll either wire the power/motor systems back up or mount the third deck.



Update 8/19/2012 @ 3:04 EST:

Last Night I mounted the motors and the caster wheel to the lower deck. The caster had to be mounted on spacers to get it level but i think i did pretty well. I again wired the motor driver to one motor and a trimpot and set the battery on top to give it a whirl. I took a quick video of it with my phone.

Next up; using serial to talk to the motor driver rather than a trimpot (used for testing); and wiring up both motors with the encoders. Then i can hopefully work on the power distribution and getting the brains (mini-itx board) mounted soon.

Update 8/18/2012 @ 12:46 EST:

This morning I went out in the garage with my dad and got out the old craftsman table saw. I measured out the first deck with a ruler and pencil (yes i measured more than twice) and then we cut the first deck, then using that deck as a guide (it cut to roughly 12"x12" as hoped) I marked the next deck; which we then cut; and then repeated untill we had 3 nice decks and one remaining peice that was about 3/4" shorter than the rest (because of the wood that was cut into sawdust).

Next comes mounting the motors and wheels to the first deck, along with the battery and motor driver. Hopefully soon i should have a working base on which i can then mount the rest of the gear (with at least one more of the decks for sure).

Some sanding is also in order but currently not necessary. The sides of the wood that were cut could do with a little but they are in pretty good shape.

More info later,

-Ben

Update 8/12/2012 @ 9:44 EST:

I purchased the caster wheel (a nice metal bearing one with a rubber? wheel rated for 125 lb, it rotates smoothly) as well as some wood that should let me make several 12"x12" decks.

Hopefully I should start construction relatively soon and get some pictures, etc. up. I haven't posted many as of yet because i'm sure all of you have seen computer parts and motors and my pictures aren't very good.

Anyways, I have collected and tested pretty much everything I need now; time to get back to business.

More updates Soon! :)

 
Update 8/11/2012 @ 1:20 EST:

I have succesfully tested the m4-atx (powered by a salvaged molex connector wired to another hacked atx psu for testing) as well as the Xtion Pro live. I modifed some sample code provided (C# simpleviewer) with openni after fighting with the install scripts for a while (they were written for ubuntu 10.10). It works smoothly as long as i dont try to render the data as an image to the screen. The atom has rather weak graphics especially considering its running without a proper graphics driver (stupid proprietary drivers...). There is a possible driver for 12.04 but i wish to continued using 10.04  and i dont need the graphics anyhow.

I also took a little bit of time and whipped up a small logo for the project:

quick first logo

I still need to test the picoUps and obtain the rear caster and wood for the physical platform.


Things however, are going very smoothly so far.

Update 8/5/2012 @ 12:02 EST:

All of the parts that I ordered arrived by thursday night but, with school now in session i didn't have time to work with them untill this weekend. So far i have successfully Tested the Mini-Itx board (which is working fantastically) as well as the motors and motor driver, and the Xtion Sensor (though i tested it from my big windows desktop and not from the linux board yet.

My father also picked up a logitech c270 webcam on sale for me which i've tested up to 720p viewing on the Atom board (!) running ubuntu 10.04 from a usb-live disk. So far everything is going smoothly. I have yet to test the car-computer-power-supply (m4-atx) or the picoUps (charger/dc-dc converter [12v out]) yet but I should be doing that soon. Hopefully Once i have everything tested i'll get some pictures or maybe even a video up but right now my free time has been spent on testing everything out and experimenting a bit while i look towards fabricating the actual Platform. I've been a bit busy with a cold and school, etc so hopefully I'll be able to get around to putting some more up once those things settle down.

Meanwhile I have more testing to do :) 

-ben

 

Update 7/9/2012 @ 4:05 Pm EST: 

Ok So i made a quick fix to a bug i hadnt even posted yet :P

So As I already said the Arduino has a small circuit attached that allows it to boot the Computer. Well the issue with that is i had it running in setup for testing. Which meant if usb was attached it got garbage serial data when the computer powered on and then the arduino promptly reset and shut it down. I planned to simply start coding the proper timing mechanism (using an alarm clock style program on the arduino) when i realized reseting it randomly would reset the timer and i didnt have any easy way to get a real time clock for the arduino.. I was going to sycn the clock over serial...:S

So i came up with the idea of adding a 'saftey check' to see if the computer is already on (a good idea regardless).

To keep things simple and to remove the chances of frying the ardru etc; while also adding some ambient lighting to the controller box i simply added an led wired to the case power led pins (using one scrapped from an old; dead [I mean it cant even POST and the psu is fine...] computer) and then wired a simple circuit with a photocell to check if the LED is on or not before attempting to power on the computer.

After accidentaly wiring the gnd wire with a red one and the +5v with a red one (not an issue really except that to get it working cleanly you have to wire it 'backwards', and a quick fix (resoldering the wires) I got it working based around the schematic from here ( i wanted to check for a safe circuit for the arduino analog pins so i knew i could find one on that very helpful site).

As well as some code i knocked up which checks the value 10 times very quickly and then decides wether it should power on or not. Next comes using serial from the C# app to tell it WHEN it should power on as well as synchronizing the time to the real time clock handily available to the 'onboard' linux computer.

 

Things i neglected to Mention Previously:

-Edwin already has a c# app capable of taking logins to various 'accounts' with stored hashed passwords; the app is capable of checking and replying to email; chatting via console (i wrote a simple chat system based around xml style markup files that contain phrases and appropriate responses); calculating things via google's calculate (Yes, I do ScreenScrape with a faked Chrome Browser User Agent :P <i found many sites give me a better version of the site if i use that agent in the headers lol>); as well as using ConceptNet5 (currently Broken...? I'll have to check into that. Something with the json on linux i think..) to search for concepts.

That app also displays an ascii logo followed by what i find to be very handy.. An automated counter that shows how long it has been under development in days (since i wrote the first version and compiled it) Currently it is 132 days.. I highly reccomend using such a system :)

Also Edwin uses the FMOD sound system to play just about any music i drop into his 'music' directory upon request. I plan to add playlists and shuffling at some point but right now its mostly just for making sure the sound system works.

Even more fun I have Festival TTS working which means that unless i launch edwin with parameters specifying "/mute" then he synthesizes responses as well as prints them to console.

The most important feature to me by far is that i have coded a Worker Node system based around a modified version of the wonderfull MPAPI. In my implementation of it; everything (input as well as console output) are logged to a timestamped file including all errors as well as special extraneous debug that i dont wish to print to console. A Root node is first spun up which then holds the main thread and runs two worker nodes. Each node is aware of its number and performs given tasks; if a node crashes then it is promplty spun back up and the error logged. This means that even with a critical runtime error Edwin would potentially plod along while warning me of the error from the main thread. It also means even a system exception does not crash Edwin. Edwin however can easily be shutdown via a shutdown command that is understood by the main thread. An example of this being usefull is if the email system 'bugs out' (which it has done so in early versions many times..) the program itself does not crash ONLY the worker node which then trys to run again. Eventually i hope to add a system to keep track of what the worker was doing to a certain degree so the worker can resume its task when it is spun up. 

Phew that was lengthy :P I think thats about it so far. Hope that both clears things up and wasn't too hard on your eyes to read XD

 

-ben

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ORIGIONAL POST:

  Edwin Is a Platform i have Been building to get into 'serious' robotics development. I've played with Roborealm; c#, python, java, and both the lego NXT and RCX systems as well as the Vex Robotics systems (vex owned by the local high school) to name a few. I've been very into robots since i got my Robosapien (which was promptly hacked :3 ) and then RCX when i was much younger and have toyed with them off and on since then.

My goal with Edwin is to take things a bit further:

    Edwin is to be a 'fully-autonomous' system that needs no human intervention to operate normally. I hope to get him working 24/7/365. Currently It he is based around a Computer built with parts I salvaged and an arduino which is both interfaced to the internal usb and to the Case power switch pins on the motherboard in order to allow the arduino to boot the computer (so that the main computer bit can be powered down at night to save power or potentially allow charging; yet it can power itself on later meanwhile only running a lowly micro-processor).

  Eventually I plan to make Edwin a fully Featured Mobile Platform but for now I'm just coding some core stuff up in Mono/C# on Ubuntu 10.04 to operate the arduino syncing and a few other things. I'll be experimenting with this simple non-mobile platform (possibly with a robot arm and camera built around the lego stuff?) while i look into finalizing choices for the other components and earning the nessecary cash :P

Here are some Pictures of the Current State of things:

Mounting of controller:

Custom Mounting for arduino made with scraps

Testing breadboarded prototype power switch for computer:

Test fit (the metal plate is the lower bit of the case from a broken,discarded optical drive):

(Sorry about the quality here. Didnt get The focus right or something.I only had my phone handy at the time and i was a little distracted)....

Testing the Power Circuit (simple backup circuit based around some zenier diodes based around this one here from this page:

Everything Wired up in the Case(for testing; as you can see everything is desinged to be torn down and reused for a later iteration [I'm a huge fan of recycled/salvaged parts for use in builds and it saves money to not have to get fresh parts every time; even the resistor in the npn circuit was desoldered from an old clock radio that didnt survive an electrical storm..]) :

Comment viewing options

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

i like to know how you powered the mother board?using pisco system?

have you installed ROS in it?

GroG's picture

Great project.

I was surprised about the .Net Mono, I have read a little about it but was always concerned about the extent of portability, and expected the Mono implementation to always be behind ms's lead.  The MPAPI seems like a great idea.  Never heard of it before your post ;)

Look like a very interesting project and looking forward to updates. 
Keep up the great work ! 

GroG @ http://myrobotlab.org/

 

Any reason you haven't looked at the Raspberry Pi for the computer?  I know it has no where near the grunt that the current computer has, but it's much more mobile (and runs off a lowely 5v).

TheBenjaneer's picture

For exactly the reason you mentioned. The raspberry pi has a pitiful amount of computing power (compared to the atom). The pi is a nice little board but it doesnt have the grunt for the amount of data i will have to play with.

It'll be tricky to manipulate the depth images effectively with the atom chip; let alone the raspberry pi. Rephrased; you wouldn't really want to use a netbook with a kinect but it would be doable; you definantly wouldn't be using the raspberry pi for much. And this board really doesnt use much power (shouldn't go past 30 watts including for the entire board, which for a x86/x64 processor is very good) but i wanted to build something larger and more extensible anyhow (as far as the hardware). I should be able to swap in larger and/or lighter batteries later and get even more battery life later on.

So yes; I have looked into small arm-core computers (more precisely the beagleboard and the pandaboard; both of which have much more power than the ras-pi; but I really needed more power. My target was to have something comparable to say; a ROS turtlebot ) 

Maxhirez's picture
I can't find anything about actuation here. Are there any moving parts? When you say "turns itself on" is it in the same way that a "Useless Machine" turns itself off? A video might help explain things.
TheBenjaneer's picture

I suppose i might make a video but i was planning to wait untill the project is a bit further along. I'm looking for a base to add later. Right now it doesn't move in the sense of the typical robot on here but mainly just interacts with the user. I was origionally going to wire up a small robot arm i built with a webcam but i decided i'd rather wait and build or purchase a mobile base. So most of this is software at the moment but i decided i'd go ahead and start fiddling with some actual hardware so as a basis for that i built this relatively simple platform.

 

The current actuation works like this; the Arduino runs 24/7 on a seperate power supply as well as a battery backup: with 2 functions; a serial interface for the computer and as a sort of alarm clock. The arduino Turns on the Computer with a transistor wired to a digital pin with a resitor. The rest of the 'actuation' consists of synthesized audio. The arduino also checks a photocell to see if the computer is on or not. Basically it makes for a smart serial interface with the computer that can also to a certain degree controll the computer directly (powering it on/off as needed).

The rest of it is done on just the computer right now. I plan to share more about that after ive better interfaced it as a proper robot. right now you might say it was more of a chatbot. I'd explain that here but i already wrote a lot about that in the update to the post and i could talk about it for a long time :P

This means I can explore haveing Edwin running 'non-stop' while allowing the computer to be off at night saving power when it is not likey to be in use. I have a seperate button that lets be turn it on if i so wish otherwise. turning it off can be done either with the same system or with software running on the computer. Or even better i could have it 'sleep' or turn off the computer and then wake it up based on a sensor wired to the arduino. (maybe a pir sensor?). The OS on the computer is already capable of booting in well under 30 seconds and shuts down in about 5-10 i'd say so it's really not an issue to turn it on and off. One idea i have for this while it is still largely immobile is a massively overdone alarm clock. The arduino could turn on the computer which could then use its far greater capacity to say; Wake me up in the morning with some synthesized speech and music. Maybe remind me of what is on my schedule. Eventually (hopefully soon) i plan to make it more mobile. I'm just toying with this relatively simple, largely immobile platform while it cant really move. I have played around with controlling the lego stuff from this setup though but found it largely unsatisfactory....

If you look through that massive wall of text I beleive i already described the system by which i turn it on but i might not have very well explained why. Hope that makes more sense :)

Meanwhile i'm going to start a forum thread to discuss choices for the base :) 

**EDIT the post is HERE:  http://letsmakerobots.com/node/33350 **

LordGG's picture

Thank you TheBenjaneer,

Yes it makes sense ! Especially concerning the choice of Linux over Windows (and so, the Arduino). The last version of Windows Embedded offers nice possibilities I think, but the price is probably not the same :D

Have fun !

TheBenjaneer's picture

Your welcome and Thanks.

Good point about Windows Embedded. Truth is even though im writing everything to be used in an embedded style having a full desktop can be very handy for setup/debug and with linux it should be easy to diasable the window system if i need more power. Not to mention as you said; the price of Ubuntu (or really most any linux variant) is pretty hard to beat :)

This whole system is on a fairly tight budget.. I salvage the resistors etc rather than waste money buying them online. :P

Though my goals are fairly similar to the MAAHR project (also on lmr here: http://letsmakerobots.com/node/26471).

 

Anyhow I'll go write some ardru code and see if i can get that little fix working Then write it up.

6677's picture

Ubuntu with LXDE should work nicely enough, free's up a little more power than using the default gnome anyway.

TheBenjaneer's picture

Thanks for the Idea.

I fiddled with LXDE with ubuntu 12.04 but in the end ubuntu 12 put me off as being resource hungry and having issues. I might play with that but if i need more resources ill probably turn off gmd and run it as a tty shell. Shouldnt be too hard if i remember right.. Ive used the tty many times during installs when the graphics drivers were not working properly.