Catégories
Jeu vidéo ROBLOX

Téléportation d’un point A à un point B :

Voici l’explication du code, ligne par ligne :

Les variables de départ

local teleports = script.Parent
local teleportA = teleports.TeleportA
local teleportB = teleports.TeleportB

On récupère deux objets dans le jeu Roblox : la plateforme A (celle sur laquelle on va marcher) et la plateforme B (celle où on va arriver). Ces deux plateformes sont des enfants du script dans l’arbre du jeu.

L’événement Touched

teleportA.Touched:Connect(function(hit)

Touched est un événement Roblox : il se déclenche automatiquement dès que quelque chose touche la plateforme A. Le paramètre hit contient la pièce (la partie du corps) qui l’a touchée.

La vérification du joueur

local character = hit.Parent
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then return end

On remonte d’un niveau pour trouver le personnage entier (hit.Parent), puis on cherche s’il contient un Humanoid (ce qui prouve que c’est bien un joueur, pas un mur ou une balle). Si rien de valide n’est trouvé, ou si le joueur est mort (Health <= 0), on arrête tout avec return.

La téléportation

local offset = Vector3.new(0, 2, 0)
character:PivotTo(CFrame.new(teleportB.Position + offset))

Vector3.new(0, 2, 0) crée un décalage de 2 unités vers le haut pour que le joueur atterrisse au-dessus de la plateforme B et pas à l’intérieur. PivotTo est la fonction qui déplace instantanément tout le personnage à une nouvelle position — c’est ça la téléportation !

Le code complet de la téléportation

-- Configuration
local teleports = script.Parent
local teleportA = teleports.TeleportA
local teleportB = teleports.TeleportB

teleportA.Touched:Connect(function(hit)
	-- Récupération du joueur
	local character = hit.Parent
	local humanoid  = character and character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end
	
	-- Décalage légert vers le haut pour poser le joueur sur la plateforme
	local offset = Vector3.new(0, 2, 0)
	character:PivotTo(CFrame.new(teleportB.Position + offset))

end)
Catégories
MAQUEENPLUS Robotique

Défi 6 : Robot autonome pour la navigation sur un réseau routier complexe

Comment les véhicules autonomes naviguent-ils avec précision dans les réseaux routiers urbains complexes et les rues très fréquentées ? Comment les robots logistiques trouvent-ils efficacement les itinéraires optimaux dans les entrepôts labyrinthiques ? Ces problèmes, en apparence complexes, peuvent être explorés et résolus grâce à notre voiture UNIHIKER K10 !

Dans le cadre de ce projet, tu vas concevoir un robot de navigation routière. Ce robot sera capable d’identifier avec précision les intersections en T et les carrefours, et permettra également au véhicule de suivre des itinéraires prédéfinis et d’effectuer des manœuvres de virage aux intersections complexes. Il s’agit non seulement d’un projet de programmation stimulant, mais aussi d’une avancée significative vers les technologies de transport intelligent de demain.

Objectif de la tâche

Utilisez les algorithmes intégrés de l’UNIHIKER K10 pour détecter les intersections en T et les carrefours, permettant ainsi à la voiture d’identifier avec précision les intersections et d’exécuter des virages spécifiques en fonction de chemins prédéfinis au sein d’un réseau routier complexe.

Points clés

  1. Maîtriser l’utilisation des algorithmes intégrés pour reconnaître les intersections complexes telles que les carrefours et les intersections en T.
  2. Apprendre les méthodes de détection des intersections et de contrôle des virages.
  3. Comprendre le concept de « réseau routier » et le rôle de la planification des itinéraires dans les futurs systèmes de transport.

Liste des matériaux

Configuration matérielle requise :

Exercice pratique

Maintenant que tu maîtrises les commandes de base du véhicule, tu vas aborder des scénarios plus complexes. Les deux tâches suivantes te guideront dans la mise en pratique de la détection des intersections et de la planification de la navigation, te permettant ainsi d’exploiter pleinement les capacités de perception et de prise de décision du véhicule.

Tâche 1 : Détection d’intersections complexes

En mode requête, le véhicule détecte en continu l’état actuel de l’intersection et fournit un retour d’information en temps réel sur les résultats de la reconnaissance. Les informations relatives à l’intersection identifiée s’affichent sur l’écran du UNIHIKER K10.

Tâche 2 : Chemin de navigation spécifié

En se basant sur un itinéraire prédéfini, planifie à l’avance le trajet de navigation du véhicule et programme le pour qu’il suive strictement cet itinéraire pendant son fonctionnement.

Tâche 1 : Détection d’intersections complexes

1. Connexion matérielle

Connecte le Maqueen à ton ordinateur à l’aide d’un câble USB 3.0 vers Type-C.

Remarque : L’extrémité de type C doit être connectée au UNIHIKER K10.

2. Préparation du logiciel

Ouvre Open Mind+ et suit les étapes de préparation du logiciel comme indiqué dans le schéma ci-dessous.

3. Programmation

(1) Configuration initiale

Pour utiliser la fonction de suivi de ligne intégrée du Maqueen Plus V3, exécute les opérations suivantes lorsque le message « UNIHIKER K10 On Start » s’affiche :

  1. → Utilise la commande « System initialization module » pour vous assurer que tous les modules fonctionnent correctement ;
  2. → Utilise la commande « set up a patrol route speed » pour régler la voiture à la vitesse de suivi de ligne la plus basse ;
  3. → Utilise la commande « patrolling on » pour activer la fonction de suivi de ligne, permettant à la voiture de circuler le long de la ligne noire.

(2) Détection d’intersections complexes

Dans la commande « forever », utilise l’instruction conditionnelle « If…Then » pour déterminer le type d’intersection actuellement détectée par la voiture.

Remarque : En mode requête, la voiture affiche différentes valeurs numériques lorsqu’elle reconnaît différents types d’intersections lors du suivi de ligne :

  1. : Carrefour (intersection à 4 voies)
  2. : Jonction en T
  3. : Virage à gauche en ligne droite
  4. : Virage à droite en ligne droite

Lorsque la commande « intersection detecting » renvoie la valeur 1, utilisez les commandes « cache text » et « Afficher le contenu mis en cache » pour afficher le texte « Carrefour détecté » sur l’écran UNIHIKER K10.

De même, lorsque la commande « intersection detecting » renvoie la valeur 2, indiquant qu’une intersection en T a été détectée, affichez le texte « Intersection en T détectée » sur l’écran UNIHIKER K10.

Lorsqu’une intersection avec virage à gauche suivi d’une voie continue ou virage à droite suivi d’une voie continue est détectée, la même méthode de vérification conditionnelle et d’affichage du texte est utilisée. Le programme complet est le suivant :

4. Exécution du programme

Avant de lancer le programme, assure-toi que le UNIHIKER K10 est correctement connecté à ton ordinateur via un câble USB. Après vérification, clique sur le bouton « Télécharger » du logiciel. Placezle véhicule sur la carte de suivi de ligne et allumez-le pour lancer le suivi. Lors de la détection d’intersections complexes, l’écran du UNIHIKER K10 affichera le type d’intersection correspondant.

Tâche 2 : Chemin de navigation spécifié

1. Programmation

(1) Planification du trajet Avant d’écrire le programme, planifie un itinéraire sur la carte comportant quatre types d’intersections. La voiture parcourra le trajet du point de départ à l’arrivée en passant par : deux intersections avec virage à gauche et possibilité de continuer tout droit, une intersection avec virage à droite et possibilité de continuer tout droit, deux carrefours et un carrefour en T. Chaque intersection est clairement indiquée par le sens de circulation correspondant, comme illustré ci-dessous :

(2) Configuration initiale

  1. → Utilise la commande « System initialization module » pour vous assurer que tous les modules fonctionnent correctement ;
  2. → Utilise la commande « set up patrol route speed » pour régler la voiture à la vitesse minimale de suivi de ligne ;
  3. → Utilise la commande « patrolling on » pour activer la fonction de suivi de ligne, permettant à la voiture de circuler le long de la ligne noire.

(3) Chemin de navigation spécifié

1) Jonctions en T (intersections 1, 5 et 6)

Sur le parcours illustré, le véhicule rencontre trois intersections en T, nécessitant à chaque fois une manœuvre de virage différente. Pour la première intersection en T, utilise la commande « setup up Trord » dans la section « UNIHIKER K10 au démarrage » afin d’effectuer un virage à gauche.

Lors de la deuxième intersection en T, les commandes de contrôle direct ne peuvent pas être utilisées pour les virages. Dans la commande « forever », implémente une logique conditionnelle à l’aide de l’instruction « if…then » pour évaluer la commande « intersection detecting ».

Crée une nouvelle variable « flag_T » pour comptabiliser le nombre de passages aux intersections en T. Lorsque la commande « intersection detecting » renvoie la valeur 1 (condition vraie), incrémentez cette variable à l’aide de la commande « Changer flag_T de 1 ».

Lorsque la variable flag_T vaut 1, cela indique que le véhicule rencontre une deuxième intersection en T. Utilise la commande « set up Trord à droite » pour effectuer un virage à droite.

Lorsque la variable flag_T atteint 3, marquant la troisième rencontre d’une jonction en T, utilisez la commande « set up Trord stop» pour interrompre le fonctionnement de suivi de ligne de la voiture.

2) Jugement au carrefour (intersections 2 et 3)

De même, lors de la première rencontre à un carrefour, utilisez la commande « set up intersection à gauche » dans la section « UNIHIKER K10 au démarrage » pour effectuer un virage à gauche.

Au deuxième carrefour, dans le programme « Forever », évaluez la commande « intersection detecting ». Si cette commande renvoie la valeur 1, utilisez la commande « Définir la trajectoire droite au carrefour » pour maintenir une trajectoire rectiligne.

3) Intersection avec virage à gauche et voie droite (Intersection 5)

Ce type d’intersection n’apparaît qu’une seule fois. Dans la section « UNIHIKER K10 Au démarrage », utilisez la commande « set up left or straight » pour maintenir une trajectoire rectiligne à travers cette intersection.

Le programme complet est le suivant :

2. Exécution du programme

Avant de lancer le programme, assure toi que le UNIHIKER K10 est correctement connecté à ton ordinateur via un câble USB. Après vérification, clique sur le bouton « Télécharger » du logiciel. Place le Maqueen sur la carte de suivi de ligne et allume-le pour lancer le suivi de ligne selon le parcours prédéfini.

3. Pratique pratique

Coin des connaissances

1. Qu’est-ce qu’un « réseau routier » ?

Un réseau routier désigne un système interconnecté de routes au sein d’une zone spécifique, formant un réseau de voies. Dans notre vie quotidienne, que ce soit dans les rues des villes, sur les campus, dans les usines ou les entrepôts, on peut considérer tous ces lieux comme des réseaux composés de routes et d’intersections : ce que l’on appelle un « réseau routier ».

1. Définition et composition des réseaux routiers

Un réseau routier est un système interconnecté de routes à différents niveaux, formant une structure de transport en forme de toile. Selon les régions, les réseaux routiers peuvent comprendre différents types de routes, comme les autoroutes, les routes urbaines et les routes rurales.

2. Classification des réseaux routiers

Réseaux routiers : Principalement composés de routes à différents niveaux, reliant les villes, les villages et les principaux nœuds de transport, constituant la composante principale du transport régional.

Réseaux routiers urbains : Réseaux formés par diverses routes au sein des zones urbaines, constituant l’infrastructure fondamentale des transports urbains.

3. Fonctions et rôles des réseaux routiers

Les réseaux routiers constituent l’ossature des transports urbains, offrant des voies de circulation à divers types de véhicules. Ils garantissent des déplacements sûrs, efficaces, économiques et confortables. La conception et l’optimisation des réseaux routiers sont essentielles pour réduire les embouteillages et améliorer l’efficacité des transports.

2. Quel rôle joue la planification des trajectoires dans les transports du futur ?

Imagine une ville du futur où les voitures circulent de manière autonome grâce à des systèmes intelligents, sans intervention humaine. Dans ce système, la planification d’itinéraire fait office de « cerveau » pour le véhicule, l’aidant à déterminer les trajets optimaux au sein de réseaux routiers complexes.

Les fonctions de la planification de trajectoire peuvent être résumées comme suit :

1. Gain de temps et réduction du trafic

Les véhicules autonomes sélectionnent les itinéraires les plus rapides en fonction des conditions de circulation en temps réel, évitant ainsi les embouteillages pour atteindre leur destination plus rapidement.

