<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>The Efficient Coder</title>
    <link>http://www.efficientcoder.net/</link>
    <description>There has got to be a better way of communicating with our computers!</description>
    <language>en-us</language>
    <copyright>Kevin D. Wolf</copyright>
    <lastBuildDate>Sun, 18 Mar 2007 22:29:28 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>kevinw@software-logistics.com</managingEditor>
    <webMaster>kevinw@software-logistics.com</webMaster>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=32852fb1-9d86-49db-8775-4593e8024bf0</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,32852fb1-9d86-49db-8775-4593e8024bf0.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,32852fb1-9d86-49db-8775-4593e8024bf0.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=32852fb1-9d86-49db-8775-4593e8024bf0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h4>NiVek J.D.'s Maiden Voyage
   </h4>
        <p>
      Everything came together today for NiVek's J.D.'s official first journey.  NiVek
      J.D. is a remote control tractor purchased from Target that was converted over to
      be controlled via a small on-board computer programmed in Java.  The same basic
      board I used for <a href="http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx">NiVek
      I</a> was used for this "robot".
   </p>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/100_1439.JPG" border="0" />
        </p>
        <p>
      This robot has two cool features not on NiVek I.  The first is it has a <a href="http://www.parallax.com/detail.asp?product_id=28146">GPS</a> module
      purchased from <a href="http://www.parallax.com/">Parallax</a>.  The second and
      which I think is really exciting is it using a Windows Mobile device as a "Repeater"
      that allows for communications from the NiVek embedded computer to a a PC.  This
      design is based upon software components that are part of <a href="http://www.wimobot.com/">WiMo</a> or
      Windows Mobile Robot, you really need to check out that site!  This consists
      of some kewl software components that are made up of a <a href="http://msdn2.microsoft.com/en-us/netframework/aa497273.aspx">Compact
      Framework 2.0 </a>application that runs on Windows Mobile and a collection of
      services that run under <a href="http://msdn.microsoft.com/robotics/">Microsoft's
      Robotics Studio</a>.
   </p>
        <p>
          <font color="#000000" size="3">
            <strong>NiVek J.D.'s Hardware</strong>
          </font>
        </p>
        <p>
      Basically the radio was just ripped out of the existing remote control tractor and
      and the motors were connected to the NiVek embedded computer.  As with the "original"
      WiMo, the Windows Mobile device was mounted on a servo with a CD-ROM.  The original
      WiMo used a SmartPhone not a Pocket PC so that probably worked out a little better,
      it's nice to be able to pan the camera however with my driving skills (smacking into
      walls) one of these days, I'm pretty sure the CD-ROM is going to end up in pieces
      ;-).  I need to re-think that part of the design.
   </p>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/WimoHW.png" border="0" />
        </p>
        <p>
          <font size="3">
            <strong>NiVeK J.D.'s Maiden Voyage (well at least one of the first
      few)</strong>
          </font>
        </p>
        <p>
          <object height="350" width="425">
            <param name="movie" value="http://www.youtube.com/v/gHA5faNt31U" />
            <embed src="http://www.youtube.com/v/gHA5faNt31U" type="application/x-shockwave-flash" width="425" height="350">
            </embed>
          </object>
        </p>
        <p>
          <font size="3">
            <strong>50,000ft System Overview</strong>
          </font>
        </p>
        <ul>
          <li>
         The actual robot itself is controlled by an embedded computer based upon a small PIC
         processor with some additional components that allow it to be programmed in Java with
         32K RAM &amp; ROM this was purchased from Parallax and is called a Javelin Stamp. 
         (See this <a href="http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx">post</a> for
         more information) 
      </li>
          <li>
         The embedded computer has a BlueTooth transceiver module that allows it to communicate
         with a Windows Mobile Device. 
      </li>
          <li>
         The Windows Mobile Device has a Compact Frameworks 2.0 application running code available
         from the <a href="http://www.wimobot.com/">WiMo Bot</a> web site. 
      </li>
          <li>
         The Windows Mobile WiMo application communicates with the robot via BlueTooth. 
         It also has the ability to listen on a socket for connections from a remote application. 
         Since this is a Windows Mobile device (in my case a phone), it will not only work
         while it's connected via a local LAN via WiFi, but it can also communicate via the
         GPRS radio and be a sort of "repeater" that will allow it to communicate to a host
         controller program anywhere it has cellular reception, just think about this...this
         is very kewl!  A nice feature is on the opening screen shot of WiMo it tells
         you the IP address of the device.<br /><img src="http://www.efficientcoder.net/content/binary/WimoPPC1.png" border="0" /></li>
          <li>
         On the PC side you have a set of Microsoft Robotics Studio services.  When
         these services first start you will be greeted by a dialog that will allow you to
         enter the IP address of the remote Windows Mobile device.<br /><img src="http://www.efficientcoder.net/content/binary/WimoIP.png" border="0" /></li>
          <li>
         Once you press "Connect" (and the software gods are shining on you) you should establish
         a connection from your PC to the WiMo application. 
      </li>
          <li>
         At this point a couple of additional forms will show up from the MSRS services. 
         The one in the upper left is displaying console messages from MSRS (Microsoft Robotics
         Studio).  This is a great way to see what's actually going on with your services.  
      </li>
          <li>
         The one in the upper right is from a service that came with WiMo (with the addition
         of buttons to control the motors).  Another really cool built in feature with
         WiMo is the ability to use the camera on your Windows Mobile device to send pictures
         back from your robot.  This from also sends messages to the core WiMo communications
         MSRS service to pass those to the WiMo device application.  These messages allow
         for control of the robot from the PC. 
      </li>
          <li>
         The dialog in the bottom is an additional MSRS service that was built that subscribes
         the the TextMessageReceived event from the core WiMo service.  
         <ul><li>
               The NiVek embedded computer spits out GPS readings every second (probably need
               to change this so it only sends when the location changes).  
            </li><li>
               This gets sent from NiVek to the the WiMo software on the device with a simple
               &lt;stx&gt;&lt;etx&gt; binary protocol.  The WiMo software turns it into a simple
               text message.  
            </li><li>
               For our GPS WiMo constructs a simple text message "GPS: #Sats=4 Lat=28.4.042
               Long=82.42.5522".  
            </li><li>
               This text message is sent over the wire from the Windows Mobile application to the
               WimoComm MSRS service.  
            </li><li>
               The WiMo MSRS service picks up the text message and finds any services that subscribe
               to this type of incoming event. 
            </li><li>
               The GPS Point plotter MSRS service subscribes to these messages so it takes those
               readings and plots the on the crude dialog you see below.  The challenge here
               is that for a robot this size of NiVek J.D. if it moves 50ft that's a long distance,
               and the resolution on the GPS module I purchased just doesn't seem to be all that
               accurate.</li></ul></li>
        </ul>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/NiVek_Console.png" border="0" />
        </p>
        <p>
      Finally one last picture of you host at the controls!
   </p>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/KDW.jpg" border="0" />
        </p>
        <p>
      Looks like my day job is going to be busy over the next few weeks with <a href="http://www.devconnections.com/">DevConnections</a> and <a href="http://www.medc2007.com/">MEDC</a> but
      I hope to sneak in a few hours every once in a while to push this effort forward!
   </p>
        <p>
      Can anyone figure out what NiVek stands for?
   </p>
        <p>
      - ec
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=32852fb1-9d86-49db-8775-4593e8024bf0" />
      </body>
      <title>NiVek J.D.'s Maiden Voyage</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,32852fb1-9d86-49db-8775-4593e8024bf0.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,32852fb1-9d86-49db-8775-4593e8024bf0.aspx</link>
      <pubDate>Sun, 18 Mar 2007 22:29:28 GMT</pubDate>
      <description>&lt;h4&gt;NiVek J.D.'s Maiden Voyage
