<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-13037116</id><updated>2007-09-26T21:31:46.969-07:00</updated><title type='text'>Mini Mac Robot</title><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/minibot.html'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml'/><author><name>Ben Loftin</name></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13037116.post-7490550250189598720</id><published>2007-09-26T21:10:00.000-07:00</published><updated>2007-09-26T21:31:03.555-07:00</updated><title type='text'>Detour</title><content type='html'>I am always getting sidetracked, but this time it is for a good reason.  The other night I got the idea that we need something a little more fun and possibly easier project for younger people than the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Robocup&lt;/span&gt;.  So the journey in the spirit of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;robocup&lt;/span&gt;, is to build an autonomous vehicle that will win a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;NASCAR&lt;/span&gt; event by the year 2050.  Since, we have to start somewhere, autonomous R/C racing seems to fit the bill.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Roboracer&lt;/span&gt; version 0.1 is just about ready.  The hardware is all setup and this week we will begin software development.  The first version is going to be as simple as possible and we will attempt to traverse an empty oval racetrack.  This will be accomplished by following the wall around the racetrack with only forward looking sonar and infrared  distance  sensors on the side to follow and keep  parallel to the wall.  Passing  other cars  will  of course be the most difficult and version 1 of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Roboracer&lt;/span&gt; will get a few more sensors to accomplish this.  Things to do: find out how to "stiffen" the shocks, take a closer look on how the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;CMUcam&lt;/span&gt; could be utilized and ground the servo power supply pins on the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;brainstem&lt;/span&gt; so the steering servo, throttle (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ESC&lt;/span&gt;) and all the sensors will run off the same battery.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/RoboracerFront-727859.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/RoboracerFront-727851.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/RoboracerSideRight-725253.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/RoboracerSideRight-725247.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/RoboracerSideLeft-725349.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/RoboracerSideLeft-725337.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/RoboracerBack-797558.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/RoboracerBack-797552.JPG" alt="" border="0" /&gt;&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2007/09/detour.html' title='Detour'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=7490550250189598720' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/7490550250189598720'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/7490550250189598720'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-6476710305606574712</id><published>2007-09-20T14:27:00.000-07:00</published><updated>2007-09-26T21:31:47.000-07:00</updated><title type='text'>brainstem setup in eclipse</title><content type='html'>The goal is to get a simple Hello world example to work with the brainstem c development.  The code to get compiled is&lt;br /&gt;&lt;br /&gt;#include "aStem.h"&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;printf("Hello World!\n");&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Project Settings:&lt;br /&gt;&lt;br /&gt;1) GCC C Compiler -&gt; Symbols -&gt; Defined symbols&lt;br /&gt;&lt;br /&gt;Add&lt;br /&gt;&lt;br /&gt;aUnix&lt;br /&gt;&lt;br /&gt;2) GCC C Compiler -&gt; Directories -&gt;  Include paths (-I)&lt;br /&gt;&lt;br /&gt;Add at least the following paths&lt;br /&gt;&lt;br /&gt;/home/bloftin/code/brainstem/aStem/aCommon&lt;br /&gt;/home/bloftin/code/brainstem/aIO/aCommon&lt;br /&gt;/home/bloftin/code/brainstem/aIO/aUnix&lt;br /&gt;/home/bloftin/code/brainstem/aCommon&lt;br /&gt;/home/bloftin/code/brainstem/aStem/aUnix&lt;br /&gt;&lt;br /&gt;3) GCC C Linker  -&gt; Libraries&lt;br /&gt;&lt;br /&gt;Add at least the following Libraries&lt;br /&gt;&lt;br /&gt;aIO&lt;br /&gt;aStem&lt;br /&gt;m&lt;br /&gt;&lt;br /&gt;4) GCC C Linker -&gt; Miscellaneous&lt;br /&gt;&lt;br /&gt;Add at least the following object files&lt;br /&gt;&lt;br /&gt;/home/bloftin/code/brainstem/aStem/unix_aStem_Data/ppc/aDebug/aStem.o&lt;br /&gt;/home/bloftin/code/brainstem/aUI/unix_aUI_Data/ppc/aDebug/aAssert.o&lt;br /&gt;/home/bloftin/code/brainstem/aIO/unix_aIOTests_Data/ppc/aDebug/aUtil.o&lt;br /&gt;&lt;br /&gt;Note that some more files may need to be added to the above steps depending on what parts of the c development kit you are using</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2007/09/brainstem-setup-in-eclipse.html' title='brainstem setup in eclipse'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=6476710305606574712' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/6476710305606574712'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/6476710305606574712'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-6520387931621960882</id><published>2007-09-17T11:36:00.000-07:00</published><updated>2007-09-17T12:29:55.086-07:00</updated><title type='text'>Enough Vacillating, Linux Wins</title><content type='html'>I was pulled in by the elegance of Cocoa programming for the Mac.  It is actually fun to program with.  Kudos to Apple, however there were two major drawbacks when I started testing systems for the robot.  I could never get off the ground.  For some reason the Iogear's feature mac product, "&lt;span class="medium_bold"&gt;USB to Serial/PDA Converter Cable&lt;/span&gt;&lt;br /&gt;       &lt;span class="small_text"&gt;Model #&lt;/span&gt; GUC232A" has failed me.  It worked perfectly connecting to the brainstem on my windows laptop and on my wife's iMac G5.  But for some unknown reason, I could not get it to work with the Mac Mini.  I got a bunch of strange USB errors in the system log and after two days of troubleshooting I gave up.  It also did not help that older usb cameras are not fun to deal with on the Mac.&lt;br /&gt;&lt;br /&gt;Anyway, the decision to go back to PPC linux on the Mac mini turned out to be a great.  Within, no time I am up and running using ubuntu PPC 7.04 (feisty).  Talk about easy, OpenCV was in the package system.  So the two most difficult things: connecting to the brainstem boards and the vision cameras (quickcam 3000) worked 'out of the box'.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test 1: OpenCV&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;After installing all the OpenCV packages in Synaptic, I downloaded the latest OpenCV off of sourceforge and recompiled it and ran the samples.  Just like that the vision system is up and running.  I ran the camshift demo and had it track by arm by selecting my arm in the image, see the following sequence of images that shows it tracking my arm.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-716112.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-716108.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-1-716119.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-1-716116.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-2-790118.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-2-790114.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-3-790123.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-3-790120.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-4-742692.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-4-742687.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-5-742698.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.phys-x.org/minibot/uploaded_images/Screenshot-CamShiftDemo-5-742695.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test 2: Brainstem&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;After downloading the c development kit from acroname's website for the brainstem, I needed to install a bunch of prerequisites.  I think most of them are: build-essential, xorg-dev(?) and something with ncurses in it.  I also had to move the libraries     libaIO.so and lib.so to a new ppc folder in the brainstem directory structure.  I do not think they anticipated their code being compiled on PPC, I'll send them a note to double check with them.  However, all compiled and I was able to run the aSimpleRange example (./aSimpleRange) in the aRelease/aUnix folder.  I placed my wife's iMac G5 about 68.5 cm from the GP2D02 sensor and got back good readings (104 -105=&gt; 70 cm) considering I have not calibrated the sensor yet.&lt;br /&gt;&lt;br /&gt;The next step is to test each robot component one by one in their own test program to help calibrate and make sure all are working well before trying to combine them into one large program.  Items to check first:&lt;br /&gt;&lt;br /&gt;Completed&lt;br /&gt;&lt;br /&gt;1) OpenCV: capture complete&lt;br /&gt;2) Connect with brainstem: complete&lt;br /&gt;&lt;br /&gt;Todo:&lt;br /&gt;&lt;br /&gt;3) IR sensors, GP2D02&lt;br /&gt;4) IR sensors, analog Sharp GP2D12&lt;br /&gt;5) Sonar sensors&lt;br /&gt;6) DC motor control (PWM out to Motor controller)&lt;br /&gt;7) Read DC motor encoders (tested under windows, worked great)&lt;br /&gt;8) Read R/C signals coming in from Futaba receiver and control motors with brainstem, currently had it working under direct control from transmitter&lt;br /&gt;9) Connect Mini to DC-DC converter and run from battery&lt;br /&gt;10)  Have Mini autonomously control motors&lt;br /&gt;11)  Implement PI or PID controller and test accuracy&lt;br /&gt;12) Speech system (this is where Cocoa on the mac was great, easy to do, linux will be much more difficult), I have used festival for speech synthesis, but I have not yet found a speech recognition engine to use.&lt;br /&gt;13) Finally, combine everything and start working at the architecture level&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2007/09/enough-vacillating-linux-wins.html' title='Enough Vacillating, Linux Wins'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=6520387931621960882' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/6520387931621960882'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/6520387931621960882'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-3602041423652435635</id><published>2007-09-02T19:22:00.000-07:00</published><updated>2007-09-02T19:23:55.865-07:00</updated><title type='text'>usb to serial device</title><content type='html'>This is just a reminder to install the usb to serial device for the brainstem from iogear's websit e and not acroname.  The link is&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.iogear.com/main.php?loc=product&amp;Item=GUC232A"&gt; http://www.iogear.com/main.php?loc=product&amp;Item=GUC232A&lt;/a&gt;&lt;span class="on" 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;/div&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2007/09/usb-to-serial-device.html' title='usb to serial device'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=3602041423652435635' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/3602041423652435635'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/3602041423652435635'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-116919038881362736</id><published>2007-01-18T22:57:00.000-08:00</published><updated>2007-01-18T23:46:02.006-08:00</updated><title type='text'>Fedora on the Mac Mini</title><content type='html'>After a long period of evaluation, I have decided to develop the robot for Linux.  I just felt that development under the Mac felt too restrictive, somewhat like developing for Windows.  This will also have the most flexibility for future platforms.  The Fedora 6 install (make sure you download the PPC install iso) went smoothly, but take note to get the wireless Airport card to work you need to copy a file from Mac OS X system.  Save this file to copy later after install:&lt;br /&gt;&lt;br /&gt;/System/Libraries/Extentions/AppleAirport2.kext/Contents/MacOS/AppleAirport2&lt;br /&gt;&lt;br /&gt;You need this firmware file to have the bcm43xx module work.  So after install and your computer is up to date then copy the firmware and reload the module &lt;br /&gt;&lt;br /&gt;bcm43xx-fwcutter AppleAirport2&lt;br /&gt;mv *.fw /lib/firmware/&lt;br /&gt;depmod -a&lt;br /&gt;modprobe bcm43xx&lt;br /&gt;&lt;br /&gt;Now configure the wireless card as normal using System-&gt;Network.&lt;br /&gt;&lt;br /&gt;If your video comes up with only 800x600 resolution use this file for your &lt;a href="http://www.pvv.org/~perchrh/macmini/xorg.conf"&gt;xorg.conf&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2007/01/fedora-on-mac-mini.html' title='Fedora on the Mac Mini'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=116919038881362736' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/116919038881362736'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/116919038881362736'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111807897581720978</id><published>2005-06-06T20:24:00.000-07:00</published><updated>2006-05-03T05:56:46.243-07:00</updated><title type='text'>Encoder Sensor Analysis</title><content type='html'>The goal of this analysis is to make a decision on buying the &lt;a href="http://www.acroname.com/robotics/parts/R185-SINGLE-LINE-IR.html"&gt;Lynxmotion SingleLine Detector&lt;/a&gt; (SLD) or the &lt;a href="http://www.acroname.com/robotics/parts/R64-P5587.html"&gt;Hamamatsu Photoreflector&lt;/a&gt; (HAMP) to use in detecting the encoder pattern. Even from a qualitative point a view the decision is still not easy. The SLD is $14.95 and the HAMP is $2.20. If I go with the HAMP, I can purchase 2 more IR distance rangers. However, minimal external circuitry is needed to interface with the &lt;a href="http://www.acroname.com/robotics/parts/S1-GP-BRD.html"&gt;brainstem&lt;/a&gt;. While the SLD comes with three convenient wires that can be directly plugged into the brainstem. As far as mounting issues, the HAMP will be a little more difficult, since its pins are small and may need to be first mounted on a PCB.&lt;br /&gt;&lt;br /&gt;The quantitative analysis will focus on the frequency response of the 2 sensors because I have mounted the encoder disk onto the high RPM shaft of the motor. I do not know the RPM of this shaft, but it is fast! First take a look at the 2 datasheets, &lt;a href="http://www.acroname.com/robotics/parts/R64-P5587.pdf"&gt;HAMP &lt;/a&gt;datasheet and the &lt;a href="http://www.optekinc.com/pdf/OPB745.pdf"&gt;SLD datasheet&lt;/a&gt;.  Note that what I call the SLD datasheet is the datasheet for the IR sensor and not the  User's Guide given &lt;a href="http://www.lynxmotion.com/images/data/sld-v1.pdf"&gt;here&lt;/a&gt;.  After all the circuit will not be faster than the IR sensor.&lt;br /&gt;&lt;br /&gt;Looking at the rise and fall times shown in the graphs of the datasheets, the worst cases are 1 milliseconds for the SLD and 4 microseconds for the HAMP. Figure 1 depicts the relationship between the pulses and the encoder.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/encoderWheelAndPulses_html_m6ad01d12.gif" /&gt;&lt;br /&gt;&lt;br /&gt;figure 1&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;At the 'start' where the red arrows are and going in a counter clockwise direction, the voltage will be 0 corresponding to the reflectance of the white. There are 2 quantities of interest here. One is the rise and fall time of the pulse and the other is the length of the pulse. Since the SLD could take 1 ms to 'rise' to 5 volts when it goes into the black area and then 1 ms to fall back down to 0 volts, there could clearly be issues if our pulse was 2 ms wide. This could create either a triangle with an analog input or a missed pulse for a digital input. So without caring about the pulse width, I'll call this 2 ms for the rise and fall the theoretical limit. It should not be attempted to use the SLD sensor for anything near this speed or faster. The HAMP sensor had a rise and fall time of 4 microseconds, so each pulse will have a limit of 8 microseconds.&lt;br /&gt;&lt;br /&gt;Next, we are concerned with what this translates into the fasted RPM that the sensor can deal with no regard on how the microcontroller will sample the signal (this will come later). For my case (and this will change based on encoder disk), I have 4 pulses per revolution as you can see in figure 1. This means the limit for the SLD will be 8 ms per revolution and for the HAMP it will be 16 microseconds. There are 2 rises and 2 falls for 1 revolution so multiply the rise/fall time by 4.&lt;br /&gt;&lt;br /&gt;Finally, to get the RPM limit we need to convert microseconds and ms to minutes. Essentially, think that there are 8 ms per revolution so how many revolution can be done in a minute. First convert to seconds so this is 8 x 10^-3 seconds. Then convert to minutes so divide by 60 to get 1.33 x 10^-4 minutes per revolution, but we want revolutions per minute so take the inverse, which yields a theoretical limit of 7500 RPM. Doing a similar calculation for the HAMP, yields a limit of 3,750,000 RPM. Clearly, we want to stay away from this limit so choosing a 50% 'safety' margin gives a max of 3750 RPM for SLD and 1,875,000 RPM for HAMP. If I choose HAMP, the limiting factor will be sampling the sensor and not the sensor itself. However, the SLD is too close to risk so I'll be ordering the HAMP. Look forward to an article on interfacing this to the brainstem in the coming weeks.&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/06/encoder-sensor-analysis.html' title='Encoder Sensor Analysis'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111807897581720978' title='5 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111807897581720978'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111807897581720978'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111784976356014048</id><published>2005-06-03T18:42:00.000-07:00</published><updated>2005-06-03T18:49:23.563-07:00</updated><title type='text'>Test 1: Mini Power Draw</title><content type='html'>The mini ran for 4.33 hours using an inverter on a 12 volt 18 aH battery. Divide the aH by the time so 18/4.33 and then multiply by the 12 volts to get an approximate 50 Watts of power. I had iTunes playing music and &lt;a href="http://setiathome.ssl.berkeley.edu/"&gt;SETI &lt;/a&gt;running the entire time to tax the CPU and then 2 usb cameras plugged in. Overall, I think this is the upper bound because the battery I was using is quite old (4 years). I am going to pick up another battery and run the test again. Also coming soon will be CAD drawings of the robot layout using &lt;a href="http://www.solidworks.com/"&gt;Sold Works&lt;/a&gt;.  In the future, I'll try to convert this to an open source cad program, but for now I am trying to brush up on my SW skills.</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/06/test-1-mini-power-draw.html' title='Test 1: Mini Power Draw'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111784976356014048' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111784976356014048'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111784976356014048'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111776139178840625</id><published>2005-06-02T18:03:00.000-07:00</published><updated>2005-06-02T18:17:27.636-07:00</updated><title type='text'>Cold Feet</title><content type='html'>On the eve of the operation I realize I do not have the heart to splice the mac mini's power cord to accommodate the &lt;a href="http://www.carnetix.com/CNXP1900.htm"&gt;CNX-P1900&lt;/a&gt;. Carnetix says they are trying to acquire the funky power plug (estimated to be around Aug/Sep), which will leave the power cord intact. Since I have a long way to go before full operational capability, I will use an inverter for now. Tonight, I'll try and run an endurance test.</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/06/cold-feet.html' title='Cold Feet'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111776139178840625' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111776139178840625'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111776139178840625'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111776056072805151</id><published>2005-06-02T17:58:00.000-07:00</published><updated>2005-06-02T18:02:40.733-07:00</updated><title type='text'>Return to Power</title><content type='html'>The mac mini is back from the shop. Apparently, the optical drive broke and they replaced it. The DC-DC converter also arrived so it is time to begin.</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/06/return-to-power.html' title='Return to Power'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111776056072805151' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111776056072805151'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111776056072805151'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111768187048462294</id><published>2005-06-01T20:02:00.000-07:00</published><updated>2005-06-03T19:08:54.613-07:00</updated><title type='text'>The Shaft Encoder Debacle</title><content type='html'>Someone once said that you should look before you leap. Clearly, he did not have the robot tinker gene. What started as a simple layer add on to accommodate the mac mini with a big battery, turned into a complete robot redesign. Ok, maybe not a complete redesign since I like my stacked platform layout (see picture below), but every system is getting a thorough examination.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/robot2.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;Starting at the bottom I decided to upgrade my motor control capability. Originally, I thought my robot could do without precise relative positioning (i.e. dead-reckoning, INS). After all do you whip out a ruler and measure the distance to the door before opening it? I was convinced navigation could be handled without 'counting the inches'. Then I read the technical report &lt;a href="http://www-personal.engin.umich.edu/%7Ejohannb/Papers/umbmark.pdf"&gt;"UMBmark - A method for Measuring, Comparing, and Correcting Dead-reckoning Errors in Mobile Robots"&lt;/a&gt; and realized I needed to come up with a better navigation plan. The paper made it clear that one must take advantage of absolute and relative positioning.&lt;br /&gt;&lt;br /&gt;The only real option for relative positioning due to cost is dead-reckoning. So what do I do? I dive right in and start making shaft encoders without any analysis of the problem. I assumed there was nothing to worry about and the 43 pages in &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0071408509/qid=1117684727/sr=8-1/ref=pd_csp_1/103-6978251-7016611?v=glance&amp;s=books&amp;amp;n=507846"&gt;"Building Robot Drive Trains"&lt;/a&gt; about encoders equipped me with all the knowledge I needed. I should have known better. In all those pages there was no mention of how good an encoder needs to be to help feed dead-reckoning navigation. It may be elsewhere in the book but this is unacceptable. Before you decide to build shaft encoders, DO THE MATH!!! It is simple and can save you many hours of frustration. The technical report goes through the math, which is so simple Homer could do it. We will get to this later, but for now I will retrace my steps so others can learn from my misfortune. As the great philosophers at &lt;a href="http://us.st5.yimg.com/store1.yimg.com/I/demotivators_1843_2759450"&gt;Despair, INC.&lt;/a&gt; informed us, "Mistakes - It could be that the purpose of your life is only to serve as a warning to others."&lt;br /&gt;&lt;br /&gt;The first problem encountered and the reason why I so easily bypassed the need for encoders is how to attach a encoder pattern. I couldn't attach it to the 'rear' part of the shaft as you can see in figure 1.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: center;"&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/motor%20009.jpg" /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;figure 1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;Although there appears to be room at the front of the shaft as seen in figure 2, the problem occurs when the wheel is attached.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt;  &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/motor%20011.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;figure 2&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;The wheel and hub assembly are shown in figure 3 and there is no room for adding an encoder wheel and a sensor because the air nozzle gets in the way.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;  &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/MotorAndHub1.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;figure 3&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Luckily, a solution was available thanks to the one tool every robot builder must have, the &lt;a href="http://www.dremel.com/HTML/home_fr.html"&gt;dremel&lt;/a&gt;.  I mounted the hub on this side of the wheel because the other side had some metal in the way as you can see in figure 4.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/motor%20017.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;figure 4&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;I know I tried to remove this at one time and failed. Clearly, I did not posses the power of the dremel. I used up about 20 cutting wheels, but I sliced through that metal like a spork attacking a coconut. The upside to this modification, which otherwise would have been a waste of time , is that I can now easily pump up the wheels without removing them, since the air nozzle is now on the outside of the assembly. The intermediate result which is now obsolete is shown in figure 5. The details of making the encoder pattern was more onerous then dealing with Microsoft Windows, which is pushed on us by our evil IT overlords at work.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/Picture%20101.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;figure 5&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;Making the encoder pattern turned into the 2005 Memorial Day boondoggle. It has been a couple years since I used a graphics program for more than cropping pictures, but come on the pattern is simple. Well, I tried openoffice draw, power point, paint and a paintshop pro trial. I could not get the fill option to work. I created a circle with the correct dimensions. This is easy in openoffice and I could choose cm units from in the options. Then another joy happened when I found I could easily create a line segment, copy and paste it, then rotate to a desired degree. So 36 copies later I had a great pattern with a circle and 36 equal segments. So when I began to try and fill in the segments a thick fog of frustration settled in as I could not do it. I tried grouping and merging by selecting on 2 line segments and then the circle, but the fill never worked or it filled in the whole circle. The next course of action was to use the select tool and try to come close to selecting a 'pie piece'. No luck, it would never follow the line. After about 2 hours of frustrating trial and error with different programs I decided to print it out and color in the segments with permanent marker.&lt;br /&gt;&lt;br /&gt;In the drive train book it mentions using transparency paper and a cdrom to help with reflection. So after gluing the pattern on a cdrom I built the circuit to test the IR sensor. For a while, I thought I was just choosing the wrong resistors but then I tested it with regular paper and the circuit worked. The problem is that the permanent marker still reflects. So I just replaced the transparency with regular computer paper and all was well.&lt;br /&gt;&lt;br /&gt;Once the pattern was installed on the hub, I began to be curious about how good it will be. The simplest calculation involves the linear resolution. As one segment passes the IR sensor, how far did the wheel go forward or backward. First, look at the equation given in the UMBmark paper.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/encoderlinearDisplacement_html_m1e934e06.gif" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;C_m is the conversion factor to translate encoder pulses into linear displacement. D_n is the nominal wheel diameter. n is the Gear ratio of the reduction gear between the motor where the encoder is attached and the drive wheel. C_e is the number of pulses per revolution. For my case D_n is 8.25", n = 1 since my encoder is attached to the wheel and C_e = 36 pulses per revolution (Just count the number of segments on your encoder). Performing the calculation yields 0.72" for C_m. This means if I measure one pulse the wheel moved 0.72" inches.&lt;br /&gt;&lt;br /&gt;Is this good? Assuming my sensor does not miss any pulses and I go 10 feet (120") and having everything else perfect (no wheel slippage, uneven floors, etc.) I should expect to be +/- 0.72" for 0.72/120 or a 1.4% error. Not too shabby. Unfortunately, this hides the real problem and that is rotation. If my robot is to perform the UMBmark test it has to do 90 degree turns so I need to find out by angular error.&lt;br /&gt;&lt;br /&gt;This is a very rough estimate, but it should reveal the problem. Assuming the distance from one wheel to the other is 15", then this is the diameter of my turning circle since my wheels are on the outside of the base. So if I am off by 0.72" on a turn as shown in figure 6, I calculated the angular error associated with this by taking the inverse tangent of the angle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/encoderAngularDisplacement_html_879fd39.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;figure 6&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;theta = 5.5 degrees. Now this is a significant error. After three turns in the UMBmark test, the robot could be off by16.5 degrees from intended heading.&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt;&lt;font&gt;So back to the drawing board.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The dremel came to the rescue again. After taking apart the robot there seemed to be enough room to shave off some hopefully unneeded backing in the rear of the motor. By shaving off the back, I bought about 3 mm on the end of the shaft (figure 7 shows this nicely).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.phys-x.org/minibot/motor%20001.jpg" /&gt;&lt;/div&gt; &lt;font&gt;&lt;br /&gt;Yipee, I can attach an encoder to the rear shaft and obtain all the resolution I need. This means the dominant errors for dead-reckoning will not be the encoders, but other things like uneven wheel diameters. The weekend is now over and it is time to rest. Next will come a battery test to see how long the mini will run on an 18 ah battery. Of course the mini needs to return from the shop and the power supply from &lt;a href="http://www.mp3car.com/store/"&gt;mp3car &lt;/a&gt;needs to come in.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/06/shaft-encoder-debacle.html' title='The Shaft Encoder Debacle'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111768187048462294' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111768187048462294'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111768187048462294'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111722358378977303</id><published>2005-05-27T12:34:00.000-07:00</published><updated>2005-05-27T12:53:03.793-07:00</updated><title type='text'>Mini in the shop</title><content type='html'>Its a sad day in the robot workshop (the bolts are only being threaded halfway).  The mini mac is in the &lt;a href="http://www.voelker.com/"&gt;shop&lt;/a&gt; for a couple days and to add lemon to the wound Memorial Day is around the corner. The blasted computer 'ate' a cdrom and won't release it. I've tried numerous ways to make Kit regurgitate the disk but all attempts have failed. Since I cannot work on software, I'll try to add details about the hardware this weekend. The biggest pressing issue is during a redesign of the layout to accommodate the mini along with a larger battery, should I scrap the wood I am using for a prototype and machine its aluminum counterpart or do I stick with the easy to work with wood?</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/05/mini-in-shop.html' title='Mini in the shop'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111722358378977303' title='3 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111722358378977303'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111722358378977303'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111661844313827641</id><published>2005-05-20T12:28:00.000-07:00</published><updated>2005-05-20T12:47:23.143-07:00</updated><title type='text'>Mac Mini  DC-DC Power Supply</title><content type='html'>I thought I was going to have to use an inverter to get the power to the Mac from a 12 v battery source, but thanks to Carnetix they've developed the &lt;a href="http://www.carnetix.com/CNXP1900.htm"&gt;CNX-P1900&lt;/a&gt; for $100.  Also, &lt;a href="http://www.tomshardware.com/howto/20050216/apple-mac-mini-computer-06.html"&gt;Tom's Hardware Guide&lt;/a&gt; reports the mini's power draw to be around 20-28 Watts. I haven't shown the pictures yet, but a prototype of the mini mac mobile platform is nearly finished. I've used simple hobby wood for now until the design is finalized. The last nagging issue before the software code is developed is the USB camera issues on the mac. To my disappointment, I've only been able to capture from one USB camera. This may be enough for awhile, but I was going to have 2-4 cameras. I also may rethink this since the iSight is a lot higher quality than my quickcams and it uses firewire. More on the design and architecture will come this weekend. So long, until I post again.</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/05/mac-mini-dc-dc-power-supply.html' title='Mac Mini  DC-DC Power Supply'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111661844313827641' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111661844313827641'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111661844313827641'/><author><name>Ben Loftin</name></author></entry><entry><id>tag:blogger.com,1999:blog-13037116.post-111654814476855439</id><published>2005-05-19T17:07:00.000-07:00</published><updated>2005-05-19T17:33:16.366-07:00</updated><title type='text'>The mini</title><content type='html'>I invite you to come along with me on a journey to create robots based on the &lt;a href="http://www.apple.com/macmini/"&gt;Mac mini&lt;/a&gt;. The mini's size of 6.5" x 6.5" x 2" begs us, no demands us to build an autonomous mobile platform around it. No self respecting robot hobbyist could possibly resist, so the quest begins.&lt;br /&gt;&lt;br /&gt;This blog will serve a myriad of purposes. One is to create a place for rapid updates, pictures and descriptions as the building of Mini Mac aka Kit unfolds. Another is more of an experiment. I believe blogging can be an important if not a core part of projects for those of us who are not disciplined enough to document well as we work. Too often have I had to write documentation after the project is nearly finished. So enough is enough. I must blog while I work. Anyway, who can whistle when you're surrounded by cubicles?</content><link rel='alternate' type='text/html' href='http://www.phys-x.org/minibot/2005/05/mini.html' title='The mini'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13037116&amp;postID=111654814476855439' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.phys-x.org/minibot/atom.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111654814476855439'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13037116/posts/default/111654814476855439'/><author><name>Ben Loftin</name></author></entry></feed>