2. Amélioration de la sécurité et prévention des accidents

Il détecte de manière proactive les obstacles et les dangers, et ajuste automatiquement les itinéraires pour éviter les collisions.

3. Optimisation du trafic à l’échelle du système

Lorsque plusieurs véhicules planifient intelligemment leurs itinéraires, la circulation urbaine est plus fluide et le temps d’attente réduit.

4. Livraison autonome fiable

Les robots de livraison et les véhicules logistiques autonomes s’appuient sur la planification d’itinéraires pour naviguer avec précision dans les villes et les entrepôts, permettant ainsi une livraison de colis efficace avec une intervention humaine minimale.

En substance, la planification d’itinéraires fonctionne comme une carte de navigation invisible, permettant aux futurs véhicules et robots de « voir » intelligemment les routes et de garantir ainsi des arrivées sûres et rapides. Les systèmes de transport intelligents de demain reposeront fondamentalement sur ce « cerveau intelligent ».

Releve le défi

Imagine notre voiture dans un labyrinthe complexe : pourrait-elle utiliser son « intelligence » pour trouver la sortie ? N’est-ce pas à la fois fascinant et stimulant ? Voyons maintenant comment concevoir un tel robot capable de résoudre des labyrinthes, de reconnaître automatiquement les chemins, d’éviter les obstacles et, finalement, d’atteindre sa destination !

Catégories
Ligne noire MAQUEENPLUS Robotique

Défi 5 : Robot autonome suiveur de ligne

Dans le futur des transports intelligents et de la logistique automatisée, la technologie de conduite autonome transforme progressivement nos vies. Des voitures autonomes aux robots d’entrepôt intelligents, la navigation par suivi de ligne est l’une des technologies clés de ces innovations. Dans ce projet, nous explorerons deux méthodes de suivi de ligne différentes pour apprendre à votre voiture UNIHIKER K10 à suivre une ligne noire de manière autonome. Il s’agit non seulement d’un défi de programmation stimulant, mais aussi d’un point de départ pour explorer les futures technologies de transport intelligent. Grâce à ce projet, tu apprendras à un robot de percevoir son environnement et de prendre des décisions, jetant ainsi les bases d’innovations futures.

Objectif de la tâche

Cette tâche vise à mettre en œuvre deux méthodes de suivi de ligne distinctes pour permettre à la voiture de naviguer le long des lignes noires sur une carte en couleur. La première méthode consiste à lire les valeurs numériques de capteurs de suivi de ligne montés sur le châssis, tandis que la seconde utilise l’algorithme de suivi de ligne intégré du UNIHIKER K10.

Points clés

  • Comprendre le principe de fonctionnement et la méthode de détection des capteurs de suivi de ligne
  • Maîtriser les techniques de lecture des données provenant des capteurs de suivi de ligne
  • Apprendre à utiliser l’algorithme de suivi de ligne intégré de Maqueen Plus V3
  • Comparer les avantages et les inconvénients des algorithmes de suivi de ligne personnalisés et des algorithmes intégrés.

Liste des matériaux

Configuration matérielle requise :

Exercice pratique

Dans ce projet, tu exploreras la fonctionnalité de suivi de ligne à travers trois tâches progressives. Premièrement, tu apprendras à lire les valeurs numériques des capteurs de suivi de ligne. Ensuite, tu mettras en œuvre deux méthodes distinctes de suivi de ligne :

  • une programmation personnalisée et des algorithmes intégrés
  • pour contrôler le mouvement de la voiture sur la piste.

Tâche 1 : Lire les valeurs numériques des capteurs de suivi de ligne

Lire les valeurs numériques des capteurs de suivi de ligne à 5 canaux et affiche les en temps réel sur l’écran du K10.

Tâche 2 : Suivi de ligne de base

Développe un programme de contrôle basé sur les signaux numériques provenant des capteurs de suivi de ligne afin d’obtenir une fonctionnalité de suivi de ligne fondamentale.

Tâche 3 : Suivi de ligne à l’aide d’un algorithme intégré

Utilise l’algorithme de suivi de ligne intégré fourni par l’UNIHIKER K10 pour permettre une navigation autonome, rationalisant ainsi le processus de développement.

Tâche 1 : Lecture des valeurs numériques des capteurs de suivi de ligne

1. Connexion matérielle

Connecte le Maqueen à ton ordinateur à l’aide d’un câble USB 3.0 vers Type-C.

Remarque : L’extrémité de type C doit être connectée au UNIHIKER K10.

2. Préparation du logiciel

Lance Mind+ et terminez la configuration du logiciel comme illustré dans le schéma suivant.

3. Programmation

(1) Lecture des valeurs du capteur de suivi de ligne

Utilise la commande « lire l’état du capteur de ligne L1 » pour obtenir le signal numérique actuel du capteur (0 ou 1).

Affiche les valeurs acquises par le capteur de suivi de ligne sur l’écran UNIHIKER K10 à l’aide de la commande « cache text ». Active l’option « auto-clear » pour n’afficher que les dernières mesures.

Utilise la commande « join » pour combiner la valeur d’état de chaque capteur en un texte lisible (par exemple, L1 : [Lire l’état du capteur de ligne L1]).

Enfin, utilise la commande « show cached content » pour actualiser le contenu textuel à l’écran et activer l’affichage. Voici le programme complet :

4. Exécution du programme

Avant d’exécuter le programme, il est nécessaire de vérifier que l’UNIHIKER K10 est correctement connecté à l’ordinateur via un câble USB. Une fois la connexion vérifiée, clique sur le bouton « Télécharger » du logiciel. À la fin de l’exécution du programme, si les capteurs de suivi de ligne détectent des lignes noires, les voyants s’allument (valeur numérique = 1), tandis que lorsqu’aucune ligne noire n’est détectée, les voyants restent éteints (valeur numérique = 0).

Tâche 2 : Suivi de ligne personnalisé

1. Programmation

Cette tâche s’appuie sur le programme de la tâche 1. Pour obtenir une fonctionnalité de suivi de ligne basique, nous utiliserons uniquement les trois capteurs avant : L1, M et R1. Ces capteurs détermineront la position de la voiture par rapport à la ligne noire et effectueront les ajustements nécessaires.

Remarque : Bien que les trois capteurs de suivi de ligne puissent générer sept combinaisons différentes, cette analyse se concentrera sur trois cas principaux. Les autres scénarios peuvent être étudiés indépendamment.

En ligne droite : lorsque le capteur M détecte la ligne noire (valeur = 1), cela indique que la voiture est centrée sur la ligne. Utilisez la commande « Régler la rotation de tous les moteurs à la vitesse d’avancement de 100 » pour faire avancer simultanément les deux moteurs.

Virage à droite : Lorsque R1 détecte la ligne noire (1) et M la ligne blanche (0), cela indique que la voiture dévie vers la gauche et doit tourner à droite. Utilisez les commandes « Régler la vitesse de rotation du moteur gauche vers l’avant à 100 » et « Régler la vitesse de rotation du moteur droit vers l’arrière à 50 » pour faire tourner la voiture à droite.

Virage à gauche : Lorsque L1 détecte la ligne noire (1) et M la ligne blanche (0), cela indique que la voiture dévie vers la droite et doit tourner à gauche. Utilisez les commandes « Régler la vitesse de rotation arrière du moteur gauche à 50 » et « Régler la vitesse de rotation avant du moteur droit à 100 » pour faire tourner la voiture à gauche. Le programme complet est le suivant :

2. Exécution du programme

Avant de lancer le programme, vérifie que le UNIHIKER K10 est correctement connecté à votre ordinateur via un câble USB. Une fois la connexion établie, clique sur le bouton « Télécharger» du logiciel. Après l’exécution du programme, place le véhicule à son point de départ sur la carte ; il suivra alors la ligne noire.

Tâche 3 : Suivi de ligne à l’aide d’un algorithme intégré

1. Programmation

Dans cette tâche, nous utiliserons la fonction de suivi de ligne intégrée du robot UNIHIKER K10 (basé sur le DFRobot Maqueen Plus V2) pour obtenir un suivi de ligne autonome. Cette approche est relativement simple, car la majeure partie de la logique de suivi de ligne est déjà intégrée au matériel et au micrologiciel ; il nous suffit d’appeler les commandes appropriées.

Au début du programme, utilise la commande « System initialization mùodule » pour initialiser le système et t’assurer que tous les modules fonctionnent correctement.

Lors du suivi de ligne, utilise la commande « set up a patrol route speed » pour configurer la vitesse de suivi. Ce paramètre influe directement sur la vitesse de déplacement du véhicule en service.

Remarque : Le paramètre de vitesse accepte des valeurs comprises entre 1 et 5, ajustables selon les besoins. Plus la valeur est élevée, plus le mouvement est rapide ; plus elle est faible, plus le mouvement est lent.

Enfin, exécute la commande « patrolling on » pour activer la fonction de suivi de ligne intégrée. Voici l’implémentation complète du programme :

2. Exécution du programme

Avant d’exécuter le programme, vérifie que le UNIHIKER K10 est correctement connecté à votre ordinateur via un câble USB. Une fois la connexion établie, clique sur le bouton « Téléchargement » dans l’interface du logiciel. Après l’initialisation du programme, positionnez le véhicule au point de départ indiqué sur le circuit. Le système suivra alors automatiquement la trajectoire noire prédéfinie.

Coin des connaissances

1. Comprendre le principe de fonctionnement des capteurs de suivi de ligne

Chaque module de capteur de suivi de ligne contient deux sondes infrarouges : une pour l’émission infrarouge et une autre pour la réception infrarouge.

Les capteurs de suivi de ligne fonctionnent grâce aux propriétés de réflexion de la lumière. Sur une surface blanche, les lignes noires réfléchissent davantage de lumière que le fond blanc. Lorsqu’un capteur détecte une ligne noire au sol, il renvoie la valeur 1. En revanche, lorsqu’il détecte un fond blanc, il renvoie la valeur 0.

2. Comprendre les méthodes d’étalonnage des capteurs de suivi de ligne

Les capteurs de suivi de ligne du véhicule Maqueen Plus V3 sont calibrés en usine et généralement prêts à l’emploi. Toutefois, en cas de détection anormale pendant le fonctionnement (par exemple, sortie 1 avec voyants allumés dans les zones blanches), un recalibrage peut être effectué à l’aide du bouton de calibration intégré.

Procédure d’étalonnage :

Préparation : Place tous les capteurs de suivi de ligne avant du véhicule entièrement sur une surface noire, en veillant à une couverture complète.

Étalonnage : Maintiens enfoncé le bouton d’étalonnage de suivi de ligne jusqu’à ce que les voyants bleus des capteurs clignotent trois fois, indiquant que l’étalonnage est terminé.

Vérification de l’étalonnage :

Lorsqu’ils sont placés sur des surfaces noires, les voyants correspondants doivent s’allumer.

Lorsqu’ils sont placés sur des surfaces blanches, les voyants correspondants doivent s’éteindre.

Ce processus d’étalonnage corrige efficacement les erreurs de reconnaissance causées par les variations d’éclairage ambiant ou l’usure des composants, garantissant ainsi des performances de suivi de ligne précises et stables.

3. Comprendre les scénarios d’application des capteurs de suivi de ligne

Les capteurs de suivi de ligne sont des composants intelligents capables de détecter les variations de couleur ou de réflectivité du sol, principalement utilisés pour permettre aux robots de « reconnaître les chemins et de suivre les itinéraires désignés ». Ces capteurs servent non seulement de composants essentiels à la navigation autonome des véhicules intelligents, mais trouvent également de nombreuses applications dans divers scénarios du monde réel.

Dans la pratique, les capteurs de suivi de ligne trouvent de nombreuses applications. Par exemple, dans les entrepôts logistiques, les véhicules à guidage automatique (AGV) utilisent ces capteurs pour transporter et stocker efficacement les marchandises le long de voies prédéfinies, améliorant ainsi considérablement l’efficacité logistique. Dans les systèmes de transport intelligents, les véhicules autonomes utilisent des capteurs de suivi de ligne pour détecter le marquage au sol, garantissant ainsi le maintien de la trajectoire et renforçant la fiabilité des systèmes d’aide à la conduite. Les robots de service, tels que les robots de nettoyage et les robots de livraison hospitalière, s’appuient également sur ces capteurs pour la navigation intérieure autonome, permettant une prestation de services efficace.

