<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>microsoft-robotics-studio &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/microsoft-robotics-studio/</link>
	<description>Feed of posts on WordPress.com tagged "microsoft-robotics-studio"</description>
	<pubDate>Mon, 13 Oct 2008 08:07:14 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Microsoft Technology Summit 2008 - Day 2]]></title>
<link>http://jimbreen.wordpress.com/?p=9</link>
<pubDate>Tue, 09 Sep 2008 12:49:41 +0000</pubDate>
<dc:creator>jimbreen</dc:creator>
<guid>http://jimbreen.net/2008/09/09/microsoft-technology-summit-2008-day-2/</guid>
<description><![CDATA[These dated notes went missing for a while, but have been recovered.  Although their relevance is g]]></description>
<content:encoded><![CDATA[<p><em>These dated notes went missing for a while, but have been recovered.  Although their relevance is greatly diminished, I'm posting them anyway for anyone trying to find out what MTS is about.</em></p>
<p><em>This is my second post on the Microsoft Technology Summit which I attended on Microsoft's Redmond campus.  This post is a summary of the Day 2 sessions.  My post about Day 1 can be found <a href="http://jimbreen.net/2008/04/08/microsoft-technology-summit-2008-day-1/" target="_self">here</a>.  MTS is a conference of technologists and bloggers invited by Microsoft to hear updates about various Microsoft products and initiatives and to provide feedback. Most of the attendees are experts in technologies and communities that aren't closely, if at all, associated with Microsoft.  Full disclosure: Microsoft paid for my travel, lodging and food during the summit.</em></p>
<p><strong>Microsoft Open Source Software Lab</strong><br />
Annandeep Pannu, Senior Program Manager for Platform Strategy, gave an introduction to the Microsoft OSS Lab.  The lab's mission is to foster mutual respect and understanding between MS and OS community such that both act responsibly toward each other.</p>
<p>Recent projects the lab has completed include:<br />
- Windows Media Player 11 Firefox interop<br />
- Silverlight/Moonlight firefox interop<br />
- SQL Server drivers Java/PHP interop<br />
- FastCGI Java/PHP/Python interop<br />
- Firefox on Vista<br />
- SAMBA interop with file and print services</p>
<p>Current projects include:<br />
- Hyper-V Linux interop<br />
- WS-Man compliance tool (system management)<br />
- PHP Pear/ADOB Abstraction (PHP interop)<br />
- ASF Technology Transfer (Apache interop)<br />
- cardspace relying party (Java/PHP/Ruby/C interop)<br />
- HPC Linux/Windows environment (identity integration, file server integration, resource manager interop)</p>
<p>In answer to an attendee's question, Pannu stated that Microsoft has no plans to port Office apps to Linux.  It is a fundamental belief of the lab that Windows is the best OS.  As such, their efforts will always be focused on letting other systems integrate with Windows, not porting Windows applications to other systems.</p>
<p><strong>IIS7 Product Overview</strong><br />
<a title="Bill Staples' blog" href="http://jimbreen.net/2008/04/08/microsoft-technology-summit-2008-day-1/" target="_self">Bill Staples</a>, Principle Product Unit Manager of the IIS Product Division, went into a lot of detail on the new version of Microsoft's web server, IIS7.</p>
<p>He was one of the few presenters that didn't reuse their presentation from the MIX08 conference, instead opting to just demo the product.</p>
<p>Microsoft has been working on IIS7 for five years.  They decided that every IIS7 feature must be built on public APIs in order to have as little of the server built into the kernel.  I'm sure this was motivated by security concerns; the less server code running in the kernel, the fewer potential exploits that would provide kernel access.  To accomplish this, they added a slim request/response API with an extensibility model. All other features are modules that can be added/removed as needed, a la Apache."  Also borrowing from Apache, the "configuration repository"  for the server is an XML file.</p>
<p>IIS7 is clearly a huge improvement over IIS6, but Staple's audience grilled him on why they should be excited about this stuff considering Apache has done all of it for a long time.  Staples commented that Apache/Linux is a great solution and that now developers have a similarly modular option on Windows.  Apparently the company position is that Apache doesn't run on Windows!  IIS7 only runs on Vista and Windows Server 2008.</p>
<p>One differentiator is the GUI admin tool that is built on top of the XML configuration file.  It's pretty much what you'd expect from a Windows management interface.  All of the configuration can also be done from the command line apparently.  Site specific IIS config can be controlled via an XML web.config file located in the site's root directory.</p>
<p>As a demo, Staples created a Wordpress blog and served it with IIS and the FastCGI module.</p>
<p>Output caching allows dynamic content to be cached for period of time (eg 30 secs).  Staples showed how this dramatically improved IIS/FastCGI/Wordpress performance.</p>
<p>By default, sites run in separate processes.  IIS7 will eventually include a new URL rewriting feature which has not yet been publicly released.</p>
<p>IIS7 does include a cool feature called Bandwidth Throttling.  A site can be configured to respond to a request for certain media types with a temporary burst of very high bandwidth for a few seconds, then continue with bandwidth throttled at a percentage (better be &#62;= 100) of the media file bitrate so that the downloading stays just ahead of the media player.  The point is to save bandwidth in the situations where a user only watches the first few seconds of a media clip by avoiding serving the entire clip during that time.  In the event of a network interruption, IIS increases bandwidth allocation.  Does Apache have this capability?</p>
<p>So IIS7 looks great compared to IIS6, and developers and sysadmins who have no choice but to use the Microsoft stack should be excited about it.  Those who use Apache probably don't have any new motivation to switch, with the possible exception of the bandwidth throttling feature.</p>
<p><strong>The Microsoft Local Software Economy</strong><br />
John Fernandes, Director of International Business Development discussed Microsoft efforts to foster healthy local software economies in international communities.  Local governments have asked Microsoft what they can do to help with the local economies, and this program is the eventual answer.</p>
<p>Local Software Economy Initiative<br />
-builds self-sustaining ecosystems though local partnerships in 70+ countries<br />
-helps governments drive prosperity<br />
-grows competencies of local IT community<br />
-creates new businesses<br />
-focuses on students academics, government, ISVs and startups<br />
-drives long term growth opportunity for partners &#38; MS</p>
<p>Local software Economy Programs<br />
-skills &#38; capacity building<br />
-foster innovation &#38; ICT growth<br />
-enable ICT competitiveness</p>
<p>Microsoft Innovation Centers<br />
- provide environment for innovation<br />
- operated with government, university, industry organizations - not on a MS campus<br />
- 110 MICs in 60+ countries</p>
<p>Fernandes was asked bluntly if Microsoft's goal in running the innovation centers was to train developers who are dependent on Microsoft technology, or to build a general local software economy that would payoff over the long term.  In other words, are they creating customers now or a market later?  Fernandes said it was the latter.</p>
<p>He took some flak for this from an attendee who said she has been in the training centers and there is nothing being taught except Microsoft products.  On one hand I think it's unrealistic to criticize Microsoft for donating and teaching their own technology.  What do you expect?  Linux classes?  On the other hand, maybe a conflict of interest is too inherent in the Microsoft-only program, and a better way to work towards the stated goal of long term health of the local software economies would be to donate resources to or co-found a non-profit.</p>
<p><strong>IE8 Product overview</strong><br />
<a title="Chris Wilson's blog" href="http://blogs.msdn.com/ie" target="_self">Chris Wilson</a>, Internet Explorer Platform Architect talked about the major changes in IE8.  He first discussed the different consumers of the product, users and developers, and how these groups have different priorities.</p>
<p>Users want predictability, productivity, and power, while developers want productivity, power, and predictability, but those concepts mean different things to each group.</p>
<p>For users, predictability means security, compatibility, and reliability.  New IE8 features to address these needs include:<br />
-the site domain name is highlighted in address bar separately from rest of the URL<br />
-the Manage Add-Ons experience has been improved<br />
-ActiveX components can be installed per-user and per-site without admin rights<br />
-DEP/NX code execution prevention<br />
-users' sites and apps work in new browser version</p>
<p>Two new big features increase user productivity.  Activities provide a framework for plugins that can do something with data on a web page.  An example would be obtaining a map for an address selected on a page.  Activities are available via right-click and have a category, such as "Map", that supports hierarchical navigation through the right-click menu.  Activities are defined with the OpenService format.</p>
<p>WebSlices allow a user to subscribe to a specific piece of content on a site.  the WebSlice format is based on hAtom, but extends it.  WebSlices support dynamic content while hAtom only supports static content.  WebSlice subscriptions get added to the Feeds platform.</p>
<p>Predictability for developers has conflicting definitions.  Should IE8 behave like the standard or like IE7?  Of course, this is a quandary of Microsoft's own making by not supporting the standards as they emerged.  Microsoft considered having sites opt into IE8's standards support, but they thankfully went the other way.  Instead, IE8 will default rendering according to the standards.  Sites that don't render correctly in the standards mode can add a &#60;meta&#62; tag directing IE8 to render in IE7 mode.  This will allow them to make a small change to support IE8 if their site doesn't look right by default, and then convert their site to standard HTML and CSS on their own schedule.  Users will also have an option to switch to IE7 mode for sites that don't add the meta tag or convert to standards.  When in standards mode, IE8 now passes the ACID2 test.</p>
<p>IE8 also has a new layout engine with the goal of providing developers with predictable layout.  This layout engine has an improved typographic foundation and benefits from having CSS2.1 in hand while being designed - one of the problems with the prior engine.  This clean start is the end of hasLayout.</p>
<p>A few changes are intended to improve performance.  The parallel connection limit is increased from two to six unless the user is on a modem.  Also, there are javascript improvements and the pre-parser doesn't block at script tags.</p>
<p>Finally, there are some improvements to increase developer productivity including better support for web history in Ajax applications, a debugger, a CSS selector API, and HTML 5 storage.</p>
<p><strong>Dynamic Languages @ Microsoft<br />
</strong>John Lam, Senior Program Manager for Visual Studio Managed Languages discussed the Dynamic Language Runtime.  In response to his own rhetorical question asking why Microsoft would support dynamic and open source languages on the .NET runtime, he listed the following reasons:<br />
- increased opportunity to get Microsoft technology used<br />
- clear trend to build stuff on OSS<br />
- developers want freedom to create stuff<br />
- developers want freedom to see the source code</p>
<p>The Microsoft Permissive License got changed to Microsoft Public License(MSPL), and got OSI approval.</p>
<p>The Dynamic Language Runtime(DLR) was refactored from the IronPython implementation. Common code and services that were needed for dynamic languages was extracted into a reusable framework.</p>
<p>Because the DLR is distributed as MSPL, anyone can port to other platforms.  So assemblies can run on Mono without changes.</p>
<p>Microsoft is hoping to have Rails running on the DLR by RailsConf 08.  John demoed Django today, but acknowledged having to make a few changes to the Django source to do so.  He also admitted that both IronRuby and IronPython have performance issues right now.</p>
<p><strong>Microsoft Robotics Studio</strong><br />
Tandy Trower and George Chrysanthakopoulos of R&#38;D Advanced Strategies presented on Microsoft's robotics development tools, which include a general concurrency and distributed services solution.  Robotics Studio is a development platform for the robotics community supporting a wide variety of users, hardware, and application scenarios.  The tool is free for non-commercial use and $399 for commercial use.</p>
<p>The tool and technology looked cool, but it was the end of a second long day and I'm not a robotics guy so I don't have much to say about it.  In summary, robots are big, big, big, and Microsoft has an IDE and simulation environment to develop and test robotic control.  If you are into such stuff, it definitely looked like it's worth checking out.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Innovation in Robotics: Government Uses?]]></title>
<link>http://lewisshepherd.wordpress.com/?p=248</link>
<pubDate>Tue, 01 Jul 2008 16:03:07 +0000</pubDate>
<dc:creator>lewisshepherd</dc:creator>
<guid>http://lewisshepherd.fr.wordpress.com/2008/07/01/innovation-in-robotics-government-uses/</guid>
<description><![CDATA[Fact: Last week&#8217;s Automatica 2008, the big international robotics and automation trade-show, h]]></description>
<content:encoded><![CDATA[<p><strong>Fact: Last week's </strong><a href="http://www.automatica-muenchen.de/" target="_blank"><strong>Automatica 2008</strong></a><strong>, the big international robotics and automation trade-show, had "over 30,000 trade visitors from around 90 countries," visiting 900 exhibitors' booths, according to the conference wrap-up</strong>. </p>
<p><strong>Analysis:</strong> When I <a href="http://lewisshepherd.wordpress.com/2008/05/02/iarpa-and-the-virtual-long-tail/" target="_blank">spoke recently at an IARPA conference</a> in Orlando, and was asked to give a glimpse into Microsoft's vision of R&#38;D trends, one of the possibly surprising areas I highlighted was robotics.  We're making a major push in that area, for reasons that might not be intuitive based on an old-fashioned impression of what Microsoft offers in the government realm.  More on the intelligence community's potential use below.</p>
<p><!--more-->If you missed Automatica this year, as I did, tough luck - it's only held every two years, so we'll have to wait until June 2010.  The trade-show combines old-school automation and new-wave robotics: "assembly and handling technology, robotics, machine vision and associated technologies, [in] the very first international event that brings together all branches of the robotics and automation industry under the same roof in a single event," according to the agenda.  And the EU took the occasion to <a href="http://europa.eu/rapid/pressReleasesAction.do?reference=IP/08/910&#38;format=HTML&#38;aged=0&#38;language=EN&#38;guiLanguage=en" target="_blank">announce a new policy to boost European robotics</a>, doubling official EU investments between 2007 and 2010 with almost €400 million to support European robotics research.  The EU plans to foster stronger links between academia and industry, and will fund "widespread experimentation by academic researchers and industry."</p>
<p>The reality is, though, robotics advance is driven less by government top-down investment, and more by the ROI recognized by industry. An <em>Economist</em> article last week ("<a href="http://www.economist.com/business/displaystory.cfm?story_id=11575170&#38;CFID=11531133&#38;CFTOKEN=15598312" target="_blank">Nothing to Lose but Their Chains</a>") noted the bottom-line drivers in a report on Automatica:</p>
<blockquote><p>"Robotic blobs, arms and devices that resemble spiders will pave the way.  A lot more of these are coming to work in offices and homes, and some will do more than one thing... Four trends were on show: robots are rapidly becoming <em>more responsive, cheaper, simpler to program, and safer</em>."</p></blockquote>
<p>I'm doubly upset I missed Automatica because the event was in Munich this year, one of my favorite cities, which is apparently a central hub of Europe's robotics industry.  Microsoft has an R&#38;D center in Germany and if I had known earlier about Automatica I probably could have contrived a trip to cover it.</p>
<p>Microsoft was not an exhibitor at Automatica this year, but that may change in the next go-round. The change is best described by none other than Bill Gates himself, who wrote the cover story in <em>Scientific American's</em> December 2006 issue ("<a href="http://www.sciam.com/article.cfm?id=a-robot-in-every-home" target="_blank">A Robot in Every Home: The leader of the PC revolution predicts that the next hot field will be robotics</a>").  He described the state of play then: "The challenges facing the robotics industry are similar to those we tackled in computing three decades ago. Robotics companies have no standard operating software that could allow popular application programs to run in a variety of devices. The standardization of robotic processors and other hardware is limited, and very little of the programming code used in one machine can be applied to another. Whenever somebody wants to build a new robot, they usually have to start from square one."</p>
<p>We've begun to address those challenges: <a href="http://msdn.microsoft.com/en-us/robotics/default.aspx" target="_blank">check here</a> for the latest release of free <img class="alignleft" style="border:0;" src="http://www.silicon.com/i/s4/illo/photos/2008/June/gates.jpg" border="0" alt="Bill Gates at Microsoft TechEd 2008, with robot version of CEO Steve Ballmer" width="360" height="288" />downloads of Microsoft Robotics Studio (MSRS), and a more robust Microsoft Robotics Developer Studio 2008, software development kits which simplify the creation of robotic applications using a wide range of programming languages (amateur to complex).  The SDK includes the Visual Simulation Environment, a cool simulation tool that lets robot builders test their applications in a 3D virtual environment before trying them out in the real world.  There are <a href="http://msdn.microsoft.com/en-us/library/bb483048.aspx" target="_blank">great tutorials and lots of information</a> to spark robotics innovation.</p>
<p><strong><em>Adoption of Robotics Platforms</em></strong></p>
<p>Gates described the goal with these SDK's as a parallel to what Microsoft did in its earliest years with BASIC and MS-DOS: "to create an affordable, open platform that allows robot developers to readily integrate hardware and software into their designs."  You can check out Bill's enthusiasm for MSRS in a <a href="http://www.sciam.com/article.cfm?id=ces-special-a-chat-with-bill-gates" target="_blank"><span style="color:#0aa1dd;">Q&#38;A session</span></a>, <a href="http://www.sciam.com/podcast/episode.cfm?id=2C132E30-027A-22D8-FD80085D19858DC9" target="_blank"><span style="color:#0aa1dd;">podcast</span></a> and <a href="http://www.sciam.com/article.cfm?id=video-ces-sciam-sits-down" target="_blank"><span style="color:#0aa1dd;">video interview</span></a><em> </em>with <em>Scientific American Online</em> earlier this year.</p>
<p>There's been some controversy. Gregory Dudek is a prominent blogger on robotics, and professor at the McGill Research Center for Intelligent Machines; he and some others greeted the introduction of the MSRS skeptically at first in 2007, worrying (wrongly) that it would drive out independent platforms and efforts.  <a href="http://www.dudek.org/blog//51" target="_blank">See here for a very interesting early post</a>, and note in the comments that Microsoft's Tandy Trower (daddy of MSRS) responds with some thoughtful input.  Well, Dudek seems to have come around <a href="http://www.dudek.org/blog//128" target="_blank">and is now actively using MSRS for his own projects</a> on underwater and walking robot systems, winning a Microsoft Human Robot Interaction Award in the process for his Aqua robotic vehicle.</p>
<p>There's a lot of commercial activity using this new platform, with uses as diverse as MySpace (network modeling simulation) and Tyco (facility access modeling). But my Institute is interested in government use (see <a href="http://www.informationweek.com/news/software/systems_management/showArticle.jhtml?articleID=208402125&#38;subSection=All+Stories" target="_blank">Information Week story here</a>). </p>
<p>Right off the bat, as far as the government &#38; public sector goes, there's obvious utility in the education space.  Microsoft Research is a sponsor of the Institute for Personal Robots in Education (IPRE), which applies and evaluates robots as a context for computer science education, a joint effort between the Georgia Tech and Bryn Mawr College's Computer Science Department.  (Their blog had <a href="http://blog.roboteducation.org/node/12" target="_blank">a great compilation of reaction</a> to the Gates article.)  Microsoft also works with education efforts like the <a href="http://asunews.asu.edu/20080624_roboticscamp" target="_blank">Arizona State Robotics Camp</a> for high school students.</p>
<p>Microsoft is also <a href="http://robotics.tmcnet.com/topics/robotics/articles/30026-microsoft-backed-robotics-project-facilitate-disaster-response.htm" target="_blank">sponsoring work on disaster response</a> with the University of Massachusetts Robotics Lab.  And there's tremendous public-sector use for robotics in health-care: check out the enGadget <a href="http://www.engadget.com/2008/05/28/robosoft-shows-off-microsoft-robotics-studio-based-service-robot/" target="_blank">video of French robotics company Robosoft's newest service robot</a> designed to help the elderly and disabled, a "24-hour monitoring bot, including daily reminders, remote teleconferencing abilities, scaring off of house pets, and alerts if the patient falls or is in trouble."  It was designed virtually in MSRS and uses the software for control.</p>
<p><strong><em>Intelligence Analysts and Robotics</em></strong></p>
<p>When I spoke to IARPA's "Incisive Analysis" conference in May, the focus was on better technologies for analyst use.  For example, MSRS allows the use of simulated hardware, physical entities, and included 3D terrain, so the robotics problem space is actually quite relevant to many problems in "an intelligent Intelligence Enterprise." Both at their core are about services and orchestrations. Both share the need to be able to scale both up and down. Robotics simulation allows easy scenarios that would otherwise be difficult or impossible to provide to a broad audience, e.g.:</p>
<ul>
<li>a geosynchronous orbit-plane populated by multiple vehicles;</li>
<li>a city destroyed by a nuclear device or earthquake;</li>
<li>any indoor facility populated by robotic avatars.</li>
</ul>
<p>I also pointed out to the IARPA conference that, as a commercial and user-friendly parallel to the famous <a href="http://www.darpa.mil/grandchallenge/index.asp" target="_blank">DARPA Grand Challenge Race</a> for real robot vehicles, Microsoft has launched <a id="ctl00_mainContentContainer_ctl03" href="http://www.robochamps.com/" target="_blank"><span style="color:#0033cc;">RoboChamps</span></a>, a cool <em>simulated</em> <em>robotics league</em> open to academics, hobbyists, and developers from around the world. RoboChamps is built on top of Microsoft Robotics Developer Studio 2008 using the  immersive 3D simulation environments, and <a href="http://www.techradar.com/news/world-of-tech/future-tech/first-look-building-virtual-robots-with-microsoft-s-robochamps-381066" target="_blank">the best simulated robot teams can actually win real robots as prizes</a>. It's wild!  An IARPA analogue focusing on analytic uses might be interesting...</p>
<p>If you're interested in wider reading on robotics, for a fairly comprehensive list of resources that will keep you busy for a while check out the <em>Future of Engineering</em> blog's "<a href="http://www.engineeringservicesoutsourcing.com/b/fe/2008/03/future-of-robotics-robots-uses-trends.html" target="_blank">Future of Robotics - Robots Uses, Trends, Applications</a>" from March 2008, highly recommended.   And the IPRE site is a great central resource for links on robotics news and developments.</p>
<p>Oh - and if you're in the DC Beltway area and want to get elbow-deep in this stuff, check out the <a href="http://robotics.meetup.com/77/" target="_blank">Meetup group that's formed for robotics enthusiasts</a>. </p>
<p>This moment in robotics really does have the spark of the very early days in personal computing software; <a href="http://www.truveo.com/The-Rise-of-Silicon-Valley-Part-1/id/151795244" target="_blank">watch this video of those days, with Jobs and Wozniak and Gates and the like</a>, and you'll get the comparison.</p>
<p> <br />
<a href="mailto:?Subject=Interesting%20post%20on%20the%20Shepherds%20Pi%20blog&#38;Body=Thought you might enjoy this, http://lewisshepherd.wordpress.com/2008/07/01/innovation-in-robotics-government-uses/">Email this post to a friend</a></p>
<p><!-- AddThis Bookmark Button BEGIN --><span><a title="Bookmark using any bookmark manager!" href="http://www.addthis.com/bookmark.php" target="_blank"><span style="text-decoration:none;"><img src="http://s9.addthis.com/button1-share.gif" border="0" alt="AddThis Social Bookmark Button" width="125" /></span></a></span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[VPL - Creando Bucles]]></title>
<link>http://jsantillan.wordpress.com/?p=108</link>
<pubDate>Fri, 20 Jun 2008 19:43:17 +0000</pubDate>
<dc:creator>Jeff</dc:creator>
<guid>http://jsantillan.fr.wordpress.com/2008/06/20/vpl-creando-bucles/</guid>
<description><![CDATA[ 
 
Creamos un nuevo proyecto vamos a new en el menú File.
Ahora en arrastramos un bloque de Vari]]></description>
<content:encoded><![CDATA[<p> </p>
<p> </p>
<div><span style="font-size:12px;font-family:arial;">Creamos un nuevo proyecto vamos a new en el menú File.<br />
Ahora en arrastramos un bloque de Variables de la caja de herramientas Basic Activities</span></div>
<p><span style="font-size:12px;font-family:arial;"><img src="http://farm4.static.flickr.com/3131/2596176596_63e20157e6.jpg?v=0" alt="" width="269" height="208" /></p>
<p> </p>
<p>le damos clic en el botón “…”</p>
<p><img src="http://farm4.static.flickr.com/3069/2596176784_fb758e473a.jpg?v=0" alt="" width="281" height="230" /></p>
<p>que se encuentra en este bloque de Variables en la parte inferior y nos mostrara un cuadro Defines Variables en donde ingresaremos en nombre de una variable en mi caso le puse Prueba y nos aseguramos de que el tipo de dato sea un int. </p>
<p><img src="http://farm4.static.flickr.com/3235/2596176242_7de2265a13.jpg?v=0" alt="" width="271" height="302" /><br />
Ahora arrastraremos un bloque de datos (Data) y le ingresamos un valor 1</p>
<p><img src="http://farm4.static.flickr.com/3189/2595342973_3cd74f2b96.jpg?v=0" alt="" width="417" height="173" /></p>
<p>y también nos aseguramos de elegir su tipo de dato en int ahora vincularemos desde el pin de salida de este bloque de datos hasta el de Variable mostrara un cuadro de Connections en donde le daremos en SetValue ahora aceptamos</p>
<p><img src="http://farm4.static.flickr.com/3008/2595342917_cff0cc8e1b.jpg?v=0" alt="" width="436" height="399" /><br />
Añadiremos un bloque Merge a la derecha del bloque de variables y lo conectamos del bloque de variables al Merge, usaremos este bloque para crear el bucle de conteo, un Merge puede tener múltiples entradas y cada entrada es recepcionada.</p>
<p><img src="http://farm4.static.flickr.com/3096/2596176302_53033f866a.jpg?v=0" alt="" width="453" height="121" /><br />
Ahora añadiremos a nuestro diagrama un bloque de IF Activity a la derecha del bloque Merge y conectaremos el pin saliente del Merge al entrante del bloque IF Activity, en esta actividad introduciremos Prueba == 10 esto se encargara de comprobar que la variable entrante sea igual a 10</p>
<p><img src="http://farm4.static.flickr.com/3211/2595342793_2d24abf2f1.jpg?v=0" alt="" width="500" height="115" /></p>
<p> </p>
<p>Añadiremos un bloque de Calculate y lo conectaremos al pin Else saliente del bloque IF , esto sesto significa que si la condición no se cumple ira al bloque calcular en donde tomaremos la variable Prueba y le sumamos un 1 a esta misma variable, para así actualizar esta variable</p>
<p><img src="http://farm4.static.flickr.com/3125/2596176266_52d6f6a407.jpg?v=0" alt="" width="500" height="204" /><br />
Añadiremos otro bloque de Variable para establecer el nuevo valor que tendrá esta variable así que vinculamos el pin saliente del Bloque Calculate al pin entrante del Bloque Variable se mostrara el cuadro y le daremos en SetValue y aceptar,</p>
<p><img src="http://farm4.static.flickr.com/3187/2595342665_2f6d06d973.jpg?v=0" alt="" width="500" height="205" /></p>
<p>ahora conectamos el pin saliente de este Bloque de Variable a el Merge ya que puede recibir múltiples entradas<br />
Bien ahora para probar que la variable Prueba va aumentando su valor en 1 ya que la condición aun no se cumple, añadiremos un Bloque de Servicios en Basic Service buscamos SpeechText y el Bloque de Merge un pin de salida lo conectamos al pin de entrada del Speechtext</p>
<p><img src="http://farm4.static.flickr.com/3099/2595342337_281ef3391c.jpg?v=0" alt="" width="500" height="303" /></p>
<p>nos mostrara una ventana de Connections de damos en SayText y luego seleccionamos la variable que sería Prueba una vez hecho esto añadiremos un Bloque de Data para insertar un texto en el y nos aseguramos de que su tipo de dato sea String y conectamos el pin saliente del Bloque IF al pin entrante del Bloque Data.</p>
<p><img src="http://farm4.static.flickr.com/3029/2595342951_9892f811ac.jpg?v=0" alt="" width="500" height="264" /></p>
<p>Bien ahora añadiremos otro Bloque de SpeechText para que nos diga el texto que escribimos en el Bloque Data enlazamos el Bloque data al SpeechText .</p>
<p><img src="http://farm4.static.flickr.com/3046/2596176698_c9fe27b4b9.jpg?v=0" alt="" width="500" height="272" /></p>
<p>y ahora podremos ejecutar nuestra aplicación con Run en el menú de Edit o F5.</p>
<p> </p>
<p> </p>
<p></span></p>
<p> </p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[VPL - Hola Mundo !]]></title>
<link>http://jsantillan.wordpress.com/?p=41</link>
<pubDate>Thu, 12 Jun 2008 08:31:34 +0000</pubDate>
<dc:creator>Jeff</dc:creator>
<guid>http://jsantillan.fr.wordpress.com/?p=41</guid>
<description><![CDATA[
Este tutorial es la clásica introducción para la mayoría de lenguajes de programación que muest]]></description>
<content:encoded><![CDATA[<div><span style="font-size:12px;font-family:Arial;"><br />
Este tutorial es la clásica introducción para la mayoría de lenguajes de programación que muestra las palabras "Hola Mundo". El uso de Microsoft Visual lenguaje de programación, usted puede hacer esta actividad con dos bloques: un bloque de datos y el simple diálogo de bloque.<br />
Crear un nuevo proyecto seleccionando New del menú Archivo. Ahora insertar (doble clic o arrastrar y soltar) una actividad de Data de las Basic Activities caja de herramientas. Seleccionar String de la lista desplegable. Haga clic en el cuadro de texto del Bloque de datos y el tipo de Hello WorldAhora insertar un Simple Dialog dialogo de actividad arrastrando uno de los servicios de caja de herramientas y colocarla a la derecha del bloque de datos de actividad. (Recuerde que para ahorrar tiempo buscando un servicio, puede escribir el nombre de lo que se está buscando en la parte superior de la caja de herramientas y se presenta ninguna se pongan en venta las actividades.)<br />
Ahora arrastra un vínculo a partir de la salida de la clavija de conexión de los bloques de datos en el simple diálogo de bloque. El cuadro de diálogo de Conexiones se abrirá automáticamente. Seleccione DataValue en la primera lista y AlertDialog en la segunda lista, haga clic en Aceptar.</span></div>
<p><span style="font-size:12px;font-family:Arial;">Las conexiones de datos se abre el cuadro de diálogo. En la lista desplegable, seleccione el valor.</p>
<p>Este VPL dice que desea aplicar el valor de los datos de actividad para el texto del mensaje de alerta para la forma de este cuadro de diálogo.<br />
Su diagrama debe ahora ver como la siguiente.</p>
<p>Ahora selecciona Ejecutar el comando Ejecutar en el menú (o presione F5). Si no ha guardado su proyecto, sin embargo, VPL abre el cuadro de diálogo Guardar. Introduzca un nombre para su proyecto y haga clic en Guardar.</p>
<p>VPL ahora procede a ejecutar su aplicación. Si aparece un mensaje preguntando si para desbloquear la aplicación, seleccione Desbloquear.</p>
<p>Lo que debe ver es un simple aviso aparecerá el cuadro de diálogo con el texto, Hello World, en el mismo.</p>
<div><span style="font-size:12px;font-family:Arial;"><span style="font-size:12px;font-family:Arial;">Para detener su aplicación, haga clic en el botón Stop en el diálogo Ejecutar que muestra VPL.</span></span></div>
<p><span style="font-size:12px;font-family:Arial;"><span style="font-size:12px;font-family:Arial;"> </p>
<p></span></span> </p>
<p></span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[El acceso a un servicio]]></title>
<link>http://jsantillan.wordpress.com/?p=40</link>
<pubDate>Wed, 11 Jun 2008 20:31:25 +0000</pubDate>
<dc:creator>Jeff</dc:creator>
<guid>http://jsantillan.fr.wordpress.com/2008/06/11/el-acceso-a-un-servicio/</guid>
<description><![CDATA[ 
Escribir una aplicación que utiliza Microsoft Robotics Studio es una simple cuestión de orquest]]></description>
<content:encoded><![CDATA[<p> <span style="font-size:12px;font-family:Arial;"><br />
Escribir una aplicación que utiliza Microsoft Robotics Studio es una simple cuestión de orquestar la entrada y la salida entre un conjunto de servicios. Los servicios representan la interfaz del software o hardware y le permiten comunicarse entre los procesos que realizan dichas funciones específicas<br />
Este tutorial enseñara como usar un servicio básico que lee la salida de un sensor de contacto (se refiere a este tutorial como un parachoques) y muestra un mensaje en la ventana de consola. Este tutorial esta previsto usando el Visual Programming Language (VPL) Idioma,</span></p>
<p><span style="font-size:12px;font-family:Arial;"><br />
<strong>Requisitos de Hardware</strong><br />
Se necesita un robot con microcontrolador y un sensor de contacto. Sensores de contacto suelen ser simples mecanismos que envían una señal cuando entre en contacto físico. El sensor también puede ser la distancia de detención de dispositivos (como los sonares o sensores infrarrojos) que proporcionan una señal binaria simple. Conecte el sensor a su robot en el microcontrolador</p>
<p><font face="Arial"><br />
<strong>Software</strong><br />
Microsoft Visual Programming Language y también se necesitara un navegador como Internet Explorer u otro navegador web convencional.</p>
<p></font></span> </p>
<p> </p>
<p> </p>
<div><span style="font-size:12px;font-family:Arial;"><em><strong>Primeros Pasos</strong></em><br />
Abra el Microsoft VPL y crear un nuevo proyecto seleccionando New del menú File</span></div>
<div><span style="font-size:12px;font-family:Arial;"><strong>Paso 1</strong><br />
Ahora arrastra un genérico de sensores de contacto del servicio de la caja de herramientas del Service. La actividad bloque aparece con el nombre de GenericContactSensor</span></div>
<p><span style="font-size:12px;font-family:Arial;">Añadir una actividad de Data arrastrando una de la caja de herramientas Basic Activities, a la derecha del sensor de actividad de servicios. Seleccionar en la lista que es un String e introduzca el texto que guste.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://msdn.microsoft.com/en-us/library/Bb483047.image001(en-us,MSDN.10).jpg" alt="" /></p>
<p><strong>Paso 2 </strong><br />
Conecte el ContacSensor, arrastrando de la ronda de notificación respecto a la actividad ContacSensor, a los datos de actividad.<br />
Si arrastrado desde el punto de conexión correcto, debería ver el cuadro de dialogo de conexión. Elija Update y Create en el cuadro de dialogo de conexiones y haga clic en aceptar.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://msdn.microsoft.com/en-us/library/Bb483047.image002(en-us,MSDN.10).jpg" alt="" /></p>
<p>Esto envía el mensaje de actualización del ContactSensor a la acción Crear los datos de actividad. Si bien los datos de actividad no utilizan los datos procedentes de ContactSensor, usa el mensaje para activar la creación de los datos (“TEXTO”) que ha introducido.</p>
<p><strong>Paso 3</strong><br />
Ahora arrasa un Simple Dialog de la ventana de Service y el dataflow en el lugar derecho del bloque de datos. Conecte las dos actividades. En el cuadro de dialogo las Conexiones se Abren, seleccione Value y AlertDialog a continuación, haga clic en aceptar.<br />
En Data Connections cuadro de dialog, seleccione el Value como valor que se enviara a los destinatarios del mensaje. Esto significa que el texto “TEXTO” se envía el mensaje como texto de la descripción de la forma simple de dialogo</p>
<p style="text-align:center;"><img class="aligncenter" src="http://msdn.microsoft.com/en-us/library/Bb483047.image003(en-us,MSDN.10).jpg" alt="" /></p>
<p><strong>Paso 4</strong><br />
El ContactSensor actividad representa un servicio genérico que se puede aplicar a un contacto de sensores para diferentes robots. Antes de poder ejecutar su solicitud, tiene que decirle VPL sensor que desea utilizar.<br />
Haga clic derecho en el bloque ContactSensor actividad para abrir su contexto emergente. Seleccione el conjunto de comandos de configuración. En el cuadro de dialogo que aparece, en virtud del conjunto de configuración, seleccione utilizar manifiesto. En caso de que no se manifiestan aparece en la lista, seleccione Manifiesto de importación y elija el manifiesto para el sensor que está utilizando, y de clic en aceptar también puede seleccionar un manifiesto de simulación, el manifiesto debe ser seleccionado en la lista desplegable.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://msdn.microsoft.com/en-us/library/Bb483047.image004(en-us,MSDN.10).jpg" alt="" /></p>
<p style="text-align:left;"> </p>
<p style="text-align:center;"><img class="aligncenter" src="http://msdn.microsoft.com/en-us/library/Bb483047.image005(en-us,MSDN.10).jpg" alt="" /></p>
<p style="text-align:center;"> </p>
<p style="text-align:left;"><strong>Paso 5<br />
</strong>Ejecute su aplicación seleccionando e comando Start del menú Run o pulsando F5</p>
<p> </p>
<p></span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[VPL Introducción]]></title>
<link>http://jsantillan.wordpress.com/?p=39</link>
<pubDate>Tue, 10 Jun 2008 05:03:07 +0000</pubDate>
<dc:creator>Jeff</dc:creator>
<guid>http://jsantillan.fr.wordpress.com/2008/06/10/vpl-introduccion/</guid>
<description><![CDATA[
Lenguaje de Programación Visual ( VPL - Visual Programming Language) es un entorno de desarrollo d]]></description>
<content:encoded><![CDATA[<div></div>
<p><span style="font-size:12px;font-family:Arial;">Lenguaje de Programación Visual ( VPL - Visual Programming Language) es un entorno de desarrollo de aplicaciones diseñada sobre una grafica de flujo de datos basado en modelo de programación en lugar de controlar el flujo normalmente se encuentran en la programación convencional, en lugar de imperativas series de comandos ejecutados secuencialmente.<br />
Un flujo de datos se parece a una serie de trabajadores, que están esperando a que lleguen sus materiales para que empiecen a realizar sus tareas asignadas), Como resultado tenemos a VPL el cual se adecua perfectamente a una gran variedad de programación concurrente o de procesamiento distribuidos</p>
<p>VPL Está destinada a los principiantes en la programación los que tienen una compresión básica de conceptos como variables y la lógica.</p>
<p>Los programadores más avanzados pueden hacer uso de sus prototipos y desarrollar código de manera más rápida, además mientras en la caja de herramientas se ajusta al desarrollo de aplicaciones de robot, la arquitectura no se limita a la programación de robots y podría aplicarse a otras aplicaciones también. Como resultado de ello VPL puede apelar a una amplia audiencia de usuarios entre ellos estudiantes, entusiastas y aficionados, así como posiblemente los desarrolladores web y programadores profesionales</p>
<p><img src="http://farm4.static.flickr.com/3014/2570583201_ce4a6df3f0.jpg?v=0" alt="" /></p>
<p>Un flujo de datos consiste en una secuencia conectada de las actividades representadas como bloques con entradas y salidas que se pueden conectar a otros bloques de actividad.</p>
<p><img class="aligncenter" src="http://farm4.static.flickr.com/3113/2571423908_618089f44e.jpg?v=0" alt="" /></p>
<p>Las actividades pueden incluir también las composiciones de otras actividades esto hace posible la reutilización de componentes de actividades y la composición de un edificio en bloque. En este sentido, una aplicación construida en VPL es en sí misma una actividad</p>
<p>Bloques de actividades suelen incluir el nombre de la actividad y las fronteras que representan sus puntos de conexión. Una actividad en Bloque también puede incluir gráficos para ilustrar el propósito de la actividad, así como elementos de interfaz de usuario que pueden permitir que el usuario introduzca los valores, las cesiones, o transformaciones de datos utilizados en una actividad</p>
<p>Las actividades están conectadas a través de su conexión pins, una conexión pin en el lado izquierdo de una actividad que representa el punto de conexión para los mensajes de entrada y el pin del otro lado representa el punto de conexión para la salida de mensajes.</p>
<p>Una actividad recibe mensajes que contengan los datos a través de su conexión de los pines de entrada. Una actividad de los pines de entrada son puntos de conexión a sus funciones predefinidas inferior conocido como acciones o manipuladores (que puede ser o bien como funciones que ofrece un servicio o anidadas de datos corrientes)</p>
<p style="text-align:center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3070/2570583231_cb3d5c4e7c.jpg?v=0" /></p>
<p>Una actividad bloque se activa y procesa los mensajes de datos tan pronto reciba una valida mensaje entrante. Todos Los datos enviados a la actividad es consumida por la actividad. Por los datos que se transmitirá a través de la actividad de producción, recepción de la actividad debe replicar los datos y ponerla en su producción respecto.</p>
<p>Una actividad puede tener múltiples clavijas de conexión de entrada y cada una de ellas con su propio conjunto de patillas de conexión de salida. Patillas de conexión de salida puede ser uno de los tipos: un resultado de salida o una notificación de salida (a veces también a que se refiere como un evento o publicación de salida). Resultados productos se muestran como patillas de conexión rectangular, mientras que los productos de publicación rondan clavijas de conexión</p>
<p style="text-align:center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3180/2570583031_c4b88ed5ca.jpg?v=0" alt="" /></p>
<p>Una respuesta de pines de Salida se utiliza en situaciones en que un mensaje saliente (Datos) es enviada como resultado de una acción específica de mensajes entrantes, Los pines de notificación pueden enviar información resultante de un mensaje entrante, pero más típicamente un mensaje como el de un cambio de su estado interno. También pueden generar mensajes varias veces, mientras que un pin de resultado solo envía un solo mensaje en la recepción de un mensaje entrante. Por lo tanto, los pines de salida de notificación se utilizan para el envió de mensajes de datos sin tener que solicitar en varias ocasiones o encuestas para el estado de una actividad.</p>
<p>Ya puedes empezar a usar el VPL desde Menú Inicio en “Microsoft Robotics Studio”.</p>
<p><span style="font-size:12px;font-family:Arial;"></p>
<div><strong>Herramientas<strong> </strong></strong><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=73092FF6-E37B-45C6-8E5E-C23D5D632B1E&#38;displaylang=en" target="_blank">Microsoft Robotics Visual 1.5</a></p>
<p> </p></div>
<p></span><strong><strong></strong></strong></p>
<p><span style="font-size:12px;font-family:Arial;"><strong><strong><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=73092FF6-E37B-45C6-8E5E-C23D5D632B1E&#38;displaylang=en" target="_blank">Microsoft Robotics Visual 1.5</a></p>
<p> </p>
<p></strong></strong></span></span><strong><strong></strong></strong></p>
<p><strong><strong></strong></strong></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Introducción a Microsoft Robotics Studio]]></title>
<link>http://jsantillan.wordpress.com/?p=28</link>
<pubDate>Mon, 09 Jun 2008 06:42:34 +0000</pubDate>
<dc:creator>Jeff</dc:creator>
<guid>http://jsantillan.fr.wordpress.com/2008/06/09/introduccion-a-microsoft-robotics-studio/</guid>
<description><![CDATA[
 
Microsoft Robotics Studio está basada en Windows paraprofesores, estudiantes ,aficionados y des]]></description>
<content:encoded><![CDATA[<p><span style="font-size:12px;font-family:Arial;"><br />
 <br />
Microsoft Robotics Studio está basada en Windows paraprofesores, estudiantes ,aficionados y desarrolladores comerciantes que permitira crear Aplicaciones roboticas para distintas plataformas de hardware.<br />
Microsoft robotics Studio incluye una ligero REST-Style, que está orientado al servicio en tiempo de ejecución. Los que no son programadores o tiene una nocion bsica de lo que es la programación podrán crear sus aplicaciones de robot utilizando un ambiente de desarrollo visual, que nos permite a cualquier persona crear nuestra aplicación y depurarlas de manera muy sencilla, ya que solo se tiene que arrastras y soltar los bloques que representan los servicios, y conectarlos. Incluso se puede tener una colección de bloques conectados y podremos reutilizarlo en otro bloque del programa.</p>
<p><img src="http://farm4.static.flickr.com/3049/2571335500_90632ca398.jpg?v=0" /></p>
<p><strong>Simulando Aplicaciones de la robótica en 3D basado en la física de los entornos virtuales</strong></p>
<p>Para poder simular nuestra aplicación de Robot podremos utilizar modelos en 3D muy realistas, en Microsoft Robotics Studio incluye una herramienta de simulación llamada Ageia PhysX tecnología que pertenece a AGEIA Technologies Inc, es una empresa pionera en Aceleramiento del Hardware Físico, permitiendo así la simulación de nuestro Modelo de Robot como estuviese en un mundo real.</p>
<p style="text-align:center;"><img src="http://farm4.static.flickr.com/3170/2571334866_62c7af94e2.jpg?v=0" alt="" /></p>
<p> </p>
<p style="text-align:center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3277/2571334524_3fc74b4719.jpg?v=0" alt="" /></p>
<p><strong>Interactuar con el robot que en una Aplicacion Windows de Escritorio o una interfaz Web</strong></p>
<p>Podremos crear aplicaciones nos permiten supervisar o controlar un robot de forma remota utilizando un navegador web y enviarle comandos usando las tecnologías Web existentes, tales como los formularios HTML y JavaScript; montándole cámaras a los robots y de esta manera controlar su ubicación remotamente.</p>
<p><strong>REST-Style Los servicios orientados al tiempo de ejecución</strong></p>
<p><strong>Haciendo programación asíncrona simple</strong><br />
La concurrencia en tiempo de ejecución y la coordinación que se denomina (CCR Concurrencia and Coordination Runtime), hace que sea fácil de escribir programas para manejar de forma asíncrona la entrada de múltiples sensores en la robótica y la producción de motores y actuadores.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3159/2571333688_8b06f2e315.jpg?v=0" alt="" /></p>
<p><strong>Seguimiento en tiempo real del robot con sensores de respuesta a los motores y actuadores</strong></p>
<p>La descentralización de servicios de software (DSS Decentralized Software Services), modelo de aplicación hace que sea fácil el acceso y nuestra respuesta al poder ver el estado en que se encuentra el robot, utilizando un navegador Web o una aplicación Windows.</p>
<p><strong>Plataforma Escalable y extensible</strong></p>
<p>El Microsoft Robotics Studio su modelo de programación puede ser aplicado a una variedad de plataformas de hardware del robot, lo que nos permite a los usuarios transferir sus conocimientos a través de Múltiples plataformas, las interfaces de programación para el robot pueden ser desarrolladas en un procesador de 8, 16, o 32 bits, ya sea solo o de varios núcleos</p>
<p><strong>Desarrollar utilizando una gran variedad de lenguajes de programación</strong></p>
<p>Con Microsoft Robotics Studio, las aplicaciones de robótica se pueden desarrollar utilizando una selección de lenguajes de programación, incluidos los de Microsoft Visual Studio y Microsoft Visual Studio Express sea (C # y VB.NET), así como lenguajes de scripting como Microsoft Iron Python.</p>
<p><strong>Extender la funcionalidad de Microsoft Robotics fácilmente</strong></p>
<p>Terceros pueden ampliar la funcionalidad de Microsoft Robotics Studio mediante suministros de bibliotecas y servicios. Hardware o proveedores de software pueden hacer sus productos compatibles fácilmente con Microsoft Robotics Studio</p>
<p><strong>Soportado tanto Remotamente como conectado a la PC</strong></p>
<p><span style="font-size:12px;font-family:Arial;">Esta permitido que un robot se comunique con la PC mediante un puerto serial, o por BlueTooth 802,11 o por los programas que se pueden ejecutar nativamente en un PC basado en robots que ejecute Microsoft Windows, lo que le permite un funcionamiento totalmente autónomo</p>
<p></span></span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Phidgets Robotics Programming in C#]]></title>
<link>http://dvanderboom.wordpress.com/2008/04/21/phidgets-robotics-programming-in-c/</link>
<pubDate>Tue, 22 Apr 2008 02:51:26 +0000</pubDate>
<dc:creator>Dan Vanderboom</dc:creator>
<guid>http://dvanderboom.fr.wordpress.com/2008/04/21/phidgets-robotics-programming-in-c/</guid>
<description><![CDATA[Bridgeware is the word you need to know for rapidly prototyping electronics and robotics.&nbsp; Thes]]></description>
<content:encoded><![CDATA[<p><strong>Bridgeware</strong> is the word you need to know for rapidly prototyping electronics and robotics.&#160; These components bridge programs running on computers with electronic components such as sensors and motors.&#160; There's a <a href="http://www.youtube.com/watch?v=E_gto3YIpT0">good video</a> about it by Trossen Robotics on You Tube.&#160; I bought my components from <a href="http://www.trossenrobotics.com/Phidgets.aspx">Trossen Robotics</a> online and I recommend them (they have a number of how-to videos).</p>
<h3>Day 1</h3>
<p>I got my Phidgets components in the mail, and went right to work assembling my pan-tilt camera mount, controlled with two servos from a controller board, and connected to my laptop from there by a USB cable.&#160; A tiny allen wrench was included, but not a phillips screwdriver, which you will also need.&#160; You can see the components assembled and connected in the picture below.</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/100-4156.jpg"><img style="border-width:0;" height="500" alt="Photo of robotics components" src="http://dvanderboom.files.wordpress.com/2008/04/100-4156-thumb.jpg" width="660" border="0"></a> </p>
<p>The black thing in the back right corner is just a USB hub.&#160; This is connected to (on the right) an 8/8/8 controller (with lots of room for more components to plug in), and then to the mini joystick.&#160; The other USB connector plugs into a 4-servo controller, and then to the dual servos in the pan-tilt assembly in the back left of the picture.</p>
<p>On the software side, using the Phidgets .NET API was very easy.&#160; Just instantiate a Servo object, provide an event handler to run when a device is attached, and from there I was able to set each servo position or read the position back.&#160; The only confusing part was realizing that the servo controller board is represented by the Servo class, and the individual servos plugged into that controller are represented by the ServoServo class.&#160; (Was this API written in Bora Bora, perhaps?)&#160; I would have named them ServoController and Servo, respectively, but I got over it and moved on.</p>
<p>What you see visualized in the test application (see screenshot below) is a coordinate graph custom control that displays the position of both servos.&#160; When I hooked up the mini joystick, I made the mistake of mapping the joystick position to the graph, but then realized that my graph would be useless unless I was controlling everything with the joystick.&#160; I wanted to script out servo movements and replay the sequences and still have their position represented in the coordinate graph control, so I made that update (and ever since have been unable to calibrate the system to center itself).</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image81.png"><img style="border-width:0;" height="506" alt="image" src="http://dvanderboom.files.wordpress.com/2008/04/image8-thumb.png" width="583" border="0"></a> </p>
<p>Hooking up the hardware took only 15 minutes, and most of the application involving the Phidgets API took an hour or two at the most, but I spent the rest of the day creating the custom graph control and getting it to translate coordinate systems correctly.&#160; The joystick maps values from 0 to 1000 along each axis, the servos have a servo position range of -22 to 232 on one axis and something close to that on the other, and the graph control was 150 pixels wide.&#160; I made it general enough to work with any coordinate ranges on both axes.</p>
<h3>First Impressions</h3>
<p>I have to say that it's really cool to see physical objects interacting with software that you write yourself.&#160; (It reminds me of fun I had with a hydraulic robotic arm I programmed in high school using an Apple 2c and low-level calls to the parallel port, but this is way more powerful).&#160; The bridgeware components are easy to connect, and the APIs are a breeze to use.&#160; Building the intelligence between inputs and outputs, however, is the really fun and challenging part.&#160; Even though this initial experiement was simple, I can already tell that coordinating a much more complicated set of inputs and outputs will require careful planning and the use of tools such as Microsoft Robotics Studio, which include the Concurrency &#38; Coordination Runtime and Decentralized Software Services Protocol.</p>
<p>Now that I've gotten my feet wet and have some confidence that I can build, connect, and interface with these components (and have a box full of other goodies like 3-axis accelerometers, light and temperature sensors, sliders, buttons, and switches), I have a bunch of ideas for at least one cool summer project that I hope to announce in the next month or two.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Introduction to Port-Based Asynchronous Messaging]]></title>
<link>http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/</link>
<pubDate>Tue, 22 Apr 2008 01:36:07 +0000</pubDate>
<dc:creator>Dan Vanderboom</dc:creator>
<guid>http://dvanderboom.fr.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/</guid>
<description><![CDATA[&#8230;using terminology and examples from the Concurrency &amp; Coordination Runtime in C#
&nbsp;
P]]></description>
<content:encoded><![CDATA[<h4><font color="#0080c0">...using terminology and examples from the Concurrency &#38; Coordination Runtime in C#</font></h4>
<p>&#160;</p>
<h4>Port-Based Messaging</h4>
<p>Port-based messaging has been in practice for a long time.&#160; In the realm of low-level electronics, components have always been operating in parallel, hardware interface ports are designed around standards, and messages are posted to those ports, queuing up somewhere until the receiver is ready to process them.&#160; This pattern has worked extremely well in multiple domains for a long time, and its key characteristic is the decoupling of data flow from control flow.</p>
<p>In sequential programs, one statement runs after another each time it’s run, and the behavior is predictable and repeatable. Concurrency is difficult because you have to consider all possible interleavings of multiple simultaneous tasks, so the overall behavior is nondeterministic. Depending on the relative timings of concurrent tasks, you could get different results each time if you’re not careful to set the appropriate locks on shared resources.&#160; Port-based messaging architectures isolate islands of state across different execution contexts, and connect them with safe, atomic messages delivered through pre-defined ports.
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image5.png"><img style="border-width:0;" height="106" alt="Basic port-based asynchronous messaging" src="http://dvanderboom.files.wordpress.com/2008/04/image-thumb5.png" width="539" border="0"></a></p>
<p>The posting of a message to a port, as shown in Figure 1, is followed by some handler method that is receiving and processing messages.&#160; What's not evident in the diagram, however, is that while data flows into the port, that posting is a non-blocking call.&#160; The sender continues on doing other work, taking the time only to queue up a message somewhere.</p>
<p>Queuing is important because, even with large thread pools, we can't guaranty that a receiver will be listening at the very moment a message arrives.&#160; Letting them queue up means the receiver doesn't have to block on a thread to wait.&#160; Instead, the data waits and the thread checks messages on the port when it can.</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image6.png"><img style="border-width:0;" height="175" alt="Port showing message queue" src="http://dvanderboom.files.wordpress.com/2008/04/image-thumb6.png" width="641" border="0"></a></p>
<h4>What is a Port?</h4>
<p>So what exactly is a port?&#160; A port is a communication end point, but not in the sense of "a web service on a physical server".&#160; Think much more fine grained than that, even more fine-grained than methods.&#160; With sequential programming, we commonly use try-catch blocks and handle both the exceptional and non-exceptional results of operations within a single method.&#160; In port-based programming, you post a message to a port, which results in some handler method running on the receiving end, and different results can be sent back on different callback ports depending on the type of message.&#160; Instead of calling a method that returns back to you when it ends, port-based programming is about always moving forward, and unwinding a call stack has very little meaning here.</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image7.png"><img style="border-width:0;" height="384" alt="Sequence diagram of port-based messaging" src="http://dvanderboom.files.wordpress.com/2008/04/image-thumb7.png" width="580" border="0"></a> </p>
<p>We can see in the sequence diagram above (Figure 3) a collection of services that communicate with and depend on each other.&#160; Starting from the top, the left-most service posts a message to port 1, and then goes on to do other work or surrenders its thread back to the dispatcher for other tasks that are waiting to run.&#160; A registered method on port 1 runs, and the logic there needs another service to complete it's task, so it posts a message on port 2, and also continues processing without waiting.&#160; The path of solid blue arrow lines traces the message path for normal execution.&#160; If anything goes wrong, an exception can be posted to a different callback port, shown with a red outline in the diagram.</p>
<p>This diagram shows one possible composition of services and data flow.&#160; Port sets, which are simply a collection of related ports, are shown as callback receivers in pairs, but they can consist of any number of ports with any mixture of messages types, depending on the needs of the system being coordinated.&#160; In this example, if anything goes wrong in the handler methods at ports 2, 5, or 6, an exception message will be routed to port 6, where another handler method can compensate for or report on the error.&#160; Also note that while during startup this system may have to process data at port 4 before the logic at ports 5, 7, and 8 can run... once it gets going, there could be activity operating at many ports concurrently (not just one port per service).</p>
<h4>Arbiters, Dispatchers, and DispatcherQueues</h4>
<p>Now it's time to peel away some of the layers of simplification presented so far.&#160; (It may help to have a beer or glass of wine at this point.)</p>
<p>An <strong>arbiter</strong> is a rule (or set of rules) about when and how to process messages for a specific port (or set of ports).&#160; (It is helpful to think of arbiter as a <strong><em>data flow </em></strong>or <strong><em>message flow coordinator</em></strong>.)&#160; Should messages be pulled off the queue as soon as they arrive?&#160; Should the software wait until 5 messages have arrived before processing them all as a group?&#160; Should messages be checked according to a timer firing every 20 seconds?&#160; Should logic be run only when two ports have messages waiting (a join)?&#160; What logic should be run when one of these conditions occurs?&#160; Can method handlers on three specific ports run concurrently until a message arrives on a fourth port, whose handler must run exclusively, and when done the other three can run again (interleave)?&#160; These are just a few of the many coordination patterns that can be expressed with different types of arbiters (and hierarchically nested arbiters, which are ingenious).</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image57.png"><img style="border-width:0;" height="339" alt="Arbiters, Dispatchers, and DispatcherQueues" src="http://dvanderboom.files.wordpress.com/2008/04/image57-thumb.png" width="820" border="0"></a></p>
<p>Figure 4 illustrates that an arbiter is associated with a port to monitor and a method to execute under the right conditions.&#160; The logic of the arbiter, depending on its type and configuration, determines whether to handle the message.&#160; It gets its thread from a thread dispatcher, which contains a thread pool.&#160; (Not the same as <strong>System.Threading.ThreadPool</strong>, though, as there can only be one of those per process.)</p>
<p>The next diagram (figure 5) could represent a join coordination.&#160; An arbiter waits for messages on two ports, and depending on how it's defined, it may process messages from one port repeatedly, but as soon as it receives a message on the second port (it may be an exception port, for example), the whole arbiter might tear itself down so that no more handling on those port will occur.&#160; As you are probably starting to see, composition and attachment of arbiters are key to controlling specific patterns of coordination in arbitrarily powerful and flexible ways.</p>
<p><a href="http://dvanderboom.files.wordpress.com/2008/04/image8.png"><img style="border-width:0;" height="421" alt="Multiple DispatcherQueues and complex Arbiters." src="http://dvanderboom.files.wordpress.com/2008/04/image-thumb8.png" width="820" border="0"></a></p>
<p>In the Concurrency &#38; Coordination Runtime, we can attach and detach these arbiters during runtime; we don't have to define them statically at compile time.&#160; There has been some criticism towards this approach because dynamic arbitration rules are much more difficult to verify formally with analysis, and are therefore difficult to optimize compilation and thread management for, but the advantages of this flexibility are enormous and the performance (see <a href="http://www.google.com/url?sa=t&#38;ct=res&#38;cd=1&#38;url=http%3A%2F%2Fresearch.microsoft.com%2F~tharris%2Fscool%2Fpapers%2Fsing.pdf&#38;ei=lVkDSMX_MIjWefvrtboD&#38;usg=AFQjCNFuRiDoscEzwsv5UCnqEQFntmK8lw&#38;sig2=nKSoMouvnTxv-5YMEihmCw">this paper</a> by Chrystanthakopoulos and Singh) has been very impressive compared to conventional multithreading approaches.&#160; Ultimately, it's not about whether we can guaranty 100% that nothing will go wrong using only the mathematical models currently in our repertoire, but whether we can be productive with these techniques to release software that meets acceptable quality standards across a broad range of application domains.</p>
<p>I don't think we're going to find a better set of strategies to work with anytime soon, and when we've pushed this technology hard enough, the tactics will be fine tuned and we can start absorbing some of these coordination concepts into languages themselves (without sacrificing the dynamism that a library of composable parts provides).&#160; People are going to attempt concurrent programming whether it's safe or not, and using a library such as the CCR significantly reduces the risk of ad hoc multi-threading code.</p>
<h4>Cooperative Multitasking</h4>
<p>When mainstream operating systems like Windows took their first steps to support multi-tasking, cooperative versus preemptive multi-tasking was a common topic.&#160; The idea of an operating system depending on applications to surrender control in a well-behaved way was generally and rightfully considered a bad idea.&#160; Any kind of error or instability in software could easily bring down the entire operating system, and enforcing a quickly growing community of software vendors to share nicely wasn't a realistic option.&#160; Being preemptive meant that the OS could forcefully stop an application from running after giving it a small, measured slice of time, and then switch the thread to a new context where another application could run for another time slice.&#160; Regardless of how poorly applications ran, as benevolent dictator, the OS could ensure a fair scheduling of processor time.</p>
<p>The solution encapsulated in the Concurrency &#38; Coordination Runtime is, on the other hand, a cooperative multi-tasking strategy.&#160; However, because it operates within the local scope of an individual process, and is isolated from other processes in the same OS, its risk of destabilizing the system is nonexistent.&#160; This deep level of cooperation, in fact, is what gives the CCR its great performance.&#160; When used correctly, which George Chrysanthakopoulos (in <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=143582">this video</a>) and his colleagues have brilliantly put within our reach in the CCR library, threads don't sit around waiting on some resource or for long-running operations to complete; instead, control is freely surrendered back to the thread pool, where it is quickly assigned to a new task.</p>
<p>Finally, by surrendering threads freely instead of holding onto them, a continuous flow of threads through the different activities of the system is maintained, and there is therefore always an abundance of them to handle new messages waiting on ports.&#160; Existing threads are not wasted.&#160; As the <a href="http://en.wikipedia.org/wiki/Tao_Te_Ching">Tao Te Ching</a> says:</p>
<blockquote><p>If you want to accord with the Tao,<br>just do your job, then let go.</p>
</blockquote>
<h4>Control &#38; Data Flow: Sequential vs. Concurrent</h4>
<p>In sequential programs, stacks are used to unwind method calls and provide return values (return messages), and threads follow the data flow; whereas in port-based programming, threads are managed by one or more thread dispatchers that are capable of maximizing the use of that thread by making it available in a pool and sharing it with with many other (potentially unrelated) tasks.&#160; Data flows orthogonally and according to a different coordination strategy than control flow.&#160; This task-thread agnosticism (the opposite of thread-affinity) is similar to the statelessness of a web server such as IIS; one or more threads from a large pool are injected into the tasks of processing, rendering, and serving up huge numbers of web pages, after which those threads are recycled back into the thread pool for execution of other tasks for a highly concurrent and scalable service platform.</p>
<p>So herein lies the trick: in order to split this coupling between data flow and control flow, a different means is needed to compose the two coordination strategies.&#160; In C# and other popular imperative programming languages, methods implicitly pass thread control along with data arguments (the message), and the use of the stack for method calls asserts constraints on control flow, so making the CCR work involves some interesting patterns.</p>
<p>That's why port-based programming is hard to get your head around.&#160; It's such a large shift from common sequential logic and it requires some additional planning (and good visualizations).&#160; It's obviously important to have a good set of tools for expressing that coordination, a simple set of conceptual primitives that allows us to compose arbitrarily-complex coordination patterns.&#160; These primitives, including Message, Port, PortSet, Dispatcher (thread pool), and others provide the building blocks that we can use to define these relationships.&#160; Once we define <strong>what</strong> we want to happen with these building blocks, the CCR can make it all happen.</p>
<p>This level of coordination is a level beyond the strategies used by most concurrent applications and frameworks in software today, primarily because there hasn't been a pressing need for it until recently--processors had been growing phenomenally in speed for many years.&#160; Now, however, we're told that processor speed has plateaued, that we now have to scale out to scale up, spreading the processing load across multiple cores.&#160; We are very fortunate that the work being done by researchers in fields like robotics can be applied in other service oriented architectures, and is a testament to the widespread use of the .NET Framework and the fantastic efforts of some very bright individuals.</p>
<h4>Where to Find Microsoft Robotics Studio</h4>
<p>Robotics Studio is a free download and can be found <a href="http://msdn2.microsoft.com/en-us/robotics/default.aspx">here</a>, and while it is full of other good stuff, it's worth checking out for the Concurrency and Coordination Runtime alone.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[.NET Micro Framework vs. Microsoft Robotics Studio]]></title>
<link>http://dvanderboom.wordpress.com/2008/04/12/net-micro-framework-vs-microsoft-robotics-studio/</link>
<pubDate>Sat, 12 Apr 2008 18:15:20 +0000</pubDate>
<dc:creator>Dan Vanderboom</dc:creator>
<guid>http://dvanderboom.fr.wordpress.com/2008/04/12/net-micro-framework-vs-microsoft-robotics-studio/</guid>
<description><![CDATA[The .NET Micro Framework is a compatible subset of the full .NET Framework, similar to how the Compa]]></description>
<content:encoded><![CDATA[<p>The <a href="http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx">.NET Micro Framework</a> is a compatible subset of the full .NET Framework, similar to how the Compact Framework is a subset.&#160; But the Micro Framework can act as its own <a href="http://en.wikipedia.org/wiki/Real-time_operating_system">real time operating system</a> (RTOS) instead of loading the tiny CLR in a host operating system, and works with a variety of hardware devices, including those that don't have their own memory management unit (MMU).&#160; The gist is that embedded applications as well as low-level drivers can now be written in managed code (a huge leap forward), and take advantage of garbage collection, strong-typing, and other nice features that are typically absent in embedded systems programming.&#160; This supposedly reduces errors, boosts productivity, and reduces development costs.</p>
<p>I've been watching videos <a href="http://msdn.microsoft.com/embedded/media/tutorials/netmf20.wmv">like this</a>, reading about the Micro Framework for the past few months, have pre-ordered <a href="http://www.amazon.com/Expert-NET-Micro-Framework/dp/159059973X/ref=sr_1_2?ie=UTF8&#38;s=books&#38;qid=1208020892&#38;sr=1-2">this book</a> from Amazon, and have been itching to get my hands on a hardware development kit to start experimenting.&#160; The only problem is that the interfaces for these embedded devices are so foreign to me (I2C, GPIO, etc.), and I'm not exactly sure what my options are for assembling components.&#160; What kinds of sensors are available?&#160; Do I have to solder these pieces together or is there a nice modular plug system similar to the SATA, IDE, and PCI connectors on modern computers (but on a smaller scale)?&#160; Do I have to write my own device drivers for anything I plug in, or is there some abstraction layer for certain classes of inputs and outputs?</p>
<p>The other issue that makes me hesitate is the thought of programming without language conveniences like generics on a more resource-constrained device than the Windows Mobile devices I'm already frustrated with (and have been for the past four years).</p>
<p>I'm not saying that I'm not excited about managed code on tiny embedded devices, and I'm not saying I won't start playing with (and blogging about) this important technology sometime in the next few months, but I've discovered another platform for embedded device development with the ability to interact directly with the physical world that offers a much lower technical barrier for entry, so that's where I'm starting.</p>
<p>What I'm referring to is <a href="http://msdn2.microsoft.com/en-us/robotics/default.aspx">Microsoft Robotics Studio</a>, which is by all accounts a phenomenal platform for more than just robotics, and seems to overlap somewhat with the Micro Framework's reach (at the intersection of the computer-digital and physical-analog worlds).&#160; The two critical components of this architecture are the <a href="http://purl.org/msrs/dssp.pdf">Decentralized Software Services Protocol</a> (DSSP, originally named WSAP) and the <a href="http://msdn2.microsoft.com/en-us/magazine/cc163556.aspx">Concurrency &#38; Coordination Runtime</a> (CCR).&#160; Make sure you watch <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=143582">this video</a> on the CCR, and note how George emphasizes that "it's not about concurrency, it's about coordination", which I found especially enlightening.&#160; These are highly robust and general purpose libraries, and <strong>both</strong> of them will run on Compact Framework!&#160; (I was very impressed when I read this.)</p>
<p>Without having studied them both in depth yet, the CCR seems to cannibalize on the <a href="http://msdn2.microsoft.com/en-us/magazine/cc163340.aspx">Task Parallel Library</a> (TPL), at least conceptually, offering a much more complete system of thread manipulation and synchronization than the original System.Threading types, all for a vertical industry that has much greater demands of a concurrency framework that must, for example, deliver massive concurrency and complex coordination rules in a highly-distributed system, all the while handling full and partial failures gracefully.&#160; Some of the patterns and idioms for making concurrency and synchronization operations easy to write and understand are masterfully designed by Henrik Nielsen and George Chrysanthakopoulos (and I thought Vanderboom was a long name!).</p>
<p>The fact that the CCR and DSSP were developed together is significant.&#160; Tasks running in parallel need to be manipulated, coordinated, and tracked regardless of whether they're running on four processors in one computer or on 256 processors spread across a hundred devices, and distributed services need a dependable way of parallelizing their efforts on individual machines.&#160; This is a synergistic relationship, each subsystem enhancing the elegance and usefulness of the other.&#160; So why not use the CCR in every application instead of developing the TPL?&#160; Are these two teams actively collaborating, or have they been building the two frameworks in isolation?</p>
<p>I also have to make special mention of the decentralized software services, which as a protocol sits on top of HTTP in a <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> implementation.&#160; It supports composition of services by creating partnerships with other services, defining securely which partnerships are allowed, offering identification and discovery of services, and much more.&#160; In this assembly then, we have a robust library for building distributed, composable, decentralized services-oriented systems with event publication and subscription, with services that can be hosted on desktop and mobile computers alike.&#160; Wow, call me a geek, but that's really frickin' cool!&#160; Some of the ideas I have for future projects require this kind of architectural platform, and I've been casually designing bits and pieces of such a system (and got so far as getting the communication subsystem working in CF).&#160; Now, however, I might be turning my attention to seeing if I can't use the Robotics Studio APIs instead.</p>
<p>One thing to be clear about is that Robotics Studio doesn't support Micro Framework, at least not yet.&#160; I wonder exactly how much value there would be to adding this support.&#160; With hardware options such as this <a href="http://www.windowsfordevices.com/news/NS8206400093.html">2.6" x 2.3" motherboard</a> with a 1.6 GHz Intel Atom processor, video support, and up to 1 GB of RAM, capable of running Windows XP or XP Embedded, and priced at $95 (or a 1.1 GHz version for $45), we're already at a small enough form factor and scale for virtually any autonomous or semi-autonomous robotics (or general embedded) applications.&#160; There's also the possibility for one or more Micro Framework devices to exchange messages with a hardware module that is supported in Robotics Studio, such as the tiny board just mentioned.</p>
<p>Where do we go next?&#160; For me, I just couldn't resist jumping in with both feet, so I ordered about $500 in robotics gear from <a href="http://www.phidgets.com/">Phidgets</a>: USB interface boards, light and tempature sensors, a 3-axis accelerometer (think <a href="http://en.wikipedia.org/wiki/Wii_Remote">Wii controller</a>), motors and servos, an RFID reader with tags, LEDs, buttons, knobs, sliders, switches, and more.&#160; I plan to use some of this for projects at <a href="http://www.carsgofaster.com">CarSpot</a>, and the rest simply to be creative with and have fun.&#160; I also pre-ordered <a href="http://www.amazon.com/Professional-Microsoft-Robotics-Studio-Martin/dp/0470141077/sr=8-2/qid=1170439130/ref=sr_1_2/104-6784899-4561500?ie=UTF8&#38;s=books">this book</a>, but the publication date is set for June 10th, so by the time I get it, I may have already figured most of it out.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft s’interesse enfin à la robotique. Qu’ont-ils fait pour cela ? Comment ça fonctionne et comment cela peut-il vous aider ?]]></title>
<link>http://gaubuali.wordpress.com/2008/03/21/microsoft-s%e2%80%99interesse-enfin-a-la-robotique-qu%e2%80%99ont-ils-fait-pour-cela-comment-ca-fonctionne-et-comment-cela-peut-il-vous-aider/</link>
<pubDate>Fri, 21 Mar 2008 16:53:16 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2008/03/21/microsoft-s%e2%80%99interesse-enfin-a-la-robotique-qu%e2%80%99ont-ils-fait-pour-cela-comment-ca-fonctionne-et-comment-cela-peut-il-vous-aider/</guid>
<description><![CDATA[Source: cliquez ici
&nbsp;
 Pratiquement chaque mois, et ce depuis juin 2006, Microsoft a sorti une ]]></description>
<content:encoded><![CDATA[<p class="spip">Source: <a href="http://www.google.com/url?sa=t&#38;client=pub-1142616073837091&#38;sigafs=e8S829T-vpSZ-Chn&#38;flav=0000&#38;ct=cres&#38;cd=1&#38;url=http%3A%2F%2Fwww.robot-intelligence-artificielle.com%2Facualite%2Fsoftware%2Fmicrosoft-robotics-studio-fournit-un-forum-pour-linnovation-robotique.html&#38;ei=6ebjR_PAAoaomwO55_zNCA&#38;usg=AFQjCNFrqh8V0GMPoNJdvAAPmehvV9yDmA">cliquez ici</a></p>
<p class="spip">&#160;</p>
<p class="spip"> Pratiquement chaque mois, et ce depuis juin 2006, Microsoft a sorti une nouvelle version de leur "Robotics Studio" (MRS). Avec la dernière version en date (l’article est d’octobre), par sa base de code stable cette quatrième version donne l’impression d’un futur prometteur.</p>
<p class="spip">Une application MRS est un ensemble de services executés dans un ou plusieurs noeuds afin de s’échanger des messages entre eux, permettant ainsi d’avoir le comportement que l’on souhaite donner au robot. Ces services se transmettent l’information via divers webservices que l’on appelle <b>Web Services Application Protocol</b> (WSAP).</p>
<p class="spip">Une machine peut contenir plusieurs noeuds et ainsi plusieurs services d’un même noeud peuvent communiquer à la fois entre eux, avec les services d’autres noeuds de la même machine ou bien encore avec les services de noeuds appartenant à une autre machine.</p>
<p class="spip">Chaque service se voit attribué son propre état. Un soin particulier à été apporté ainf de différencier les actions qui iront modifier cet état des autres.</p>
<p class="spip">Avec .NET on peut arriver à échanger ce type de message, bien que cela n’ait été fait dans aucun langage du framework. Pourtant cette possibilité est testée pour être incluse dans MRS au niveau du CLI(Common Language Runtime).</p>
<p class="spip">Sous le nom de CCR (Coordination and Concurrency Runtime), un tel envirronement peut paraître confus pour ceux qui ne connaissent pas les architectures web orientées services. L’architecture du CCR et les extensions de langages qui y sont liées, sont basés sur certaines fonctionnalitées du framework .net2, comme par exemple les types génériques et les itérateurs. Le CCR va même plus loin en vous permettant des itérations au travers de blocks utilisant le constructeur ’yield return’.</p>
<p class="spip">D’autre part la notion de port est fondamentale pour la compréhension du CCR. Les ports représentent des files d’attente (des queues) gérant un certain type de données qui doivent leur être transmis, ils conservent également une liste de handlers qui seront appellés lorsque ce type de donnée sera reçu.</p>
<p class="spip">e.g.</p>
<blockquote class="spip">
<p class="spip"> // Create a port : Port&#60;DateTime&#62; _timerPort = new Port&#60;DateTime&#62;() ;</p>
<p class="spip">// Define the handler : void TimerHandler(DateTime signal) <i>   // do something </i></p>
<p class="spip">// Activate the handler : Activate(Arbiter.Receive(true, _timePort, TimerHandler)) ;</p>
</blockquote>
<p class="spip">A partir de cette définition, lorsque vous souhaitez faire apparaitre un évenement, postez un message avec un type DateTime.</p>
<blockquote class="spip">
<p class="spip">_timerPort.Post(DateTime.Now) ;</p>
</blockquote>
<p class="spip">L’exemple ci-dessus n’est pas à proprement utile, mais la technique utilisée peut servir avec des ports supportant plusieurs types et plusieurs handlers.</p>
<p class="spip">Vous avez la possibilité d’associer des recepteur qui attendront un ou plusieurs messages, facilement mettre en oeuvre des modèles fournis, créer des conditions depuis les sorties des ports, etc. Ensuite, vous pouvez affecter certains services à un port afin qu’ils puissent recevoir un message de ce dernier. Cela peut être utile dans l’utilisation de données provenant d’un sonar(des capteurs à ultrason par exemple) et faire une carte des environs, mais aussi l’utiliser comme un "butoir" (capteur de butée). Toutefois, attention : avec une carte topologique lourde et inflexible, sachez que votre service butoir traitera quand-même les messages de ce service.</p>
<p class="spip">Si vous avez déjà tenté d’écrire une application par procédures ou par threads vous savez alors qu’il est difficile de coordonner toutes les activitées inhérentes au robot quand il tente d’avancer pendant qu’il teste des encodeurs tout en scrutant des capteurs à ultrasons, capteurs de butée, créer la carte, etc....</p>
<p class="spip">Par exemple :</p>
<p class="spip">Le capteur à ultrasons SRF235 de Devantech a une interface I2C et retourne des données de l’ordre du centimètre.Vous pouvez donc interfacer votre PC vers un bus I2C en utilisant le module USBI2C de chez Devantech pour un prix trés abordable, ou alors la version combinée sans fil RF03/CM02.</p>
<p class="spip">Par conséquent, une application à base de microcontrolleur utilisera une boucle pour lire les 2 octets de données de distance envirron toutes les 100mS.</p>
<p class="spip">En prennant cet example, mais cette fois avec MRS, on utilisera plutôt (pas le chien) un service qui scrute le sonar afin de mettre tout seul à jour les données de distance. L’état peut alors être lu par un autre service en utilisant la commande GET, ou si le service est configuré par le biais de souscriptions (comprendre : l’abonnement à ce service) tous les services abonnés recevront un message de mise à jour des nouvelles données reçues (principe du message passing).</p>
<p class="spip">L’état peut être sérialisé au traver d’un butineur internet en tant que donnée XML :</p>
<div class="spip_documents spip_documents_center"><img src="http://www.pobot.org/IMG/gif/raw.gif" style="border-width:0;" alt="(GIF)" height="296" width="536" /></p>
<div class="spip_doc_titre"><b>Raw XML of the SRF235</b></div>
<div class="spip_doc_descriptif">Raw XML of the SRF235</div>
</div>
<p class="spip">en utilisant les feuilles de style XSLT, on peut transformer des données XML en une page HTML.</p>
<div class="spip_documents spip_documents_center"><img src="http://www.pobot.org/IMG/gif/srf235hardware.gif" style="border-width:0;" alt="(GIF)" height="245" width="539" /></div>
<p class="spip">Vous pouvez alors créer des instances depuis des modèles génériques comme Sonar ou SonarAsBumper pour vous inscrire à un sonar spécifique dont les données seront utilisées par le service d’un autre hardware.</p>
<p class="spip">Pour un tronche pensant microcontrolleur (texto, NTDR) tout ceci pourrait passer pour une perte de temps. Pourquoi XML ? pourquoi un OS ? pas de temps réèl ? fichtre, diantre !</p>
<p class="spip">Pourtant, les PC deviennent de plus en plus rapides et en même temps bon marchée, les CCR sont capable de traiter à peu près 90000 messages soap en une seconde sur une machine multiprocesseurs.</p>
<p class="spip">Prendre les modèles génériques de services permet de réutiliser la logique d’une appli pour une autre, peut importe si c’est un Pioneer avec télémètre laser ou un LEGO NXT.</p>
<p class="spip">La communication inter-noeuds utilise le PC comme le cerveau avec une webcam pour reconnaitre les objets envirronants pendant qu’il continuera de traiter une boucle PID. Vous pouvez même télécharger un flux météo pendant ce temps et ordonner à votre robot de rentrer à la maison si la pluie est annoncée.</p>
<p class="spip">MS à ajouté des extension pour des moteurs à deux roues, des webcams, conversion texte vers voix, sonars, capteurs à contacts, etc .... . Ces services génériques donne lieu à l’une des plus puissante possibilités de MRS pour ensuite le relier avec le moteur de physique AGEA, vous pouvez ainsi envoyer votre robot virtuel dans un labyrinthe avec de vraies contraintes physiques et ainsi tester vos capteurs de contact et surtout la cohérence de votre code avec la webcam simulée.</p>
<p class="spip">Pour un rapide aperçu d’un programme crée à partir d’un service, regarder l’exemple <a href="http://www.pobot.org/MRS-Example-Show-me-a-picture-when.html" class="spip_out">Say Fire  </a></p>
<p class="spip">C’est tout pour l’instant.Il y a plus de documentation sur le site de Microsoft, avec de bonnes vidéos montrant comment utiliser un CCR, au-delà de la robotique type wiki canal 9.</p>
<p class="spip">video du CCR : <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=143582" class="spip_url">http://channel9.msdn.com/ShowPost.a...</a></p>
<p class="spip">CCR : <a href="http://channel9.msdn.com/wiki/default.aspx/Channel9.ConcurrencyRuntime" class="spip_url">http://channel9.msdn.com/wiki/defau...</a></p>
<p class="spip">video MRS : <a href="http://channel9.msdn.com/Showpost.aspx?postid=206574" class="spip_url">http://channel9.msdn.com/Showpost.a...</a></p>
<p class="spip">MRS d’octobre : <a href="http://msdn.microsoft.com/robotics/getstarted/ctp4/default.aspx" class="spip_url">http://msdn.microsoft.com/robotics/...</a></p>
<p class="spip">Chips Devantech : <a href="http://www.robot-electronics.co.uk/shop/Examples.htm" class="spip_url">http://www.robot-electronics.co.uk/...</a></p>
<p class="spip">Amusez-vous bien !</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Tutoriel Microsoft Robotics Studio avec C++ ]]></title>
<link>http://gaubuali.wordpress.com/2008/03/21/tutoriel-microsoft-robotics-studio-avec-c/</link>
<pubDate>Fri, 21 Mar 2008 16:27:44 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2008/03/21/tutoriel-microsoft-robotics-studio-avec-c/</guid>
<description><![CDATA[Toaster Device Sample



This sample provides a step by step guidance on how to integrate code betwe]]></description>
<content:encoded><![CDATA[<div class="title">Toaster Device Sample</div>
<p><!--Content type: PSDK_8. Transform: psdk2mtps.xslt.--></p>
<div>
<div>
<div class="overview">This sample provides a step by step guidance on how to integrate code between the Microsoft Windows Vista DDK and Microsoft Robotics Studio using C++/CLI programming language.</p>
<p>This tutorial is provided in the language. You can find the project files for this tutorial at the following location under the Microsoft Robotics Studio installation folder:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Sample location</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl01Samplelocation');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> Samples\Technologies\Interop\ToasterList</pre>
</div>
<p>Here are the steps we have to do:</p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#1-CreateSvc">Create a new DSS C++ service</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#2-AddToast">Add toaster application code</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#3-ConfBuild">Configure build</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#4-FixingToast">Fix toast.cpp</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#5-IntCode">Integrating code</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#6-TryIt">Try it out</a></li>
</ul>
</div>
<h1 class="heading">Prerequisites</h1>
<div class="section">
<h2 class="subHeading">Software</h2>
<div class="subSection">This tutorial requires the Windows Vista DDK also called WDK, which is <a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx" id="ctl00_rs1_mainContentContainer_ctl02">available online</a></p>
<p>The actual work with the WDK is outside the scope of this tutorial, instead we are going to take an existing part of the Toaster sample from WDK and turn it into a Microsoft Robotics Studio DSS service.</p>
<p>The Toaster sample that we are going to use is the “toaster” application, which lists the available toaster devices and their information, which is located in the “WinDDK\6000\src\general\toaster\exe\toast” directory of your Vista WDK installation. Refer to that location on documentation about the toaster application itself.</p>
<p>This sample is designed for use with Microsoft Visual C++/CLI 2005. (Note that this is incompatible with earlier, 2003 or before, edition of C++ with managed extensions) You can use:</p>
<ul>
<li>Microsoft Visual C++ 2005 Express Edition.</li>
<li>Microsoft Visual Studio 2005 Standard Edition.</li>
<li>Microsoft Visual Studio 2005 Professional Edition.</li>
<li>or Microsoft Visual Studio 2005 Team System.</li>
</ul>
<p>You will also need Microsoft Internet Explorer or another conventional web browser.</p></div>
</div>
<h1 class="heading">Getting Started</h1>
<div class="section">To create the service you have to use Visual Studio 2005, and the Microsoft Robotics Studio Command Prompt. Due to this we will have to do some changes to reuse the source out of the WDK. Let’s take it step by step:</div>
<h1 class="heading">Step 1: Create a new DSS C++ service</h1>
<div class="section">Open a Microsoft Robotics Studio Command Prompt. Create a new C++ DSS service with the following command:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Console</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl03Console');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">&#62;</span>bin\dssnewservice.exe /service:myToasterSvc /language:cpp</pre>
</div>
<p>This will create a folder with the service code in it. Open the solution from there with you Visual Studio 2005 C++ editor.</p></div>
<h1 class="heading">Step 2: Add toaster application code</h1>
<div class="section">From <b>WinDDK\6000\src\general\toaster\exe\toast</b> location in your WDK installation copy the <b>toast.c</b> file to your <b>myToasterSvc</b> service directory, and rename it to have a <b>cpp</b> extension. In Visual Studio right click on <b>Source Files</b> and select <b>Add-&#62;Existing Item..</b> and point to the <b>toast.cpp</b> file that you just created. Since the whole project is managed, we need to explicitly say that this file will contain unmanaged code, by putting <b>#pragma unmanaged</b> in the beginning of <b>toast.cpp</b>.</div>
<h1 class="heading">Step 3: Configuring build</h1>
<div class="section">To build the project we need to add the build settings from the DDK sample in our project. They are configured in the <b>sources</b> file in <b>WinDDK\6000\src\general\toaster\exe\toast</b> directory and in the build environment command shell settings. Right click on you project in Visual Studio and select <b>Properties</b>. Here is the list of items you need to change:</p>
<ul>
<li>Under <b>C\C++ -&#62; General</b> add to <b>Additional Include Directories</b> the following folders: <b>WinDDK\6000\src\general\toaster\inc</b> and <b>WinDDK\6000\inc\api</b> from your WDK installation.</li>
<li>Under <b>Linker -&#62; General</b> add to <b>Additional Library Directories</b> the following folder from WDK: <b>WinDDK\6000\lib\wnet\i386</b></li>
<li>Under <b>Linker -&#62; Input</b> add <b>setupapi.lib</b> to <b>Additional Dependencies</b></li>
<li>Under <b>Configuration Properties -&#62; General</b> change <b>Character Set</b> property from <b>Use Unicode Character Set</b> to <b>Use Multi-Byte Character Set</b>.</li>
</ul>
<p>After you add these setting you should be able to compile your project, and get a couple of code errors due to syntax change from c to c++ for the toast.cpp file.</p></div>
<h1 class="heading">Step 4: Fixing toast.cpp</h1>
<div class="section">From the previous step after compilation you should see the following 2 errors:</p>
<ul>
<li><b>error C2440: '=' : cannot convert from 'void *' to 'PSP_DEVICE_INTERFACE_DETAIL_DATA'<br />
c:\Microsoft Robotics Studio (1.5)\myToasterSvc\toast.cpp 155</b></li>
<li><b>error C2664: 'SetupDiGetDeviceInstanceIdW' : cannot convert parameter 3 from 'BYTE *' to 'PSTR'<br />
c:\Microsoft Robotics Studio (1.5)\myToasterSvc\toast.cpp 306</b></li>
</ul>
<p>The first problem can be fixed by just adding a cast:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl04C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> deviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc (predictedLength);</pre>
</div>
<p>The second problem just needs the right cast:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl05C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> fSuccess = SetupDiGetDeviceInstanceId(hdi, &#38;deid,
                                      (PSTR)currentToaster-&#62;szCompInstanceId,
                                      MAX_PATH, NULL);</pre>
</div>
<p>After these errors are fixed you should be able to compile your service without errors. The toaster code that we added does not do anything useful, because we need to add the integration between it and the service code.</p></div>
<h1 class="heading">Step 5: Integrating code</h1>
<div class="section">The service that we are going to create will have as it’s state a list of toaster devices that are present in the system. To get the toaster device we will reuse the <b>PrintToasterDeviceInfo()</b> function, but change slightly how it works. We will want to gather the toaster device information, but instead of printing it to the console we will populate our service state with it. Here are the steps needed to make that integration happen:</p>
<h2 class="subHeading">Drop main method</h2>
<div class="subSection">Since we are going to reuse only the <b>PrintToasterDeviceInfo()</b> function we will not need the main function in the toast.cpp file. Our service will be started by the DSS runtime, so we don’t need this entry point.</div>
<h2 class="subHeading">Define new header file</h2>
<div class="subSection">Let’s create a header file for the toast.cpp file, by right clicking on your project and selecting <b>Add -&#62; New Item… -&#62; Header File (.h)</b> and call it <b>toast.h</b>.</div>
<h2 class="subHeading">Specify header files in source files</h2>
<div class="subSection">The header file that we created will be used in <b>toast.cpp</b> file and in <b>myToasterSvc.cpp</b>.</div>
<h2 class="subHeading">Define new data structure</h2>
<div class="subSection">In <b>toast.h</b> file, move the <b>#include &#60;wtypes.h&#62;</b> from the <b>toast.cpp</b> file to it and let’s define a structure that we will use to share the data between our managed and native functions. We will want to get the data between managed and native functions in as few calls as possible due to the performance hit of switching between managed and native code. Since we don’t know the length of the data that we want to get from the <b>PrintToasterDeviceInfo()</b> function, we will use a linked list so that it’s easy to expand. Here is what the structure should look like:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl06C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> typedef struct TOASTER_INFO {
    TOASTER_INFO(){nextToasterInfo= NULL;}
    TOASTER_INFO* nextToasterInfo;
    CHAR           szCompInstanceId[MAX_PATH];
    CHAR           szCompDescription[MAX_PATH];
    CHAR           szFriendlyName[MAX_PATH];
} *P_TOASTER_INFO ;</pre>
</div>
</div>
<h2 class="subHeading">Change function signature</h2>
<div class="subSection"><b>PrintToasterDeviceInfo()</b> function with its current signature does not provide any information to the callers other than if it has found anything or not. Let’s change it so that it will also provide the new structure that we created. Make sure it’s declaration is in the <b>toast.h</b> file, here is what it’s new signature should look like:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl07C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> BOOL PrintToasterDeviceInfo(P_TOASTER_INFO* pFirstToaster);</pre>
</div>
</div>
<h2 class="subHeading">Add allocation logic</h2>
<div class="subSection">Now let’s change how this function works in the <b>toast.cpp</b> so that it allocates and populates the <b>TOASTER_INFO</b> structure correctly. Since we don’t know up front how many devices we will find, we will allocate memory inside the loop where we enumerate over each toaster device. Since we don’t know if we will find even one, but our function will return the pointer to the first item in the linked list, we will need a custom logic to create the first element, and then any next element. Here is what that code should look like:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl08C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">if</span>(*ppFirstToaster == NULL)
{
    *ppFirstToaster = <span style="color:blue;">new</span> TOASTER_INFO;
    currentToaster = *ppFirstToaster;
}
<span style="color:blue;">else</span>
{
    currentToaster-&#62;nextToasterInfo = <span style="color:blue;">new</span> TOASTER_INFO;
    currentToaster = currentToaster-&#62;nextToasterInfo;
}</pre>
</div>
</div>
<h2 class="subHeading">Populate the structure</h2>
<div class="subSection">Add the local variable that we will point to the current Toaster that we are working with: <b>P_TOASTER_INFO currentToaster;</b>. Next remove the <b>szCompInstanceId</b>, <b>szCompDescription</b> and <b>szFriendlyName</b> local variables and change the code that used them to point to their versions in the <b>currentToaster</b> local variable. Finally remove the calls to the <b>printf</b> function we will no longer need them.</div>
<h2 class="subHeading">Create new state</h2>
<div class="subSection">Now let’s change the service part of our code. Since we want the toaster information represented in the state of our service we need to change our current state definition. In the <b>myToasterSvcTypes.h</b> file add the following new class that will represent a single toaster:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl09C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> [DataContract]
<span style="color:blue;">public</span> ref <span style="color:blue;">class</span> myToasterInfo
{
<span style="color:blue;">public</span> :
    [DataMember]
    String^ FriendlyName;
    [DataMember]
    String^ CompDescription;
    [DataMember]
    String^ CompInstanceId;
};</pre>
</div>
<p>Now change the <b>myToasterSvcState</b> class so that it will only have a list of our toaster devices in it:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl10C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> [DataContract]
<span style="color:blue;">public</span> ref <span style="color:blue;">class</span> myToasterSvcState
{
<span style="color:blue;">public</span> :
    myToasterSvcState();

    [DataMember]
    List&#60;myToasterInfo^&#62;^ Toasters;
};</pre>
</div>
<p>Don’t forget to change the constructor of this class in <b>myToasterSvcTypes.cpp</b> so that it properly initializes that list:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl11C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> myToasterSvcState::myToasterSvcState()
{
    Toasters = gcnew List&#60;myToasterInfo^&#62;();
}</pre>
</div>
<p>This should be enough to have the service state ready to be used for our needs.</p></div>
<h2 class="subHeading">Create new state renew method</h2>
<div class="subSection">we’ll need to repopulate our state to reflect the accurate data each time someone requests it using a <b>Get</b> operation. Since we have 2 operations defined – <b>HttpGet</b> and standard DSS <b>Get</b>, we will create a helper function that we will call from both of them. The function signature should look like this:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl12C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> myToasterSvcState^ myToasterSvc::RenewState()</pre>
</div>
<p>Don’t forget to add it’s declaration to the <b>myToasterSvc.h</b> file, and change the two operations that we talked about above to use this function:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl13C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">void</span> myToasterSvc::GetHandler(Get^ <span style="color:blue;">get</span>)
{
    <span style="color:blue;">get</span>-&#62;ResponsePort-&#62;Post(RenewState());
}

<span style="color:blue;">void</span> myToasterSvc::HttpGetHandler(HttpGet^ httpGet)
{
    httpGet-&#62;ResponsePort-&#62;Post(gcnew HttpResponseType(RenewState()));
}</pre>
</div>
<p>The way our service works we do not need to support the <b>Replace</b> operation. Remove it from service operations in <b>myToasterSvcTypes.h</b> file:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl14C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">public</span> ref <span style="color:blue;">class</span> Replace : Microsoft::Dss::ServiceModel::Dssp::Replace&#60;myToasterSvcState^, PortSet&#60;DefaultReplaceResponseType^, Fault^&#62;^&#62;
{
};

<span style="color:blue;">public</span> ref <span style="color:blue;">class</span> myToasterSvcOperations : PortSet&#60;DsspDefaultLookup^, DsspDefaultDrop^, Get^, HttpGet^, Replace^&#62;
{
};</pre>
</div>
<p>And remove the handlers for it in the <b>myToasterSvc.h</b> and <b>myToasterSvc.cpp</b> files as well:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl15C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">void</span> ReplaceHandler(Replace^ replace);

Arbiter::Receive&#60;Replace^&#62;(<span style="color:blue;">true</span>, _mainPort, gcnew Handler&#60;Replace^&#62;(<span style="color:blue;">this</span>, &#38;myToasterSvc::ReplaceHandler))

<span style="color:blue;">void</span> myToasterSvc::ReplaceHandler(Replace^ replace)
{
  _state = replace-&#62;Body;
  replace-&#62;ResponsePort-&#62;Post(DefaultReplaceResponseType::Instance);
}</pre>
</div>
<p>Now everything is ready for the final step.</p></div>
<h2 class="subHeading">Add marshaling and cleanup logic to state renew method</h2>
<div class="subSection">in our <b>RenewState</b> method we need to create a new clean state instance, make a call to our native helper function, properly marshal and clean up the data that it returns. Here is the full code for that function, the comments show the particular parts that were mentioned:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl16C++');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> myToasterSvcState^ myToasterSvc::RenewState()
{
    <span style="color:green;">// create a new empty state instance</span>
    myToasterSvcState^ _state = gcnew myToasterSvcState();
    P_TOASTER_INFO currentToaster = NULL;
    P_TOASTER_INFO previousToaster = NULL;

    <span style="color:green;">// call the native helper function</span>
    <span style="color:blue;">if</span>(PrintToasterDeviceInfo(&#38;currentToaster))
    {
        <span style="color:blue;">if</span>(currentToaster == NULL)
        {
            LogInfo(LogGroups::Console,<span style="color:maroon;"><span style="color:maroon;">"Current Toaster empty!"</span></span>);
        }

        <span style="color:blue;">while</span>(currentToaster != NULL)
        {
            <span style="color:green;">// populate the state, correctly marshal the strings </span>
            myToasterInfo^ toaster = gcnew myToasterInfo();
            toaster-&#62;FriendlyName = Marshal::PtrToStringAnsi(
                    (System::IntPtr)currentToaster-&#62;szFriendlyName);
            toaster-&#62;CompDescription = Marshal::PtrToStringAnsi(
                    (System::IntPtr)currentToaster-&#62;szCompDescription);
            toaster-&#62;CompInstanceId = Marshal::PtrToStringAnsi(
                    (System::IntPtr)currentToaster-&#62;szCompInstanceId);
            _state-&#62;Toasters-&#62;Add(toaster);

            <span style="color:green;">//clean up the allocated memory</span>
            previousToaster = currentToaster;
            currentToaster = currentToaster-&#62;nextToasterInfo;
            delete previousToaster;
        }
    }
    <span style="color:blue;">else</span>
    {
        LogInfo(LogGroups::Console,<span style="color:maroon;"><span style="color:maroon;">"No toaster devices found!"</span></span>);
    }
    <span style="color:blue;">return</span> _state;
}</pre>
</div>
<p>Now that this is done you should be able to successfully compile your project.</p></div>
</div>
<h1 class="heading">Step 6: Try it out</h1>
<div class="section">Your toaster service should be fully compiled and the proxy assemblies generated in the <b>bin</b> folder of your Microsoft Robotics Studio installation location. Before you run it, you will need to add several Toaster devices to your computer. Please refer to the documentation located in the <b>WinDDK\6000\src\general\toaster</b> directory of your Vista WDR installation. It would provide you with the steps necessary to compile and run the tools and drivers needed to add Toaster devices to your system. Once done you should be able to run a command similar to this:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Console</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl17Console');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">&#62;</span>Enum.exe -p 8</pre>
</div>
<p>to add a toaster device to you machine. When you have some Toaster devices you can run a command similar to this one:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Console</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl18Console');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> DssHost.exe /p:50000 /t:50001 /m:"myToasterSvc\myToasterSvc.manifest.xml"</pre>
</div>
<p>out of your Microsoft Robotics Studio Command Prompt. Once the DSS node starts up you can access the state of the service by going to the following URL in your browser:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Console</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl19Console');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> http://localhost:50000/mytoastersvc</pre>
</div>
<p>If you used a different name for your Toaster service, you URL will be different. The state you see will be similar to this:</p>
<div class="code">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">XML</div>
<div class="CopyCodeButton"><a href="CopyCode('ctl00_rs1_mainContentContainer_ctl20XML');" class="copyCode"><img src="http://i.msdn.microsoft.com/platform/Controls/CodeSnippet/resources/copy_off.gif" align="middle" border="0" height="9" /> Copy Code</a></div>
</div>
<pre> <span style="color:blue;">&#60;</span><span style="color:maroon;">?xml</span> version="1.0" encoding="utf-8" ?<span style="color:blue;">&#62;</span>
<span style="color:blue;">&#60;</span><span style="color:maroon;">myToasterSvcState</span> xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:d="http://schemas.microsoft.com/xw/2004/10/dssp.html" xmlns="http://schemas.tempuri.org/2007/08/mytoastersvc.html"<span style="color:blue;">&#62;</span>
  <span style="color:blue;">&#60;</span><span style="color:maroon;">Toasters</span><span style="color:blue;">&#62;</span>
  <span style="color:blue;">&#60;</span><span style="color:maroon;">myToasterInfo</span><span style="color:blue;">&#62;</span>
    <span style="color:blue;">&#60;</span><span style="color:maroon;">FriendlyName</span><span style="color:blue;">&#62;</span>ToasterDevice08<span style="color:blue;">&#60;/</span><span style="color:maroon;">FriendlyName</span><span style="color:blue;">&#62;</span>
    <span style="color:blue;">&#60;</span><span style="color:maroon;">CompDescription</span><span style="color:blue;">&#62;</span>Microsoft Toaster With Coinstaller<span style="color:blue;">&#60;/</span><span style="color:maroon;">CompDescription</span><span style="color:blue;">&#62;</span>
    <span style="color:blue;">&#60;</span><span style="color:maroon;">CompInstanceId</span><span style="color:blue;">&#62;</span>{B85B7C50-6A01-11D2-B841-00C04FAD5171}\MSTOASTER\1&#38;431A56F&#38;0&#38;04<span style="color:blue;">&#60;/</span><span style="color:maroon;">CompInstanceId</span><span style="color:blue;">&#62;</span>
  <span style="color:blue;">&#60;/</span><span style="color:maroon;">myToasterInfo</span><span style="color:blue;">&#62;</span>
  <span style="color:blue;">&#60;/</span><span style="color:maroon;">Toasters</span><span style="color:blue;">&#62;</span>
<span style="color:blue;">&#60;/</span><span style="color:maroon;">myToasterSvcState</span><span style="color:blue;">&#62;</span></pre>
</div>
</div>
<h1 class="heading">Summary</h1>
<div class="section">In this tutorial you have learned how to do basic integration between Windows DDK and Microsoft Robotics Studio.</p>
<p>Here are the steps that we took:</p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#1-CreateSvc">Create a new DSS C++ service</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#2-AddToast">Add toaster application code</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#3-ConfBuild">Configure build</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#4-FixingToast">Fix toast.cpp</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#5-IntCode">Integrating code</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb758855.aspx#6-TryIt">Try it out</a></li>
</ul>
</div>
</div>
</div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[RobotTurk with MSRS saving life]]></title>
<link>http://gaubuali.wordpress.com/2008/03/19/robotturk-with-msrs-saving-life/</link>
<pubDate>Wed, 19 Mar 2008 11:02:03 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2008/03/19/robotturk-with-msrs-saving-life/</guid>
<description><![CDATA[In 1999 northwestern Turkey was struck by a 7.4 magnitude earthquake which resulted in the deaths of]]></description>
<content:encoded><![CDATA[<p>In 1999 northwestern Turkey was struck by a 7.4 magnitude earthquake which resulted in the deaths of over 45,000 people and leaving millions homeless. The disaster was compounded by a five-day communication breakdown among the local authorities making it difficult to assess ground conditions and to coordinate relief efforts.   Motivated to assist these types of rescue efforts, we have worked with the Istanbul Municipality and Microsoft to develop RobotTurk - a Disaster Emergency Video System.</p>
<p><a href="http://roboticsnedir.com/robotturk/RobotTurk_web.jpg" title="RobotTurk" target="_blank"><img src="http://roboticsnedir.com/robotturk/RobotTurk_thumb.jpg" style="width:150px;height:113px;" alt="RobotTurk" align="left" height="113" hspace="5" width="150" /></a>RobotTurk is a prototype Unmanned Aerial Vehicles (UAV) equipped with a camera that is capable of streaming live video of disaster struck areas to ground command stations. The helicopter carries onboard an eBox compute-unit that runs Microsoft Robotics Studio, allowing the robot to execute specific command issued by ground statation or to auto-fly or safely land. The ground stations utilizes Windows Server 2008 Media Services that capture, process and streams video. The disaster coordination users utilizes Microsoft Virtual Earth as a mapping tool and Silverlight streaming to show the overlaid video on the maps.<br />
<a href="http://roboticsnedir.com/robotturk/RobControlPanel_web.jpg" target="_blank"><img src="http://roboticsnedir.com/robotturk/RobControlPanel_thumb.jpg" style="width:150px;height:82px;" alt="Control Panel" align="right" border="0" height="82" hspace="5" width="150" /></a><br />
With Microsoft Virtual Earth as the mapping tool, users can select a new destination, add a new mission, and track the helicopter’s current position on the map. Images of the site are streamed using Silverlight.</p>
<p><a href="http://roboticsnedir.com/robotturk/RobStreamPanel_web.jpg" target="_blank"><img src="http://roboticsnedir.com/robotturk/RobStreamPanel_thumb.jpg" style="width:150px;height:86px;" alt="Streaming Panel" align="left" border="0" height="86" hspace="5" width="150" /></a></p>
<p>The Microsoft Virtual Earth map on the right shows the actual position of the robot as well as additional flight data. Hosted on Windows Server 2008, the Web site uses Silverlight to stream the incoming images.</p>
<p>We currently have a prototype and most of the ground station and automous flight tasks have been implemented. The high-level architecture of the system is as follows:</p>
<p><img src="http://roboticsnedir.com/robotturk/overview.jpg" style="width:677px;height:475px;" alt="Overview" border="0" height="475" width="677" /></p>
<p><a href="http://robotturk.eu/">http://RobotTurk.eu</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Démonstration de Robotics Studio]]></title>
<link>http://gaubuali.wordpress.com/2007/12/29/demonstration-de-robotics-studio/</link>
<pubDate>Sat, 29 Dec 2007 00:22:25 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2007/12/29/demonstration-de-robotics-studio/</guid>
<description><![CDATA[Ce sont des superbes démonstrations sur Microsoft Robotics Studio de Olivier&#8217;s Blog.

Découv]]></description>
<content:encoded><![CDATA[<p>Ce sont des superbes démonstrations sur Microsoft Robotics Studio de Olivier's Blog.<br />
<a href="http://soapbox.msn.com/video.aspx?from=msnvideo&#38;showPlaylist=true&#38;playlist=videoByUuids:uuids:7074320d-8369-49d9-a4a9-73f74bf3ccdd" target="_new" title="Découvrez Microsoft Robotics Studio"><img src="http://a1754.g.akamai.net/f/1754/23830/v0001/msnuuv1.download.akamai.com/23830/frames/prod/50/7a/c5/d58b3c11-d6fa-4681-baf8-8a9b69c57a50.jpg" alt="Découvrez Microsoft Robotics Studio" border="0" height="300" width="400" /><br />
Découvrez Microsoft Robotics Studio</a><br />
<a href="http://soapbox.msn.com/video.aspx?from=msnvideo&#38;showPlaylist=true&#38;playlist=videoByUuids:uuids:c3d474db-35b5-4a2f-b5b1-3d67262bc4a5" target="_new" title="Découvrez Microsoft Robotics Studio avec MSDN"><img src="http://a993.g.akamai.net/f/993/23830/v0001/msnuuv1.download.akamai.com/23830/frames/prod/82/cc/cf/43c852a3-322b-4a16-b660-e713afcfcc82.jpg" border="0" alt="Découvrez Microsoft Robotics Studio avec MSDN" width="400" height="300"/><br />Découvrez Microsoft Robotics Studio avec MSDN</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Kit de BoeBot avec Microsoft Studio Robotics]]></title>
<link>http://gaubuali.wordpress.com/2007/10/30/kit-de-boebot-avec-microsoft-studio-robotics/</link>
<pubDate>Tue, 30 Oct 2007 22:29:38 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2007/10/30/kit-de-boebot-avec-microsoft-studio-robotics/</guid>
<description><![CDATA[Voilà, après quelques recherches, j&#8217;ai trouvé que l&#8217;entreprise Parallax, qui fournit ]]></description>
<content:encoded><![CDATA[<p>Voilà, après quelques recherches, j'ai trouvé que l'entreprise Parallax, qui fournit des produits robotiques pour apprendre et développer très intéressants, a sorti un nouveau kit de BoeBot: le kit de BoeBot normal avec la carte de Bluetooth qui permet de synchroniser le robot avec l'ordinateur à travers Microsoft Studio Robotics (MSR). Voilà quelques images que j'ai trouvé sur Olivier's Embedded blog: <a href="http://blogs.msdn.com/obloch/archive/2006/12/08/un-ch-ti-robot-pilot-avec-microsoft-robotics-studio-a-small-robot-driven-by-microsoft-robotics-studio.aspx" title="olivier blog">click here</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Parallax and Microsoft Team Up]]></title>
<link>http://gaubuali.wordpress.com/2007/10/15/parallax-and-microsoft-team-up/</link>
<pubDate>Mon, 15 Oct 2007 19:04:49 +0000</pubDate>
<dc:creator>gaubuali</dc:creator>
<guid>http://gaubuali.fr.wordpress.com/2007/10/15/parallax-and-microsoft-team-up/</guid>
<description><![CDATA[Parallax and Microsoft have collaborated to combine the power of Microsoft® Robotics Studio with th]]></description>
<content:encoded><![CDATA[<p>Parallax and Microsoft have collaborated to combine the power of Microsoft<sup>®</sup> Robotics Studio with the  				versatile and easy to use Boe-Bot<sup>®</sup> Robot. With the Boe-Bot Robot  				Kit for Microsoft Robotics Studio, you  				can develop PC code to monitor and orchestrate the activities of one or more Boe-Bot robots, all via  				Bluetooth wireless.</p>
<p>To learn more about the kit, free downloads, documentation and tutorials, check out the  				<a href="http://www.parallax.com/detail.asp?product_id=28118">Boe-Bot Kit for Microsoft  				Robotics Studio</a> product page.</p>
<p>To learn more about Microsoft Robotics Studio, go to the  				<a href="http://msdn.microsoft.com/robotics/" target="_blank">Microsoft Robotics Studio</a> page.</p>
<p><strong>The Boe-Bot Kit Microsoft Robotics Studio</strong></p>
<p>This kit’s hardware includes our popular Boe-Bot robot full kit and the  				<a href="http://www.parallax.com/detail.asp?product_id=30068">eb500 Bluetooth module</a>,  				making it possible for the 				<a href="http://www.parallax.com/detail.asp?product_id=28132">Boe-Bot robot</a> to communicate with a PC’s Bluetooth radio.  All the software  				you’ll use with the kit is available for free download, including the following:</p>
<ul>
<li>The Parallax BASIC Stamp Editor</li>
<li>PBASIC example programs for the Boe-Bot robot</li>
<li>The latest Microsoft Robotics Studio Community Technical Preview (CTP) release</li>
<li>Microsoft programming languages such as Microsoft Visual C# and VB.Net.</li>
</ul>
<p><a href="http://www.parallax.com/detail.asp?product_id=28118"> 				<img src="http://www.parallax.com/images/prod_gif/28118.gif" align="right" border="0" height="200" width="200" /></a>The kit’s documentation and example code provide tutorials and demonstrations that use a Microsoft  				Robotics Studio “service” to control the Boe-Bot robot.  They also demonstrate how to manipulate the  				Boe-Bot robot’s PBASIC and the PC’s C# code for PC programmed wireless Boe-Bot  				robot monitoring and control.   				After that, you’ll be ready to tackle Microsoft’s tutorials, which show how to leverage the Robotic  				Studio’s BASIC Stamp 2 services for PC navigation based on sensor inputs as well as GUI development.</p>
<p>Check out the <a href="http://www.parallax.com/detail.asp?product_id=28118">Boe-Bot  				Kit for Microsoft Robotics Studio</a>.<br />
For additional assistance with the Robotics Studio hardware  				contact us.</p>
<p><strong>About Microsoft Robotics Studio</strong></p>
<p>Microsoft Robotics Studio provides an end-to-end robotics development environment for hobbyist,  				academic, and commercial robotic developers. Microsoft Robotics Studio is a Windows-based environment  				that offers the following key features and benefits:</p>
<ul><strong>End-to-End Robotics Development Platform:</strong>  Microsoft Robotics Studio enables  					developers to generate modular services for hardware and software, allowing users to interact  					with robots through Windows-based or Web interfaces.  Developers can also simulate robotic  					applications using realistic 3D models with AGEIA™ PhysX™ Technology. AGEIA™ is a pioneer in  					hardware-accelerated physics, enabling real-world physics simulations with robot models.  					Simulations can be accelerated through hardware acceleration using the AGEIA™ PhysX™ processor  					(Available in PhysX™ Accelerator add-in cards for PCs).<strong>Lightweight services-oriented runtime:</strong> Microsoft Robotics Studio provides a  					lightweight service-oriented runtime. Using a .NET-based concurrency library, it makes  					asynchronous and distributed application development simple.  The service-oriented message-based  					architecture makes it possible to realization of highly complex applications through the  					composition and orchestration of simpler services.</p>
<p><strong>Scalable and extensible platform:</strong> Microsoft Robotics Studio programming model can be  					applied for a variety of robot hardware platforms, enabling users to transfer their learning  					skills across platforms. Third-parties can also extend the functionality of the platform by  					providing additional libraries and services. Both remote (PC-based) and robot-based  					(autonomous) execution scenarios can be realized using a selection of programming languages,  					including those included in Microsoft Visual Studio and Microsoft Visual Studio Express  					languages (C# and VB.NET), as well as Jscript and Micro