CodeLab IDE & Simulators
Référence Langage Python
Notion de bibliothèque
Le langage Python intègre de façon native les concepts de base de la programmation impérative (types natifs, structures de programmation et de données, entrées et sorties). Pour aller plus loin, il faut préciser en début de programme avec la notation from ... import *
les bibliothèques (ou modules Python) qui contiennent d'autres instructions qui ne font pas partie du langage Python de base. Par exemple, la notation from A.B import *
importe en totalité la bibliothèque B du paquet A. Un paquet est juste un groupe de bibliothèques.
Les fonctions décrites dans ce document sont rangées dans 4 bibliothèques :
from codelab.utils import *
charge des fonctions utilitaires (entrées-sorties, etc.)from codelab.moduleGraphics.graph2D import *
charge les fonctions du module graphique 2Dfrom codelab.moduleRobotics.robotLego import *
charge les fonctions du module robotique mobilefrom codelab.moduleRobotics3D.robotCoretech import *
charge les fonctions du module robotique 3D
Bibliothèque utilitaire
Cette bibliothèque contient quelques fonctions d'entrée et de sorties dédiées à l'environnement CodeLab (sortie audio, accès aux périphériques), plus quelques autres fonctions utilitaires.
Fonctions d'accès aux périphériques :
getNumPadValue()
getJoystickValueX()
getJoystickValueY()
hasNextEvent()
getNextEvent()
resetEventQueue()
Fonctions de sortie audio :
playTone(freq, duree)
playToneOn(freq)
playToneOff()
playAudioFile(fichier)
loopAudioFile(fichier)
stopAudioPlayer()
Fonctions additionnelles :
Description : Retourne la valeur du périphérique virtuel "clavier numérique"
- Paramètre : aucun
- Valeur de retour : un entier dans l'intervalle [ -1, 11 ]
Explication : Le clavier numérique (numpad) est un périphérique non-bloquant, c'est-à-dire qu'il retourne toujours une valeur, même lorsqu'aucune touche n'est sélectionnée. Dans ce cas, il retourne la valeur -1. Les valeurs 10 et 11 correspondent respectivement aux touches [*] et [ # ].
getJoystickValueX()
getJoystickValueY()
Description : Retourne les valeur en X et en Y du périphérique virtuel "joystick"
- Paramètre : aucun
- Valeur de retour : un entier dans l'intervalle [ -100, 100 ]
Description : Informe s'il y a des évènements en attente d'être traités
- Paramètre : aucun
- Valeur de retour :
True
si la file d'attente est vide,False
sinon
Description : Récupère un évènement dans la file d'attente
- Paramètre : aucun
- Valeur de retour : l'évènement codé dans une chaîne
"device=AAA:name=BBB:value=CCC"
Exemple d'utilisation : Une méthode pour décoder l'évènement est d'utiliser une expression régulière :
from codelab.utils import *
import re
REGEXP = r'device=([^:]*):name=([^:]*):value=(.*)'
...
while hasNextEvent():
event = getNextEvent()
if match := re.match(REGEXP, event):
print(match.group(1), match.group(2), match.group(3))
...
Description : Réinitialise (vide) la file d'attente d'évènements
- Paramètre : aucun
- Valeur de retour : aucune
Description : Génère un son d'une fréquence et d'une durée données (fonction bloquante)
- Paramètre frequence (entier) : la fréquence exprimée en Hertz
- Paramètre duree (entier) : la durée exprimée en millisecondes
- Valeur de retour : aucune
Description : Génère un son d'une fréquence donnée (fonction non bloquante)
- Paramètre frequence (entier) : la fréquence exprimée en Hertz
- Valeur de retour : aucune
Description : Stoppe le générateur de fréquence initialisé avec playToneOn
- Paramètre : aucun
- Valeur de retour : aucune
playAudioFile(fichier)
loopAudioFile(fichier)
Description : Joue un fichier audio WAV au format PCM 44100 Hz, 8 ou 16 bits
- Paramètre fichier (chaîne) : le nom du fichier, placé dans le répertoire
audiofiles
- Valeur de retour : aucune
Description : Stoppe le player initialisé avec playAudioFile
ou loopAudioFile
- Paramètre : aucun
- Valeur de retour : aucune
Description : Provoque une temporisation pendant une durée donnée (fonction bloquante)
- Paramètre duree (entier) : la durée exprimée en millisecondes
- Valeur de retour : aucune
Description : Retourne un "temps système" dans un entier
- Paramètre : aucun
- Valeur de retour : le temps système exprimé en millisecondes
Explication : Tout ordinateur peut accéder à un "temps système" qui permet de calculer des intervalles de temps.
Module Graphique 2D
Cette bibliothèque rassemble les fonctions de l'atelier graphique. Elle comporte deux familles de fonctions : les fonctions de tracé des primitives géométriques (point, ligne et cercle) ainsi que les fonctions de pilotage de la tortue graphique (avancer, tourner à gauche, tourner à droite, etc.). Pour plus d'informations sur la tortue graphique, consultez la page Wikipedia consacrée au langage Logo et à sa pédagogie.
Les fonctions de la bibliothèque du module graphique sont les suivantes :
clearScreen()
setColor(couleur)
drawPoint(x, y)
drawLine(x1, y1, x2, y2)
drawCircle(x, y, rayon)
turtleShow()
turtleHide()
turtleReset()
turtleGoto(x, y)
turtleForward(distance)
turtleTurnLeft(angle)
turtleTurnRight(angle)
Description : Efface la zone de dessin
- Paramètre : aucun
- Valeur de retour : aucune
Description : Fixe la couleur utilisée pour les tracés à venir
- Paramètre couleur (entier) : un code de couleur autorisé (cf. ci-dessous)
- Valeur de retour : aucune
Codes de couleur :
- Pour spécifier la couleur blanche utilisez la constante
COLOR_WHITE
- Pour spécifier la couleur noire utilisez la constante
COLOR_BLACK
- Pour spécifier la couleur rouge utilisez la constante
COLOR_RED
- Pour spécifier la couleur verte utilisez la constante
COLOR_GREEN
- Pour spécifier la couleur bleue utilisez la constante
COLOR_BLUE
- Pour spécifier la couleur cyan utilisez la constante
COLOR_CYAN
- Pour spécifier la couleur jaune utilisez la constante
COLOR_YELLOW
Description : Allume un pixel en position (x, y)
- Paramètre x (entier) : la coordonnée en abscisse du pixel
- Paramètre y (entier) : la coordonnée en ordonnée du pixel
- Valeur de retour : aucune
Description : Trace une ligne entre le point (x1, y1) et le point (x2, y2)
- Paramètre x1 (entier) : la coordonnée en abscisse du premier point
- Paramètre y1 (entier) : la coordonnée en ordonnée du premier point
- Paramètre x2 (entier) : la coordonnée en abscisse du deuxième point
- Paramètre y2 (entier) : la coordonnée en ordonnée du deuxième point
- Valeur de retour : aucune
Description : Trace un cercle de centre (x, y) et de rayon rayon
- Paramètre x (entier) : la coordonnée en abscisse du centre du cercle
- Paramètre y (entier) : la coordonnée en ordonnée du centre du cercle
- Paramètre rayon (entier) : le rayon du cercle
- Valeur de retour : aucune
Description : Montre ou cache la tortue graphique
- Paramètre : aucun
- Valeur de retour : aucune
Description : Réinitialise la tortue graphique (centrée)
- Paramètre : aucun
- Valeur de retour : aucune
Description : Place la tortue en position (x, y) sans tracer de ligne
- Paramètre x (entier) : la coordonnée en abscisse du point d'arrivée
- Paramètre y (entier) : la coordonnée en ordonnée du point d'arrivée
- Valeur de retour : aucune
Description : Déplace la tortue en ligne droite sur une distance donnée
- Paramètre distance (entier) : la distance en "équivallent pixels"
- Valeur de retour : aucune
Description : Pivote la tortue dans le sens anti-horaire selon un angle donné
- Paramètre angle (entier) : l'angle exprimé en degrés
- Valeur de retour : aucune
Description : Pivote la tortue dans le sens horaire selon un angle donné
- Paramètre angle (entier) : l'angle exprimé en degrés
- Valeur de retour : aucune
Module Robotique mobile
Cette bibliothèque rassemble les fonctions permettant de piloter le robot NXT de l'atelier robotique. Toutes ces fonctions possèdent un paramètre port
de type entier qui représente, soit un port de sortie (pour accéder aux moteurs), soit un port d'entrée (pour accéder aux capteurs). Il est également possible dans certains cas de spécifier deux ports de sortie simultanément.
Le robot NXT dispose de trois ports de sortie mais seulement deux sont utilisés dans le simulateur : le port B sur le quel est connecté le moteur gauche, et le port C sur le quel est connecté le moteur droit.
- Pour spécifier le port B utilisez la constante prédéfinie
OUT_B
- Pour spécifier le port C utilisez la constante prédéfinie
OUT_C
- Pour spécifier les ports B et C utilisez la constante prédéfinie
OUT_BC
Le robot NXT dispose également de quatre ports d'entrée. Le simulateur propose des configurations pré-établies (outil « clé » dans la barre d'outils) à choisir en fonction de l'exercice à réaliser. Par exemple, la configuration COLOR/SONIC/SONIC/NONE
signifie qu'un capteur de couleur est relié au port n°1 et que deux capteurs de distance sont reliés respectivement aux ports n°2 et n°3, le port n°4 étant inutilisé.
- Pour spécifier le port 1 utilisez la constante prédéfinie
IN_1
- Pour spécifier le port 2 utilisez la constante prédéfinie
IN_2
- Pour spécifier le port 3 utilisez la constante prédéfinie
IN_3
- Pour spécifier le port 4 utilisez la constante prédéfinie
IN_4
Les fonctions de la bibliothèque du module robotique sont les suivantes :
motorOn(port, puissance)
motorOff(port)
resetMotorRotationCount(port)
motorRotationCount(port)
getSensorValue(port)
getSensorArray(port)
Description : Actionne un ou plusieurs moteurs
- Paramètre port (entier) : le(s) port(s) moteur (utilisez une constante symbolique)
- Paramètre puissance (entier) : la puissance du/des moteur(s) dans l'intervalle [ -100, 100 ]
- Valeur de retour : aucune
Attention : Une valeur en dehors de l'intervalle [ -100, 100 ] provoque un arrêt d'urgence
Description : Stoppe un ou plusieurs moteurs
- Paramètre port (entier) : le(s) port(s) moteur (utilisez une constante symbolique)
- Valeur de retour : aucune
Description : Récupère la valeur du compteur de rotation d'un moteur
- Paramètre port (entier) : le port du moteur (utilisez une constante symbolique)
- Valeur de retour : le nombre de degrés effectué depuis la dernière remise à 0
Explication : En interne, chaque moteur est associé à un dispositif optique qui compte le nombre de degrés que le moteur effectue. Lorsqu'on utilise cette fonction, le moteur est alors considéré comme un capteur, puisqu'il retourne une valeur.
Attention : Cette fonction n'est applicable qu'à un seul moteur à la fois
Description : Stoppe un moteur et réinitialise son compteur de rotation (remise à 0)
- Paramètre port (entier) : le port du moteur (utilisez une constante symbolique)
- Valeur de retour : aucune
Attention : Cette fonction n'est applicable qu'à un seul moteur à la fois
Description : Récupère la valeur d'un capteur (à l'exception du capteur de ligne)
- Paramètre port (entier) : le port d'entrée utilisé (utilisez une constante symbolique)
- Valeur de retour (entier) : la valeur lue (ou -1 en cas d'erreur de lecture) :
- Si le capteur est le clavier numérique, on obtient une valeur dans [ -1, 11 ]
- Si le capteur est la boussole, on obtient une valeur en degrés dans [ 0, 360 [
- Si le capteur est un capteur de contact, on obtient une valeur 0 ou 1
- Si le capteur est un capteur de distance, on obtient une distance en cm dans [ 0, 100 ]
-
Si le capteur est un capteur de couleur, on obtient une couleur codée comme suit :
- La couleur blanche est codée par la constante
COLOR_WHITE
- La couleur noire est codée par la constante
COLOR_BLACK
- La couleur rouge est codée par la constante
COLOR_RED
- La couleur verte est codée par la constante
COLOR_GREEN
- La couleur bleue est codée par la constante
COLOR_BLUE
- La couleur cyan est codée par la constante
COLOR_CYAN
- La couleur jaune est codée par la constante
COLOR_YELLOW
- Le code
COLOR_ERROR
signifie que la couleur n'a pas pu être déterminée
- La couleur blanche est codée par la constante
Attention : La couleur cyan possède une propriété particulière : celle de se comporter comme un obstacle avec les capteurs de contact et de distance, ainsi qu'avec le robot lui-même (collisions). Elle est notamment utilisée sur certains fonds.
Note : Le clavier numérique (numpad) est un périphérique non-bloquant, c'est-à-dire qu'il retourne toujours une valeur, même lorsqu'aucune touche n'est sélectionnée. Dans ce cas, il retourne la valeur -1
. Les valeurs 10
et 11
correspondent respectivement aux touches [*] et [ # ].
Description : Récupère dans une liste les 8 valeurs du capteur de ligne
- Paramètre port (entier) : le port d'entrée utilisé (utilisez une constante symbolique)
- Valeur de retour (liste d'entiers) : les 8 valeurs dans [0, 100] issues du capteur de ligne
Exemple d'utilisation :
from codelab.moduleRobotics.robotLego import *
from codelab.utils import *
setRobotConfiguration('NXT06')
while True:
print(getSensorArray(IN_1))
waitFor(100)
}
Module Robotique 3D
Cette bibliothèque rassemble les fonctions permettant de piloter le robot CORETECH de l'atelier robotique 3D. Ce bras manipulateur comporte 5 moteurs pas-à-pas, les quels actionnent les 4 axes principaux du robot, et l'orientation de la pince. Les moteurs sont identifiés par les constantes prédéfinies entières suivantes :
Les fonctions pour accéder aux moteurs sont les suivantes :
Les fonctions pour accéder aux capteurs sont les suivantes :
Les fonctions de dessin dans l'espace sont les suivantes :
Les fonctions d'accès aux positions sont les suivantes :
Description : Actionne un moteur avec une vitesse donnée
- Paramètre motor (entier) : l'identificateur du moteur (constante symbolique)
- Paramètre speed (flottant) : la vitesse du moteur dans l'intervalle [-2.0, 2.0]
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Attention : Une valeur en dehors de l'intervalle [-2.0, 2.0] provoque un arrêt d'urgence.
Description : Actionne un moteur d'un nombre de pas donné
- Paramètre motor (entier) : l'identificateur du moteur (constante symbolique)
- Paramètre steps (entier) : le nombre de pas dans l'intervalle [-10, 10]
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Attention : Une valeur en dehors de l'intervalle [-10, 10] provoque un arrêt d'urgence.
Description : Stoppe un moteur
- Paramètre motor (entier) : l'identificateur du moteur (constante symbolique)
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Actionne la pince pour saisir ou relâcher un objet
- Paramètre : aucun
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Retourne la position de l'élément actionné par un moteur
- Paramètre motor (entier) : l'identificateur du moteur (constante symbolique)
- Valeur de retour (flottant) : un angle en degrés
Attention : Les plages angulaires des éléments sont les suivantes :
- Axe 0 : base (shoulder) : [0, 360] en continu
- Axe 1 : bras supérieur (upper arm) : [-110, 110]
- Axe 2 : bras inférieur (lower arm) : [-130, 130]
- Axe 3 : main (hand) : [-120, 120]
- Axe 4 : pince (claw) : [0, 360] en continu
Description : Retourne la valeur d'un capteur
- Paramètre sensor (entier) : l'identificateur du capteur (constante symbolique)
- Capteur de contact au bout de la pince :
CONTACT_SENSOR
- Capteur de couleur au bout de la pince :
COLOR_SENSOR
- Capteur de contact au bout de la pince :
- Valeur de retour (chaîne) : la donnée codée dans une chaîne de caractères ou "ERROR"
Attention : le codage de la valeur de retour dépend du type du capteur :
- Dans le cas du capteur de contact :
"1"
si contact ou""
(chaîne vide) - Dans le cas du capteur de couleur :
"R:G:B"
(code RGB) ou"NONE"
Description : Place un point aux coordonnées données par l'extrémité de la pince, et de couleur donnée par setColor
- Paramètre : aucun
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Initialise un tracé de couleur donnée par setColor
- Paramètre : aucun
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Met fin au tracé initialisé avec drawOn
- Paramètre : aucun
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Efface les tracés et supprime les objets de la scène
- Paramètre : aucun
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
Description : Définit la couleur des tracés à venir réalisés avec plot
et drawOn
- Paramètres r, g, b (entiers) : les composantes RGB de la couleur dans [0, 255]
- Valeur de retour (entier) : 1 si la commande a été exécutée, -1 sinon
putBall(x, y, z, r, g, b, descr)
Description : Crée et positionne une balle colorée dans la scène du robot
- Paramètres x, y, z (flottants) : les coordonnées où placer la balle dans la scène
- Paramètres r, g, b (entiers) : les composantes RGB de la couleur dans [0, 255]
- Paramètre descr (chaîne) : une description littérale de la balle (ex : "la balle rouge")
- Valeur de retour (chaîne) : l'identifiant unique (uid) de la balle
Description : Retourne la position d'un objet à partir de son identifiant (uid)
- Paramètre uid (chaîne) : un identifiant (donné par la fonction
putBall
par exemple) - Valeur de retour (chaîne) : des coordonnées codées dans une chaine du type
"x:y:z"
ou"ERROR"
Exemple d'utilisation :
from codelab.moduleRobotics3D.robotCoretech import *
def getPosition(uid):
position = getObjectPosition(uid)
array = list(map(float, position.split(':')))
return array[0], array[1], array[2]
uid = putBall(-0.2, 0.05, 0.8, 255, 0, 0, 'the red ball')
x, y, z = getPosition(uid)
print('The position of %s is (%f, %f, %f)' % (uid, x, y, z))
Résultat de l'exécution du programme dans la console :
The position of the red ball-221a8efc is (-0.200000, 0.050000, 0.800000)
Description : Retourne la position du crayon (extrémité de la pince)
- Paramètre : aucun
- Valeur de retour (chaîne) : des coordonnées codées dans une chaine du type
"x:y:z"
Description : Retourne une coordonnée du crayon (extrémité de la pince)
- Paramètre : aucun
- Valeur de retour (flottants) : la coordonnée x / y / z du crayon
Copyright © 2022 Jérôme Lehuen, Le Mans Université, France
Version 04-05-2022