Code de contrôleur personnalisé dans VEXcode EXP

L'utilisation du contrôleur peut faciliter la conduite et le déplacement de votre robot pour accomplir une tâche. Cependant, l'utilisation du programme Drive présente des limites et, en fonction de la construction de votre robot ou de la tâche à accomplir, vous souhaiterez peut-être des commandes différentes. Le codage du contrôleur vous permet d'optimiser le contrôleur pour qu'il s'adapte mieux à votre robot et à la tâche à accomplir. Il existe plusieurs façons de coder le contrôleur dans VEXcode EXP. Chacune a ses avantages et ses limites, et certaines méthodes sont mieux adaptées à certaines situations en fonction du résultat souhaité.

Cet article vous présentera trois options différentes pour le codage personnalisé du contrôleur dans VEXcode EXP. Chaque méthode sera décrite avec ses avantages, ses limites et un exemple de cas d'utilisation pour vous guider dans le choix d'une méthode. Pour les besoins de cet article, tous les exemples de code présentés ont été créés pour Clawbot. Cependant, les mêmes concepts pourraient être appliqués à de nombreuses autres versions trouvées sur builds.vex.comet aux versions personnalisées.

Option 1 : Attribution de boutons dans la configuration de l'appareil

Cette option est idéale lorsque vous utilisez une version standard, comme un BaseBot ou un Clawbot, et que vous souhaitez être opérationnel rapidement.

Cette option vous permet d'attribuer des moteurs, une transmission ou des groupes de moteurs aux boutons du contrôleur dans la configuration de l'appareil. Pour plus d’informations sur la façon d’attribuer des boutons au contrôleur dans la configuration du périphérique, cet article.

Menu VEXcode EXP Devices avec les options du contrôleur affichées. Le schéma des commandes par boutons montre que les deux joysticks pilotent le robot selon une configuration de type char d'assaut. Les boutons Haut et Bas contrôlent un groupe de moteurs de bras, et les boutons de l'axe R contrôlent un moteur à griffes.

Résumé de l'option 1 : attribution de boutons dans la configuration de l'appareil

Avantages

Limites

Exemple de situation

  • Installation rapide sans codage nécessaire
  • Méthode la plus simple
  • Facilement réglable
  • Peut attribuer des moteurs individuels, une transmission standard et des groupes de moteurs aux boutons
  • Les affectations de boutons sont limitées au nombre de boutons sur le contrôleur
  • La transmission ne peut pas dépasser 4 moteurs ni être personnalisée (seul un entraînement standard est pris en charge, pas un entraînement H, holonomique ou autre transmission personnalisée)
  • Manipuler une version standard telle qu'un BaseBot, un Clawbot ou une simple modification de ces versions standard. Par exemple, un BaseBot avec une admission fixée à l'avant contrôlée par un groupe moteur.
  • Manipuler rapidement quels boutons correspondent à différents comportements sur le robot sans trop de codage

Option 2 : Utilisation d'une boucle permanente

Si vous utilisez une version personnalisée au lieu d’une version standard, ou si vous souhaitez pouvoir personnaliser davantage votre contrôleur, cette option est la bonne. L'utilisation d'une boucle Forever est une excellente introduction pour créer du code personnalisé pour votre contrôleur.

Cette option place toutes les conditions du contrôleur et de ses boutons associés dans une boucle Forever. Cela offre plus de flexibilité, en particulier avec les conceptions de build personnalisées, mais nécessite également une certaine expérience en codage. Cependant, une considération lors de l’utilisation de cette option est la longueur et la complexité de votre projet. Plus de conditions sont ajoutées, plus la pile de code peut devenir longue. Cela signifie que plusieurs blocs doivent être exécutés dans l’ordre, et lorsqu’il y a beaucoup de blocs, cela peut ralentir l’exécution du projet. Une exécution plus lente du projet peut créer un décalage entre l'actionnement des boutons du contrôleur et l'observation du comportement du robot.