&lt;/h4&gt;
&lt;p&gt;
   Everything came together today for NiVek's J.D.'s official first journey.&amp;nbsp; NiVek
   J.D. is a remote control tractor purchased from Target that was converted over to
   be controlled via a small on-board computer programmed in Java.&amp;nbsp; The same basic
   board I used for &lt;a href="http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx"&gt;NiVek
   I&lt;/a&gt; was used for this "robot".
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/100_1439.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   This robot has two cool features not on NiVek I.&amp;nbsp; The first is it&amp;nbsp;has a &lt;a href="http://www.parallax.com/detail.asp?product_id=28146"&gt;GPS&lt;/a&gt; module
   purchased from &lt;a href="http://www.parallax.com/"&gt;Parallax&lt;/a&gt;.&amp;nbsp; The second and
   which I think is really exciting is it&amp;nbsp;using a Windows Mobile device as a "Repeater"
   that allows for communications from the NiVek embedded computer to a a PC.&amp;nbsp; This
   design is based upon software components that are part of &lt;a href="http://www.wimobot.com/"&gt;WiMo&lt;/a&gt;&amp;nbsp;or
   Windows Mobile Robot, you really need to check out that site!&amp;nbsp; This consists
   of some kewl software components that are made&amp;nbsp;up of a &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa497273.aspx"&gt;Compact
   Framework 2.0&amp;nbsp;&lt;/a&gt;application that runs on Windows Mobile and a collection of
   services that run under &lt;a href="http://msdn.microsoft.com/robotics/"&gt;Microsoft's
   Robotics Studio&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   &lt;font color=#000000 size=3&gt;&lt;strong&gt;NiVek J.D.'s Hardware&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   Basically the radio was just ripped out of the existing remote control tractor and
   and the motors were connected to the NiVek embedded computer.&amp;nbsp; As with the "original"
   WiMo, the Windows Mobile device was mounted on a servo with a CD-ROM.&amp;nbsp; The original
   WiMo used a SmartPhone not a Pocket PC so that probably worked out a little better,
   it's nice to be able to pan the camera however with my driving skills (smacking into
   walls)&amp;nbsp;one of these days, I'm pretty sure the CD-ROM is going to end up in pieces
   ;-).&amp;nbsp; I need to re-think that part of the design.
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/WimoHW.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font size=3&gt;&lt;strong&gt;NiVeK J.D.'s Maiden Voyage (well at least one of the first few)&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;object height=350 width=425&gt;
      &lt;param name="movie" value="http://www.youtube.com/v/gHA5faNt31U"&gt;
      &lt;embed src="http://www.youtube.com/v/gHA5faNt31U" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;
   &lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font size=3&gt;&lt;strong&gt;50,000ft System Overview&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      The actual robot itself is controlled by an embedded computer based upon a small PIC
      processor with some additional components that allow it to be programmed in Java with
      32K RAM &amp;amp; ROM this was purchased from Parallax and is called a Javelin Stamp.&amp;nbsp;
      (See this &lt;a href="http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx"&gt;post&lt;/a&gt; for
      more information) 
   &lt;li&gt;
      The embedded computer has a BlueTooth transceiver module that allows it to communicate
      with a Windows Mobile Device. 
   &lt;li&gt;
      The Windows Mobile Device has a Compact Frameworks 2.0 application running code available
      from the &lt;a href="http://www.wimobot.com/"&gt;WiMo Bot&lt;/a&gt; web site. 
   &lt;li&gt;
      The Windows Mobile WiMo application communicates with the robot via BlueTooth.&amp;nbsp;
      It also has the ability to listen on a socket for connections from a remote application.&amp;nbsp;
      Since this is a Windows Mobile device (in my case a phone), it will not only work
      while it's connected via a local LAN via WiFi, but it can also communicate via the
      GPRS radio and be a sort of "repeater" that will allow it to communicate to a host
      controller program anywhere it has cellular reception, just think about this...this
      is very kewl!&amp;nbsp; A nice feature is on the opening screen shot of WiMo it tells
      you the IP address of the device.&lt;br&gt;
      &lt;img src="http://www.efficientcoder.net/content/binary/WimoPPC1.png" border=0&gt; 
   &lt;li&gt;
      On the PC side you have a set of Microsoft Robotics Studio&amp;nbsp;services.&amp;nbsp; When
      these services first start you will be greeted by a dialog that will allow you to
      enter the IP address of the remote Windows Mobile device.&lt;br&gt;
      &lt;img src="http://www.efficientcoder.net/content/binary/WimoIP.png" border=0&gt; 
   &lt;li&gt;
      Once you press "Connect" (and the software gods are shining on you) you should establish
      a connection from your PC to the WiMo application. 
   &lt;li&gt;
      At this point a couple of additional forms will show up from the MSRS services.&amp;nbsp;
      The one in the upper left is displaying console messages from MSRS (Microsoft Robotics
      Studio).&amp;nbsp; This is a great way to see what's actually going on with your services.&amp;nbsp; 
   &lt;li&gt;
      The one in the upper right is from a service that came with WiMo (with the addition
      of buttons to control the motors).&amp;nbsp; Another really cool built in feature with
      WiMo is the ability to use the camera on your Windows Mobile device to send pictures
      back from your robot.&amp;nbsp; This from also sends messages to the core WiMo communications
      MSRS service to pass those to the WiMo device application.&amp;nbsp; These messages allow
      for control of the robot from the PC. 
   &lt;li&gt;
      The dialog in the bottom is an additional MSRS service that was built that subscribes
      the the TextMessageReceived event from the core WiMo service.&amp;nbsp; 
      &lt;ul&gt;
         &lt;li&gt;
            The NiVek embedded computer&amp;nbsp;spits out GPS readings every second (probably need
            to change this so it only sends when the location changes).&amp;nbsp; 
         &lt;li&gt;
            This gets sent from NiVek to the the WiMo software on the device with&amp;nbsp;a simple
            &amp;lt;stx&amp;gt;&amp;lt;etx&amp;gt; binary protocol.&amp;nbsp; The WiMo software turns it into a simple
            text message.&amp;nbsp; 
         &lt;li&gt;
            For our GPS WiMo constructs a simple text message&amp;nbsp;"GPS: #Sats=4 Lat=28.4.042
            Long=82.42.5522".&amp;nbsp; 
         &lt;li&gt;
            This text message is sent over the wire from the Windows Mobile application to the
            WimoComm MSRS service.&amp;nbsp; 
         &lt;li&gt;
            The WiMo MSRS service picks up the text message and finds any services that subscribe
            to this type of incoming event. 
         &lt;li&gt;
            The GPS Point plotter MSRS service&amp;nbsp;subscribes to these messages so it takes those
            readings and plots the on the crude dialog you see below.&amp;nbsp; The challenge here
            is that for a robot this size of NiVek J.D. if it moves 50ft that's a long distance,
            and the resolution on the GPS module I purchased just doesn't seem to be all that
            accurate.&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/NiVek_Console.png" border=0&gt; 
