The Claw Rover

After a hectic month I have finally been able to finish off my first creation using the .Net Gadgeteer – the Claw Rover.  I created the claw rover using the claw arm I created in an earlier post,  a few .Net Gadgeteer modules, a MakeBlock Ultimate Starter Kit, some RC electronics (7.4v LiPo battery and 5v uBEC), a Parallax Ping))), a Kogan Wireless IP Camera and some miscellaneous electrical bits and pieces that I had lying around (switches, etc…).

  

The .Net Gadgeteer modules I used were the Fez Spider mainboard, WiFi module, USB Client DP module, L298 Motor Controller module and an extender module.  I used a prototype board so I could plug in and power the servos, motors and Ping))).  The source for the entire project is available here.

 

The rover is controlled via a web site hosted by the Fez Spider that includes a customised interface for the Kogan IP Camera.  The HTMLCode.cs file contains the source code fro the web interface and can be edited to suit your needs (you will probably need to change the IP addresses as a minimum).  You can control the rover by using the arrow keys to move in the relevant direction and use the space bar to stop.  I’ve made it so that when you steer it only moves about 15 degrees then stops due to the lag I was experiencing with my WiFi setup.  You can change this if you want by editing the number passed to the PauseAndStopMotors() function in the HandleCommand() function.

The web interface also lets you pan, tilt and open/close the claw arm and Kogan IP Camera.  The links at the bottom for Focus on Claw and Focus on Road point to the first and second camera preset positions respectively.  These can be customised using the default Kogan camera interface.  Clicking on the Dist Get link will tell the Ping))) module to take a reading and display it near the top of the web page.  It wouldn’t be too hard to implement a timer that regularly checks for objects in front of it.  Due to a small glitch I was having with my Ping))) unit I haven’t implemented this feature (that’s what happens when I leave parts in the garage for a couple of years to gather dust and spider webs).

The Kogan IP camera was mounted using 2 of the trolley wheel mounts and the screw that came with the camera itself.  Most of the parts such as the battery and Tamiya board that holds the PCB’s are held on by cable ties for now, but I’m sure yo’d be able to use regular MakeBlock parts to do this.  I decided to go for a 3 wheel rover as the 4 wheel version I made did not steer very well on carpet.  You might be able to hook up 2 more motors to the front and piggy back them off another motor controller (something I’d like to maybe try with my mecanum wheels one day).  I used a 3A uBEC (Universal Battery Elimination Circuit) for the PCB circuitry and another 3A uBEC for the camera (as it is rated at 2A by itself).  The battery is a 3300mAh 7.4v LiPo RC battery sourced from an RC store.

  

I was able to easily control the rover from my office and steer it throughout the house without any problems.  For some reason though when trying to access the web interface via an Android  tablet I am unable to see any vision from the camera.  Apart from that everything appears to be working like a charm :)

The Claw Arm

My Robot Claw parts arrived a while ago thanks to the good folks at Little Bird Electronics (I was quite impressed as they were able to ship the parts from America quicker than some of my other suppliers).  I was able to assemble the claw using the tutorial with a few slight modifications (such as using a servo disc instead of a horn).

I managed to assemble an entire arm mechanism using the following parts:

Putting the the pan/tilt bracket was pretty straight forward, though mounting the claw to the bracket was a bit fiddly.  Once it was all assembled it was time to fire up the ol’ Arduino and start sketching.  I did some initial tests using the sweep example which warranted a few adjustments to the claw itself.

Once I did all of my adjustments I went on and made a sketch that took simple commands from the serial interface and passed them to the relevant servo.  The sketch I made is available here.  Below is a list of commands supported by the latest version of the sketch:

  • o – opens the claw
  • c – closes the claw
  • u – tilts the claw up
  • d – tilts the claw down
  • l – pans the claw left
  • r – pans the claw right

Each command will move the claw by about 5 degrees.  More than one command can be sent at once, for example rrr will pan the claw 15 degrees to the right.  The sketch will send back the current position of the relevant servo when a command is sent.  If a command is sent that will put the servo out of the valid range it will not be forwarded on to the servo.

I noticed that when building the sketch that the claw servo would chatter when it finished moving.  I tried a number of things to stop it from doing this (including moving the servo again to a different position among other things), but found the only way I could achieve silence was to detach the servo using the detach() method.

When first building the claw arm you may need to make some adjustments to the maximum and minimum positions of the claw servo.  Instructions on how to do this are included in the sketch.

 

Is this thing on?

Well, it’s been a while hasn’t it.  Between work and moving and having a family I haven’t really had time to do much else.  Unfortunately I had to ditch project Sigma, but I am pleased to announce that I have ordered a whole bunch of goodies today that I can’t wait to start playing with.

