Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Découvrir > Microsoft Robotics Studio > Microsoft Robotics Studio (VF)

Microsoft Robotics Studio (VF)

Récit d’aventures lors du développement de drivers pour Devantech

mercredi 15 novembre 2006, par Chris


Toutes les versions de cet article : [English] [français]

Microsoft s’interesse enfin à la robotique. Qu’ont-ils fait pour cela ? Comment ça fonctionne et comment cela peut-il vous aider ?

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.

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 Web Services Application Protocol (WSAP).

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.

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.

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).

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’.

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.

e.g.

// Create a port :
Port<DateTime> _timerPort = new Port<DateTime>() ;

// Define the handler :
void TimerHandler(DateTime signal)

// do something

// Activate the handler :
Activate(Arbiter.Receive(true, _timePort, TimerHandler)) ;

A partir de cette définition, lorsque vous souhaitez faire apparaitre un évenement, postez un message avec un type DateTime.

_timerPort.Post(DateTime.Now) ;

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.

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.

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....

Par exemple :

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.

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.

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).

L’état peut être sérialisé au traver d’un butineur internet en tant que donnée XML :

en utilisant les feuilles de style XSLT, on peut transformer des données XML en une page HTML.

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.

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 !

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.

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.

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.

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.

Pour un rapide aperçu d’un programme crée à partir d’un service, regarder l’exemple Say Fire

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.

video du CCR : http://channel9.msdn.com/ShowPost.a...

CCR : http://channel9.msdn.com/wiki/defau...

video MRS : http://channel9.msdn.com/Showpost.a...

MRS d’octobre : http://msdn.microsoft.com/robotics/...

Chips Devantech : http://www.robot-electronics.co.uk/...

Amusez-vous bien !

Chris Kilner

[traduction de l’[article original de Chris publié en octobre 2006 sur ce même site.]


Voir en ligne : Voir le site web MSDN

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.