Loading…
Loading…
Dans cette leçon, les élèves approfondiront leur compréhension de la vision robotique en découvrant comment les AprilTags peuvent fournir des données spatiales précises.

Niveau: Intermédiaire
(Remarque : cette leçon présente l’interface de vision par ordinateur et est destinée aux débutants dans ce domaine spécifique. Elle suppose toutefois une expérience préalable avec FTC Sim. Les élèves et le personnel enseignant doivent avoir déjà suivi les leçons classiques d’introduction et être familiarisés avec l’utilisation de la plateforme et la programmation des mouvements des robots.)
Dans cette leçon, les élèves approfondiront leur compréhension de la vision robotique en découvrant comment les AprilTags peuvent fournir des données spatiales précises. À l’aide du Vision Portal, les élèves apprendront à accéder à des données, telles que la distance entre le robot et une balise, ainsi que l’angle sous lequel la balise est vue. Ces renseignements permettent au robot de prendre des décisions plus intelligentes en matière de mouvement et de positionnement. Grâce à des défis pratiques de codage, les élèves commenceront à programmer leur robot pour qu’il réagisse non seulement à la présence d’une balise, mais aussi à son emplacement et à son orientation, ce qui lui permettra d’adopter des comportements autonomes plus avancés.
Ce plan de cours est structuré selon le cadre pédagogique des 5E, un modèle d’enseignement largement reconnu qui comprend cinq phases : engager, explorer, expliquer, élaborer et évaluer. Le cadre pédagogique des 5E engage systématiquement les élèves dans un apprentissage basé sur l’enquête, encourageant l’exploration active et la compréhension de sujets complexes.
Au cours de la leçon, les élèves vont :
Apprendre à extraire et à interpréter les données de distance et d’angle à partir des AprilTags à l’aide du Vision Portal.
Utiliser le raisonnement mathématique et la perception spatiale pour guider les mouvements du robot en fonction du positionnement des balises.
Créer et appliquer des fonctions pour organiser leur code et le rendre plus efficace, réutilisable et facile à comprendre.
papillons adhésifs amovibles ou une application collaborative de remue-méninges comme Microsoft Whiteboard, FigJam ou Apple Freeform.
appareils pour vos élèves (ordinateurs Windows, ordinateurs Mac, ChromeBook)
navigateur web Google Chrome ou Microsoft Edge (version Chromium)
accès au site web du simulateur FTC (https://ftcsim.org)
compte « élève » créé pour chacun de vos élèves
projecteur ou tableau blanc interactif
Pour éveiller la curiosité des élèves et leur présenter la manière dont les robots interprètent leur environnement, commencez le cours en leur montrant la vidéo « How Robots See the World » disponible à l’adresse suivante : https://youtu.be/gEy91PGGLR0. Cette vidéo captivante explique comment différents types de capteurs, notamment des caméras, des capteurs LiDAR, des capteurs à ultrasons et des radars, permettent aux robots de percevoir la distance, la forme et le mouvement. Elle offre une comparaison claire du fonctionnement de chaque capteur et explique pourquoi les systèmes basés sur la vision sont si performants en robotique. Cela prépare les élèves à découvrir comment leur propre robot utilise une caméra et des AprilTags pour calculer la distance et l’angle, ce qui lui permet de naviguer et de prendre des décisions de manière plus intelligente. La vidéo aide également les élèves à comprendre les avantages et les limites de la vision par caméra par rapport à d’autres technologies, leur offrant ainsi une perspective plus large sur la façon dont les robots perçoivent le monde.
Après la présentation vidéo, distribuez des papillons adhésifs amovibles à vos élèves et encouragez-les à participer à une séance de remue-méninges sur la manière dont les robots peuvent utiliser les renseignements relatifs à la distance et à l’angle pour prendre des décisions plus intelligentes. Demandez aux élèves d’écrire une idée par papillon adhésif qui répond à la question : « En quoi le fait de connaître la distance ou l’angle par rapport à une cible peut-il aider un robot dans le monde réel ? » Attribuez-leur une zone désignée sur le mur de la classe pour qu’ils puissent y apposer leurs idées. Une fois qu’ils ont émis plusieurs idées, demandez-leur de se rassembler dans l’espace de partage pour y apposer leurs papillons adhésifs amovibles. Si une idée a déjà été affichée sur le mur, ils peuvent la placer par-dessus l’idée existante, tandis que, si le concept n’est pas encore affiché, ils doivent trouver un endroit disponible pour l’afficher.
Voici quelques-unes des idées qu’ils peuvent avoir:
Un robot de livraison qui ajuste sa trajectoire pour éviter les obstacles et atteindre précisément une porte.
Un robot d’entrepôt qui s’aligne avec les étagères pour prélever ou placer des articles avec précision.
Un drone qui atterrit en toute sécurité en calculant son angle et sa distance par rapport à une piste d’atterrissage.
Un bras robotisé qui se positionne correctement pour saisir ou placer des objets.
Un robot qui se déplace dans des espaces restreints en ajustant son angle pour passer.
Une voiture autonome qui maintient une distance de sécurité avec les autres véhicules.
Un robot qui guide une personne en restant à une distance et à un angle constants.
Un robot en mission de sauvetage qui localise et approche une personne en toute sécurité.
Une caméra robotisée qui ajuste son champ de vision pour garder un objet en mouvement au centre.
Animez une discussion en posant des questions qui incitent à la réflexion:
Comment la connaissance de la distance entre un robot et un objet peut-elle aider le robot à prendre de meilleures décisions ? (p. ex., il peut ralentir avant d’atteindre une cible, s’arrêter au bon endroit ou éviter les collisions.)
Pourquoi peut-il être utile pour un robot de connaître l’angle sous lequel il voit un objet ? (p. ex., il peut se tourner pour faire face directement à l’objet, s’aligner pour le saisir ou le balayer, ou ajuster sa trajectoire.)
Quels types de tâches exigent d’un robot qu’il soit précis à la fois en termes de distance et d’angle ? (p. ex., ramasser des objets, s’arrimer à une station ou naviguer dans des espaces étroits.)
Quels sont les avantages et les inconvénients de l’utilisation des données AprilTag pour le positionnement, par rapport à l’utilisation d’autres capteurs, comme les numériseurs laser (Lidar) ou les capteurs ultrasoniques ? (p. ex., les AprilTags peuvent fournir une identification et une localisation exactes, tandis que d’autres capteurs ne peuvent détecter que la distance ou la forme.)
Quels défis un robot peut-il rencontrer lorsqu’il tente de mesurer la distance ou l’angle à l’aide d’une caméra ? (p. ex., un mauvais éclairage, des images floues ou une vue obstruée.)
Dans quelles situations réelles ce type de positionnement basé sur la vision pourrait-il être particulièrement utile ? (p. ex., l’automatisation des entrepôts, l’atterrissage de drones, la chirurgie robotique ou l’exploration spatiale.)
Pouvez-vous imaginer des façons créatives ou inattendues dont les robots pourraient utiliser les données de distance et d’angle provenant de marqueurs visuels, tels que les AprilTags ? (p. ex., guider des personnes dans un bâtiment, ajuster les angles de caméra pour le tournage ou aider les robots à pratiquer des sports.)
Encouragez les élèves à commencer leur expérience d’apprentissage pratique avec la plateforme FTC Sim en se rendant sur le lien fourni, https://ftcsim.org/. Demandez-leur de se connecter à l’aide de leur nom d’utilisateur et de leur mot de passe uniques. Une fois identifiés, ils devront utiliser le lien suivant pour charger la surface de travail dont ils auront besoin pour la leçon : https://ftcsim.org/puzzle/cihnekxklct/

Dans ce monde FTC Sim, zoomez sur le robot afin de montrer clairement aux élèves la caméra installée et les roues omnidirectionnelles. Insistez sur le fait que le robot n’est pas positionné directement devant l’AprilTag, mais légèrement incliné sur le côté.

Lancez la discussion en posant la question suivante : « Quels types de mouvements le robot devrait-il effectuer pour se positionner directement devant l’AprilTag ? » (p. ex., il pourrait devoir pivoter légèrement dans le sens des aiguilles d’une montre, glisser vers la gauche, puis avancer.)
Expliquez aux élèves que, comme le robot utilise des roues omnidirectionnelles, chaque mouvement nécessite le contrôle de quatre moteurs distincts. Cela signifie qu’il faut écrire beaucoup de code chaque fois que le robot doit se déplacer, car chaque roue doit être programmée individuellement. Demandez ensuite : « Avez-vous appris un moyen de simplifier votre code et de le réutiliser plus facilement dans les leçons d’introduction ? » (p. ex., oui, nous avons appris à utiliser des fonctions pour regrouper des blocs de code. Cela nous permet de créer un mouvement une seule fois et de le réutiliser chaque fois que nous en avons besoin, sans tout réécrire.)
Montrez aux élèves comment ils peuvent utiliser ce qu’ils ont appris dans la première leçon sur les mouvements des roues omnidirectionnelles pour créer des fonctions pour chaque type de mouvement. Ces fonctions permettront de simplifier leur code et faciliteront sa réutilisation. Encouragez-les à créer une fonction distincte pour chacune des actions suivantes:
Avancer en ligne droite
Reculer en ligne droite
Tourner à gauche
Tourner à droite
Glisser vers la droite
Glisser vers la gauche
Cette approche permet aux élèves d’appeler une seule fonction chaque fois qu’ils veulent que le robot effectue l’un de ces mouvements, au lieu de réécrire le code du moteur à chaque fois.
Voici un exemple de ce à quoi pourrait ressembler leur code.

Rappelez aux élèves qu’ils peuvent créer des fonctions en se rendant dans la section « Miscellaneous ». Ils peuvent donner à la fonction un nom qui a du sens (p. ex., move forward in a straight line). Ils doivent créer une fonction pour chaque type de mouvement. Vous devrez peut-être leur fournir ce tableau de la première leçon.

Rappelez aux élèves que le simple fait de créer les fonctions ne suffit pas à les exécuter. Les fonctions doivent être appelées depuis le code principal juste après Simulator.waitForStart.

Ensuite, vos élèves doivent créer l’initialisation pour activer le Vision Portal et la reconnaissance AprilTag. Ils utiliseront les mêmes blocs que ceux utilisés dans la première leçon. Ils doivent les ajouter à la section d’initialisation du code, avant l’appel à Simulator.waitForStart(). Ces blocs se trouvent dans la section « Vision ».

En fonction du niveau scolaire et de l’expérience en codage des élèves, vous pouvez choisir de leur expliquer le rôle de chaque ligne de code. Si cela semble trop avancé pour votre groupe, vous pouvez simplement fournir la séquence d’initialisation complète et concentrer la leçon sur la manière dont le robot reconnaît les AprilTags à l’étape suivante. Cela permet aux élèves de se familiariser avec le concept de base sans être submergés par les détails de configuration.
Les élèves doivent maintenant tester le code en appuyant sur « Run ». Demandez aux élèves de cliquer sur la petite flèche dans le coin inférieur gauche de l’écran. Cela ouvre la vue de la caméra du robot. Ils devraient voir le robot bouger et l’AprilTag changer de position dans le champ de la caméra.

Les élèves doivent maintenant créer une variable qui stockera une liste de toutes les balises AprilTag que le robot peut voir à travers sa caméra. Dans cette simulation, le robot ne doit détecter qu’une seule balise à la fois, car les autres balises sont positionnées derrière la tour et hors de vue. La variable sera nommée AllDetections et aidera le robot à garder une trace des balises AprilTag actuellement visibles.

Les élèves doivent maintenant attribuer une valeur à la variable allDetections en utilisant AprilTagProcessor pour obtenir la liste des balises détectées. Pour ce faire, ils doivent ajouter des blocs qui appellent AprilTagProcessor et récupèrent les détections actuelles. Les blocs qu’ils ajoutent à leur code doivent ressembler à l’exemple ci-dessous.

Les élèves peuvent désormais ajouter une structure conditionnelle pour vérifier combien d’AprilTags le robot peut voir en regardant la longueur de la variable AllDetections. Si la longueur est supérieure à zéro, cela signifie qu’au moins un AprilTag a été détecté. Les élèves doivent ensuite utiliser l’affichage Télémétrie pour afficher un message confirmant qu’un AprilTag a été détecté, comme dans l’exemple ci-dessous. Les élèves devront peut-être cliquer sur « Show Telemetry » pour voir les données affichées par le robot.

L’étape suivante consiste pour les élèves à indiquer quel identifiant AprilTag le robot détecte. Pour ce faire, ils doivent créer une nouvelle variable appelée detection. Ils doivent également simplifier le code en supprimant la condition permettant de vérifier si un identifiant est détecté. Le nouveau code doit ressembler à ceci:

À partir de la télémétrie, les élèves devraient trouver que l’ID de cet AprilTag est 13. Les élèves vont maintenant commencer à explorer d’autres données qu’ils peuvent obtenir grâce à la détection AprilTag, telles que ftcPose.x, ftcPose.y, ftcPose.z, ftcPose.yaw, ftcPose.pitch, ftcPose.roll, ftcPose.range, ftcPose.bearing et ftcPose.elevation.

Voici comment ils peuvent afficher les données relatives à la position sur l’axe des x:

Les élèves doivent maintenant essayer de déplacer le robot vers la gauche et observer comment cela affecte la valeur de x. Le bloc « slide left » est ajouté juste après Simulator.waitForStart et avant que aprilTagProcessor ne lance la détection. Assurez-vous qu’une fonction « slide left » a bien été créée. Il devrait également y avoir une fonction « stop ». Les élèves doivent observer que la valeur se rapproche de zéro. Ils peuvent modifier la durée en millisecondes du glissement pour essayer de se rapprocher le plus possible de zéro.


Invitez les élèves à ajouter des commentaires à leur code pour expliquer les différents blocs de codage qu’ils ont utilisés. Les blocs de commentaires sont bleus et disponibles dans la section « Miscellaneous ». Expliquez que les ingénieurs en informatique travaillent en équipe et qu’ils doivent documenter leur code avec des commentaires pour s’assurer que leurs collègues peuvent comprendre la signification de leur code. Voici un exemple de la deuxième version du code pour le deuxième défi avec des commentaires ajoutés.

Demandez aux élèves de communiquer leurs solutions aux défis en leur posant des questions d’objectivation, par exemple:
Que doit savoir le robot avant de pouvoir se déplacer avec précision vers l’AprilTag ?
Comment le robot utilise-t-il la caméra pour déterminer où se trouve l’AprilTag ?
Que vous indiquent les valeurs ftcPose.x, ftcPose.y et ftcPose.z sur la position du tag ?
Que se passe-t-il avec la valeur x lorsque le robot glisse vers la gauche ? Pourquoi ?
Comment pouvez-vous utiliser la valeur de portée pour décider quand le robot doit arrêter d’avancer ?
Pourquoi est-il utile de créer des fonctions pour chaque type de mouvement ?
En quoi l’utilisation de fonctions rend-elle votre code plus facile à lire et à réutiliser ?
Comment avez-vous décidé de la durée pendant laquelle le robot doit glisser ou tourner pour se rapprocher du tag ?
Quelles stratégies avez-vous utilisées pour tester et ajuster votre code ?
Encouragez les élèves à modifier les mouvements et à mettre à jour les renseignements qu’ils reçoivent de l’AprilTag. Par exemple, ils pourraient se rapprocher ou s’éloigner pour voir comment cela affecte la distance sur l’axe y.

Après avoir mené leurs expériences, ils devraient parvenir aux conclusions suivantes concernant les différentes propriétés de la détection:
Données relatives
distance (range) : distance en ligne droite entre votre caméra et le centre de la balise, généralement exprimée en pouces ou en centimètres. Cette donnée est idéale pour contrôler les mouvements vers l’avant/l’arrière.
orientation (bearing) : angle par rapport à la balise, mesuré à gauche ou à droite de la direction vers laquelle votre robot est actuellement orienté. Une valeur positive signifie que la balise se trouve à droite ; une valeur négative signifie qu’elle se trouve à gauche. Idéal pour contrôler les mouvements latéraux.
élévation (elevation) : angle par rapport à la balise, mesuré vers le haut ou vers le bas à partir du niveau de la caméra. Utile si vous devez diriger un bras ou effectuer un levage.
Coordonnées 3D
Ces valeurs vous indiquent la position de la balise sur une grille 3D.
x : distance latérale (horizontale) par rapport à la balise.
y : distance verticale (haut-bas) par rapport à la balise.
z : distance avant par rapport à la balise.
Orientation 3D
Ces valeurs décrivent l’inclinaison ou la rotation de la balise elle-même dans l’espace.
lacet : rotation de la balise vers la gauche ou vers la droite, comme lorsque vous tournez la tête. C’est la fonction la plus utile pour aligner votre robot directement devant une balise.
tangage : rotation de la balise vers le haut ou vers le bas, comme lorsque vous hochez la tête.
roulis : rotation de la balise d’un côté à l’autre, comme lorsque vous inclinez la tête.
L’évaluation de la leçon doit se faire par le biais d’observations et de conversations avec les élèves pendant qu’ils codent. Pour évaluer l’efficacité de la leçon, il faut observer comment les élèves interagissent avec le simulateur FTC, comment les élèves interagissent avec le simulateur FTC, comment ils appliquent les concepts de reconnaissance Vision Portal et AprilTag, et comment ils utilisent les différentes propriétés.
Engagez les élèves dans un dialogue constructif sur leurs processus de réflexion, leurs défis et leurs stratégies. Cela vous aidera à mieux comprendre leur perception de l’influence de la vision par caméra et de l’IA sur la prise de décision des robots. Ces interactions vous permettront également de leur fournir des commentaires ciblés et d’adapter votre enseignement afin de favoriser l’apprentissage.
Voici une liste de « points de repère » pour guider vos observations et votre évaluation:
Engagement et curiosité: Les élèves explorent-ils activement la manière dont le robot réagit au positionnement AprilTag ? Expérimentent-ils les mouvements et observent-ils les changements dans les valeurs de distance et d’angle ?
Compréhension des données spatiales AprilTag: Les élèves peuvent-ils expliquer ce que représentent des valeurs telles que ftcPose.x, ftcPose.range et ftcPose.bearing ? Comprennent-ils comment ces valeurs sont liées à la position et à l’orientation du robot ?
Utilisation des fonctions pour le mouvement: Les élèves créent-ils et utilisent-ils des fonctions pour simplifier leur code de mouvement ? Comprennent-ils comment les fonctions améliorent l’efficacité et la lisibilité ?
Résolution de problèmes et débogage: Les élèves ajustent-ils leur code en fonction de ce qu’ils observent dans la télémétrie ? Testent-ils différentes durées ou directions de mouvement pour améliorer l’alignement des balises ?
Utilisation de la télémétrie pour le retour d’information: Les élèves utilisent-ils l’affichage de la télémétrie pour surveiller les données AprilTag et prendre des décisions en fonction de ce qu’ils voient ? Interprètent-ils correctement les valeurs ?
Application du raisonnement mathématique: Les élèves utilisent-ils leur raisonnement spatial et leurs compétences mathématiques pour guider le mouvement du robot vers le tag ? Peuvent-ils décrire comment les changements de mouvement affectent les données du tag ?
Documentation et communication du code: Les élèves ajoutent-ils des commentaires significatifs à leur code pour expliquer le rôle de chaque partie ? Sont-ils capables de communiquer clairement leurs choix et leur logique en matière de codage ?
Réaction face à l’échec et itération: Comment les élèves réagissent-ils lorsque le robot ne détecte pas une balise ou se comporte de manière inattendue ? Sont-ils persévérants, réfléchis et prêts à réviser leur code ?
Cette approche garantit que l’évaluation ne porte pas uniquement sur le résultat final, mais aussi sur le processus d’apprentissage, l’expérimentation et l’application réfléchie de nouveaux concepts.
C3.1 résoudre des problèmes et créer des représentations de situations mathématiques de façons computationnelles en écrivant et exécutant des codes, y compris des codes comprenant des instructions conditionnelles et d’autres structures de contrôle.
C3.2 lire et modifier des codes donnés, y compris des codes comprenant des instructions conditionnelles et d’autres structures de contrôle, et décrire l’incidence de ces changements sur les résultats.
C3.1 résoudre des problèmes et créer des représentations de situations mathématiques de façons computationnelles en écrivant et exécutant des codes efficaces, y compris des codes comprenant des instructions conditionnelles et d’autres structures de contrôle.
C3.2 lire et modifier des codes donnés, y compris des codes comprenant des instructions conditionnelles et d’autres structures de contrôle, et décrire l’incidence de ces changements sur les résultats et l’efficacité.
C3.1 résoudre des problèmes et créer des représentations de situations mathématiques de façons computationnelles en écrivant et exécutant des codes efficaces, y compris des codes comprenant des événements influencés par un dénombrement prédéfini et/ou un sous-programme et d’autres structures de contrôle.
C3.2 lire et modifier des codes donnés, y compris des codes comprenant des événements influencés par un dénombrement prédéfini et/ou un sous-programme et d’autres structures de contrôle, et décrire l’incidence de ces changements sur les résultats et l’efficacité.
C2.1 utiliser le codage pour démontrer sa compréhension des concepts algébriques, y compris les variables, les paramètres, les équations et les inéquations.
C2.2 créer du code pour décomposer des situations en étapes computationnelles pour représenter des concepts et des relations mathématiques, et pour résoudre des problèmes.
C2.3 lire du code pour prédire son résultat, et modifier le code pour ajuster des contraintes, des paramètres et des résultats pour une situation similaire ou pour une nouvelle situation.
C2.1 utiliser des variables, des constantes, des expressions et des instructions d’affectation pour stocker et manipuler des chiffres et des lettres dans un programme.
C2.3 développer des programmes comportant des instructions conditionnelles simples et imbriquées.
C2.4 développer des programmes comportant des événements séquentiels, sélectionnés et répétitifs de manière efficace.
C2.5 développer des programmes comprenant l’utilisation d’opérateurs booléens, d’opérateurs de comparaison, d’opérateurs de texte et d’opérateurs arithmétiques.
C2.6 interpréter des erreurs de programmation, et mettre en œuvre des stratégies pour les corriger.
C2.7 écrire des documents internes clairs et utiliser des normes de codage pour améliorer la lisibilité d’un code.