I managed to get hold of a FEZ Spider Starter Kit, a whole bunch of modules and a Makeblock Ultimate Robot Kit so I can pick up where I left off with the Arduino.  With my new GPS, WiFi, GPRS and other modules that I’ve ordered I’m hoping I can make some really cool stuff that I’ve been wanting to make for quite a while now.  As always (ok, maybe not as always), I’ll keep you all posted on what’s happening…

Jonathan

RibbonVu 1.0.0 Released

I have just released the latest version of RibbonVu.

One of the things I rather like is the ability to extract images from PDF documents without having a PDF reader installed on the PC.  That’s just the tip of the iceberg though – head on over to RibbonVu to find out more.

Multiple Monitor Support

Over the past few years the popularity of multiple monitors has taken off thanks to cheaper and more powerful hardware becoming available.  One thing I have noticed though is that a lot of programs either don’t support multiple monitors, or support them incorrectly.

For example, I was checking out a competitors product recently (who shall remain nameless) and discovered while trying to run a slide show that there was no option that asked me which monitor I wanted to display the slideshow on.  This would have been quite an inconvenience if I wanted to display a slideshow on a projector conencted to my PC while keeping the other monitor private.  Another example which I’ve seen all too many times is windows that appear half off the screen.

This problem stems from the fact that I’m currently running two monitors, but the primary monitor is on the right and the secondary is on the left.  This means that the left most pixel is not zero as some people may think it is but -1920.  The same could apply for the topmost pixel if I had another monitor connected (that wasn’t my primary monitor) on top of the other monitors.  The result is that the dialog appears on the right hand side of the monitor with half of the dialog cut off.

When I was writing one of my first programs many years ago, I fell into this “trap”, but luckily I was able to pick it up before the program was released due to the above-mentioned setup.  The solution is  quite simple: instead of writing…

Left = (All Screens Width - Width) / 2;

…or to that effect, you should use…

Left = (Primary Screen Width - Width) / 2;

I’ve seen similar bugs in programs that have been released as OEM software.  This is just a basic (and probably not the best) example to show you that it’s quite easy to introduce a bug into your program without you even realizing it, and that it could happen to anyone.

Execution speed

I was having a bit of a ponder this morning about what I was taught during the brief time I went to TAFE to learn programming.  I recall that the instructor was explaining that it doesn’t matter how you write a program because modern computers are quite powerful and can much through code like it’s nothing else.  This got me thinking though, what if I needed to execute the code I’d just written millions of times?  With the advent of high definition video and hard drives in the Terabytes, the ability to crunch large amounts of data is becoming more and more commonplace.

A prime example of this came to me while I was testing the PDF extract feature of the latest version of RibbonVu. I loaded a 75 page document and it worked fine, so then I went into sadistic mode and loaded a 2,000 page PDF file into memory just to see what would happen.  I sat there an watched the program scan through the 2,000 odd pages of PDF goodness and noticed the task manager memory usage was climbing fast until *crash*, I got an out of memory error.  After looking at the code a bit I discovered that for each image that was being extracted, data was being loaded into memory two or three times, not good.  After a bit of code tweaking I was able to get the code working by writing the image data only once and set off to extract another 2,000 pages of images.  This time it worked a charm, no errors and a third of the memory usage.  It even ran quicker.

I guess what the instructor taught me that day could be relevant to things that don’t need to be iterated, but I am of the opinion that this may encourage people to become complacent and write inefficient code.  I guess you could compare writing code to building a car – the more weight you add, the slower it’s going to go.  That’s not to say that you should not do error checking or input validation (or other things like that), to do so would be like removing the safety features of your car just so you can go faster – it aint gonna end pretty.

Sigma News

We made some progress with the Sigma last weekend, until we discovered that the bonnet was completely out of alignment and the whole front end was out of whack more than we thought. One step forward, two steps back, oh well. The other day I received the indicator/wiper switch after waiting a week for delivery (how hard can it be, seriously???), so now the car has a steering wheel again and indicators :) .

Hopefully I’ll be getting another engine that I can use outside of the car to allow me to redo the supercharger setup.  Despite this though I’ll be going away for the next few weeks so I won’t be able to do much until I get back after Easter.  Good news is that I’ll hopefully get a nice cash injection in the meantime which means I’ll be able to start doing a few more things upon my return :D (new tyres, exhaust and supercharger pulley).

I also need to come up with a name for the car.  I was thinking of the Bitsamissin Sigmate, or Sigmate for short.

Project Sigma update

Work is coming along nicely for the new beastie.  A couple of friends and I fixed up a lot of the front end last weekend, with just a little more to go this weekend.  I managed to get a replacement filter but I’m still waiting for the combination switch I sorta broke (in my defence, it was already kinda broken, I just made it worse).  Once that’s done I’ll give it the once over with a fine tooth comb and off to the rego inspector for a roadworthy certificate (I’ll end up getting it engineered eventually).