L'exemple spécifique présenté ci-dessous est une façon d'utiliser une boucle Forever avec un robot de conception personnalisée (tel qu'un robot avec une transmission personnalisée) pour conduire le robot et manipuler la griffe et le bras afin d'interagir avec les objets.

Espace de travail VEXcode EXP avec le projet de blocs Option 2 ouvert. Le projet comporte une pile de blocs et des périphériques configurés. Le menu Devices s'ouvre sur le côté et liste les périphériques suivants : ArmMotor sur le port 3, ClawMotor sur le port 4, Controller, LeftMotor sur le port 6 et RightMotor sur le port 10. Enfin, il y a la pile de blocs qui gère les entrées du contrôleur. La pile indique : Au démarrage, configurez l'arrêt du moteur du bras pour maintenir la position et configurez l'arrêt du moteur de la griffe pour maintenir la position. Le reste de la pile est contenu dans une boucle Forever. Il est indiqué : « Pour toujours, réglez la vitesse du moteur gauche sur la position 3 du contrôleur, faites tourner le moteur gauche vers l'avant, réglez la vitesse du moteur droit sur la position 2 du contrôleur, et faites tourner le moteur droit vers l'avant. » Ensuite, si la touche Haut de la manette est enfoncée, faites tourner le moteur ArmMotor vers le haut ; sinon, si la touche Bas de la manette est enfoncée, faites tourner le moteur ArmMotor vers le bas ; sinon, arrêtez le moteur ArmMotor. Enfin, si la manette A est enfoncée, le moteur à griffes s'ouvre ; si la manette B est enfoncée, le moteur à griffes se ferme ; sinon, il s'arrête.

Téléchargez le fichier du projet VEXcode EXP "Option 2" >

Explication du code Option 2.

Pièce de code

Explication

Gros plan sur la pile de blocs du projet VEXcode EXP Option 2. Deux blocs sont mis en évidence et se trouvent en dehors de la boucle Forever de la pile ; ils indiquent « set ArmMotor stopping to hold » et « set ClawMotor stopping to hold ».

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

Gros plan sur la pile de blocs du projet VEXcode EXP Option 2. Quatre blocs sont mis en évidence à l'intérieur de la boucle Forever de la pile. Ils lisent Forever, règlent la vitesse du moteur gauche sur la position 3 du contrôleur, font tourner le moteur gauche vers l'avant, règlent la vitesse du moteur droit sur la position 2 du contrôleur et font tourner le moteur droit vers l'avant. Schéma de la manette EXP avec ses boutons et joysticks étiquetés. La vue est prise depuis l'avant de la manette. Les axes du joystick gauche sont numérotés 3 et 4. Le bouton central du joystick gauche est étiqueté L3. Les deux boutons ronds situés sous le joystick gauche sont étiquetés Haut et Bas. Les axes du joystick droit sont numérotés 1 et 2. Le bouton central du joystick droit est étiqueté R3. Les deux boutons ronds situés sous le joystick droit sont étiquetés A et B.

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

Une boucle Forever est utilisée afin de vérifier en permanence quels boutons sont enfoncés sur le contrôleur.

Les blocs [Définir la vitesse du moteur] sont utilisés pour régler la vitesse du moteur à la position du contrôleur actuel le long des axes 2 et 3. C'est l'équivalent de mettre une voiture en marche. Cela ne fait pas nécessairement bouger la voiture, cela la fixe simplement.

Chaque axe du joystick renvoie une valeur comprise entre -100 et +100 et renvoie une valeur zéro lorsqu'il est centré. Cela signifie alors que les axes du joystick, lorsqu'ils sont poussés, équivalent à -100 % à 100 %. Plus les axes sont poussés vers 100 ou -100, plus le moteur tournera vite.

Le bloc [Spin] est ensuite utilisé pour déplacer réellement le moteur. C'est l'équivalent d'appuyer sur l'accélérateur sur la voiture une fois la direction définie. Cela permet à chaque moteur d'être contrôlé par l'un des quatre axes du contrôleur.

Gros plan sur la pile de blocs du projet VEXcode EXP Option 2. Un bloc if, else if, else est mis en évidence à l'intérieur de la boucle Forever de la pile. Il indique si la touche Haut de la manette est enfoncée, alors le moteur ArmMotor tourne vers le haut ; sinon, si la touche Bas de la manette est enfoncée, alors le moteur ArmMotor tourne vers le bas ; sinon, le moteur ArmMotor s'arrête.

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

Le bloc [If then else if then else] est utilisé pour mapper certains comportements aux boutons enfoncés ou relâchés sur le contrôleur. Dans cette section de code, les conditions définies sont si les boutons Haut ou Bas sont enfoncés. Si tel est le cas, certains comportements se produiront, comme le fait de lever et d’abaisser les bras. Il y a aussi la partie else de la condition, si aucun bouton n'est enfoncé, le bras est réglé pour arrêter de bouger.

Notez que la section suivante du code du projet Claw suit la même explication.

Résumé de l'option 2 : Utilisation d'une boucle permanente

Avantages

Limites

Exemple de situation

  • Peut s'adapter aux constructions personnalisées, en particulier aux transmissions comportant plus de 4 moteurs
  • Peut attribuer plusieurs comportements à un seul bouton
  • Peut attribuer des comportements à différents axes du contrôleur (par opposition aux seules options Left Arcade, Right Arcade, Split Arcade et Tank Drive dans la configuration de l'appareil)
  • Nécessite une certaine quantité de connaissances en codage (conditions, boucles et connaissance des boutons/joysticks du contrôleur)
  • Possibilité d'exécution plus lente du projet ou de retard dans le temps de réponse des boutons. Étant donné que toutes les commandes sont contenues dans une seule boucle Forever, l'exécution du code peut s'exécuter lentement en fonction des conditions définies et de la longueur du code.
  • Utilisation du contrôleur avec un robot personnalisé, en particulier avec une transmission non standard
  • Lorsque vous souhaitez attribuer plusieurs comportements à un seul bouton. Par exemple, lorsque vous appuyez sur le bouton Haut, la griffe peut s'ouvrir, avancer, puis se refermer autour d'un objet.

Option 3 : Utilisation des événements

Si vous souhaitez beaucoup de personnalisation de votre contrôleur, l'utilisation d'événements est la meilleure option pour vous. Une simple pression sur un bouton peut déclencher plusieurs comportements du robot, comme appuyer sur un bouton pour ouvrir la griffe, lever le bras et avancer sur une distance définie. Essayer de coder plusieurs comportements par bouton dans une boucle Forever entraînerait un ralentissement considérable de l'exécution du projet – l'utilisation d'événements vous permet de le faire plus efficacement.

Cette option utilise des événements pour interrompre le flux du projet. Ceci est similaire à l'utilisation d'une boucle Forever, mais permet au code d'être plus organisé, de sorte que l'exécution du bouton ait un temps de réponse plus rapide. Un temps de réponse plus rapide signifie que vous ne verrez pas de décalage entre l'appui sur les boutons du contrôleur et l'observation du comportement du robot. Cet exemple montre les mêmes comportements que le projet précédent, mais en utilisant les événements au lieu de la boucle Forever.

Espace de travail VEXcode EXP avec le projet de blocs Option 3 ouvert. Le projet comprend 11 petits empilements de blocs et des appareils configurés. Le menu Devices s'ouvre sur le côté et liste les périphériques suivants : ArmMotor sur le port 3, ClawMotor sur le port 4, Controller, LeftMotor sur le port 6 et RightMotor sur le port 10. Enfin, il y a les 11 petits blocs qui gèrent les entrées du contrôleur. La première pile indique : Au démarrage, configurez l'arrêt du moteur du bras pour maintenir la position de maintien, puis configurez l'arrêt du moteur de la griffe pour maintenir la position de maintien. La deuxième pile indique : Lorsque l'axe 3 du contrôleur est modifié, définissez la vitesse du moteur gauche sur le % de la position du contrôleur 3, puis faites tourner le moteur gauche vers l'avant. La troisième pile indique : Lorsque l'axe 2 du contrôleur est modifié, définissez la vitesse du moteur droit sur le % de la position du contrôleur 2, puis faites tourner le moteur droit vers l'avant. La quatrième ligne indique : « Lorsque le bouton Haut de la manette est enfoncé, le moteur du bras tourne vers le haut. » La cinquième ligne indique : « Lorsque le bouton Haut de la manette est relâché, arrêtez le moteur du bras. » La sixième ligne indique : Lorsque le bouton Bas de la manette est enfoncé, le moteur du bras tourne vers le bas. La septième ligne indique : « Lorsque le bouton Bas de la manette est relâché, arrêtez le moteur du bras. » La huitième ligne indique : « Lorsque le bouton A de la manette est enfoncé, le moteur à griffes s'ouvre. » La neuvième ligne indique : « Lorsque le bouton A de la manette est relâché, arrêtez le moteur à griffes. » La dixième ligne indique : « Lorsque le bouton B de la manette est enfoncé, le moteur à griffes se referme. » La onzième et dernière instruction indique : « Lorsque le bouton B de la manette est relâché, arrêtez le moteur à griffes. »

Téléchargez le fichier du projet VEXcode EXP "Option 3" >

Explication du code Option 3.

Pièce de code

Explication

Gros plan sur une pile de blocs du projet VEXcode EXP Option 3. La pile indique : Au démarrage, configurez l'arrêt du moteur du bras pour maintenir la position de maintien, puis configurez l'arrêt du moteur de la griffe pour maintenir la position de maintien.

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

Gros plan sur deux piles de blocs dans le projet VEXcode EXP Option 3. La première pile indique : Lorsque l'axe 3 du contrôleur est modifié, définissez la vitesse du moteur gauche sur le pourcentage de la position du contrôleur 3, puis faites tourner le moteur gauche vers l'avant. La deuxième pile indique : Lorsque l'axe 2 du contrôleur est modifié, définissez la vitesse du moteur droit sur le pourcentage de la position du contrôleur 2, puis faites tourner le moteur droit vers l'avant. Schéma de la manette EXP avec ses boutons et joysticks étiquetés. La vue est prise depuis l'avant de la manette. Les axes du joystick gauche sont numérotés 3 et 4. Le bouton central du joystick gauche est étiqueté L3. Les deux boutons ronds situés sous le joystick gauche sont étiquetés Haut et Bas. Les axes du joystick droit sont numérotés 1 et 2. Le bouton central du joystick droit est étiqueté R3. Les deux boutons ronds situés sous le joystick droit sont étiquetés A et B.

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

{When controller axis} Les blocs d'événements sont utilisés pour déclencher certains comportements lorsque l'un des quatre axes du contrôleur est modifié à l'aide des joysticks.

Les blocs [Définir la vitesse du moteur] sont utilisés pour régler la vitesse du moteur à la position du contrôleur actuel le long des axes A et D. C'est l'équivalent de mettre une voiture en marche. Cela ne fait pas nécessairement bouger la voiture, cela la fixe simplement.

Chaque axe du joystick renvoie une valeur comprise entre -100 et +100 et renvoie une valeur zéro lorsqu'il est centré. Cela signifie alors que les axes du joystick, lorsqu'ils sont poussés, équivalent à -100 % à 100 %. Plus les axes sont poussés vers 100 ou -100, plus le moteur tournera vite.

Le bloc [Spin] est ensuite utilisé pour déplacer réellement le moteur. C'est l'équivalent d'appuyer sur l'accélérateur sur la voiture une fois la direction définie. Cela permet à chaque moteur d'être contrôlé par l'un des quatre axes du contrôleur.

Gros plan sur quatre piles de blocs dans le projet VEXcode EXP Option 3. La première pile indique : Lorsque le bouton Haut de la manette est enfoncé, le moteur du bras tourne vers le haut. La deuxième pile indique : Lorsque le bouton Haut de la manette est relâché, arrêtez le moteur du bras. La troisième pile indique : Lorsque le bouton Bas de la manette est enfoncé, faire tourner le moteur du bras vers le bas. La quatrième pile indique : « Lorsque le bouton Bas de la manette est relâché, arrêtez le moteur du bras. »

Un Clawbot a été utilisé pour cet exemple de code. Lorsque les boutons du contrôleur sont utilisés pour lever et abaisser le bras, dès que le bouton est relâché, en raison de la gravité, le bras retombe. Régler le bras et la griffe sur « maintenir » garantira que le bras et la griffe resteront en place même après que les boutons du contrôleur aient été relâchés.

{When controller axis} Les blocs d'événements sont utilisés pour mapper certains comportements aux boutons enfoncés ou relâchés sur le contrôleur. Dans cette section de code, les conditions définies sont si les boutons Haut ou Bas sont enfoncés. Si tel est le cas, certains comportements se produiront, comme lever, baisser ou arrêter le bras.

Notez que la dernière section de code du projet pour Claw suit la même explication.

Résumé de l'option 3 : Utilisation des événements

Avantages

Limites

Exemple de situation

  • Peut s'adapter aux constructions personnalisées, en particulier aux transmissions comportant plus de 4 moteurs
  • Peut attribuer plusieurs comportements à un seul bouton
  • Peut attribuer des comportements à différents axes du contrôleur (par opposition aux seules options Left Arcade, Right Arcade, Split Arcade et Tank Drive dans la configuration de l'appareil)
  • Exécution de code plus rapide et donc réactivité des boutons (car chaque condition est appelée séparément et n'est pas intégrée dans une seule pile de code)
  • Nécessite le plus de connaissances en codage des options (conditionnelles, boucles, événements et connaissance des boutons/joysticks du contrôleur)
  • Utilisation du contrôleur avec un robot personnalisé, en particulier avec une transmission non standard
  • Lorsque vous souhaitez attribuer plusieurs comportements à un seul bouton sans décalage. Par exemple, lorsque vous appuyez sur le bouton Haut, la griffe peut s'ouvrir, avancer, puis se refermer autour d'un objet.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: