Robot maqueen
Prise en main du robot
Programmer un robot a pour but de lui faire réaliser des tâches autonomes, répétitives. Il va prendre des décisions en fonction de son environnement grâce à un algorithme.
La programmation se fera sur l’editeur Vittascience.com
Selon la tâche à executer, il faudra bien distinguer les instructions que le robot n’execute qu’une seule fois, et celles qu’il devra répéter indéfiniment.
Défi n°1: S’arrêter au parking
Le robot peut être prévu pour circuler selon une couleur marquée au sol.
- les différentes fonctions d'actions des moteurs sont dans le menu Robots de la page de l’editeur Vittascience.com
Le menu Robots propose les instructions de plusieurs robots. Le votre s’appelle Maqueen.
- [Maqueen] Contrôler le robot avancer vitesse 50
- [Maqueen] Arrêter le robot
Dans le menu Entrees/Sorties, choisir le bloc attendre 1 seconde-s, et réaliser le programme suivant:
Tester ce premier programme avec le robot maqueen. Puis démarrer un nouveau projet pour stopper le robot dans une zone noire.
Pour ce défi:
- Votre programme utilise une structure conditionnelle: retrouvez celle-ci dans le menu logique.
Le robot dispose de 2 capteurs d’intensité lumineuse, sous le chassis.
La mesure de l'état du capteur de ligne, sous le robot se fait grâce à la fonction:
- [Maqueen] Etat du capteur ligne droit / gauche
Cette instruction renvoie un booléen (True
, False
), qui sera affectée à une variable. Créez 2 nouvelles variables, G et D.
- Affecter les instructions des capteurs de ligne à chacune de ces variables:
On place alors ces variables dans une structure conditionnelle (si G ET D faire…):
à vous de jouer: Créez un programme qui fait avancer le robot tant qu’il est sur une piste blanche. Et qui s’arrête lorsqu’il est sur son parking, noir.
Vous avez reussi?
- Sauvegardez le programme dans vos documents.
- Et recopier le script sur votre cahier.
Défi n°2: Suivi de ligne
Le robot peut circuler en suivant une courbe peinte au sol.
Une différence de clarté sous le robot (bord du chemin) permet de programmer un virage du robot.
Il faudra alors placer les instructions de commande du moteur Droit et Gauche dans une sequence d’intructions conditionnelles.
if
...
elif
...
else
Pour faire pivoter le robot, il faudra contrôler différement chaque moteur (Droit / Gauche). Utiliser:
- [Maqueen] Contrôler le moteur gauche direction … vitesse 50
à vous de jouer: Créer un deuxième programme qui fera:
- tourner le robot vers la droite lorsqu’il se trouve dans la situation suivante:
- tourner vers la gauche dans la situation inverse
- sinon: avancer tout droit lorsque les 2 capteurs mesurent la même couleur noire, ou blanche.
Tester alors votre programme sur une piste circulaire.
Votre robot fait le tour entierement? Vous avez relevé le premier défi!
Aide: detection de la ligne noire
Avant le défi n°3: Programmer en python
D’autres fonctions du robot peuvent être exploitées pour réaliser d’autres tâches. Par exemple:
- [Maqueen] Pivoter à droite
- [Maqueen] Avancer d’une case
Pour la suite, il sera parfois utile de partir du programme réalisé avec les blocs (Vittascience), puis d’adapter, modifier certains paramètre à la main, directement dans le script python.
Vous devrez vous familiariser avec les instructions en python spécifiques au robot marqueen.
Editeur Vittascience.com. Placer l’une des commandes du robot dans le bloc “Au demarrage”. Et lire le script python généré.
Téléchargez le document maqueen.py et complétez le avec les instructions python des différents blocs.
Certaines commandes necessitent la declaration de fonctions, et occupent plusieurs lignes d’instructions.
Défi n°3: Avancer d’une case
Pour programmer les deplacements du robot indépendemment du marquage au sol, il sera necessaire de calibrer la longueur de ses deplacements.
Ouvrir un nouveau projet et mettre dans le bloc “Au demarrage”, l’instruction “avancer d’une case”. La longueur parcourue correspond-elle à la dimension d’une case sur le support?
Les paramètres doivent être ajustés dans le script python (blocs inopérants pour ajustements).
La longueur du deplacement dépend de la durée d’attente utime.sleep_ms(int(15e-2/speed_mps*1000))
dans la fonction maqueen_moveWithSquare
.
Passer en mode programmation python. Ne plus revenir sur l’interface avec les blocs. Modifier le script python et tester avec le robot. Quelle(s) modification(s) lui permet(ent) d’avancer d’une case sur le support?
De la même manière, il sera utile de calibrer l’angle de rotation lors de la commande de pivot à droite ou à gauche.
Créer le programme qui permet au robot de suivre le parcours proposé sur l’image plus haut.
Défi 4: Enregister des données
L’enregistrement de données peut être utile pour calibrer les capteurs du robot.
Le programme suivant peut être chargé dans l’interface Vittascience.com. Télécharger le fichier. Puis l’ouvrir depuis l’interface.
- La fonction
getUltrasonicData
permet de mesurer une distance/un temps selon le paramètredata
. - Pour écrire des données sur la carte, ce sont les fonctions:
log.set_labels
: definition des colonnes du tableau de mesurelog.add
pour ajouter une entrée dans le tableau
On utilisera alors l’explorateur (windows) pour ouvrir et visualiser les données, dans un fichier d’extension .html
from microbit import *
import log
import utime
from machine import time_pulse_us
""" Maqueen robot """
# Ultrasonic TRIG on pin1
# Ultrasonic ECHO on pin2
def getUltrasonicData(trig, echo, data='distance', timeout_us=30000):
trig.write_digital(0)
utime.sleep_us(2)
trig.write_digital(1)
utime.sleep_us(10)
trig.write_digital(0)
echo.read_digital()
duration = time_pulse_us(echo, 1, timeout_us)/1e6 # t_echo in seconds
if duration > 0:
if data == 'distance':
#sound speed, round-trip/2, get in cm
return 343 * duration/2 * 100
elif data == 'duration':
return duration
else:
raise ValueError("Data option '" + data + "' is not valid")
else:
return -1
log.set_labels('distance', timestamp=log.MILLISECONDS)
log.set_labels('temps', timestamp=log.MILLISECONDS)
i = 0
while True:
if button_a.is_pressed():
log.delete(full=True)
i = 0
utime.sleep(1)
d = getUltrasonicData(pin1, pin2, 'distance')
if d > 0:
log.add(distance = d,temps = i)
i = i + 1
display.scroll(str(d), delay=150, wait=True)
Le format des données dans le fichier de log permet un traitement comme on le ferait pour un ficher txt ou csv.
Suggestion de projets
- Conduite autonome
- Course déclenchée par un clap
- Evolution dans un labyrinthe
- Programme d’exploration type robot aspirateur
- Detection de formes (la forme de l’arêne dans laquelle est le robot)
Avec quelques extensions, les actions du robot peuvent être complexifiées (detection de couleur, ramassage d’objets, …).
Supports de tracés pour le robot
- Documents pdf pour le robot suiveur de ligne: Lien vers pdf
- Exemple de courbe à imprimer en format pdf
- Exemple de courbe en format photoshop eps
Exemple de programmes sur Vittasciences.com
- Partie 1: Présentation générale
- Partie 2: Eviter les obstacles
- Partie 3: detection de la ligne noire
Liens
- Editeur Vittascience.com
- Detecteur d’obstacles TP niveau entrée en 1ere NSI
- Explorer, enregistrer des données sur la carte microbit: Lien
- Course, tour de piste site ac-nantes.fr
- Documentation site ac-normandie.fr
- Documentation du robot Marqueen sur le site de l'ac-normandie.fr
- Le programme suivant montre un exemple de script pour avancer d’une case, et réaliser une mesure de distance (capteur US).