Next step is to start tinkering.  First cab off the rank is a 2.5″ exhaust to compliment the extractors, refit the supercharger, MSD 6AL-2 ignition (or 6BTM, haven’t decided yet), MSD Blaster SS coil, a couple of 10″ Davies Criag thermo fans, better disc rotors and suspension, and not to forget the conversion to manual.

Eventually I aim to get an Astron II head polished and ported and whatever else pops into my head in the distant future…

Getting there...slowly...

What's left of the steering column after I'd finished with the combination switch

Blow me (said the Astron)

My assistant

The manager, grrr

Project Sigma (nothing to do with aliens)

Well, it’s certainly been a while.  In the midst of the holiday season, moving house and work left me little time for this site.  Now that things are starting to settle down a bit I should be able to start updating some more once again :) .

My first car was an old Chrysler GE Sigma, and those of you who have known me for a long time would remember the fun we used to have in that car (and the crazy stuff we did to it like putting Christmas lights on it and supercharging it).  Over the past few years since I got rid of my last Sigma I’ve been thinking about getting another one and doing it up in ways that I was unable to when I was younger.  Now that I live in a nice big house and have a wonderful girlfriend who shares my passion for cars I have the opportunity to do such a thing.  A few weeks ago I decided to have a look on eBay to see what I could find in the way of old Sigmas and came across this:

Sigma

It’s a 1984 GK Sigma with only 137,000 km on the clock (that’s less k’s than my 2003 Falcon).  What really appealed to me was what had already been done to the engine which I’sd also been planning to do along the line – balance shaft bypass kit, extractors, weber carby and a few other things.  What was even more surprising is that it has power windows, central locking and air conditioning and they all work.  The catch was that it’d been in a minor accident which meant that the front end would need to be bent back into shape a bit (nothing a little elbow grease and a big hammer can’t fix). I placed a bid managed to win the auction despite almost being outbidded at the last minute and towed it home that weekend.

Since it didn’t have a batttery, I had to go scrounging around for one.  I managed to find one that I had stored from the last Sigma I owned, the only problem was that it was at least 6 or 7 years old and hadn’t been used for 5.  To my surprise I hooked it up and turned the key and it started to crank over.   To my shock it actually started after the 3rd or 4th go, which considering it had been sitting around for 12 months I thought was pretty good.

My first aim is to get the car roadworthy.  This will entail straightening the front end, replacing the combination switch (as I broke it whilst trying to fix the hazard light switch), replacing the air filter, new tryres and doing a general check over to see that things are ok.  Once it’s up and running my next step will be to put in a 2.5″ exhaust as it currently has the standard pea shooter exhaust and convert it to manual (I also got the parts off eBay for cheap).  In the longer term I want to strap my baby – the supercharger(which I was recently reunited with) – to the engine, put some decent suspension, better braking discs and fit an Astron II port and polished head (the spare head came with the car :) , it just needs the work to be done to it).  Of course as a result of the supercharger having to be fitted, the air con will need to be decommissioned (damn EPA) and a couple of minor things done to the engine (externally).

I’ll keep you guys posted of the progress I make/fines I get (j/k, I’ll behave…maybe).

DLNA, Samsung TV's and other random news

Well, after a few weeks of searching I finally managed to find a new place so I’ll be moving in on the 18th.  Until then I will be in the process of updating some of the furniture I had and doing other wonderful house moving related things (luckily I have 3G broadband for when I move my ADSL connection).  Unfortunately I’m not going ot be in an area that supports FTTH, so no 100Mbps for now (although it is a bit pricey, plus I would have had to have a phone line, which I don’t want).

Earlier in the week I ordered a new 46″ Samsung Series 6 LCD TV and picked it up yesterday :D .  I thought about getting one of the Samsung LED TV’s, but couldn’t really justify the extra price.  I wanted a TV that supported USB devices as a minimum, then I discovered DLNA.  I saw that the Series 6 TV’s supported DLNA and at first thought whoopee – that was until I looked into it a bit further and found out what DLNA is capable of, which is when I decided to go with the TV I got.  Another thing about this TV is that it supports wireless through an addon dongle, which is an extra 80 – 90 bucks unfortunately.

I downloaded TVersity which gave me some issues initially, but thanks to this page I was able to get DLNA working to some extent (I still don’t have rewind or fast forward capabilities, and I’m not interested in hacking the firmware).  One minor note (which actually can be irritating) with TVersity is that it tries to install the Ask toolbar, so you have to ensure that you deselect this option when you install it.

Now to figure out a way to play DVD’s without a DVD player…