Article
Article
Article
aspx
Les produits MINDSTORMS sont des produits LEGO incluant tout ce dont un développeur a besoin pour créer et programmer
physiquement des robots réels. Le produit MINDSTORMS typique inclut un tableau de blocs, de moteurs, de capteurs, ainsi
qu'un contrôleur central, appelé LEGO RCX.
Pour commencer, vous devez télécharger et installer le kit LEGO MINDSTORMS SDK 2.5 gratuit. Cela permettra d'installer les
pilotes requis pour envoyer des commandes au LEGO MINDSTORM via la tour infrarouge. Vous devrez également installer un
produit Visual Studio 2005, tel que Visual Basic Express Edition 2005.
Les développeurs qui souhaitent écrire des applications basées sur RCX peuvent choisir entre deux modèles :
1. Télécharger le code LASM vers le RCX et l'exécuter en tant qu'application complète. Dans ce modèle, le programme
entier est envoyé au RCX et il est exécuté indépendamment par le processeur du RCX. Ce scénario est appelé
programmation « autonome », car le RCX s'exécute indépendamment du PC.
2. Envoyer une série de requêtes à partir d'un pilote (généralement un PC) afin d'indiquer au RCX les actions qu'il doit
exécuter. Dans ce modèle, la logique s'exécute sur le PC et seules des commandes impératives sont envoyées au RCX
en vue de leur traitement, par exemple les demandes de changement de la vitesse du moteur. Ce scénario est appelé
programmation « intégrée », car le RCX peut être intégré facilement à d'autres applications.
Dans les deux modèles, le PC pilote est responsable de l'assemblage du code LASM et de son déploiement sur le RCX. Ce
code peut être compilé par n'importe quel modèle (assemblé manuellement ou automatisé via le compilateur), mais il est
généralement déployé via l'infrastructure fournie par LEGO.
Pour déployer une liste d'instructions ou de requêtes, un développeur utilise le fichier GhostAPI.dll de LEGO, une DLL Win32
native qui offre un certain nombre de fonctionnalités de bas niveau, conçues pour simplifier le processus de mise en file
d'attente et de déploiement des commandes LASM. GhostAPI.dll dépend de l'une des deux DLL LEGO natives pour la
communication avec la tour infrarouge : PbkComm32.dll (pour RS-232) ou PbkUsbPort.dll (pour USB). Le protocole de la tour
proprement dite est géré via TowerAPI.dll, une autre dépendance GhostAPI.dll requise avec le déploiement. La tour
communique directement avec le RCX par infrarouge, allant d'une dizaine de centimètres à plusieurs mètres (environ 4,50
mètres). Lors du déploiement d'applications, prenez soin d'inclure les quatre DLL afin de prendre en charge chaque type de
port (GhostAPI.dll, PbkComm32.dll, PbkUsbPort.dll et TowerAPI.dll).
Si LEGO offre plusieurs solutions solides pour le développement d'applications autonomes, le project Interface Microsoft .NET
pour LEGO MINDSTORMS a été conçu pour permettre le développement facile d'applications intégrées avec Visual Studio
2005 et le .NET Framework 2.0.
Avec l'interface Microsoft .NET pour LEGO MINDSTORMS, un développeur peut utiliser le langage .NET Framework de son
choix pour développer par rapport à une bibliothèque de classes de haut niveau qui ressemble étroitement au modèle
physique des robots MINDSTORMS. Il comprend des classes pour le RCX, ainsi que des classes pour les moteurs et les
capteurs.
Haut de page
Objectifs de conception
L'interface Microsoft .NET pour LEGO MINDSTORMS a été conçue avec un objectif de simplicité pour le développeur. Avec
cette philosophie de conception, n'importe quel développeur doit pouvoir utiliser la bibliothèque de classes afin de
développer une application RCX sans aucune connaissance de LASM, ni des API sous-jacentes utilisées pour communiquer
avec le périphérique, que ce soit au niveau des couches d'application ou des couches de données.
Haut de page
Vue d'ensemble de la conception
L'interface Microsoft .NET pour LEGO MINDSTORMS encapsule le fichier GhostAPI.dll LEGO et émule un modèle de contrôleur
en temps réel. Bien que le RCX proprement dit ne fournisse pas de notifications d'événement au PC pilote, la bibliothèque
Interface Microsoft .NET pour LEGO MINDSTORMS simule cette fonctionnalité en interrogeant régulièrement le RCX sur un
thread distinct, puis en invoquant des changements via une classe de proxy abstraite. Le résultat est que les développeurs
peuvent bénéficier d'une excellente prise en charge .NET, notamment la prise en charge des propriétés et des événements,
sans avoir à implémenter les mécanismes d'interopérabilité de bas niveau ou à gérer le timing.
C4F.LegoRcx.dll
Tous les types exposés par l'interface Microsoft .NET pour LEGO MINDSTORMS sont disponibles dans l'assembly
C4F.LegoRcx.dll.
La classe GhostApiWrapper
Bien que masquée pour les développeurs qui consomment la bibliothèque, la classe GhostApiWrapper est probablement le
type le plus important de l'assembly. Elle expose toutes les fonctionnalités du fichier GhostAPI.dll de LEGO requises pour
envoyer des demandes au RCX. Elle est utilisée exclusivement par les classes de l'interface Microsoft .NET pour LEGO
MINDSTORMS et n'est pas accessible publiquement par les développeurs.
Pour émuler les événements en temps réel, GhostApiWrapper crée un thread de commande, qui demande les valeurs des
capteurs actifs le plus souvent possible et envoie d'autres commandes émises via les classes de niveau supérieur. Bien qu'il ne
possède pas de mécanisme de limitation, les commandes infrarouge tendent à être tellement longues que la boucle de
commande ne tourne pas trop vite. Le mécanisme de limitation est essentiellement utile lorsque aucun capteur n'est
interrogé, afin de garantir que le processeur n'est pas utilisé à 100 % pendant la boucle.
Pour offrir le niveau le plus élevé de performance et de réalisme, GhostApiWrapper n'exécute pas directement les commandes
dès réception. Il existe trois moyens d'envoyer les commandes au RCX, selon que le développeur configure les propriétés du
moteur, extrait les données ou envoie d'autres commandes. Notez que chaque méthode est transparente pour le
développeur, lequel interagit uniquement avec les classes de niveau supérieur.
Pour déplacer le RCX, ses moteurs doivent être manipulés via les paramètres de puissance et de direction. Faire cela en série,
par exemple en configurant la puissance du moteur A sur 5, puis la puissance du moteur C sur 5, donnerait un mouvement
saccadé, qui ne déplacerait pas le RCX en ligne droite (sur la base de la configuration RoverBot standard). Pour atténuer ce
problème, la classe GhostApiWrapper n'accepte pas directement les commandes de manipulation des moteurs. C'est un
développeur qui change la valeur de la puissance du moteur dans une classe partagée dérivée de RcxBase, que le thread de
commande de GhostApiWrapper interroge et met à jour en fonction des besoins lors de l'itération suivante. Cela permet au
wrapper de tirer parti de demandes groupées, lorsque plusieurs moteurs peuvent être manipulés avec une commande unique.
Extraction de données
Dans la mesure où une liaison infrarouge est utilisée pour extraire les données du périphérique, cette extraction peut parfois
s'avérer lente. Par conséquent, GhostApiWrapper interroge le RCX le plus souvent possible sur son thread de commande et
met en cache les résultats dans la classe partagée basée sur RcxBase. L'accès du développeur aux données RCX est ainsi
presque immédiat et les résultats sont censés être actuels en quelques centaines de millisecondes, excepté dans le cas de
certaines propriétés, telles que le niveau de batterie, interrogé moins fréquemment (toutes les quelques secondes).
Lorsqu'une réponse à une demande de données est reçue du RCX par GhostApiWrapper, ce dernier met à jour la classe
RcxBase partagée entre la couche d'encapsulation de l'API Ghost et la couche d'application de la bibliothèque. Certaines
valeurs, telles que les valeurs du capteur, déclenchent des événements si la valeur a changé.
Outre la manipulation des moteurs et l'extraction de données, il existe un ensemble de demandes pouvant être envoyées au
RCX pour effectuer certaines tâches, telles que la lecture de sons avec le haut-parleur RCX. Lorsque ces demandes sont
envoyées à GhostApiWrapper, elles sont mises en file d'attente avec les autres commandes en attente et sont envoyées au
thread de commande dans l'ordre dans lequel elles ont été reçues.
Classes publiques
Si de nombreuses classes de C4F.LegoRcx.dll sont utilisées pour l'abstraction de la fonctionnalité de l'API Ghost, les classes
publiques de C4F.LegoRcx.dll sont conçues pour offrir une interface transparente pour permettre aux développeurs externes
d'interagir avec le RCX proprement dit. Ainsi, seuls quelques types sélectionnés sont exposés publiquement, et même ces
types présentent un sous-ensemble de leurs propriétés, méthodes et événements respectifs, disponibles pour utilisation. La
limitation de la surface de programmation permet aux développeurs de comprendre et d'implémenter les applications plus
rapidement et plus facilement via l'interface.
Rcx
La classe flagship, Rcx, offre plusieurs méthodes utilisées pour manipuler certaines propriétés du RCX, telles que le temps
avant mise hors tension, l'affichage ou le haut-parleur, ainsi que des propriétés RcxMotor qui représentent chaque moteur et
des propriétés RcxSensor pour chaque capteur. Lors de sa création, la classe Rcx tente automatiquement de se connecter au
périphérique via USB, puis via RS-232. Si les deux tentatives échouent, le constructeur réussit, mais le développeur doit
connecter une tour et appeler la méthode Connect.
' Play a low C note for 200 ms (these two are functionally equivalent)
Me._rcx.PlayTone(33, 20)
Me._rcx.PlayTone(RcxNote.C1, 20)
' Send the message "47" to other RCX devices via our RCX device
Me._rcx.SendMessage(47)
RcxMotor
La classe RcxMotor est conçue pour émuler un moteur RCX physique. Pour faciliter le travail du développeur, il n'existe que
deux moyens de manipuler le moteur : via la propriété Power et via la méthode Off. La configuration de la propriété Power
sur une valeur positive ou négative garantit que le moteur est sous tension et configure sa direction respectivement vers
l'avant ou vers l'arrière. La configuration de Power sur 0 place le moteur en mode flottant, c'est-à-dire qu'il n'est pas
verrouillé, mais qu'il n'est pas alimenté. L'appel de la méthode Off définit Power sur 0 et verrouille le moteur dans l'état
désactivé.
Tout accès aux objets RcxMotor doit passer par une classe Rcx. Voici quelques exemples de l'utilisation de RcxMotor :
RcxSensor
La classe RcxSensor est conçue pour émuler un capteur RCX physique. Par défaut, chaque capteur est configuré sur le type
RcxSensorType.None. Pour utiliser le capteur, configurez-le sur le type approprié, tel que RcxSensorType.Touch pour un
capteur de toucher. La configuration du type sur une valeur autre que Aucun indique qu'un capteur actif est associé au port,
ce qui informe la couche du wrappeur Ghost API qu'elle peut interroger le capteur afin de connaître sa dernière valeur. La
valeur actuelle d'un RcxSensor peut être lue à partir de sa propriété Value, et un développeur peut s'abonner à l'événement
ValueChanged afin de recevoir des notifications en temps réel lorsque la valeur change.
Tout accès aux objets RcxSensor doit passer par une classe Rcx. Voici un exemple de configuration d'un capteur de toucher et
de gestion de son événement :
Déploiement d'applications
Les applications écrites avec l'interface Microsoft .NET pour LEGO MINDSTORMS présentent tous les avantages de
déploiement des applications .NET Framework 2.0. Pour commencer, l'ordinateur cible nécessite que le .NET Framework 2.0
soit installé. Notez que le .NET Framework 2.0 est installé automatiquement par Visual Studio 2005. En outre, l'ordinateur cible
nécessite également que le kit LEGO MINDSTORMS SDK 2.5 soit installé.
Une fois que l'ordinateur cible a été configuré, le moyen le plus simple de déployer ces applications consiste à copier les
fichiers exécutables et les fichiers de ressource, ainsi que les DLL requises, vers un dossier sur l'ordinateur cible. Si les fichiers
exécutables et les fichiers de ressource dépendent de votre application particulière, le répertoire exécutable doit toujours
contenir C4F.LegoRcx.dll. En outre, ce dossier nécessite également GhostApi.dll, ainsi que PbkUsbPort.dll (pour les tours USB)
ou PbkComm32.dll (pour les tours série), lesquels se trouvent dans [Program Files]\LEGO Software\LEGO Mindstorms SDK\Bin
\GhostAPI sur l'ordinateur cible après l'installation du kit LEGO MINDSTORMS SDK
Haut de page
Exemples d'applications
L'interface Microsoft .NET pour LEGO MINDSTORMS est livrée avec trois exemples d'applications, chacune disponible en
Visual Basic, Visual C#, C++ géré et Visual J#. Ces applications sont les suivantes :"
RemoteControlSample Illustre l'utilisation de RcxMotors. Notez que cet exemple nécessite la configuration RovertBot de
LEGO Constructopedia.
RoverBotSample Illustre le traitement des événements RcxSensor pour manoeuvrer le RCX autour des obstacles.
Notez que cet exemple nécessite la configuration RovertBot de LEGO Constructopedia.
Les téléchargements de code dans les différents langages incluent une copie de l'interface Microsoft .NET pour LEGO
MINDSTORMS en tant qu'assembly compilé. Le téléchargement en C++ géré inclut également le code source du projet pour
C4F.LegoRcx.dll.
Haut de page
Résumé
L'interface Microsoft .NET pour LEGO MINDSTORMS offre suffisamment de fonctionnalités pour permettre aux amateurs et
aux étudiants de commencer à expérimenter l'utilisation de la robotique, et a été conçue avec la simplicité comme principal
objectif. Un certain nombre d'exemples d'applications ont été développés pour illustrer les fonctionnalités de la bibliothèque
et pour permettre aux programmeurs de démarrer rapidement. Il existe plusieurs moyens d'utiliser cette bibliothèque pour
créer de nouvelles utilisations pour vos kits LEGO MINDSTORMS en les contrôlant avec une application Microsoft .NET. Par
exemple, vous pouvez programmer plusieurs MINDSTORMS afin qu'ils « collaborent » et partagent des informations sur un
labyrinthe. Ou vous pouvez recréer le fameux outil de résolution du Rubik's Cube de LEGO MINDSTORMS. Ou encore créer
des interfaces de services Web afin de contrôler un LEGO MINDSTORM en déplacement ? Les possibilités sont infinies. Nous
avons hâte de voir ce que vous allez créer.
Haut de page
© 2017 Microsoft