Surveyor Robotics Journal |
|||||
|
email:
web:
rss: Archives |
Sun, 15 Feb 2009 Google Android G1 control of Surveyor SRV-1 robots - code now available ![]() A few weeks ago, we hinted at a new control console we were building with the open-source Google Android G1 phone for wireless remote control of the open-source SRV-1 robot controller. The Google Code project is now live, plus we have some cool videos to show the Android console in action. The Google Code project is found here - We actually have three different demo projects. The first was built by the main developer of the Android application - Jeffrey Nelson of Macpod Software - for his Forknife2 Robot (don't miss the cupcake snapshots - robots love cupcakes !). The second was control of a prototype SRV-1 Blackfin Robot, and the third was a relaunch of our YARB Robotic Blimp. No changes were made to the SRV-1 firmware for any of these projects. Here are the videos: Posted Sun, 15 Feb 2009 23:33 | HTML Link | see additional stories ... Fri, 13 Feb 2009Doubling the capacity of the SRV-1 / SVS motor controller The SRV-1 and SVS use a Fairchild FAN8200 H-bridge for PWM motor control. This is a 2-channel H-bridge rated at .65A / channel continuous with 1A / channel peak. ![]() For much larger motors, there are a variety of suitable higher capacity motor controllers such as the Dimension Engineering Sabertooth, Devantech MD23, etc. For smaller motors, the FAN8200 has generally been adequate for the SRV-1 robot base and a variety of other motors. However, we sometimes we find that we need a bit more current capacity, especially with motors wound for higher speeds. In this situation, we have found an easy solution by piggybacking a second FAN8200 to double the current handling capacity. Because there is minimal clearance between the FAN8200 and the Matchport WLAN radio on the top side of the combo radio/motor board, we found it best for clearance and heat dissipation to solder the second FAN8200 to the underside of the radio/motor board, as shown here: ![]() The main thing to watch is that the alignment of the FAN8200 pins matches between top and bottom, and to use plenty of solder to get a good contact. After soldering the chip, the leads are clipped for clearance: ![]() That's all that is needed. The resulting configuration should be good for for driving motors at 1.3A / channel continuous (2.6A total) or 2A / channel peak (4A total). Posted Fri, 13 Feb 2009 23:14 | HTML Link | see additional stories ... Fri, 06 Feb 2009More progress on neural net engine ... "ng" (grab blob to create neural input pattern) and "nb" (compare blob against trained patterns) are now working, though certainly in need of lots of testing. Code repository: http://code.google.com/p/surveyor-srv1-firmware Forum discussion Here's an example session - ![]() vc0100200070130150250 ##vc 0 ![]() vb0 ##vb0 2111 - 118 188 91 188 ng4 (this is where we grab a blob,scale it to 8x8, and store it as a new pattern) ![]() ni (initialize the net) ##ni - init neural net nt (train the net) ##nt - train 10000 iterations nb0 (check that the pattern was learned) ##nb 0 0 0 0 71 7 0 0 0 0 0 0 0 0 0 0 then after moving the robot slightly vb0 ##vb0 2137 - 126 196 92 189 nb0 ##nb 0 0 0 0 78 6 0 0 0 0 0 0 0 0 0 0 The "nb" command matches the input pattern from the largest blob against the patterns that the neural net has already learned. You can see that the best match is with pattern #4 (counting from 0). The detector seems to be pretty sensitive to small changes, so more work is needed, but at least we have a starting point. Posted Fri, 06 Feb 2009 17:52 | HTML Link | see additional stories ... Sun, 01 Feb 2009Neural Net Engine for Surveyor SRV-1 / SVS This long-awaited projected, which started two years ago, is finally reaching fruition. As discussed on the Surveyor Robotics Forum, neural net code is included in the latest firmware build (020109 or later). Initially, we are using the neural net for pixel pattern matching. We are using 8x8 pixel patterns, and there are 16 pre-programmed patterns which are easily changed, e.g. unsigned char npattern[NUM_NPATTERNS * 8] = { 0x18, 0x7E, 0x7E, 0xFF, 0xFF, 0x7E, 0x7E, 0x18, // #0 solid ball 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // #1 solid square 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, // #2 cross 0xFF, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, // #3 box 0x18, 0x7E, 0x66, 0xC3, 0xC3, 0x66, 0x7E, 0x18, // #4 circle 0xC3, 0xC3, 0x24, 0x18, 0x18, 0x24, 0xC3, 0xC3, // #5 xing ... ... }; You can display a pattern (0-f) using the "nd" command, e.g. nd5 ##nd 5 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** You can replace a pattern using the "np" command np57830303030307800 ##np 5 nd5 ##nd 5 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** Look at font8x8.h and you'll find a full set of 8x8 ASCII patterns that would be suitable for replacing the pre-programmed patterns - ![]() Once you have your patterns, 1. send "ni" to initialzed the network with random weights 2. then send "nt" to train the network on the stored set of patterns 3. then use "nx" to test the network against various patterns For example, after adding the 'I' character as pattern 5, I tried nx3030303030303030 ##nx 0 0 1 0 0 97 0 0 16 0 0 0 0 0 0 5 and you can see that it matches best against pattern 5 The next step is to add the "nb" command for matching blobs against patterns. The blob needs to be scaled into an 8x8 pattern to match, and there is an issue with aspect ratios, as demonstrated here ![]()
These patterns will be okay, because they occupy the full width and height of a template. The problem will occur with characters such as 'I' or numbers such as '1' which don't occupy the full width, or '-' which doesn't occupy full height, and I am open to suggestion on how to handle this. Once we have scaling working properly, we can directly connect the blob search to the neural pattern matching. At that point, we will add functions to the built-in C and Scheme interpreters for accessing these features. Posted Sun, 01 Feb 2009 13:15 | HTML Link | see additional stories ... |
||||