De plus, dans le domaine de l’éducation et de la recherche, les capteurs de suivi de ligne constituent des outils essentiels pour les expériences pédagogiques et les compétitions de robotique, permettant aux étudiants et aux chercheurs d’étudier les principes de fonctionnement des capteurs et les algorithmes de contrôle. Dans les systèmes de surveillance de sécurité, ces capteurs peuvent détecter les limites de zones spécifiques afin d’empêcher tout accès non autorisé, que ce soit par des personnes ou des objets, garantissant ainsi la sécurité. Dans les applications d’agriculture intelligente, les capteurs de suivi de ligne assistent les robots agricoles dans la réalisation des opérations d’irrigation, de fertilisation et de récolte le long de parcours prédéfinis, améliorant considérablement l’efficacité de la production agricole.

Grâce à ces applications, les capteurs de suivi de ligne améliorent non seulement l’efficacité opérationnelle, mais aussi la fiabilité et la sécurité du système, apportant un soutien crucial au développement des futures technologies intelligentes.

Relevez le défi

Dans ce projet, tu as maîtrisé les fonctionnalités de base de suivi de ligne de la voiture. Cependant, dans la réalité, les itinéraires sont rarement statiques. Imagine ce scénario : la voiture peut rencontrer des carrefours, des intersections en T, voire des intersections complexes avec plusieurs voies convergentes.

Voici le défi : lorsque la voiture arrive à ces intersections, comment doit-elle déterminer la bonne direction ? Et comment pouvons-nous la programmer pour qu’elle prenne la bonne décision ?

Met ta casquette de réflexion et essaye de concevoir une méthode permettant à ta voiture intelligente de « prendre des décisions » de manière autonome lorsqu’elle se trouve face à ces « choix cruciaux » !

Catégories
Jeu vidéo ROBLOX

Crée un tableau de scores

Objectif : Créé un tableau de scores

Créer un script pour afficher un tableau de score au joueur sousServerScriptService :

Renommer le script leaderstats :

Saisir le code suivant pour un affichage d’une barre de scores :

local players = game:GetService("Players")

players.PlayerAdded:Connect(function(player)
     local leaderstats = Instance.new("Folder")
     leaderstats.Name = "leaderstats"
     leaderstats.Parent = player
end)

Si tu lances ton jeu une barre s’affiche :

Si le score ne s’affiche pas vérifie :

Rajoute à ton script un score à afficher :

local players = game:GetService("Players")

players.PlayerAdded:Connect(function(player)

     local leaderstats = Instance.new("Folder")
     leaderstats.Name = "leaderstats"
     leaderstats.Parent = player

     local score = Instance.new("IntValue")
     score.Parent = leaderstats
     score.Name = "Score"
     score.Value = 0

end)

Le score s’affiche si tu lances ton jeu :

Exemple d’un script pour augmenter le score si le joueur click sur un ClickDetector :

local clickDetector = script.Parent.ClickDetector

clickDetector.MouseClick:Connect(function(player)

      player:WaitForChild("leaderstats").Score.Value += 10

end)

Exemple d’un script pour augmenter le score si le joueur rentre en collision avec un part :

local myPart = script.Parent


myPart.Touched:Connect(function(hit)

	-- Vérifie si c'est un joueur qui a touché la part
	local joueur = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
	if joueur then
		-- Trouve le score du joueur dans Leaderstats
		local leaderstats = joueur:FindFirstChild("leaderstats")
		if leaderstats then
			local score = leaderstats:FindFirstChild("Score")
			if score then
				-- Incrémente le score
				score.Value = score.Value + 1
			end
		end
	end

end)

Exemple d’un script pour augmenter le score si le joueur rentre en collision avec un part :

local myPart = script.Parent


myPart.Touched:Connect(function(hit)

	-- Vérifie si c'est un joueur qui a touché la part
	local joueur = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
	if joueur then
		-- Trouve le score du joueur dans Leaderstats
		local leaderstats = joueur:FindFirstChild("leaderstats")
		if leaderstats then
			local score = leaderstats:FindFirstChild("Score")
			if score then
				-- Incrémente le score
				score.Value = score.Value + 1
			end
		end
	end

end)

Un système de score avec un ModuleScript

1. Créer un ModuleScript pour gérer les scores

-- ModuleScript dans ServerScriptService : "ScoreManager"
local ScoreManager = {}

-- Initialise le Leaderstats pour un joueur
function ScoreManager.initPlayer(player)
    local leaderstats = Instance.new("Folder", player)
    leaderstats.Name = "leaderstats"

    local points = Instance.new("IntValue", leaderstats)
    points.Name = "Score"
    points.Value = 0
end

-- Met à jour le score d'un joueur
function ScoreManager.addPoints(player, points)
    local leaderstats = player:FindFirstChild("leaderstats")
    if leaderstats then
        local score = leaderstats:FindFirstChild("Score")
        if score then
            score.Value = score.Value + points
        end
    end
end

return ScoreManager

Appel dans scriptServeur pour rajouter des points :

-- Script dans ServerScriptService
local ScoreManager = require(game:GetService("ServerScriptService"):WaitForChild("ScoreManager"))

-- Initialiser le Leaderstats pour chaque joueur
game.Players.PlayerAdded:Connect(function(player)
	ScoreManager.initPlayer(player)
end)

local part = workspace.Part -- La Part qui déclenche l'événement

-- Exemple : Ajouter 10 points à un joueur
part.Touched:Connect(function(otherPart)
	-- Vérifie que otherPart fait partie d'un personnage
	local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
	if humanoid then
		-- Récupère le joueur associé au personnage
		local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)
		if player then            
			ScoreManager.addPoints(player, 10)
			part:Destroy() -- Supprime la Part après utilisation

		end
	end
end)
Catégories
MAQUEENPLUS Robotique

Défi 04 : Robot intelligent de surveillance environnementale

As-tu imaginé ce que donnerait la voiture robot UNIHIKER K10 si elle devenait un robot intelligent de surveillance environnementale ? Elle pourrait non seulement afficher des données environnementales en temps réel, comme la température, l’humidité et la luminosité, mais aussi les représenter graphiquement pour nous aider à observer les tendances des changements environnementaux. Alors, partons de zéro et explorons étape par étape comment donner vie à cette idée aussi pratique que ludique !

Objectif de la tâche

Affiche les données d’humidité en temps réel sur l’écran UNIHIKER K10, enregistre-les et trace un graphique linéaire pour visualiser leur évolution. Utilisez la commande vocale pour consulter les valeurs d’humidité maximales et minimales.

Points de connaissance

  • Apprendre à collecter et à stocker des données environnementales.
  • Dessin du graphique principal et représentation visuelle.
  • Comprendre la logique de reconnaissance vocale et d’interaction avec les données.
  • Explorer les tendances en matière de surveillance environnementale intelligente.

Liste du matériel

Exercice pratique

Ce projet vise à collecter les données d’humidité mesurées par le capteur et à les représenter sous forme de graphique linéaire. La comparaison de ces données permettra d’identifier les valeurs d’humidité maximales et minimales. Enfin, des commandes vocales permettront de récupérer ces valeurs, qui seront affichées à l’écran une fois la commande vocale correctement reconnue. Pour atteindre cet objectif, le projet est divisé en deux tâches.

Tâche 1 : Tracer un graphique linéaire des données d’humidité

Stocke les données d’humidité surveillées en temps réel et représente-les sous forme de graphique linéaire afin de visualiser l’évolution des données.

Tâche 2 : Obtenir des données d’humidité par commande vocale

Ajoute une fonctionnalité de reconnaissance vocale pour permettre de répondre aux questions sur les données d’humidité. Utilise les commandes vocales pour obtenir les valeurs d’humidité maximale et minimale, et affichez ces valeurs à l’écran une fois les commandes vocales correctement reconnues.

Tâche 1 : Tracer un graphique linéaire des données d’humidité

1. Connexion matérielle

Utilise un câble de données USB 3.0 vers Type-C pour connecter la voiture robot assemblée à l’ordinateur.

Remarque : L’extrémité de type C doit être connectée au UNIHIKER K10.

2. Préparation du logiciel

Ouvre Mind+ et termine la configuration du logiciel comme indiqué dans les illustrations suivantes.

3. Programmation

Tracé d’un graphique linéaire, en utilisant des données d’humidité comme exemple.

(1) Représentation du système de coordonnées cartésiennes

Pour tracer un graphique linéaire sur l’écran UNIHIKER K10, il faut d’abord créer un système de coordonnées cartésiennes. La première étape consiste à utiliser la commande « set line width » pour définir l’épaisseur des lignes du système de coordonnées à 1. Si vous jugez les lignes trop fines, vous pouvez également la définir à 3, 4, etc.

Trace l’axe vertical (Y) à l’aide de la commande « cache draw line from, X1 Y1 to X2 Y2, color » afin de le créer à l’écran. Les coordonnées de départ de l’axe Y sont (10, 80) et les coordonnées d’arrivée sont (10, 280). Définis la couleur de la ligne sur noir pour que l’axe soit bien visible.

Trace l’axe horizontal (X) de la même manière. Définis son point de départ à (10, 280) et son point d’arrivée à (230, 280). Utilise ensuite la commande « show cached content » pour mettre à jour et afficher les axes X et Y sur l’écran UNIHIKER K10.

(2) Points de tracé

Après avoir défini le système de coordonnées cartésiennes, tu peux commencer à tracer les points. Avant cela, assure toi de déterminer les coordonnées X et Y de chaque point. Crée d’abord une nouvelle variable nommée « hum_x1 » pour stocker la coordonnée X du point, et initialise sa valeur à 10 .

L’ordonnée du point représente les données d’humidité, mais la valeur d’humidité ne peut pas être utilisée directement comme coordonnée Y. En effet, la plage de données d’humidité dépasse largement celle de l’écran, et l’échelle des valeurs est inverse à l’axe Y de l’écran. Pour résoudre ce problème, utilisez l’opérateur « map » afin d’associer la valeur d’humidité à une coordonnée Y correspondante sur l’écran UNIHIKER K10.

Crée une nouvelle variable nommée « hum_y1 » pour stocker les données d’humidité cartographiées. Initialise la valeur de « hum_y1 » avec la valeur d’humidité retournée par le capteur.

Ensuite, utilise la commande « cache draw point at XY color » pour tracer le point. Son abscisse est la variable « hum_x1 » et son ordonnée, la variable « hum_y1 ». Enfin, utilise la commande « show cached content » pour mettre à jour et afficher le point tracé sur l’écran UNIHIKER K10.

Après avoir placé le premier point, la coordonnée X correspondante doit être décalée de 10 unités vers la droite. Utilisez la commande « change hum_x1 by » pour incrémenter la valeur de hum_x1 de 10.

(2) Tracer des lignes

Après avoir tracé les points de données, l’étape suivante consiste à les utiliser pour créer un graphique linéaire. Utilise la commande « cache draw line from X1 Y1 to X2 Y2 color » pour relier les points en séquence et former une polyligne.

Pour déterminer les coordonnées de début et de fin de la ligne, créez deux nouvelles variables : « hum_x2 » et « hum_y2 ». Les coordonnées de début de la ligne (X1, Y1) correspondent aux coordonnées du premier point de données, soit (hum_x1, hum_y1). Les coordonnées de fin de la ligne (X2, Y2) correspondent aux coordonnées du point de données suivant, soit (hum_x2, hum_y2).

Au début du programme, sous « unihiker k10 au démarrage », initialise la valeur de « hum_x2 » à la valeur de « hum_x1 » et celle de « hum_y2 » à la valeur de « hum_y1 ».

Après avoir confirmé les points de départ et d’arrivée de la ligne, utilise la commande « cache draw line from X1 Y1 to X2 Y2 color » pour la tracer. Ensuite, utilise la commande « show cached content » pour afficher la ligne sur l’écran UNIHIKER K10.

Lorsque le point suivant est mis à jour, les coordonnées d’extrémité de la ligne doivent également être mises à jour. Pour ce faire, mettez à jour les valeurs de « hum_x2 » et « hum_y2 ».

Attribuez la valeur de « hum_x1 » à « hum_x2 », afin que « hum_x2 » stocke la coordonnée X du point précédent.

Attribuez la valeur de « hum_y1 » à « hum_y2 », afin que « hum_y2 » stocke la coordonnée Y du point précédent.

L’objectif de cette étape est de définir le point de départ de la nouvelle ligne afin qu’elle se connecte au point précédent.

4. Exécution du programme