&lt;/p&gt;
&lt;p&gt;
   Finally one last picture of you host at the controls!
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/KDW.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   Looks like my day job is going to be busy over the next few weeks with &lt;a href="http://www.devconnections.com/"&gt;DevConnections&lt;/a&gt; and &lt;a href="http://www.medc2007.com/"&gt;MEDC&lt;/a&gt; but
   I hope to sneak in a few hours every once in a while&amp;nbsp;to push this effort forward!
&lt;/p&gt;
&lt;p&gt;
   Can anyone figure out what NiVek stands for?
&lt;/p&gt;
&lt;p&gt;
   - ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=32852fb1-9d86-49db-8775-4593e8024bf0" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,32852fb1-9d86-49db-8775-4593e8024bf0.aspx</comments>
      <category>Hardware;Mobile;Robotics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=45135d0b-033e-4c84-878d-8bef9049ab9e</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,45135d0b-033e-4c84-878d-8bef9049ab9e.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,45135d0b-033e-4c84-878d-8bef9049ab9e.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=45135d0b-033e-4c84-878d-8bef9049ab9e</wfw:commentRss>
      <title>Microsoft Robotics Studio Communications Protocol</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,45135d0b-033e-4c84-878d-8bef9049ab9e.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,45135d0b-033e-4c84-878d-8bef9049ab9e.aspx</link>
      <pubDate>Sun, 11 Feb 2007 00:02:44 GMT</pubDate>
      <description>&lt;h4 class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 16pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Microsoft
   Robotics Studio Communications Protocol&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/h4&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;Ah
   – the weekend, time to do a little coding for fun!&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;One
   of my on-going projects it to build out the functionality of my latest robot &lt;/font&gt;&lt;a href="http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx"&gt;&lt;font face=Verdana&gt;NiVek
   I&lt;/font&gt;&lt;/a&gt;&lt;font face=Verdana color=#000000&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Although
   the robot itself has a little computer it doesn’t have much of a user interface, that
   is provided via a PC.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Therefore for the
   PC to configure and display the telemetry from the robot a communications channel
   needs to be established.&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt; 
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/Eb.gif" border=0&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt; 
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;There
   is a cool little card that you can get at &lt;/font&gt;&lt;a href="http://www.parallax.com/"&gt;&lt;font face=Verdana&gt;Parallax&lt;/font&gt;&lt;/a&gt;&lt;font face=Verdana color=#000000&gt; called
   the &lt;/font&gt;&lt;a href="http://www.parallax.com/detail.asp?product_id=30068"&gt;&lt;font face=Verdana&gt;Embedded
   Blue&lt;/font&gt;&lt;/a&gt;&lt;font face=Verdana color=#000000&gt; transceiver, this little devices
   takes TTL (+5v) level signals from a microcontroller and allows for serial communications
   with another BlueTooth device (such as a computer).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;So
   I can hookup a couple lines on my &lt;/font&gt;&lt;a href="http://www.parallax.com/detail.asp?product_id=JS1-IC"&gt;&lt;font face=Verdana&gt;Javelin
   Stamp chip&lt;/font&gt;&lt;/a&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt; to the Embedded Blue
   device, then establish a BlueTooth connection and it’s just like having a two way
   serial cable between my computer and the robot, very nice!&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font color=#000000&gt;&amp;nbsp;&lt;img src="http://www.efficientcoder.net/content/binary/js1-ic.gif" border=0&gt;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;Now
   that we have our serial link we need a nice general purpose (and simple) protocol
   to exchange data.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In a past life I worked
   on a lot of embedded systems that needed to talk to the outside world.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This
   is very similar to what I wanted to do with my robot.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Here’s
   what I came up with.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font face=Verdana color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;STX&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   Start of Transmission Character (0x03)&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;LEN_MSB&amp;gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   Most Significant Byte of the size of the data packet. 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;LEN_LSB&amp;gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   Least Significant Byte of the size of the data packet&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;DEVICE_TYPE&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   Single byte that identifies the device (Enum type in C#)&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;DEVICE_ID&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;-
   Since there may be many of these devices, we have a simple numeric id&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;DEVICE_ACTION&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;-
   An additional byte that describes the action (Also an Enum type in C#)&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;PAYLOAD&amp;gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   An additional set of bytes that represent any data to be passed.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;CHECK_SUM&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;-
   A single byte check sum to validation the message&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;lt;ETX&amp;gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-
   End of Transmission character (0x04)&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font face=Verdana color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;Once
   we’ve defined this protocol, two chunks of code need to be written on each device
   that will be “talking”.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;We need some
   simple methods to build up the packets.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;We
   also need a simple state machine that will look at the bytes coming in on the serial
   port and build up these packets.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font face=Verdana color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;On
   the PC side, a simple state machine was built that progresses through each of the
   bytes from the serial port, once the ETX is received, an event is fired to pass the
   message to host that decides how to handle the message.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Creating
   the new packets to send is even easier, it’s just simply a static method that takes
   the DeviceType Enum, DeviceId, DeviceAction Enum and Payload and constructs a byte
   array.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Once complete that byte array
   is then dropped into a queue to be sent out on the serial port.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
   &lt;o:p&gt;
      &lt;font face=Verdana color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;For
   my Java robot, our options are fairly limited, the Javelin is a cool little chip however
   the Java Interpreter is not very complete, no Garbage Collection and no real multi-tasking.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;
   So here I did kind-of a round-robin type of thing where I have a main program loop,
   then I established the different services such as checking the sensors, checking the
   in buffer, performing actions etc..&amp;nbsp; One of those tasks was to check the serial
   port in buffer for new characters, if new characters are available, they are parsed
   via a state machine, once a message is complete it's dropped into a queue.&amp;nbsp; Then
   when the main loop checks the queue it pulls out the message, and based upon the DeviceType,
   it just hands the message off to the Java class that handle that device in a nice
   clean Handle Method.&amp;nbsp; Sending out a message isn't all that clean but since the
   Serial UART built into the Javelin chip works in the background it may not be that
   bad.&amp;nbsp; Basically each device calls a method on the Communications interface within
   the program to just dump the bytes into the output buffer that follows the protocol
   defined above.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;If
   anyone is interested in getting a copy of this code, just drop me an email.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
   &lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font face=Verdana color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;-ec&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;/span&gt;&amp;nbsp;&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=45135d0b-033e-4c84-878d-8bef9049ab9e" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,45135d0b-033e-4c84-878d-8bef9049ab9e.aspx</comments>
      <category>Robotics;Software Engineering</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=a0e74f09-a914-4d7a-97b2-22c54821de4a</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a0e74f09-a914-4d7a-97b2-22c54821de4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="4">
            <strong>NiVek 1</strong>
          </font>
        </p>
        <p>
      Over the weekend I finally had a few hours to get all the basic functionality working
      on my latest robot "NiVek I"
   </p>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/NiVek I.jpg" border="0" />
        </p>
        <p>
      I'll be doing some additional posts along with some source code, but below are some
      of the cool features
   </p>
        <p>
          <strong>Hardware</strong>
        </p>
        <ul>
          <li>
         Traxster Chassis and Turret from <a href="http://www.roboticsconnection.com">Robotics
         Connection</a></li>
          <li>
         Main Board and Turret boards I designed and had manufactured by <a href="http://www.pcbexpress.com/">PCB
         Express</a> based upon the Parallax <a href="http://www.javelinstamp.com/">Javelin
         Stamp</a> a PIC processor with additional RAM/ROM that has a built in Java Interpreter 
      </li>
          <li>
         Bluetooth Communications via <a href="http://www.a7eng.com/products/embeddedblue/embeddedblue.htm">Embedded
         Blue </a>transceiver 
      </li>
          <li>
         I2C bus driven by the Javelin Stamp 
      </li>
          <li>
            <a href="http://www.acroname.com/robotics/parts/R280-GPIO14.html">GPIO14</a> General
         Purpose IO A/D &amp; D/A on the I2C bus 
      </li>
          <li>
            <a href="http://www.acroname.com/robotics/parts/R193-SD20.html">SD20</a> 20 port Servo
         Control on the I2C bus 
      </li>
          <li>
         3 Sharp <a href="http://www.roboticsconnection.com/pc-23-4-sharp-gp2d120-ir-sensor.aspx">GP2D120</a> IR
         Sensors mounted on the turret 
      </li>
          <li>
         2 <a href="http://www.parallax.com/detail.asp?product_id=28015">Ultrasonic sensors</a> one
         mounted on the turret and another mounted on a servo to allow panning at the rear
         of the robot 
      </li>
          <li>
         Speech via <a href="http://www.acroname.com/robotics/parts/R184-SP03.html">Daventech
         SP03 </a>Text to Speech Synthesizer on the I2C bus 
      </li>
          <li>
            <a href="http://www.roboticsconnection.com/pc-59-4-cmps03-electronic-compass.aspx">CMPS03</a> Daventech
         Compass 
      </li>
          <li>
         Optical <a href="http://www.roboticsconnection.com/pc-40-4-optical-encoder-modules-disks.aspx">Wheel
         Encoders</a></li>
          <li>
            <a href="http://www.solutions-cubed.com/solutions%20cubed/MMB2003.htm">MotorMindB</a> DC
         Motor Speed Controller 
      </li>
          <li>
         2 laser pointers mounted on the turret for range detection (this will be a great post
         once I work out the details) 
      </li>
          <li>
         GrandTec <a href="http://www.grandtec.com/rfcmos.htm">Wireless Web Cam</a> mounted
         on the turret 
      </li>
          <li>
         2 x MC24LC256 256K I2C Serial CMOS EEPROM</li>
        </ul>
        <p>
          <strong>Software</strong>
        </p>
        <ul>
          <li>
         Software on robot written in Java 
      </li>
          <li>
         Simple &lt;STX&gt;&lt;ETX&gt; communications protocol with Device Type, Device ID,
         Device Action and Payload along with a Check Sum communicating from the robot to a
         C# application via BlueTooth 
      </li>
          <li>
         Although the first version of the controller application is a C# Win Forms application
         the Communications Library is setup to create <a href="http://msdn.microsoft.com/robotics/">Microsoft
         Robotics Studio</a> Services (when time permits) 
      </li>
          <li>
         The following features are controlled via the existing console 
         <ul><li>
               Motion Detection Algorithm on Web Cam Input 
            </li><li>
               Drawing heading on web cam input 
            </li><li>
               White half moon displays ranges from three IR Sensors on turret 
            </li><li>
               Turret Pan &amp; Tilt controlled via sliders 
            </li><li>
               RGB Display used for turning laser detection algorithm (range finding) 
            </li><li>
               Motor Controls via slider 
            </li><li>
               Speech Control</li></ul></li>
        </ul>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/NiVek Console.PNG" border="0" />
        </p>
        <p>
      There just aren't enough hours in the day to do all this fun stuff!
   </p>
        <p>
      - ec
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=a0e74f09-a914-4d7a-97b2-22c54821de4a" />
      </body>
      <title>NiVek I </title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx</link>
      <pubDate>Mon, 29 Jan 2007 14:12:00 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=4&gt;&lt;strong&gt;NiVek 1&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   Over the weekend I finally had a few hours to get all the basic functionality working
   on my latest robot "NiVek I"
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/NiVek I.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   I'll be doing some additional posts along with some source code, but below are some
   of the cool features
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Hardware&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Traxster Chassis and Turret from &lt;a href="http://www.roboticsconnection.com"&gt;Robotics
      Connection&lt;/a&gt; 
   &lt;li&gt;
      Main Board and Turret boards I designed and had manufactured by &lt;a href="http://www.pcbexpress.com/"&gt;PCB
      Express&lt;/a&gt;&amp;nbsp;based upon the Parallax &lt;a href="http://www.javelinstamp.com/"&gt;Javelin
      Stamp&lt;/a&gt;&amp;nbsp;a PIC processor with additional RAM/ROM that has a built in Java Interpreter 
   &lt;li&gt;
      Bluetooth Communications via &lt;a href="http://www.a7eng.com/products/embeddedblue/embeddedblue.htm"&gt;Embedded
      Blue&amp;nbsp;&lt;/a&gt;transceiver 
   &lt;li&gt;
      I2C bus driven by the Javelin Stamp 
   &lt;li&gt;
      &lt;a href="http://www.acroname.com/robotics/parts/R280-GPIO14.html"&gt;GPIO14&lt;/a&gt; General
      Purpose IO A/D &amp;amp; D/A on the I2C bus 
   &lt;li&gt;
      &lt;a href="http://www.acroname.com/robotics/parts/R193-SD20.html"&gt;SD20&lt;/a&gt; 20 port&amp;nbsp;Servo
      Control on the I2C bus 
   &lt;li&gt;
      3 Sharp &lt;a href="http://www.roboticsconnection.com/pc-23-4-sharp-gp2d120-ir-sensor.aspx"&gt;GP2D120&lt;/a&gt; IR
      Sensors mounted on the turret 
   &lt;li&gt;
      2 &lt;a href="http://www.parallax.com/detail.asp?product_id=28015"&gt;Ultrasonic sensors&lt;/a&gt; one
      mounted on the turret and another mounted on a servo to allow panning at the rear
      of the robot 
   &lt;li&gt;
      Speech via &lt;a href="http://www.acroname.com/robotics/parts/R184-SP03.html"&gt;Daventech
      SP03 &lt;/a&gt;Text to Speech Synthesizer on the I2C bus 
   &lt;li&gt;
      &lt;a href="http://www.roboticsconnection.com/pc-59-4-cmps03-electronic-compass.aspx"&gt;CMPS03&lt;/a&gt; Daventech
      Compass 
   &lt;li&gt;
      Optical &lt;a href="http://www.roboticsconnection.com/pc-40-4-optical-encoder-modules-disks.aspx"&gt;Wheel
      Encoders&lt;/a&gt; 
   &lt;li&gt;
      &lt;a href="http://www.solutions-cubed.com/solutions%20cubed/MMB2003.htm"&gt;MotorMindB&lt;/a&gt; DC
      Motor Speed Controller 
   &lt;li&gt;
      2 laser pointers mounted on the turret for range detection (this will be a great post
      once I work out the details) 
   &lt;li&gt;
      GrandTec &lt;a href="http://www.grandtec.com/rfcmos.htm"&gt;Wireless Web Cam&lt;/a&gt; mounted
      on the turret 
   &lt;li&gt;
      2 x MC24LC256 256K I2C Serial CMOS EEPROM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;strong&gt;Software&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Software on robot written in Java 
   &lt;li&gt;
      Simple &amp;lt;STX&amp;gt;&amp;lt;ETX&amp;gt; communications protocol with Device Type, Device ID,
      Device Action and Payload along with a Check Sum communicating from the robot to a
      C# application via BlueTooth 
   &lt;li&gt;
      Although the first version of the controller application is a C# Win Forms application
      the Communications&amp;nbsp;Library is setup to create &lt;a href="http://msdn.microsoft.com/robotics/"&gt;Microsoft
      Robotics Studio&lt;/a&gt; Services (when time permits) 
   &lt;li&gt;
      The following features are controlled via the existing console 
      &lt;ul&gt;
         &lt;li&gt;
            Motion Detection Algorithm on Web Cam Input 
         &lt;li&gt;
            Drawing heading on web cam input 
         &lt;li&gt;
            White half moon displays ranges from three IR Sensors on turret 
         &lt;li&gt;
            Turret Pan &amp;amp; Tilt controlled via sliders 
         &lt;li&gt;
            RGB Display used for turning laser detection algorithm (range finding) 
         &lt;li&gt;
            Motor Controls via slider 
         &lt;li&gt;
            Speech Control&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/NiVek Console.PNG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   There just aren't enough hours in the day to do all this fun stuff!
&lt;/p&gt;
&lt;p&gt;
   - ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=a0e74f09-a914-4d7a-97b2-22c54821de4a" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,a0e74f09-a914-4d7a-97b2-22c54821de4a.aspx</comments>
      <category>Robotics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=7c22b9fa-afa2-47ff-aed4-634a3a443eec</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,7c22b9fa-afa2-47ff-aed4-634a3a443eec.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,7c22b9fa-afa2-47ff-aed4-634a3a443eec.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7c22b9fa-afa2-47ff-aed4-634a3a443eec</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <font size="4">Microsoft Robotics Studio - Very KEWL!</font>
          </strong>
        </p>
        <p>
      This weekend I'm working at the "beach-house" (well our 28ft travel trailer parked
      at a <a href="http://www.redcoconut.com/">campground</a> right one the Gulf at Fort
      Myers Beach).  Since I've got most of my work deliverables caught up (I hate
      saying that since I know I'll jinx myself), this weekend I wanted to play a little. 
      From about 1991 to 1995 my job was to design hardware then write the software
      that ran on it to make the lights come up in the right order (well maybe make it do
      a little more than that).  I really loved this but since about 1995, I've been
      focused mainly on business applications...really a different world.  About once
      a year I try to spend a few days doing something hardware related so those brain cells
      don't totally die off.  A few years ago it was hacking an X-Box, then the last
      couple years it was working on W3, my home-brew robot based upon the BasicStamp chip
      that contained Sonar, Compass, X-10 Camera and an interface via WiFi on an old
      iPaq, this was a lot of fun but most of the effort here was actually constructing
      the hardware and writing the device interfaces.
   </p>
        <p>
      That brings me to this years effort and <a href="http://www.medc2006.com/">MDEC</a> (incredibly
      good conference) earlier this year I was introduced to the MS Microframework, they
      had a "Sumobot" competition, unfortunately at the time I was doing the conference
      in the day and "work-stuff" at night so I didn't get involved.  After browsing
      the MSDN site last week, I came across the <a href="http://msdn.microsoft.com/robotics">Microsoft
      Robotics Studio</a>, then saw that it supported the new <a href="http://mindstorms.lego.com/">Lego
      NXT </a>robotics system...I had to have one of these.  It arrived on my doorstep
      Thursday and I was set for my weekend in Fort Myers Beach.  I spent Saturday
      "playing" with lego's and built up the robot you can see between my two monitors.
   </p>
        <p>
          <img src="http://www.efficientcoder.net/content/binary/WorkStation.JPG" border="0" />
        </p>
        <p>
      Next was to get it talking to the computer, this was actually pretty easy since the
      NXT has built in Bluetooth and the communications "stuff" happened in the plumbing
      of the MS Robotics Studio.  My prior solution was to hookup an RS232 serial port
      between my BasicStamp chip to the inputs on an iPAQ, then I used the WiFi card in
      the sleeve to do some lo-level socket stuff to talk to the desktop app.  This
      is much cleaner!
   </p>
        <p>
      So now all the pieces are in place, I've got the robot setup, I've got communications
      up and running, now it's time to make it do something!  We have three little
      terriers in our trailer that don't like being left alone.  My goal is to
      hookup the sound detector on the robot to fire off an SMS message to my cell phone
      when the dogs start barking (so we don't get kicked out of anymore RV parks). 
      Then I want to allow some sort of PocketIE interface to manipulate the robot to take
      "correct actions", I think I should be able to hookup my software to my MCE that is
      in the trailer, then with some Text-to-Speech stuff, issue the "No-Bark" command to
      the pups and see how that works.  There is also a small wireless web cam I plan
      to get for this...I think that would be extremely interesting
   </p>
        <p>
      -ec
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=7c22b9fa-afa2-47ff-aed4-634a3a443eec" />
      </body>
      <title>Microsoft Robotics Studio</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,7c22b9fa-afa2-47ff-aed4-634a3a443eec.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,7c22b9fa-afa2-47ff-aed4-634a3a443eec.aspx</link>
      <pubDate>Sun, 03 Dec 2006 16:03:50 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;strong&gt;&lt;font size=4&gt;Microsoft Robotics Studio - Very KEWL!&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   This weekend I'm working at the "beach-house" (well our 28ft travel trailer parked
   at a &lt;a href="http://www.redcoconut.com/"&gt;campground&lt;/a&gt; right one the Gulf at Fort
   Myers Beach).&amp;nbsp; Since I've got most of my work deliverables caught up (I hate
   saying that since I know I'll jinx myself), this weekend I wanted to play a little.&amp;nbsp;
   From about 1991 to 1995&amp;nbsp;my job was to design hardware then write the software
   that ran on it to make the lights come up in the right order (well maybe make it do
   a little more than that).&amp;nbsp; I really loved this but since about 1995, I've been
   focused mainly on business applications...really a different world.&amp;nbsp; About once
   a year I try to spend a few days doing something hardware related so those brain cells
   don't totally die off.&amp;nbsp; A few years ago it was hacking an X-Box, then the last
   couple years it was working on W3, my home-brew robot based upon the BasicStamp chip
   that contained Sonar,&amp;nbsp;Compass, X-10 Camera and an interface via WiFi on an old
   iPaq, this was a lot of fun but most of the effort here was actually constructing
   the hardware and writing the device interfaces.
&lt;/p&gt;
&lt;p&gt;
   That brings me to this years effort and &lt;a href="http://www.medc2006.com/"&gt;MDEC&lt;/a&gt; (incredibly
   good conference) earlier this year I was introduced to the MS Microframework, they
   had a "Sumobot" competition, unfortunately at the time I was doing the conference
   in the day and "work-stuff" at night so I didn't get involved.&amp;nbsp; After browsing
   the MSDN site last week, I came across the &lt;a href="http://msdn.microsoft.com/robotics"&gt;Microsoft
   Robotics Studio&lt;/a&gt;, then saw that it supported the new &lt;a href="http://mindstorms.lego.com/"&gt;Lego
   NXT &lt;/a&gt;robotics system...I had to have one of these.&amp;nbsp; It arrived on my doorstep
   Thursday and I was set for my weekend in Fort Myers Beach.&amp;nbsp; I spent Saturday
   "playing" with lego's and built up the robot you can see between my two monitors.
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.efficientcoder.net/content/binary/WorkStation.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   Next was to get it talking to the computer, this was actually pretty easy since the
   NXT has built in Bluetooth and the communications "stuff" happened in the plumbing
   of the MS Robotics Studio.&amp;nbsp; My prior solution was to hookup an RS232 serial port
   between my BasicStamp chip to the inputs on an iPAQ, then I used the WiFi card in
   the sleeve to do some lo-level socket stuff to talk to the desktop app.&amp;nbsp; This
   is much cleaner!
&lt;/p&gt;
&lt;p&gt;
   So now all the pieces are in place, I've got the robot setup, I've got communications
   up and running, now it's time to make it do something!&amp;nbsp; We have three little
   terriers in our trailer that don't like being left alone.&amp;nbsp;&amp;nbsp;My goal is to
   hookup the sound detector on the robot to fire off an SMS message to&amp;nbsp;my cell&amp;nbsp;phone
   when the dogs start barking (so we don't get kicked out of anymore RV parks).&amp;nbsp;
   Then I want to allow some sort of PocketIE interface to manipulate the robot to take
   "correct actions", I think I should be able to hookup my software to my MCE that is
   in the trailer, then with some Text-to-Speech stuff, issue the "No-Bark" command to
   the pups and see how that works.&amp;nbsp; There is also a small wireless web cam I plan
   to get for this...I think that would be extremely interesting
&lt;/p&gt;
&lt;p&gt;
   -ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=7c22b9fa-afa2-47ff-aed4-634a3a443eec" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,7c22b9fa-afa2-47ff-aed4-634a3a443eec.aspx</comments>
      <category>Robotics</category>
    </item>
  </channel>
</rss>