<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2336245927701290796</id><updated>2009-10-20T14:03:51.384-07:00</updated><title type='text'>Linux Controlled Autonomous Vehicle ("Grumpy Snail")</title><subtitle type='html'>This epic adventure charts the progress of my latest software engineering project.  An autonomous, intelligent, mobile instrumentation platform.  Basically it's a computer with tank tracks and loads of guns on it.  Only without the guns.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>wossy</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-7731425054898174694</id><published>2008-07-15T11:41:00.000-07:00</published><updated>2008-07-15T11:51:06.835-07:00</updated><title type='text'>They said it couldn't be done!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_48GXZCenufY/SHzw6YzxY7I/AAAAAAAAAAk/OOBe_YQxqS8/s1600-h/gslives.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_48GXZCenufY/SHzw6YzxY7I/AAAAAAAAAAk/OOBe_YQxqS8/s320/gslives.jpg" alt="" id="BLOGGER_PHOTO_ID_5223314553725608882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;- ...but I'll show them.  I'll show them all.  Muahahahaaa.  Igor, you can put the lightning conductor away now.&lt;br /&gt;- Yeth marthter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok so I finally managed to wade through the Internet's mire of awful Googled code to my goal of actually writing a message on an LCD panel.  Who said the internet was the greatest research tool ever devised?  Not me that's who.&lt;br /&gt;&lt;br /&gt;Anyway, I still have a few bugs to iron out of this LCD panel interface code (it could be faster, the sleep() calls are excessively long at the moment) but at least my wiring is vaguely sane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-7731425054898174694?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/7731425054898174694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=7731425054898174694' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7731425054898174694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7731425054898174694'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2008/07/they-said-it-couldnt-be-done.html' title='They said it couldn&apos;t be done!'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_48GXZCenufY/SHzw6YzxY7I/AAAAAAAAAAk/OOBe_YQxqS8/s72-c/gslives.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-7256645484045296213</id><published>2008-07-12T09:33:00.000-07:00</published><updated>2008-07-12T10:27:26.710-07:00</updated><title type='text'>Soldering on in the face of adversity.</title><content type='html'>I thought I'd treat myself to a bit of raw electronics this week.  Nothing too complicated though, my electronics knowledge is something I really need to work on one day.&lt;br /&gt;&lt;br /&gt;So, anyway I bought a couple of LCD panels ("DEM 16217 SYH-LY" see &lt;a href="http://www.maplin.co.uk/Module.aspx?ModuleNo=36389&amp;amp;TabID=1&amp;amp;C=SO&amp;amp;U=strat15&amp;amp;doy=search"&gt;here&lt;/a&gt;) so that I can have some means to display status information while the robot is disconnected.  By "status information" I really mean a way of monitoring when all daemons have started, if and when any daemons die for some reason and also things like RAM usage, CPU load and uptime.&lt;br /&gt;&lt;br /&gt;Currently I'm half way through setting up a prototype circuit on a breadboard so that I have something to send instructions to, from the C code that I'm throwing together to make sure everything is going to work nicely.&lt;br /&gt;&lt;br /&gt;As soon as I have written a message on the LCD panel with my software I can tear the prototype to bits and solder the chopped cable to the LCD panel permanently.  I'll need to get an enclosure box for the panel too to prevent any damage that it would otherwise sustain as a result of GS's murderous, bloodthirsty rampages.&lt;br /&gt;&lt;br /&gt;When this is done the LCD driver daemon will be similar to the logfile daemon in that any other daemon can send messages to it and have them displayed on the LCD panel any time.  I think I may finally be getting somewhere with LCAV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-7256645484045296213?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/7256645484045296213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=7256645484045296213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7256645484045296213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7256645484045296213'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2008/07/soldering-on-in-face-of-adversity.html' title='Soldering on in the face of adversity.'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-6038277175825410002</id><published>2008-07-03T10:32:00.000-07:00</published><updated>2008-07-03T10:43:11.027-07:00</updated><title type='text'>Smokin' Pipes</title><content type='html'>I have designed a simple but hopefully effective means for the various daemon processes to communicate with eachother.  Before any daemons are started, the parent process populates an array, each element contains a pipe (pair of integers), a function pointer (for the daemon to execute when it starts) and an integer in which to store the PID of the daemon after it has started.&lt;br /&gt;&lt;br /&gt;These pipes are all initialised in the parent process and all the function pointers are filled in.  Then a macro causes the set of daemons to fork() and store their PIDs in the array.&lt;br /&gt;&lt;br /&gt;This means that every single daemon has access to all of the other daemons' pipe handles.  So at run time each daemon can talk to any of the others simply by open()ing whatever pipe handle it wants to talk to and writing messages to it.  Info about the parent process is also stored in the array so it can talk to its daemons if needed.&lt;br /&gt;&lt;br /&gt;This is all very neat and tidy and simple to code but it's probably not very robust as far as detecting when any of the daemons have died for some reason.  I still need to do some investigations into it but I suspect that I could either test the pipes in some way to check the remote end is still open using standard system calls) or possibly by periodically polling each pipe to prompt a timely response from the remote end.&lt;br /&gt;&lt;br /&gt;I chose this method over TCP sockets for two reasons: 1) its faster and 2) I don't plan to move any daemons onto different computers, this will not be a distributed computing platform (at least not to start with).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-6038277175825410002?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/6038277175825410002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=6038277175825410002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6038277175825410002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6038277175825410002'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2008/07/smokin-pipes.html' title='Smokin&apos; Pipes'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-8839799194125001911</id><published>2008-06-21T07:52:00.000-07:00</published><updated>2008-06-21T08:17:09.373-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daemon'/><category scheme='http://www.blogger.com/atom/ns#' term='tibet'/><title type='text'>Enlightenment</title><content type='html'>I spent the last year in Tibet learning about nirvana and being at one with whatever, got bored with yak milk, came home.  That neatly explains my lack of blog activity lately.&lt;br /&gt;&lt;br /&gt;I'm tearing up my original designs for Grumpy Snail and I'm redesigning the LCAV software from scratch more or less.  This is because I've learned a heap about linux server/daemon programming since 12 months ago.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;My new design is going to be more stable and fault tolerant and basically simpler than the previous ideas.&lt;br /&gt;&lt;br /&gt;I've had a few sparks of interest from my chums at &lt;a href="http://www.vbforums.com"&gt;VBForums.com&lt;/a&gt; and so I'm kind of resurrecting this project from the limbo state it has been languishing in since last summer, plus it's a good a project as any for practicing my linux programming away from work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-8839799194125001911?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/8839799194125001911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=8839799194125001911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8839799194125001911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8839799194125001911'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2008/06/enlightenment.html' title='Enlightenment'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-4131285333528742621</id><published>2007-06-06T13:22:00.000-07:00</published><updated>2007-06-06T13:43:29.547-07:00</updated><title type='text'>Make like a tree</title><content type='html'>The last few days have been too hot / busy / drunken to get any useful coding done on this project.&lt;br /&gt;&lt;br /&gt;However, tomorrow I'm going to start designing the makefile(s) for the compilation / linking of the various modules together.&lt;br /&gt;&lt;br /&gt;As I've said previously, I'm going to have the default make target (of each individual module) perform the compilation (-c) of the object files.  A secondary (recessive) target will be called "standalone" and will perform a full compilation to an executable for that particular module.&lt;br /&gt;&lt;br /&gt;This means I can easily unit-test each module separately from the main application.  This will be most useful for valgrind and gdb debugging.  To handle special cases where the actual code needs to be different (for instance, providing a main() function) the standalone targets will all provide &lt;span style="font-weight: bold;"&gt;#define STANDALONE&lt;/span&gt;, which will let the compiler make sense of the code for its module.  The master makefile may also have a standalone target that makes all of the standalone binaries all at once, although this will be of limited usefulness apart from code-sanity testing.&lt;br /&gt;&lt;br /&gt;This will undoubtedly get a bit complex later on in the development.  I'm not sure how I'll get around the pipe comms issues in the standalone versions but I'll burn that bridge when I come to it.&lt;br /&gt;&lt;br /&gt;the makefiles will be arranged in a tree, one master makefile in the top-level directory and then another makefile for each module inside that module's code folder.  This will allow all the standalones to be segregated away from each other and should minimize makefile rot, as most of the sub-makefiles will be almost identical to each other and therefore can easily be repaired / recovered.  This will be a bit more work but in the long run should save some dependency hassles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-4131285333528742621?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/4131285333528742621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=4131285333528742621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/4131285333528742621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/4131285333528742621'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/06/make-like-tree.html' title='Make like a tree'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-6269720482015248707</id><published>2007-05-27T09:43:00.000-07:00</published><updated>2007-05-27T10:01:00.642-07:00</updated><title type='text'>DB test successful</title><content type='html'>Just finished hooking up the toolchain test for MySQL and GCC.  Everything compiled and ran successfully apart from an alarming number of memory issues in MySQL and the Velleman K8055 libraries, as reported by valgrind.&lt;br /&gt;&lt;br /&gt;As a simple test I have setup the k8055 board and I'm reading its input channels every second and inserting the values into a table in the database.  This is actually pretty close to the main functionality of the &lt;span style="font-weight: bold;"&gt;gsk8055d &lt;/span&gt;daemon as I had originally designed it.  There will be extra functionality in the final version that allows ad hoc channel reads / writes.  These extras will need to go into a separate table because of efficiency optimisation.&lt;br /&gt;&lt;br /&gt;As it stands, I have just compiled this as a standalone program for now.  The main daemon tree will need much further planning before any real functionality is inserted.  I feel it more important to have the skeleton working robustly (kernel signals, logging etc) before everything else.&lt;br /&gt;&lt;br /&gt;I'm designing the daemon modules to be compilable as standalone / embedded anyway so they can hopefully be debugged as standalones before being united into one big app much later on in the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-6269720482015248707?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/6269720482015248707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=6269720482015248707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6269720482015248707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6269720482015248707'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/05/db-test-successful.html' title='DB test successful'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-70253972867623972</id><published>2007-05-26T12:10:00.000-07:00</published><updated>2007-05-26T12:23:51.898-07:00</updated><title type='text'>Handover.</title><content type='html'>Moved all the live source to grumpy.  Also made a start on the mysql tables.  I'll be backing up source  and DB to external HDD every few days or after every major bug fix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-70253972867623972?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/70253972867623972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=70253972867623972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/70253972867623972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/70253972867623972'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/05/handover.html' title='Handover.'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-6873976948591702594</id><published>2007-05-24T10:58:00.000-07:00</published><updated>2007-05-24T11:51:25.752-07:00</updated><title type='text'>Wifi</title><content type='html'>I've spent the last day or two fiddling around with my shiny new PCI WiFi card (sitecom WL-171).&lt;br /&gt;&lt;br /&gt;I'm actually very impressed with it so far.  But even more impressed with NDISWrapper, which against all my jaundiced, cynical expectations worked perfectly first time.  Put simply, ndiswrapper lets you use the readily-available w!ndows drivers under Linux.  So basically if you go buy a wifi card randomly off the shelf (I went for the cheapest one I could find @ £25 :D) you get the stupid w!ndows / mac driver CD and never anything for Linux.  NDISWrapper just takes what it needs from the w!ndows disk and configures your linux box as required. Very, very cool indeed.&lt;br /&gt;&lt;br /&gt;And what's more I even installed it from source tarball (which is sometimes fraught with dependency problems but that went smoothly too).&lt;br /&gt;&lt;br /&gt;Setup as it currently stands:&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Fedora Core 6&lt;/span&gt;&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;802.11g ("turbo" mode) networking&lt;/span&gt;&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;P3@1GHz, 20gb HDD, 396MB Ram&lt;/span&gt;&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;gcc/g++ version 4.1.1&lt;/span&gt; &lt;/span&gt;(for compiling the main systems)&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;mysql-5.0.27-1.fc6&lt;/span&gt; &lt;/span&gt;(for storing a ridiculous amount of telemetry and configuration)&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;httpd-2.2.3-5&lt;/span&gt; &lt;/span&gt;(for serving up status pages to remote machines)&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;php 5.1.6&lt;/span&gt; &lt;/span&gt;(mainly for things like low-workload operations or for bootup scripts and mysql stuff)&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;SDL-1.2.10-6.2&lt;/span&gt; (for reading gamepad data and also for webcam data visualisation :D)&lt;br /&gt;&lt;br /&gt;There is only 1 major obstacle left to overcome now, that of battery power!&lt;br /&gt;I'll need a SLAB (sealed lead acid battery) rated for at least 12AH at 12 volts.   When idling, this box draws 37 watts of juice from the mains supply its currently running on.  When loaded its closer to 65watts.&lt;br /&gt;&lt;br /&gt;Hopefully I can get at least 3.5 hours of runtime (without anything like stepper motors running).&lt;br /&gt;&lt;br /&gt;I'm going to have a look at reading a webcam's raw data over the next few days though.  Decoding such a data stream will be a major asset for LCAV.  It will enable computer vision algorithms to influence the decisions grumpy can make.&lt;br /&gt;&lt;br /&gt;Also I am going to have the gskilld daemon have multiple triggers.  If it detects that any of the 'essential' systems have gone offline for whatever reason it will initiate the failsafe sequence and bring the wifi connection UP to make sure that an SSH login can be established.&lt;br /&gt;&lt;br /&gt;Triggers for gskilld will be things like:&lt;br /&gt;- &lt;span style="color: rgb(51, 51, 255);"&gt;the BRB&lt;/span&gt; (big red button)&lt;br /&gt;- the demise of the (wishlist) &lt;span style="color: rgb(51, 51, 255);"&gt;webcam decoder&lt;/span&gt; process (can't have it running around blind, relentlessly slaying people)&lt;br /&gt;- &lt;span style="color: rgb(51, 51, 255);"&gt;main battery low&lt;/span&gt; (not sure how to detect this from a SLAB, maybe a custom circuit?).  This will probably also initiate a complete poweroff (with a hold-off override).&lt;br /&gt;- &lt;span style="color: rgb(51, 51, 255);"&gt;wifi going offline&lt;/span&gt; (see "Runaway", 1984 Tom Selleck)&lt;br /&gt;- &lt;span style="color: rgb(51, 51, 255);"&gt;Loss of mysql/httpd&lt;/span&gt; daemons (unlikely)&lt;br /&gt;- One of the &lt;span style="color: rgb(51, 51, 255);"&gt;gamepad button&lt;/span&gt;s (or a combination / sequence)&lt;br /&gt;&lt;br /&gt;No doubt these runtime checks will probably be quite computationally expensive, but who cares?  Not me that's who.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-6873976948591702594?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/6873976948591702594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=6873976948591702594' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6873976948591702594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/6873976948591702594'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/05/wifi.html' title='Wifi'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-7951059798902458257</id><published>2007-05-19T03:38:00.000-07:00</published><updated>2007-05-19T04:55:56.963-07:00</updated><title type='text'>The project begins.</title><content type='html'>After much hunting around for a cheap and small PC to use as the base of this project I saw this in a shop window...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_48GXZCenufY/Rk7XYS2aUeI/AAAAAAAAAAc/HnUvPQ3QM8I/s1600-h/scenic_S_Front.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_48GXZCenufY/Rk7XYS2aUeI/AAAAAAAAAAc/HnUvPQ3QM8I/s320/scenic_S_Front.JPG" alt="" id="BLOGGER_PHOTO_ID_5066223443215274466" border="0" /&gt;&lt;/a&gt;Its a Fujitsu-Siemens Scovery.  Basically it is a Point Of Sale PC, Pentium 3,  1ghz.  So brute force isn't is main priority, but it does have lots of expandability options, including 2 PCI slots, USB and its even got an AGP4 slot!  Legacy ports like 2 serial and 1 LPT port mean that low-level diagnostics and troubleshooting will be easy.&lt;br /&gt;&lt;br /&gt;I did upgrade the RAM to 396MB though as FC6 (which I installed yesterday) isn't the smallest distro available.&lt;br /&gt;&lt;br /&gt;I chose FC6 because of its good hardware support and its numerous system tools.  I installed virtually every software dev tool I could find in the setup menus, including things like electric fence and valgrind.&lt;br /&gt;&lt;br /&gt;For the time being I will still be developing the core of the project software on my laptop (FC4) because its easier for now just to use a known-good dev setup and scp all the binaries over to the&lt;br /&gt;new box as and when required.&lt;br /&gt;&lt;br /&gt;I've named the new box "grumpy".&lt;br /&gt;&lt;br /&gt;Over the last day or two I've been designing the daemoning system for the core program &lt;span style="font-weight: bold;"&gt;gsroot.  &lt;/span&gt;This is a good and concise article about how to daemonize a single process program: &lt;a href="http://www-theorie.physik.unizh.ch/%7Edpotter/howto/daemonize"&gt;http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the purposes of LCAV I've modified the techniques detailed in the article in order for the main process to stay alive and spawn several separate daemon processes as detailed in previous blog entries.&lt;br /&gt;&lt;br /&gt;The system logging is a very handy feature for both debugging and auditing.  Daemonizing in this way has many benefits, such as asynchronous processing, fault-tolerance, built-in redundancy and the ability to selectively activate / deactivate specific modules as needed.&lt;br /&gt;&lt;br /&gt;I'll be using pipes to enable communications between the different modules, as this is simple and fast.&lt;br /&gt;&lt;br /&gt;Each of the modules will be compiled separately into object files and linked into gsroot using probably only 1 or 2 function calls.  This makes the task of selectively compiling gsroot very simple.  In the makefiles I plan to use precompiler macros to specify what functionality will be built into the application.&lt;br /&gt;&lt;br /&gt;The next few things on the agenda:&lt;br /&gt;- Try out the test code I wrote for the Velleman experiment board.  If that all works ok then I can begin work on the digital/analog IO module (DAIO).&lt;br /&gt;- Write the code for general comms between modules.  This will probably be in the shape of a separate set of object files that can be shared by all the modules.&lt;br /&gt;- Setting up a MySQL database (maybe on a different machine to ease CPU usage) to shove various data into (probably stuff like DAIO logging and general status info.  Definitely things like startup/shutdown times and parameters).&lt;br /&gt;- I think it would be cool to have Boa (or Apache if Boa's not man enough) running so I can generate a pretty status page that shows high-level details in a remote web browser (means LCAV can be monitored by any nearby machine with WIFI.&lt;br /&gt;&lt;br /&gt;- ...More ideas as they occur :D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-7951059798902458257?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/7951059798902458257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=7951059798902458257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7951059798902458257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/7951059798902458257'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/05/project-begins.html' title='The project begins.'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_48GXZCenufY/Rk7XYS2aUeI/AAAAAAAAAAc/HnUvPQ3QM8I/s72-c/scenic_S_Front.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-4446025641773769968</id><published>2007-05-04T11:33:00.000-07:00</published><updated>2007-05-04T11:57:58.798-07:00</updated><title type='text'>Distro Selection</title><content type='html'>From the very start I have seen the selection of a suitable Linux distro as a potential stumbling block for LCAV.&lt;br /&gt;&lt;br /&gt;I'm a long-time Fedora Core 4 user and I love its diverse range of standard tools and packages.  GCC G++ valgrind, GDB and so on.  These are the sure sign of a truly great distro - letting average users have access to professional level dev tools.  I have to salute the Hedhat and Fedora teams for this attitude.&lt;br /&gt;&lt;br /&gt;However this does come at a price.  Storage and cpu power is something I'll be running low on once I  have selected my motherboard. Remember the aim is to create a small autonomous self-propelled computer.  So I have to select a distro that can step up and honestly say that it doesn't give a shit about user-friendliness.  I will happily forgo a desktop environment because I know just how many resources they soak up, resources I cannot afford to waste.&lt;br /&gt;&lt;br /&gt;I therefore need something fast, stable and text-only.&lt;br /&gt;&lt;br /&gt;I did try Damn Small Linux (DSL), as it is purported to be a good distro for linux-curious folks with low-spec hardware.  And as such it does a good job.  However it seems to be rather inflexible with regard to installing permanent modifications.  It does live up to its name though, taking up about 3% of a 4GB hard disk.  That is quite impressive.&lt;br /&gt;&lt;br /&gt;But no, DSL is not suitable for LCAV.&lt;br /&gt;&lt;br /&gt;I also tried (purely as an experiment) stripping down a base install of Fedora Core 4 until there was little left...this proved difficult as the dependency tree is thick and tangled (but thats not to say disorganised, I'm a huge FC4 fan).&lt;br /&gt;&lt;br /&gt;Experimentation over.  The first distro that I am really going to put any effort into (with regards to LCAV) is &lt;a href="http://www.caoslinux.org/about.html"&gt;caos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One thing that really caught my eye was the compiler support.  Other things like Apache, MySQL and the small ISO make this a very promising setup to get this project up and running.&lt;br /&gt;&lt;br /&gt;Watch this space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-4446025641773769968?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/4446025641773769968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=4446025641773769968' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/4446025641773769968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/4446025641773769968'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/05/distro-selection.html' title='Distro Selection'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-8887944355364331395</id><published>2007-04-22T01:17:00.000-07:00</published><updated>2007-04-27T11:13:10.157-07:00</updated><title type='text'>Daemonic Possession!</title><content type='html'>LCAV will require multiple systems to be monitored simultaneously.  I think the most sensible way to do this is with a series of daemon processes that all spawn from a single master process.&lt;br /&gt;&lt;br /&gt;(The naming convention: "gs.....d" denotes "grumpy snail &lt;whatever&gt; daemon".)&lt;br /&gt;&lt;br /&gt;Master Process: &lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;gsroot&lt;/span&gt;&lt;/whatever&gt;&lt;whatever&gt;&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;gspowerd:&lt;/span&gt; Power monitoring.  ACPI?&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;gslogd:&lt;/span&gt; General purpose logging&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;gskilld:&lt;/span&gt; Monitors the kill switch.  I think this is worthy of its own daemon, since it cannot be allowed to go unnoticed.&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;gsk8055d:&lt;/span&gt; Communications with the Velleman K8055.&lt;br /&gt;- &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;gscommandd:&lt;/span&gt; Will allow a supervisor to give explicit controls to GS, for debugging purposes or in order to have a good laugh driving GS around with a wireless gamepad.  That's going to be awesome :D&lt;br /&gt;&lt;/whatever&gt;&lt;br /&gt;&lt;whatever&gt;I've just modified my old wireless XBox controller receiver to remove the 5pin proprietary microsoft USB connector and replace it with a sensible one (see here: http://www.dangray.org/xbox).  I also removed the two enormous memory card sockets, they are completely unnecessary.  Now Linux can see it on the USB bus as a hub device.  Switching on the gamepad itself and running dmesg again yields the following results (under Fedora Core 4)...&lt;br /&gt;&lt;/whatever&gt;&lt;br /&gt;&lt;blockquote&gt;usb 1-1.4: new full speed USB device using ohci_hcd and address 4&lt;br /&gt;usb 1-1.4: configuration #1 chosen from 1 choice&lt;br /&gt;hub 1-1.4:1.0: USB hub found&lt;br /&gt;hub 1-1.4:1.0: 3 ports detected&lt;br /&gt;usb 1-1.4.1: new full speed USB device using ohci_hcd and address 5&lt;br /&gt;usb 1-1.4.1: configuration #1 chosen from 1 choice&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;(((gamepad switched on here)))&lt;/span&gt;&lt;br /&gt;input: X-Box pad as /class/input/input5&lt;br /&gt;usbcore: registered new driver xpad&lt;br /&gt;drivers/usb/input/xpad.c: X-Box pad driver:v0.0.5&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_48GXZCenufY/RityTxJkrlI/AAAAAAAAAAU/-SV5hAzpUy8/s1600-h/xpadrx.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 375px; height: 257px;" src="http://bp0.blogger.com/_48GXZCenufY/RityTxJkrlI/AAAAAAAAAAU/-SV5hAzpUy8/s320/xpadrx.jpg" alt="" id="BLOGGER_PHOTO_ID_5056260690590084690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Might even have a daemon especially for watching the gamepad device.&lt;br /&gt;&lt;br /&gt;When booting the master process I will probably supply commandline args (or use a config file) to select which daemons will be spawned.  This lets us selectively add or remove modules as and when necessary, effectively making it a general-purpose robot, which is nice.&lt;br /&gt;&lt;br /&gt;To this end I'll need a central library of standard commands that can be used by any daemons that need to be able to control the robot directly.  This project is starting to get complex.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-8887944355364331395?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8887944355364331395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8887944355364331395'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/04/daemonic-possession.html' title='Daemonic Possession!'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_48GXZCenufY/RityTxJkrlI/AAAAAAAAAAU/-SV5hAzpUy8/s72-c/xpadrx.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-2365896284755104456</id><published>2007-04-21T13:07:00.000-07:00</published><updated>2007-04-21T13:41:16.396-07:00</updated><title type='text'>It's about time...</title><content type='html'>...that I explained the point of this project.&lt;br /&gt;&lt;br /&gt;I've been interested in Robotics for a very long time now, but only as a casual observer.  I've dabbled in electronics now and then over the years but without a good project to put any effort into, my interest has waned from time to time.&lt;br /&gt;&lt;br /&gt;I've spent the last 18 months or so using Linux almost exclusively, and I've grown to love its elegance and simplicity.  No other operating system I've used so far has shown the same qualities.  Linux was born for multitasking and system-critical jobs.  If you've got a task that ABSOLUTELY MUST NOT go wrong, then you use Linux or Unix.&lt;br /&gt;&lt;br /&gt;Those who know me, know my disdain for Windows.  I've used Windows for well over a decade now and I've developed applications for it for more years than is healthy.  As soon as I switched to Linux I felt like I had been given a shot of adrenaline.  Linux is what computers grow up &lt;span style="font-style:italic;"&gt;wanting to do&lt;/span&gt;.  My enthusiasm for software development is replenished daily now, and not sucked dry by Microsoft any longer.&lt;br /&gt;&lt;br /&gt;Linux made this project a possibility. It certainly made it worthwhile...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've used the word "robot" rather liberally so far but this project isn't really about robotics.  I won't be designing any multi-joint dynamic-geometry manipulators, or designing any 3D computer vision algorithms (at least for the time being).&lt;br /&gt;&lt;br /&gt;I just want a machine that can intelligently make decisions about what it should be doing at any given time.  Be it movement, analysing its surroundings, sleeping to conserve energy, asking for help, or whatever.&lt;br /&gt;&lt;br /&gt;The only thing that the operator should have to provide (and thus the only technological limitations (apart from my own competence or lack of)) are electrical power in the form of battery recharging and supplementary instruction via a WIFI LAN connection.&lt;br /&gt;&lt;br /&gt;LCAV should be able to do what it wants and justify its actions in a rational manner.  Coherent action is the real goal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-2365896284755104456?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/2365896284755104456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=2365896284755104456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/2365896284755104456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/2365896284755104456'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/04/its-about-time.html' title='It&apos;s about time...'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-1753353359361593710</id><published>2007-04-17T12:14:00.000-07:00</published><updated>2007-04-17T12:46:47.155-07:00</updated><title type='text'>Some progress</title><content type='html'>After a little further investigation I have decided not to use the K8055 as a motor driver as previously planned.  This is due to the limitation of the PWM outputs on the board.  And so instead, I'll probably use the PWMs as ultrasound drivers instead.  Anyway, so far I've allocated the following:&lt;br /&gt;&lt;br /&gt;(AI, AO, DI, DO = Analog Input/Output, Digital Input/Output)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AI5 = KILL button.&lt;/span&gt;  The sole purpose of this is to COMPLETELY shutdown the robot FAST, before it kills someone.  Lets we forget the carnage that was cut from the "Short Circuit" movie.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AI1 and AI2&lt;/span&gt;  These are addressable as both on/off and also as counter values.  It may be useful to use these as X axis and Z axis tilt counters in order to detect rough terrain.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AI3&lt;/span&gt;  This may be used as a battery-low detector, for the motion battery.  When fully charged this will be 1, if battery drops to 0 for 100 readings in a row then go into a safe status and alert user via logging or signals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AI4&lt;/span&gt;  Similar usage as AI3, but for the sensor battery.  In many ways this is more vital than motion battery status.  Mainly because it determines behaviour governing the still powered motors.  We don't want LCAV to unleash electric death upon all who stand in its path simply because someone turned the garage lights off.  LCAV shouldn't be that grumpy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DO8 = Heartbeat&lt;/span&gt;  This will power a highly-visible, high brightness LED that should flash at 2Hz which indicates that the core systems are optimal and that LCAV hasn't gone insane with the lust for human blood.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;D01-DO7&lt;/span&gt;  As yet undefined.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AO1, AO2&lt;/span&gt;  Front: left and right ultrasound.  I need to think about this in detail.  Might turn out to be stupid / impractical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-1753353359361593710?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/1753353359361593710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=1753353359361593710' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/1753353359361593710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/1753353359361593710'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/04/some-progress.html' title='Some progress'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-8974158679723407854</id><published>2007-04-14T09:03:00.000-07:00</published><updated>2007-04-14T09:23:24.076-07:00</updated><title type='text'>Velleman K8055 Board</title><content type='html'>Ok, the first part of the project has begun in earnest.&lt;br /&gt;&lt;br /&gt;With the help of &lt;a href="http://sourceforge.net/projects/libk8055/"&gt;this library&lt;/a&gt; I've been able to modulate the digital outputs of a single K8055.  Sounds simple enough but I spent most of today trying to compile that library into a C++ binary, it just wasn't having it, all manner of ugly hacks and kludges prevented -ansi and -pedantic being usable.&lt;br /&gt;&lt;br /&gt;Anyway I'm not here to flame that library because it is actually rather easy to use (once I'd given up and compiled it into a plain vanilla non-fussy C program instead).  I'll need to measure the performance of this board at some point, then I'll be able to judge how detailed the environment-scanning algorithm can be.&lt;br /&gt;&lt;br /&gt;Next thing though, will be obtaining a matched pair of stepper motors that can be controlled by the k8055.  Possibly gearboxes too.  If I can get LCAV moving on its own then thats a good starting point for the rest of the project.&lt;br /&gt;&lt;br /&gt;W.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-8974158679723407854?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/8974158679723407854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=8974158679723407854' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8974158679723407854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/8974158679723407854'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/04/velleman-k8055-board.html' title='Velleman K8055 Board'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2336245927701290796.post-1876820287984911846</id><published>2007-04-12T10:32:00.000-07:00</published><updated>2007-04-12T10:53:30.823-07:00</updated><title type='text'>The Monster Has A Name</title><content type='html'>This is the blog for my big Summer project.&lt;br /&gt;&lt;br /&gt;In a nutshell, I'm building a small autonomous 'robot' (although I hesitate to use the term).&lt;br /&gt;&lt;br /&gt;It will be basically a PC mother board mounted on a ruggedised chassis and running some kind of Linux distro.  Upon this I shall be building all manner of insults unto the Lord, such as GPS, wireless LAN, caterpillar tracks for mobility and sensors (digital and analog) for to see thee with.&lt;br /&gt;&lt;br /&gt;At the time I write this entry, I have done nothing but purchase a few likely items and test out one or two suitable host Linux Distros.  The one I'm gravitating towards is Damn Small Linux (Google it).  It takes hardly any resources and it runs entirely in RAM if need be.  That makes it a good candidate for host OS.&lt;br /&gt;&lt;br /&gt;I have not yet designed the chassis or selected a good motherboard/PSU combo.  It will almost certainly be a Nano/Pico ITX form-factor motherboard.  Paired with a 12V SLAB (sealed lead-acid battery) to supply power.  Motive power will most likely be a second SLAB of different spec.&lt;br /&gt;&lt;br /&gt;Initial thoughts have guided me towards the Velleman K8055 experiment board for prototyping this robot (henceforth monikered LCAV).&lt;br /&gt;&lt;br /&gt;That's all for now.  I'm off to do a bit more planning.&lt;br /&gt;&lt;br /&gt;Wossy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2336245927701290796-1876820287984911846?l=lcav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lcav.blogspot.com/feeds/1876820287984911846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2336245927701290796&amp;postID=1876820287984911846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/1876820287984911846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2336245927701290796/posts/default/1876820287984911846'/><link rel='alternate' type='text/html' href='http://lcav.blogspot.com/2007/04/monster-has-name.html' title='The Monster Has A Name'/><author><name>wossy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08801933109671457799'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>