Avant d’exécuter le programme, aassure toi que l’UNIHIKER K10 est correctement connecté à l’ordinateur via un câble USB. Une fois la connexion établie, clique sur le bouton « Transférer » du logiciel. Après l’exécution réussie du programme, un système de coordonnées cartésiennes s’affichera sur l’écran de l’UNIHIKER K10, et les données d’humidité mesurées en temps réel seront représentées graphiquement.

5. Essayez

Lors du tracé du graphique linéaire, tu peux rencontrer deux problèmes :

  • Les points de données s’actualisent trop rapidement, ce qui provoque des changements rapides sur le graphique linéaire et le rend difficile à observer.
  • Lorsque le nombre de points de données dépasse la plage de l’axe X de l’écran, le graphique continue de s’afficher, ce qui peut entraîner un affichage surchargé. Pour résoudre ce problème, vous pouvez prendre les mesures suivantes :
    • Ralentis la fréquence d’acquisition des données : ajoute un délai approprié entre les acquisitions afin de réduire la vitesse de génération des nouveaux points de données. Par exemple, tu peux insérer un court temps d’attente après la lecture de la valeur d’humidité et le tracé d’un nouveau point.
    • Limite la zone de dessin : pour garantir que le graphique linéaire soit dessiné uniquement à l’intérieur du système de coordonnées, tu dois soit limiter le nombre de points de données, soit restreindre la valeur de la coordonnée X.

Tâche 2 : Obtenir des données d’humidité par commande vocale

1. Programmation

Cette tâche s’appuie sur le programme « Essayez-le » de la tâche 1 en ajoutant le réveil vocal, la reconnaissance des commandes vocales et la capacité de reconnaître et de signaler les données d’humidité par interaction vocale.

(1) Initialisation de la fonction de reconnaissance vocale

Sous « unihiker k10 au démarrage », utilisez la commande « set speech recognition wake time ms language » pour initialiser le mode de reconnaissance vocale en continu, définir le délai de réveil à 6 secondes et choisir l’anglais comme langue. Cette étape garantit que le module de reconnaissance vocale démarre correctement et passe en mode d’écoute après avoir été activé par l’utilisateur.

Remarque : Actuellement, la reconnaissance vocale ne prend en charge que le chinois et l’anglais.

(2) Ajouter des mots clés de commande vocale

Utilisez l’instruction « ajouter un identifiant de commande vocale » pour attribuer un numéro d’identification unique à chaque commande vocale afin de faciliter sa reconnaissance et son traitement ultérieurs. Par exemple :

La commande « humidité maximale » se voit attribuer l’ID 0.

La commande « humidité minimale » se voit attribuer l’ID 1.

(3) Obtenir les valeurs d’humidité maximale et minimale

Au début du programme, créez deux variables, « hum_min » et « hum_max », pour stocker les valeurs minimales et maximales d’humidité. Utilisez la commande « read humidity » pour obtenir la valeur d’humidité initiale et assignez-la à « hum_min » et « hum_max ».

Créez une variable nommée « hum » pour acquérir en continu des données d’humidité en temps réel au sein de la boucle.

Utilisez la commande « si… alors… sinon » pour comparer les valeurs de « hum » et « hum_max ». Si « hum » est supérieur à « hum_max », mettez à jour « hum_max » avec la valeur de « hum ».

Sinon, si la condition est fausse, les données d’humidité maximale restent inchangées. Utilisez l’instruction « set hum_max to » pour affecter la valeur de la variable « hum_max » à la variable « hum_max ».

La méthode de comparaison des valeurs minimales d’humidité est la même que celle utilisée pour comparer les valeurs maximales d’humidité.

(4) Obtention des valeurs d’humidité maximale et minimale par commandes vocales

Pour obtenir les valeurs d’humidité maximale et minimale par commande vocale, il faut attendre que les graphiques linéaires soient entièrement tracés. Utilisez l’instruction « Si… alors » pour déterminer si la reconnaissance vocale est activée . Lorsque l’utilisateur prononce la phrase d’activation prédéfinie « Salut, Telly », la fonction de reconnaissance vocale passe en mode écoute et est prête à recevoir ses commandes vocales.

Si l’identifiant du mot de commande est détecté comme étant 0 (c’est-à-dire que l’utilisateur dit « humidité maximale »), utilisez l’instruction « afficher le contenu mis en cache » pour afficher la valeur la plus élevée comme « hum_max » à l’écran.

Si l’ID du mot de commande est détecté comme 1 (c’est-à-dire que l’utilisateur dit « humidité min »), utilisez l’instruction « afficher le contenu mis en cache » pour afficher l’humidité minimale comme « hum_max ».

Le programme complet est le suivant :

2. Exécution du programme

Avant d’exécuter le programme, veuillez vous assurer que l’UNIHIKER K10 est correctement connecté à l’ordinateur via le câble USB. Après avoir vérifié que tout est correct, cliquez sur le bouton « Exécuter » du logiciel. Une fois le programme exécuté avec succès, l’UNIHIKER K10 affichera un graphique linéaire d’humidité sur son écran. Une fois le graphique entièrement tracé, vous pouvez activer la reconnaissance vocale en disant « Salut Telly », puis prononcer la commande « humidité max ». L’écran affichera alors « Humidité max : ».

Remarque : Il existe deux phrases de réveil vocales : « Salut, Telly » et « Salut, Jarvis ».

Coin des connaissances

1. Contexte et importance de la surveillance environnementale intelligente

(1) La gravité des problèmes environnementaux

Avec le développement rapide de l’industrialisation et de l’urbanisation, les problèmes environnementaux sont devenus de plus en plus préoccupants. Des phénomènes tels que la pollution de l’air, la dégradation de la qualité de l’eau et la contamination des sols sont fréquents et constituent de graves menaces pour la santé et la qualité de vie des populations. Par exemple, le smog a entraîné une augmentation du nombre de patients souffrant de maladies respiratoires, et le rejet d’eaux usées industrielles a causé de graves dommages aux écosystèmes fluviaux. Dans ce contexte, les technologies de surveillance environnementale intelligente ont émergé. Elles permettent d’obtenir des données environnementales en temps réel et avec précision, fournissant ainsi une base scientifique à la gouvernance et à la protection de l’environnement.

(2) Limites de la surveillance environnementale traditionnelle

La surveillance environnementale traditionnelle repose principalement sur l’échantillonnage manuel et l’analyse en laboratoire, ce qui présente de nombreuses limites. Premièrement, la faible fréquence d’échantillonnage ne permet pas de refléter en temps réel l’évolution de la qualité de l’environnement. Deuxièmement, la répartition limitée des points d’échantillonnage rend difficile une couverture exhaustive de la zone surveillée. De plus, les analyses en laboratoire sont longues et ne permettent pas une prise de décision rapide. La technologie de surveillance environnementale intelligente pallie les lacunes de la surveillance traditionnelle grâce à l’utilisation de réseaux de capteurs, de l’Internet des objets (IoT) et de l’analyse des mégadonnées, permettant ainsi une surveillance automatisée, intelligente et en temps réel de l’environnement.

2. Tendances de développement de la surveillance environnementale intelligente

(1) Miniaturisation et intégration

Avec le développement de la microélectronique et des nanotechnologies, les capteurs de surveillance environnementale évoluent vers la miniaturisation et l’intégration. Les capteurs miniaturisés présentent l’avantage d’être de petite taille, peu gourmands en énergie et peu coûteux, ce qui facilite leur installation dans divers endroits et permet la création de réseaux de surveillance haute densité à grande échelle. Les modules de capteurs intégrés peuvent mesurer simultanément plusieurs paramètres environnementaux, améliorant ainsi l’efficacité de la surveillance et l’exhaustivité des données. Par exemple, l’intégration de capteurs de gaz, de température et d’humidité sur une seule puce permet une surveillance complète de la qualité de l’air.

(2) Intelligence et adaptabilité

Les futurs systèmes de surveillance environnementale intelligents seront dotés d’une intelligence accrue, leur permettant de reconnaître automatiquement les tendances des changements environnementaux et d’effectuer une surveillance adaptative. Grâce à l’apprentissage automatique et aux algorithmes d’intelligence artificielle, le système pourra ajuster automatiquement la fréquence et les paramètres de surveillance en fonction des variations des données environnementales. Par exemple, il pourra augmenter la fréquence de surveillance dans les zones où la qualité de l’air est mauvaise et la diminuer lorsque les conditions environnementales sont stables, ce qui permettra d’économiser de l’énergie et d’améliorer l’efficacité de la surveillance. Parallèlement, les systèmes de surveillance intelligents pourront également diagnostiquer automatiquement les pannes des capteurs et effectuer une autoréparation, améliorant ainsi la fiabilité et la stabilité du système.

(3) Intégration interdisciplinaire

Le développement de technologies intelligentes de surveillance environnementale nécessitera l’intégration de multiples disciplines, telles que les sciences de l’environnement, la physique, la chimie, la biologie, les sciences de l’information et l’informatique. Grâce à cette collaboration interdisciplinaire, il sera possible de développer des technologies et des équipements de surveillance environnementale plus performants et plus efficaces. Par exemple, l’association de la technologie des biocapteurs et de la vision par ordinateur permettra la surveillance en temps réel des polluants au sein des organismes vivants ; la mise à profit des avancées en sciences de l’environnement et en sciences de l’information contribuera à l’élaboration de modèles de prédiction de la qualité de l’environnement et de systèmes d’aide à la décision plus précis.

Relevez le défi

Puisque nous maîtrisons déjà la création de graphiques linéaires pour l’humidité, relevons un nouveau défi : créer simultanément des graphiques pour la luminosité et la température. Ce système de surveillance environnementale n’en sera que plus complet et pratique. Imaginez le plaisir de pouvoir observer intuitivement l’évolution de ces trois paramètres environnementaux clés – température, humidité et luminosité – sur un seul écran !

Catégories
MAQUEENPLUS Robotique

Défi 03 : Définir le mode d’interaction avec l’animal de compagnie

Tu as rêvé de donner vie à ton animal de compagnie électronique et de le faire interagir ? Dans ce projet, le capteur de lumière de l’UNIHIKER K10 simule la « tête » de l’animal, tandis que les capteurs de lumière gauche et droit du Maqueen Plus simulent ses « pattes ». Grâce à ce dispositif, tu peux interagir avec ton animal par de simples mouvements : il perçoit ta « présence » et réagit en conséquence. Découvrons ensemble comment rendre ton animal de compagnie électronique plus vivant et amusant !

Objectif de la tâche

Grâce à des capteurs de lumière, configure des modes interactifs pour ton animal de compagnie électronique afin qu’il réagisse différemment selon tes interactions. Lorsque tu touches le capteur de lumière du UNIHIKER K10, l’animal affiche une expression joyeuse et tourne sur lui-même ; lorsque tu touches le capteur de lumière gauche du Maqueen Plus, l’animal affiche une expression espiègle et recule pour t’éviter.

Points de connaissance

  • Comprendre le rôle des capteurs dans l’interaction avec les robots
  • Comprendre le rôle du flux « entrée-traitement-sortie » dans la conception d’interaction
  • Apprendre à obtenir des valeurs à partir de capteurs de lumière et à effectuer une évaluation du seuil

Liste du matériel

Exercice pratique

Ce défi se déroule en deux étapes, chacune comprenant deux tâches, afin de concevoir et de mettre en œuvre le mode interactif de l’animal de compagnie électronique. La première tâche consiste à acquérir les données des capteurs et à initialiser les expressions de l’animal, tandis que la seconde améliore la logique interactive et le retour d’information dynamique de l’animal en fonction des données des capteurs.

Tâche 1 : Collecte de données et initialisation de l’expression

En lisant les données des capteurs de lumière, on comprend les conditions d’éclairage ambiant et on initialise l’expression de l’animal.

Tâche 2 : Concevoir une logique interactive

En se basant sur les variations des données recueillies par les capteurs de lumière, concevoir et implémenter la logique de réaction dynamique de l’animal de compagnie électronique. Ceci permet à l’animal d’afficher différentes émotions ou actions en fonction des changements environnementaux, renforçant ainsi l’interactivité et le dynamisme.

L’implémentation concrète est la suivante :

  • Lorsque l’on touche le capteur de lumière du UNIHIKER K10, l’animal tourne sur lui-même et affiche une expression joyeuse. 
  • Lorsque l’on touche le capteur de lumière gauche du Maqueen Plus, l’animal recule pour éviter la lumière, simulant une réaction timide ou d’évitement, et affiche une expression espiègle.

Tâche 1 : Collecte de données et initialisation de l’expression

1. Connexion matérielle

Utilise un câble de données USB 3.0 vers Type-C pour connecter la voiture robot à l’ordinateur.

Remarque : L’extrémité de type C doit être connectée au UNIHIKER K10.

2. Préparation du logiciel

Ouvrez Mind+ et terminez la configuration du logiciel comme indiqué dans les illustrations suivantes.

3. Programmation

(1) Lire les valeurs du capteur de lumière

Pour cette tâche, il est nécessaire de visualiser les valeurs du capteur de lumière via la sortie série. Par conséquent, la commande « serial write string Wrap » doit être utilisée pour afficher les résultats de lecture du capteur.

Pour obtenir l’intensité lumineuse ambiante sur l’UNIHIKER K10, utilisez la commande « read light » dans la « zone de commande UNIHIKER K10 » et intégrez-la dans la commande « serial write string Wrap » pour afficher le résultat sur le port série.

Pour obtenir les données du capteur de luminosité de la voiture Maqueen Plus, accédez à la zone de commandes « Carte d’extension » et sélectionnez la commande « read light intensity laft ». De même, intégrez-la dans la commande « write in string » pour afficher le résultat.

Pour obtenir les données du capteur de lumière droit, il suffit de remplacer « gauche » par « droite » dans la commande « read light intensity left ».

(2) Initialiser l’affichage de l’expression

Lorsque l’animal est inactif, son expression initiale est « ennuyé ». Dans la leçon 2, tous les fichiers image d’expression ont déjà été téléchargés. Dans ce défi, nous utiliserons directement l’image d’expression « 7 – Boring ».

Utilise la commande « cache local image » et affiche l’image à la position (X : 0, Y : 0). Clique sur l’icône « Paramètres » au centre de la commande, sélectionnez « Ouvrir » dans le menu déroulant, puis choisissez l’image de l’expression dans le dossier local. Dans les propriétés de l’image, définie la largeur à 240 et la hauteur à 320 pour qu’elle s’affiche correctement à l’écran.

123CODAGE\10 PROJETS ROBOTS\MAQUEEN\14-defi03

Ensuite, utilise la commande « show cached content » pour actualiser l’image mise en cache à l’écran. L’expression étant affichée dynamiquement, la commande « wait 0.1 seconds » doit être utilisée pour contrôler la durée d’affichage de chaque image.

Les trois images restantes peuvent être définies une à une selon la même méthode : chargées et affichées successivement pour former une expression animée « ennuyeuse ». Le programme complet est présenté ci-dessous :

4. Exécution du programme

Avant d’exécuter le programme, veille à t’assurer que le UNIHIKER K10 est correctement connecté à l’ordinateur via un câble USB. Une fois la connexion établie, cliquez sur le bouton « Télécharger ». Une fois l’exécution du programme terminée, l’image exprimant l’ennui s’affichera dynamiquement sur l’écran du UNIHIKER K10.

Pour visualiser les valeurs détectées par le capteur de lumière, ouvrez simplement la fenêtre du port série dans la zone d’affichage du terminal de Mind+. Vous pourrez ainsi observer les données de sortie du capteur en temps réel. Essayez de couvrir l’un des capteurs de lumière avec votre main et observez si les valeurs changent !

Remarque : Pour visualiser les données via le port série, l’UNIHIKER K10 doit être connecté à l’ordinateur à l’aide d’un câble USB.

5. Essayez

Étant donné la rapidité de mise à jour des valeurs des capteurs de lumière sur le port série, il est difficile de déterminer directement à quel capteur correspond chaque valeur. Existe-t-il un moyen de distinguer rapidement l’intensité lumineuse détectée par chaque capteur ? Essaye de trouver une solution créative : une méthode d’affichage plus claire ou une stratégie d’étiquetage pourraient-elles résoudre ce problème ?

Tâche 2 : Concevoir une logique interactive

1. Programmation

En t’appuyant sur la tâche 1, continue d’améliorer le programme en ajoutant une logique interactive. Cette logique peut être divisée en trois parties : interaction avec la tête, interaction avec le pied gauche et interaction avec le pied droit.

(1) Interaction de la tête

Lorsque l’utilisateur couvre le capteur de lumière du UNIHIKER K10 (simulant une action de « caresse sur la tête »), l’animal réagit par une réaction « joyeuse » : il tourne d’abord sur lui-même, puis adopte une expression « joyeuse » et affiche cet état à l’écran.

Créez une nouvelle fonction appelée « Interaction avec la tête » et effectue les opérations suivantes :

· Contrôle de mouvement

Utilise le bloc « set left motor direction rotate forward » de la section « Expansion Board » pour faire tourner les moteurs gauche et droit dans des directions opposées à la même vitesse (100), permettant ainsi à l’animal de tourner sur place.

Tourner à gauche : Régle le sens de rotation du moteur gauche sur arrière et celui du moteur droit sur avant

Tourner à droite : Régle le sens de rotation du moteur gauche sur avant et celui du moteur droit sur arrière, puis maintien cette position pendant 3 secondes.

Arrêt : Utilise la commande « set all motor stop » pour arrêter tous les moteurs.

· Commutateur d’expression

Utilise l’instruction « cache local image » pour charger les fichiers image , puis l’instruction « show cached content » pour afficher ou mettre à jour le contenu à l’écran.

• Déclencher la fonction « Interaction avec la tête »

Ajoute une logique conditionnelle dans le programme principal pour utiliser la commande « read light » afin d’obtenir la valeur actuelle du capteur de lumière.

Utilise l’instruction « si… alors » pour appeler la fonction « Interaction de la tête » lorsque la valeur détectée est inférieure à 50 (c’est-à-dire que la lumière est atténuée parce que la main couvre le capteur).

(2) Interaction du pied gauche

Lorsque l’utilisateur touche la zone « pied gauche » sur la carte mère Maqueen Plus V3 (en touchant le capteur photoélectrique Light-L), l’animal se déplace d’abord vers la gauche, puis vers la droite pour simuler un mouvement d’évitement, puis prend une expression « coquine ».

Créez une nouvelle fonction appelée « Left foot interaction ».

· Contrôle de mouvement

Utilise le bloc « set motor direction rotate speed » de la section « Expansion Board » pour régler le moteur gauche afin qu’il se déplace vers l’arrière à une vitesse de 200 pendant 0,2 seconde, puis utilisez le bloc « set all motor » pour arrêter tous les moteurs.

Utilise ensuite le bloc « set motor direction rotate speed » pour configurer le moteur droit afin qu’il recule à une vitesse de 200 pendant 0,2 seconde, et utilisez le bloc « set all motor » pour arrêter tous les moteurs.

· Commutateur d’expression

• Déclencher la fonction « Interaction du pied gauche »

Ajoutez une logique conditionnelle au programme principal. Utilise la commande « lire l’intensité lumineuse gauche » de la carte d’extension pour obtenir la valeur du capteur de luminosité gauche du véhicule.

Utilise la commande « si…alors ». Lorsque la valeur détectée est inférieure à 50 (indiquant que la lumière a faibli, par exemple lorsqu’une main couvre le capteur Light-L), appelez la fonction « Left foot interaction ».

Le programme complet est le suivant :

2. Exécution du programme

Avant d’exécuter le programme, assure toi que l’UNIHIKER K10 est correctement connecté à l’ordinateur à l’aide d’un câble USB. Une fois la connexion établie, clique sur le bouton « Télécharger» et patiente pendant le chargement du programme.

Une fois le programme lancé, l’écran du UNIHIKER K10 affichera dynamiquement une expression « ennuyeuse ».

Lorsque vous couvrez le capteur de lumière situé sur le dessus de l’UNIHIKER K10 (simulant une tape sur la tête), la voiture tournera à gauche sur place pendant 3 secondes, puis à droite pendant 3 secondes, et adoptera une expression de « rire ».

Lorsque tu couvres le capteur lumineux Light-L du côté gauche de la voiture (en simulant le fait de toucher son pied gauche), la voiture effectuera trois mouvements d’évitement vers l’arrière gauche et l’arrière droit, puis adoptera une expression « coquine ».

3. Essaye

Dans la tâche 2, tu as déjà terminé la programmation pour « Interaction avec la tête » et « Interaction avec le pied gauche ». Ensuite, essaye d’utiliser la même méthode pour compléter la fonction « Interaction avec le pied droit » !

Conseil : Lors de l’interaction avec le pied droit, la voiture doit d’abord reculer vers la droite et afficher une expression appropriée.

Coin des connaissances

1. Comprendre le rôle des capteurs dans l’interaction avec les robots

Qu’est-ce qu’un capteur ? Un capteur est comparable à l’organe sensoriel d’un robot, lui permettant de percevoir le monde extérieur. Les capteurs convertissent des informations telles que la lumière, la distance et la température en signaux envoyés à la carte de contrôle principale pour traitement. Voici quelques exemples de capteurs de base.

Comment les capteurs permettent-ils aux robots d’interagir ? Pour interagir, un robot doit d’abord percevoir les actions humaines ou les changements dans son environnement. Les capteurs servent de passerelle, de canal d’information, pour ce processus.

  • Acquisition d’informations externes : Permet au robot de détecter les interactions. 
  • Déclenchement de réponses comportementales : Lorsque des changements spécifiques sont détectés, le robot effectue des actions correspondantes (comme se tourner ou changer d’expression). 
  • Interaction homme-robot : Le robot réagit à nos actions grâce aux données de ses capteurs, pour une expérience à la fois ludique et intelligente.

2. Le rôle du flux « Entrée – Traitement – ​​Sortie » dans la conception d’interaction

Dans l’interaction entre les robots et les humains, tout processus comportemental complet comprend généralement trois étapes clés : l’entrée, le traitement et la sortie.

Le flux « Entrée – Traitement – ​​Sortie » est au cœur de la conception d’interactions. Sans une évaluation correcte des entrées, le robot ne peut pas répondre avec précision. On peut concevoir chaque interaction comme un flux de données : il suffit de déterminer quel capteur utiliser pour percevoir quoi, dans quelles conditions l’interaction est « déclenchée » et comment le robot doit « répondre ». Grâce à cette approche, tu peux concevoir des interactions robotiques ludiques et captivantes !

Relevez le défi

Dans nos précédentes expériences d’interaction, l’animal de compagnie électronique réagissait par de nombreuses actions : rotation, recul, changement d’expression… grâce à différents capteurs lumineux. Ajoutons maintenant du son pour qu’il puisse exprimer ses émotions par différentes tonalités, pour une expérience interactive encore plus immersive ! À toi de jouer !

  • Ajoute un bip joyeux à l’interaction « Tête », pour que l’animal émette un joyeux « bip bip » en tournant ; 
  • Ajoute un effet sonore espiègle à l’interaction « Patte gauche », par exemple en alternant des tonalités aiguës et graves pour plus de fun ; 
  • Conçoit ta propre « bibliothèque d’expressions sonores », pour que chaque interaction soit accompagnée d’une tonalité émotionnelle unique.

Essaye ! Ton animal de compagnie électronique peut-il exprimer des émotions et des réactions par une combinaison d’actions, d’expressions et de sons ?

Catégories
MAQUEENPLUS

Défi 02 : Concevoir un animal de compagnie numérique personnalisé

Objectif de la tâche

Crée une « expression dynamique » sur l’écran de ton UNIHIKER K10 en utilisant des images fixes pour générer un effet d’animation simple et afficher les émotions de ton animal. Tu peux également afficher un message de bienvenue et le nom de ton animal.

Points de connaissance

  1. Comprendre la signification et l’objectif des expressions machine
  2. Apprendre à afficher des images sur l’écran UNIHIKER K10
  3. Comprendre les mécanismes de chargement, de commutation et d’actualisation des images
  4. Maîtriser la fonction d’affichage du nom de l’animal à l’écran.

Liste du matériuel

Liste du matériel :

Dans ce projet, tu concevras ton animal de compagnie numérique à travers deux tâches principales. La première tâche consiste à créer l’expression faciale de l’animal. La seconde ajoute des effets d’animation, notamment la transition d’images, pour rendre ton animal plus vivant et interactif.

Tâche 1 : Affichage statique de l’expression et du nom de l’animal de compagnie

Crée l’expression faciale de l’animal et affiche-la ainsi que le nom de l’animal sur l’écran UNIHIKER K10.

Tâche 2 : Changement d’image pour un effet dynamique

Alternance automatique d’images à intervalles réguliers pour créer un effet d’animation, simulant des expressions faciales en mouvement.

Tâche 1 : Affichage statique de l’expression et du nom de l’animal de compagnie

1. Connexion matérielle

Utilise un câble de données USB 3.0 vers Type-C pour connecter la voiture robot assemblée à l’ordinateur.

Remarque : L’extrémité de type C doit être connectée au UNIHIKER K10.

2. Préparation du logiciel

Ouvrez Mind+ et termine la configuration du logiciel comme indiqué dans les illustrations suivantes.

3. Programmation

Avant de commencer à écrire le programme, vous devez télécharger les fichiers de ressources préparés sur votre ordinateur. Dans ce projet, nous utiliserons principalement les images du dossier « 01-General ».

Affichez l’expression de l’animal sur l’écran UNIHIKER K10. Utilisez la commande « Cache local image » pour afficher l’image aux coordonnées (X : 0, Y : 40).

Puisque nous affichons une image locale, cliquez sur l’icône « Paramètres » au milieu de la commande, sélectionnez « Ouvrir » dans le menu déroulant, puis choisissez l’image d’expression dans le dossier local (où l’image est enregistrée).

Lors de la définition des propriétés de l’image, définissez la largeur et la hauteur sur 240 pour garantir que l’image s’affiche entièrement à l’écran.

Pour afficher correctement les images sur l’écran UNIHIKER K10, vous devez utiliser la commande « show cached content ». Celle-ci permet d’afficher le contenu du cache à l’écran.

Remarque : Toutes les commandes relatives à l’affichage (images, texte, etc.) doivent être utilisées conjointement avec la commande « afficher le contenu mis en cache » pour que le contenu s’affiche correctement. Sinon, même si le contenu est configuré, il ne s’affichera pas à l’écran.

Après avoir affiché la photo de l’animal, nous pouvons ajouter un texte de bienvenue au-dessus pour indiquer son nom. Veuillez utiliser la commande « Mettre en cache le texte » pour afficher le texte « Bonjour, je suis… » sur la première ligne de l’écran.

N’oubliez pas que la commande « Cache text » doit être utilisée conjointement avec la commande « show cached content » pour afficher le texte à l’écran. Voici le programme complet.

Astuce : Vous remarquerez peut-être qu’il existe deux versions différentes de la commande « Mettre le texte en cache ». Les étudiants intéressés peuvent comparer leur utilisation et leurs effets pour en identifier les différences !

4. Exécution du programme

Avant de lancer le programme, assure-toi que l’UNIHIKER K10 est correctement connecté à l’ordinateur via le câble USB. Une fois la connexion établie, cliquez sur le bouton « Exécuter » du logiciel. Après le lancement du programme, l’écran de l’UNIHIKER K10 affichera l’image numérique de votre animal et le nom que vous avez créé.

Remarque : Une fois le téléchargement du programme terminé, vous pouvez débrancher le câble USB du UNIHIKER K10. Ensuite, allumez les deux interrupteurs d’alimentation de la voiture robotisée pour que le programme s’exécute en mode d’alimentation du véhicule.

5. Essayez

L’image d’expression actuelle a un fond noir, alors que le fond par défaut de l’écran UNIHIKER K10 est blanc. Pour une harmonie visuelle, nous souhaitons définir la couleur de fond de l’écran sur noir, comme pour l’image d’expression.

Alors, comment procéder ? Vous pouvez utiliser la commande « définir la couleur d’arrière-plan » pour changer la couleur de fond de l’écran en noir, ce qui permettra à l’image de se fondre naturellement dans le fond et rendra l’affichage plus harmonieux et visuellement attrayant.

Tâche 2 : Changement d’image pour un effet dynamique

1. Programmation

Cette tâche s’appuie sur la tâche 1 en améliorant encore le programme.

Ouvrez le dossier d’images « 01-Général » que vous avez téléchargé ; il contient quatre images d’expression différentes. En les faisant défiler successivement dans le programme, vous pouvez créer un effet d’expression dynamique à l’écran et donner vie à votre animal virtuel.

Lors du changement d’image, pour des expressions plus fluides et naturelles, utilisez la commande « Attendre 1 seconde » afin de contrôler le temps d’affichage de chaque image. Réglez ce temps à 0,1 seconde pour un changement d’image rapide, créant ainsi une animation continue et un effet de mouvement réaliste.

Une fois la première image affichée, passez à la seconde. La procédure est identique : suivez simplement les mêmes étapes !

Ensuite, passez aux 3e et 4e images de la même manière, l’une après l’autre. N’oubliez pas d’ajouter une pause de 0,1 seconde entre chaque image pour fluidifier le mouvement. Voici le programme complet :

2. Exécution du programme

Avant de lancer le programme, assurez-vous que l’UNIHIKER K10 est correctement connecté à l’ordinateur via le câble USB. Une fois la connexion établie, cliquez sur le bouton « Exécuter » du logiciel. Après le lancement du programme, les expressions s’animeront à l’écran par alternance d’images.

3. Essayez

Si tu modifies la durée de changement d’image de 0,1 seconde à 0,2 seconde, à quoi ressemblera l’animation ?

Catégories
MAQUEENPLUS

Défi 01: Introduction UNIHIKER K10 Robot Car

La voiture robotisée UNIHIKER K10 est une plateforme d’apprentissage conçue pour t’initier à la programmation et à l’intelligence artificielle. Elle associe le châssis Maqueen Plus V3 à la carte de contrôle principale UNIHIKER K10, intégrant des technologies telles que le contrôle, l’affichage graphique, la reconnaissance vocale, la synthèse vocale, le traitement d’images et la communication sans fil. Elle te permet de progresser au codage des robots en maîtrisant l’interaction avec le matériel, les applications de capteurs et d’autres compétences clés.

Cette voiture robotisée excelle non seulement dans la conduite et la perception de l’environnement, mais elle prend également en charge des interactions multimodales telles que la lumière, le son et l’affichage, rendant l’apprentissage plus ludique et immersif.

Introduction au matériel

1. Châssis intelligent Maqueen Plus V3

  • 5 capteurs de suivi de ligne : Prend en charge la reconnaissance des lignes noires et le suivi de trajectoire pour les tâches de suivi de ligne intelligentes.
  • 2 capteurs de lumière : détectent la luminosité ambiante pour un éclairage intelligent ou un contrôle du comportement sensible à la lumière.
  • Capteur laser matriciel : utilise 64 points laser pour l’évitement d’obstacles et la détection de falaises avec une précision millimétrique.
  • Phares et éclairage d’ambiance RGB pour voiture : 16 millions de couleurs personnalisables pour une meilleure visibilité et un retour d’information précis.
  • Buzzer : Émet des alertes sonores pour une meilleure interaction homme-machine.
  • Moteurs métalliques détachables : Parfaitement adaptés pour une rotation fluide sans calage.

2. UNIHIKER K10

  • Écran LCD couleur de 2,8 pouces : affiche les données, les interfaces et les animations pour une interaction intuitive.
  • Reconnaissance vocale hors ligne : Prend en charge les commandes vocales en chinois/anglais sans connexion Internet.
  • Caméra intégrée : permet la capture et le traitement d’images pour des projets tels que la détection d’objets, la reconnaissance faciale, la lecture de codes QR et la reconnaissance de chats/chiens.
  • Capteurs intégrés : Inclut un accéléromètre, un microphone, un capteur de température et un capteur de lumière pour les projets basés sur la perception.
  • Communication sans fil : Prend en charge le Wi-Fi et le Bluetooth pour la commande à distance et les projets IoT.
  • Haut-parleur intégré et indicateurs RVB : pour le retour vocal, l’affichage de l’état et les interactions lumineuses.

Introduction au logiciel

Mind+ est un logiciel de programmation graphique facile à utiliser. Compatible avec de nombreuses plateformes matérielles, il propose un large éventail de modules et de ressources de programmation.

  • Interface graphique intuitive : Mind+ propose une interface glisser-déposer qui permet de créer des programmes sans écrire de code complexe. Cette conception intuitive facilite grandement la prise en main et permet aux débutants de se familiariser rapidement avec le logiciel.
  • Compatibilité matérielle étendue : Mind+ prend en charge une variété de périphériques, notamment le Maqueen Plus V3 et l’UNIHIKER K10.
  • Modules de programmation riches : Le logiciel propose un ensemble varié de modules couvrant le contrôle de mouvement, le traitement des données de capteurs, l’affichage graphique, la lecture audio, et bien plus encore.

L’interface de Mind+ comporte 8 zones principales : barre de menu, sélecteur de mode, outils rapides, blocs de commandes, zone de script, zone de code, extensions et moniteur série.

2. Ajout d’extensions

Passez en mode téléchargement : tous les projets de ce cours utilisent ce mode.

Ajouter la carte de contrôle principale : « Extensions » > « Cartes » > « UNIHIKER K10 »

Ajoutez la carte d’extension : « Extensions » > « Carte d’extension » > « Maqueen Plus V2/V3 »

Après l’ajout, vous verrez de nouveaux blocs de commandes : « UNIHIKER K10 » et « Carte d’extension ».

3. Rédaction du programme

Affichons le logo UNIHIKER à l’écran et faisons défiler les couleurs des lumières RGB du Maqueen Plus V3 : rouge, jaune, bleu et vert.

Utilisez les commandes « cache local image at X0 Y0 » et « show cached content » dans la zone de commandes UNIHIKER K10 pour afficher le logo.

Remarque : L’utilisation de ces commandes sera expliquée en détail dans les leçons suivantes. Pour l’instant, nous les utiliserons brièvement pour commencer.

Pour contrôler les LED RGB de la carte mère Maqueen Plus V3 et afficher différentes couleurs, utilisez les commandes de la zone « Extension ». Utilisez la commande « pin RGB LEDs » sous « UNIHIKER K10 on start » pour initialiser le nombre de LED RGB à 4.

Ensuite, dans un bloc « Forever », utilisez le bloc « pin RGB to show color » pour que les quatre LED RGB s’allument en rouge. Utilisez le bloc « Wait 1 second » pour que la couleur rouge reste allumée pendant une seconde.

Répétez cette opération pour que les voyants RVB s’allument en jaune, bleu et vert, pendant une seconde pour chaque couleur. Voici le programme complet :

4. Exécutez le programme

Assurez-vous que le UNIHIKER K10 est correctement connecté à votre ordinateur via un câble USB. Une fois la connexion établie, cliquez sur le bouton « Téléverser » dans le logiciel Mind+.

Une fois le programme téléchargé, débranchez le câble USB du UNIHIKER K10. Mettez sous tension l’interrupteur de la batterie du véhicule et celui du châssis. Le logo UNIHIKER s’affichera à l’écran et les voyants RVB du châssis clignoteront successivement en rouge, jaune, bleu et vert.

Catégories
Jeu vidéo ROBLOX

Apprendre Lua sur Roblox – 10 scénarios simples

Voici les 10 mini-projets interactifs ! Cliquez sur les défi01 à défi10 pour naviguer entre les projets.

Chaque fiche contient :

  • la description du jeu, les règles,
  • les compétences Lua acquises,
  • un QCM de 5 questions

La progression suit une logique pédagogique :

  • défi01 à défi03 : bases Roblox (Parts, inputs, GUI)
  • défi04 à défi06 : communication réseau, physique, effets visuels
  • défi07 à défi09 : animations, interactions avancées, données persistantes
  • défi10 : projet complet qui réutilise tout, avec architecture modulaire

Défi 01 : La Zone Mortelle

Description

Une arène parsemée de briques rouges mortelles. Le joueur doit traverser un espace sans toucher les parts mortels. Au contact d’un part mortel, son personnage meurt instantanément (Humanoid.Health = 0). Des zones sûres (parts verts) permettent de souffler avant d’atteindre une zone or.

Optimise son jeu pour avoir un minimum de script.

Règles du jeu

Rejoignez l’arène. Atteignez la brique dorée à l’autre bout sans toucher les zones rouges. Chaque mort vous remet au départ. Pas de limite de tentatives.

Compétences acquises

  • Touched Event
  • Humanoid.Health
  • BasePart properties
  • Script vs Local
  • ScriptInstance.Name
  • for _ , part in ipair(parts:GetChildren())
  • Reconnaître un Humanoid
  • Gérer les collisions

QCM — Testez vos connaissances

1. Quel événement Roblox détecte le contact avec une part ?

  • OnTouch
  • Touched
  • Hit
  • Collide

2. Pour tuer un personnage, on modifie quelle propriété du Humanoid ?

  • MaxHealth
  • WalkSpeed
  • Health
  • Jump

3. Où place-t-on un Script qui affecte le serveur ?

  • StarterGui
  • ReplicatedStorage
  • ServerScriptService
  • LocalScript

4. Comment récupérer le Humanoid d’un personnage touché ?

  • hit.Humanoid
  • hit.Parent:FindFirstChild(‘Humanoid’)
  • game.Players.Humanoid
  • workspace.Humanoid

5. Quelle propriété rend une Part non-solide mais visible ?

  • Transparency = 0
  • CanCollide = false
  • Anchored = true
  • Locked = true

Défi 02 : Speed Runner

Touches clavier & compétences joueur

Description

Un couloir d’obstacles où le joueur peut débloquer des compétences en appuyant sur des touches. Appuyez sur [E] pour activer un boost de vitesse temporaire, [Q] pour sauter plus haut, [R] pour un double saut. Les compétences ont un cooldown visible.

Règles du jeu

Parcourez le couloir le plus vite possible. Utilisez vos touches de compétences au bon moment. Franchissez la ligne d’arrivée. Votre temps est affiché.

Compétences acquises

  • UserInputService
  • ContextAction
  • ServiceHumanoid.WalkSpeed
  • Humanoid.Jump
  • Powercooldown avec tick()

QCM — Testez vos connaissances

  1. Quel service Roblox gère les entrées clavier côté client ?
  • InputServiceUser
  • InputService
  • KeyboardService
  • ContextService

2. Dans quel type de script utilise-t-on UserInputService ?

  • ScriptModule
  • ScriptLocal
  • ScriptServer
  • Script

3. Comment détecter l’appui sur la touche E ?

  • Enum.KeyCode.E
  • Key.E
  • Input.E
  • Keyboard.E

4. Quelle propriété du Humanoid contrôle la vitesse de marche ?

  • Speed
  • RunSpeed
  • WalkSpeed
  • MoveSpeed

5. tick() retourne quoi en Lua Roblox ?

  • Le tick d’horloge en ms
  • Le temps en secondes depuis le lancement
  • Le framerate actuel
  • Le temps depuis le début de la partie

Défi 03 : Le Magasin de Pouvoirs

GUI & ScreenGui

Description

Un magasin en jeu affiché via un ScreenGui. Le joueur ouvre l’interface avec [G] et voit une liste de pouvoirs à acheter (vitesse, saut, bouclier). Chaque pouvoir a un prix en pièces d’or ramassées dans le monde. L’achat est confirmé par un bouton.

Règles du jeu

Collectez des pièces d’or dans la carte. Appuyez sur [G] pour ouvrir la boutique. Achetez des pouvoirs avec vos pièces. Activez vos pouvoirs via les touches attribuées.

Compétences acquises

  • ScreenGui & Frame
  • TextButton.MouseButton1Click
  • RemoteEvent (achat)
  • leaderstats basiques
  • Visible toggle

QCM — Testez vos connaissances

  1. Où place-t-on un ScreenGui pour qu’il s’affiche à tous les joueurs ?
  • Workspace
  • StarterGui
  • ReplicatedStorage
  • ServerStorage

2. Quel événement déclenche un clic sur un TextButton ?

  • MouseButton1Click
  • Clicked
  • OnClick
  • Activated

3. Comment rendre une Frame invisible via Script ?

  • Frame.Hide()
  • Frame.Enabled = false
  • Frame.Visible = false
  • Frame.Alpha = 0

4. Un RemoteEvent sert à quoi ?

  • Communiquer entre LocalScript et Script serveur
  • Créer des GUI
  • Détecter les touches
  • Gérer les collisions

5. Pour déclencher un RemoteEvent depuis le client vers le serveur, on utilise ?

  • RemoteEvent:FireServer()
  • RemoteEvent:FireClient()
  • RemoteEvent:Send()
  • RemoteEvent:Trigger()

Défi 04 : La Porte Télékinésique

RemoteEvents & communication Client/Sserveur

Description

Des portes et pièges contrôlés en réseau. Quand un joueur marche sur un bouton (Part), un RemoteEvent notifie le serveur qui ouvre la porte correspondante pour TOUS les joueurs. Des pièges s’activent de même en temps réel.

Règles du jeu

Explorez la carte coopérativement. Trouvez les boutons cachés qui ouvrent des portes. Un joueur peut sacrifier sa position pour ouvrir le chemin à ses coéquipiers. Atteignez la sortie ensemble.

Compétences acquises

  • RemoteEvent:FireServer
  • RemoteEvent:FireClient
  • RemoteEvent.OnServerEvent
  • ReplicatedStorage
  • synchronisation multi-joueurs

QCM — Testez vos connaissances

1. Où stocke-t-on les RemoteEvents accessibles client ET serveur ?

  • ServerStorage
  • ServerScript
  • ServiceReplicated
  • StorageStarterGui

2. OnServerEvent est connecté dans quel type de script ?

  • LocalScript
  • Script (serveur)
  • ModuleScript
  • PluginScript

3. FireClient() envoie un event à ?

  • Tous les joueurs
  • Un joueur spécifique
  • Le serveur
  • Le workspace

4. FireAllClients() envoie à ?

  • Un joueur
  • Le serveur uniquement
  • Tous les clients connectés
  • Les NPC seulement

5. Quel est le premier paramètre reçu par OnServerEvent ?

  • Les données envoyées
  • Le joueur (Player) émetteur
  • Le nom du Remote
  • Eventnil

Défi 05 : Les Plateformes Mobiles

Mouvement de Parts via Script

Description

Des plateformes qui se déplacent selon des trajectoires (haut/bas, gauche/droite, circulaire). Certaines accélèrent, d’autres s’arrêtent selon des conditions (joueur dessus, timer). Utilisez RunService ou des boucles pour animer les positions.

Règles du jeu

Sautez de plateforme en plateforme pour atteindre la tour centrale. Les plateformes bougent en continu. Certaines disparaissent après 3 secondes de contact. Atteignez le sommet.

Compétences acquises

  • CFrame et Vector3
  • RunService.Heartbeat
  • while true do / wait()
  • math.sin() pour oscillation
  • Anchored vs non-Anchored

1. Quelle propriété utilise-t-on pour déplacer une Part sans physique ?

  • Position seule
  • CFrame
  • Velocity
  • MoveDirection

2. RunService.Heartbeat s’exécute à quelle fréquence ?

  • 1 fois/seconde
  • Chaque frame (~60fps)
  • 10 fois/seconde
  • À la demande

3. math.sin() est utile pour créer quel type de mouvement ?

  • Téléportation
  • Mouvement linéaire
  • Oscillation fluide
  • Rotation fixe

4. Une part Anchored peut-elle être déplacée par CFrame ?

  • Non, elle est immobile
  • Oui, le script peut changer son CFrame
  • Seulement par les joueurs
  • Seulement via TweenService

5. Vector3.new(0, 5, 0) représente quoi ?

  • Un déplacement de 5 studs vers le bas
  • Un déplacement de 5 studs vers le haut
  • Une rotation de 5 degré
  • sUne mise à l’échelle de 5

Défi 06 : L’Atelier des Effets

ParticleEmitter & effets visuels

Description

Un laboratoire où le joueur active différents effets visuels : feu, fumée, étincelles, traînées de lumière. Des zones déclenchent des effets via Touched. Le joueur peut ramasser un ‘orbe de feu’ qui attache un effet de flamme à son personnage.

Règles du jeu

Explorez le laboratoire et touchez les zones d’activation. Ramassez des orbes pour équiper des effets sur votre personnage. Certains effets boostent vos stats en plus d’être visuels.

Compétences acquises

  • ParticleEmitter
  • Fire & Smoke objects
  • Attachment points
  • Enabled toggle
  • PointLight & SpotLight

1. Où attache-t-on un ParticleEmitter dans un modèle 3D ?

  • Directement dans Workspace
  • Dans un Attachment ou une Part
  • Dans StarterGui
  • Dans ServerStorage

2. Comment activer/désactiver un ParticleEmitter ?

  • ParticleEmitter.Start()
  • ParticleEmitter.Enabled = true/false
  • ParticleEmitter.Visible = true/false
  • ParticleEmitter.Rate = 0

3. L’objet Fire de Roblox simule quoi ?

  • Un effet de lumière uniquement
  • Des flammes visuelles directement sur une Part
  • Un dégât de brûlure
  • Une explosion

4. Un PointLight émet la lumière dans quelle direction ?

  • Devant la Part
  • Dans toutes les directions
  • Vers le haut uniquement
  • Vers le bas uniquement

5. La propriété Rate d’un ParticleEmitter contrôle quoi ?

  • La taille des particules
  • La couleur
  • Le nombre de particules émises par seconde
  • La durée de vie du ParticleEmitter

Défi 07 : L’Ascenseur Magique

TweenService & animations fluides

Description

Des ascenseurs, portes coulissantes et objets animés avec TweenService. Les transitions sont fluides grâce aux EasingStyle. Un boss oscille sur place avec un Tween en boucle. Des récompenses s’animent quand ramassées (scale up/down).

Règles du jeu

Utilisez les ascenseurs pour monter les étages. Chaque étage déverrouille une porte animée. Ramassez les cristaux (avec animation) pour gagner des points. Atteignez le dernier étage.

Compétences acquises

  • TweenService:Create()
  • TweenInfoEasing
  • Style & Easing
  • DirectionTween:Play() / Pause() / Cancel()
  • Tween.Completed event

1. Quel service Roblox gère les transitions animées ?

  • AnimationService
  • TweenService
  • RunService
  • PhysicsService

2. TweenInfo.new() prend quoi comme premier paramètre ?

  • EasingStyle
  • La durée en secondes
  • L’objet à animer
  • Le nombre de répétitions

3. EasingStyle.Bounce donne quel effet ?

  • Mouvement linéaire
  • Rebond à la fin de l’animation
  • Accélération progressive
  • Pause au milieu

4. Comment déclencher quelque chose APRÈS la fin d’un Tween ?

  • Tween.OnComplete()
  • Tween.Completed:Wait()
  • wait(tween.duration)
  • TweenService.OnDone()

5. Peut-on tweener la couleur (Color3) d’une Part ?

  • Non, seulement la position
  • Oui, Color3 est une propriété tweénable
  • Seulement via ParticleEmitter
  • Seulement avec des scripts serveur

Défi 08 : Le Marchand & Le Détective

ProximityPrompt & ClickDetector

Description

Des PNJ (statues) équipés de ProximityPrompts affichent un menu de dialogue et de commerce quand on s’approche. Des objets dans le décor ont des ClickDetectors qui révèlent des indices. Un coffre s’ouvre au clic après avoir collecté tous les indices.

Règles du jeu

Approchez-vous des PNJ pour interagir. Cliquez sur les éléments suspects pour trouver les 5 indices. Apportez les indices au bon PNJ pour ouvrir le coffre au trésor.

Compétences acquises

  • ProximityPrompt.TriggeredClick
  • Detector.MouseClick
  • distance d’interaction
  • GUI contextuel
  • état de jeu (indices trouvés)

1. ProximityPrompt.Triggered est écouté depuis quel script ?

  • Uniquement LocalScript
  • Script serveur uniquement
  • Les deux sont possibles
  • ModuleScript seulement

2. Quelle propriété définit la distance d’activation d’un ProximityPrompt ?

  • RangeMax
  • ActivationDistance
  • TriggerRadius
  • ActivationDistance

3. ClickDetector.MouseClick passe quoi comme argument ?

  • La Part cliquée
  • Le Player qui a cliqué
  • Les coordonnées du clic
  • Nil

4. Comment afficher un texte personnalisé sur un ProximityPrompt ?

  • ProximityPrompt.Label
  • ProximityPrompt.Action
  • TextProximityPrompt.Text
  • ProximityPrompt.Title

5. Quelle est la différence principale entre ClickDetector et ProximityPrompt ?

  • Aucune différence
  • ClickDetector nécessite un clic, ProximityPrompt une touche en s’approchant
  • ProximityPrompt est plus ancien
  • ClickDetector fonctionne sans script

Défi 09 : Le Grand Tournoi

Leaderstats & tableau de score

Description

Un jeu de compétition avec un classement en temps réel (leaderstats). Points gagnés en touchant des zones, en éliminant des adversaires (PvP désactivable) ou en terminant des épreuves. Le score se met à jour pour tous via le tableau Roblox natif.

Règles du jeu

Accumulez des points en 5 minutes. Éliminez des adversaires (+10pts), touchez des zones (+5pts), finissez des épreuves bonus (+25pts). Le joueur avec le plus de points gagne.

Compétences acquises

  • leaderstats dans PlayerAdded
  • IntValue & StringValue
  • PlayerRemoving cleanup
  • tri et classement
  • DataStoreService (sauvegarde basique)

1. Comment créer les leaderstats d’un joueur ?

  • Directement dans Workspace
  • Folder nommé ‘leaderstats’ dans le Player
  • Dans ReplicatedStorage
  • Via un RemoteEvent

2. Quel événement se déclenche quand un joueur rejoint la partie ?

  • Players.PlayerJoined
  • Players.PlayerAdded
  • Players.New
  • PlayerPlayers.OnJoin

3. Quelle valeur utilise-t-on pour stocker un nombre entier dans leaderstats ?

  • NumberValue
  • IntValue
  • FloatValu
  • eStringValue

4. DataStoreService sert à quoi ?

  • Afficher le leaderboard
  • Persister des données entre les sessions
  • Communiquer entre scripts
  • Gérer les équipes

5. PlayerRemoving est utile pour ?

  • Accueillir le joueur
  • Sauvegarder les données avant que le joueur parte
  • Réinitialiser la map
  • Ajouter des points

Défi 10 : ROBLOX ADVENTURE COMPLETE

Jeu complet — tous les concepts

Description

Un jeu d’aventure complet qui intègre les 9 compétences précédentes : une carte avec zones mortelles (P1), des compétences débloquables (P2), une boutique GUI (P3), des events réseau (P4), des plateformes mobiles (P5), des effets visuels (P6), des animations TweenService (P7), des PNJ interactifs (P8) et un leaderboard complet (P9). Plusieurs niveaux, un boss final avec patterns d’attaque.

Règles du jeu

Traversez 3 zones distinctes (Forêt des Pièges, Tour des Pouvoirs, Donjon du Boss). Collectez des cristaux, achetez des améliorations, interagissez avec les PNJ, esquivez les obstacles animés. Battez le boss final et terminez premier au classement. Progression sauvegardée.

Compétences acquises

  • Architecture modulaire (ModuleScript)
  • Toutes les compétences P1-P9
  • Gestion d’état global
  • Équipes & rounds
  • Optimisation & bonnes pratiques

1. Un ModuleScript retourne quoi en général ?

  • Nil
  • Un tableau ou une fonction
  • Un RemoteEvent
  • Une GUI

2. Pour partager du code entre plusieurs scripts, on utilise ?

  • Copy-paste du code
  • ModuleScript + require()
  • RemoteEvent
  • Un Script dans Workspace

3. Quelle pratique évite les memory leaks avec les events ?

  • Utiliser task.wait()
  • Déconnecter les connexions avec :Disconnect()
  • Supprimer les RemoteEvents
  • Utiliser des LocalScripts uniquement

4. task.spawn() est préféré à coroutine.wrap() car ?

  • Il est plus lent
  • Il est intégré au scheduler Roblox et plus sûr
  • Il ne fonctionne qu’en serveur
  • Il bloque le thread principal

5. Dans une architecture propre, où stocke-t-on les ModuleScripts partagés ?

  • Workspace
  • StarterGui
  • ReplicatedStorage ou ServerScript
  • ServiceStarterPack

Répondez aux 5 question(s) restante(s)…

Catégories
Jeu vidéo ROBLOX

Plaque rebondissante

As-tu déjà rêvé de faire bondir les joueurs à plusieurs mètres de hauteur dans ton jeu Roblox ? Elles peuvent servir à franchir un obstacle, atteindre une plateforme cachée ou simplement ajouter une touche amusante à un niveau. Dans ce tutoriel, tu vas découvrir comment transformer un simple part en véritable trampoline interactif. Tu verras également comment régler la puissance du rebond pour obtenir différents effets de jeu.

Rebond du joueur sur la plaque

Crée un part et dessous un script :

Saisie ce code dans le script :

local TweenService = game:GetService("TweenService")

local BOUNCE_SPEED = 120    -- vitesse verticale imposée (studs/s)
local COOLDOWN     = 0.3   -- évite les rebonds multiples par contact

local trampoline  = script.Parent
local lastBounce   = {}     -- cooldown par joueur

local function squish(trampoline, bounceSpeed, squishTime)
	
	if bounceSpeed==nil then bounceSpeed = BOUNCE_SPEED end
	
	-- Remplace directement la vélocité verticale
	local vel = trampoline.AssemblyLinearVelocity
	trampoline.AssemblyLinearVelocity = Vector3.new(vel.X, bounceSpeed, vel.Z)
	
end

-- Appliquer des propriétés physiques pour que la part soit glissante
trampoline.CustomPhysicalProperties = PhysicalProperties.new(
	0.7, -- Density
	1,   -- Friction
	1,   -- Elasticity
	1,   -- FrictionWeight
	1    -- ElasticityWeight
)
-- Appliquer un matériau glissant comme de la glace
trampoline.Material = Enum.Material.Carpet

trampoline.Touched:Connect(function(hit)
	local character = hit.Parent
	local humanoid  = character:FindFirstChildWhichIsA("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end

	local rootPart = character:FindFirstChild("HumanoidRootPart")
	if not rootPart then return end

	-- Cooldown par personnage
	local now = tick()
	if lastBounce[character] and (now - lastBounce[character]) < COOLDOWN then return end
	lastBounce[character] = now

	squish(trampoline)
end)

Ce script transforme une simple pièce Roblox en trampoline capable de faire rebondir les joueurs lorsqu’ils la touchent. Les variables BOUNCE_SPEED et COOLDOWN définissent respectivement la puissance du rebond et le temps d’attente avant qu’un même joueur puisse rebondir à nouveau. Les propriétés physiques et le matériau de la pièce sont modifiés pour lui donner l’apparence et le comportement d’une surface adaptée au rebond.

La fonction squish() applique une nouvelle vitesse verticale à la pièce afin de créer l’effet de propulsion vers le haut.

L’événement Touched détecte lorsqu’un objet entre en contact avec le trampoline et vérifie qu’il s’agit bien d’un personnage vivant possédant un Humanoid. Un système de cooldown mémorise l’instant du dernier rebond de chaque joueur afin d’éviter plusieurs déclenchements successifs lorsque le personnage reste en contact avec le trampoline.

Animation de la plaque comme un trampoline

Par rapport à la version précédente, le script suivant ajoute un effet visuel d’écrasement et de retour à la forme initiale, ce qui donne davantage l’impression qu’il s’agit d’un véritable trampoline.

Une nouvelle variable originalSize mémorise la taille initiale de la plaque afin de pouvoir la restaurer après l’animation. La constante SQUISH_TIME définit la durée de l’animation de compression et de retour à la normale. La table isSquishing empêche que plusieurs animations soient lancées en même temps sur la même plaque, ce qui éviterait des déformations incohérentes. Le service TweenService est utilisé pour créer une animation fluide plutôt qu’un changement instantané de taille.

Lorsqu’un joueur rebondit, la plaque s’aplatit : sa hauteur diminue tandis que sa largeur et sa longueur augmentent légèrement. Cela reproduit visuellement le comportement d’un trampoline qui se comprime sous le poids du joueur. Après un court délai, une seconde animation redonne progressivement à la plaque sa taille d’origine, donnant l’impression qu’elle reprend sa forme après avoir propulsé le joueur.

L’effet visuel est synchronisé avec le rebond du joueur, ce qui rend l’interaction plus réaliste et plus agréable à observer.

local TweenService = game:GetService("TweenService")

local BOUNCE_SPEED = 120    -- vitesse verticale imposée (studs/s)
local COOLDOWN     = 0.3   -- évite les rebonds multiples par contact
local SQUISH_TIME  = 0.08  -- durée de l'étirement en secondes

local trampoline  = script.Parent

local lastBounce   = {}     -- cooldown par joueur
local isSquishing  = {}		-- marquage de la part en état d'étirement

local function squish(trampoline, bounceSpeed, squishTime)
	
	if bounceSpeed==nil then bounceSpeed = BOUNCE_SPEED end
	if squishTime==nil then squishTime = SQUISH_TIME end

	local originalSize = trampoline.Size

	-- Remplace directement la vélocité verticale
	local vel = trampoline.AssemblyLinearVelocity
	trampoline.AssemblyLinearVelocity = Vector3.new(vel.X, bounceSpeed, vel.Z)
	
	if isSquishing[trampoline] then return end
	isSquishing[trampoline] = true
	local tweenInfo = TweenInfo.new(squishTime, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
	TweenService:Create(trampoline, tweenInfo, {
		Size = Vector3.new(originalSize.X * 1.05, originalSize.Y * 0.4, originalSize.Z * 1.05)
	}):Play()
	task.delay(SQUISH_TIME, function()
		TweenService:Create(trampoline, tweenInfo, { Size = originalSize }):Play()
		task.delay(SQUISH_TIME, function() isSquishing[trampoline] = false end)
	end)
end

-- Appliquer des propriétés physiques pour que la part soit glissante
trampoline.CustomPhysicalProperties = PhysicalProperties.new(
	0.7, -- Density
	1,   -- Friction
	1,   -- Elasticity
	1,   -- FrictionWeight
	1    -- ElasticityWeight
)
-- Appliquer un matériau glissant comme de la glace
trampoline.Material = Enum.Material.Carpet

trampoline.Touched:Connect(function(hit)
	local character = hit.Parent
	local humanoid  = character:FindFirstChildWhichIsA("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end

	local rootPart = character:FindFirstChild("HumanoidRootPart")
	if not rootPart then return end

	-- Cooldown par personnage
	local now = tick()
	if lastBounce[character] and (now - lastBounce[character]) < COOLDOWN then return end
	lastBounce[character] = now

	squish(trampoline)
end)

Système de plaques rebondissantes

Modifie la structure en créant un Folder, sous le folder ton script et la part, puis duplique la plaque rebondissante plusieurs fois :

Modifie ton script pour lire tous les parts rebondissants :

local TweenService = game:GetService("TweenService")

local BOUNCE_SPEED = 120    -- vitesse verticale imposée (studs/s)
local COOLDOWN     = 0.3   -- évite les rebonds multiples par contact
local SQUISH_TIME  = 0.08  -- durée de l'étirement en secondes

local trampolines  = script.Parent
local lastBounce   = {}     -- cooldown par joueur
local isSquishing  = {}		-- marquage de la part en état d'étirement

local function squish(trampoline, bounceSpeed, squishTime)

	if bounceSpeed==nil then bounceSpeed = BOUNCE_SPEED end
	if squishTime==nil then squishTime = SQUISH_TIME end
	
	local originalSize = trampoline.Size
	
	-- Remplace directement la vélocité verticale
	local vel = trampoline.AssemblyLinearVelocity
	trampoline.AssemblyLinearVelocity = Vector3.new(vel.X, bounceSpeed, vel.Z)

	if isSquishing[trampoline] then return end
	isSquishing[trampoline] = true
	local tweenInfo = TweenInfo.new(squishTime, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
	TweenService:Create(trampoline, tweenInfo, {
		Size = Vector3.new(originalSize.X * 1.05, originalSize.Y * 0.4, originalSize.Z * 1.05)
	}):Play()
	task.delay(SQUISH_TIME, function()
		TweenService:Create(trampoline, tweenInfo, { Size = originalSize }):Play()
		task.delay(SQUISH_TIME, function() isSquishing[trampoline] = false end)
	end)
end

for _, trampoline in ipairs(trampolines:GetChildren()) do
	if not trampoline:IsA("BasePart") then continue end

	-- Appliquer des propriétés physiques pour que la part soit glissante
	trampoline.CustomPhysicalProperties = PhysicalProperties.new(
		0.7, -- Density
		1,   -- Friction
		1,   -- Elasticity
		1,   -- FrictionWeight
		1    -- ElasticityWeight
	)
	-- Appliquer un matériau glissant comme de la glace
	trampoline.Material = Enum.Material.Carpet



	trampoline.Touched:Connect(function(hit)
		local character = hit.Parent
		local humanoid  = character:FindFirstChildWhichIsA("Humanoid")
		if not humanoid or humanoid.Health <= 0 then return end

		local rootPart = character:FindFirstChild("HumanoidRootPart")
		if not rootPart then return end

		-- Cooldown par personnage
		local now = tick()
		if lastBounce[character] and (now - lastBounce[character]) < COOLDOWN then return end
		lastBounce[character] = now

		squish(trampoline)
	end)
	
end