<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Traduction du notebook Discover your Poppy Ergo Jr par Georges  Saliba sous licence CC BY SA 
Découvrir votre Poppy Ergo Jr
Ce notebook qui permet à la fois d'insérer du code pour faire fonctionner le robot et de le commenter dans le même temps, va vous guider pour apprendre à programmer le Poppy Ergo Jr en Python.
Instancier votre robot
Accéder aux moteurs et les commander
Lire les valeurs des capteurs
S'initier à de la programmation de plus haut niveau
A partir de maintenant, votre robot Poppy Ergo Jr est connecté à l'aide du cable RJ 45 et votre caméra est aussi connectée.
Step1:  % pylab inline est une commande python qui importe les modules numpy et matplotlib. L'option inline indique que les figures Matplotlib seront insérées dans le notebook lui-même plutôt que dans une fenêtre graphique séparée. C'est la seule option possible car votre système ne dispose pas d'interface graphique. 
Elle exécute en particulier les deux intructions 
* import numpy as np
* import matplotlib.pyplot as plt
La dernière instruction importe du module future le sous module print_function qui permet de gérer les problèmes de compatibilité avec de futures versions de Python.
Instancier votre robot
Pour commencer à utiliser votre robot en Python, vous devez tout d'abord l'instancier. 
C'est le rôle du code suivant.
Step2:  Cela crée un objet Robot qui peut être utilisé pour accéder aux moteurs et aux capteurs. Il prend en chage toute la communication de bas niveau pour vous. Vous n'avez donc pas besoin de connaitre les détails du protocole de communication pour faire fonctionner un moteur. Les champs motors et sensors du Robot sont automatiquement synchronisés pour correspondre à l'état de leurs équivalents matériels.
QUESTIONS
Dans la ligne de code ci-dessus, quel est le rôle de poppy ? 
PoppyErgoJr() est suivi de parenthèses que devez-vous comprendre ? 
COMPLETER
Le code ci-dessous permet de mettre le robot  ... dans la position appelée ... 
Si le robot avait été nommé poppy_bras et la position avait été position_leve, quelle instruction auriez-vous du envoyer au robot pour lui demander de se mettre dans cette position ?
Step3:  Accéder aux moteurs
Dans un Poppy Ergo Jr, le moteur est défini comme illustré ci-dessous 
Step4:  Comme vous pouvez le constater, vous obtenez une liste de tous les moteurs de votre objet Robot. 
Vous pouvez alors récupérer tous les noms des moteurs 
En Python, une syntaxe possible de la boucle pour est la suivante 
Step5:  TRAVAIL 
Step6:  Lire les valeurs des moteurs
A partir de l'objet moteur vous pouvez accéder à ses divers registres. Les principaux sont 
Step7:  On peut avoir la position courante de tous les moteurs à l'aide de l'instruction ci-dessous. 
QUESTIONS
Pourquoui a-t-on des crochets ? 
Quelles sont toutes les valeurs que va prendre l'itérateur m ? 
Quelle est la structure de poppy.motors ?
Step8:  Il est important de comprendre que "poppy.m1.present_position" est automatiquement mis à jour avec la position courante du moteur réel (à 50Hz).
Comme pour les autres registres, la fréquence de mise à jour n'est pas la même et dépend de son importance. Par exemple, la température est rafraichie à 1Hz puisqu'elle ne varie pas très vite. 
Remarque
Lorsque vous appuyez sur la touche tabulation après avoir mis un ., vous pouvez voir la liste des registres pour un objet. 
Essayez dans la cellule de code suivante et observez.
Vous n'avez donc pas besoin de retenir les divers registres existants ni leurs noms.
Step9:  Commander les moteurs
Au début des registres présentés précédemment, il y en a d'autres utilisés pour envoyer des instructions/commandes au robot. Par exemple, la position des moteurs est séparée en deux registres distincts.
En lecture seulement present_position du moteur
En lecture et écriture goal_position qui envoie au moteur une position cible qu'il va essayer d'atteindre.
Pour mettre un moteur dans une nouvelle position, vous pouvez écrire 
Step10:  QUESTIONS
Quel effet va avoir l'intruction ci-dessus ? 
En quelle unité est exprimé 20 ? 
Comment faire pour que le moteur tourne dans l'autre sens de la même manière ?
Step11:  Dans ces exemples, le moteur tourne aussi vite que possible (c'est le fonctionnement par défaut). Vous pouvez changer la vitesse maximale du moteur qui est enregistrée dans le registre moving_speed du moteur 
Step12:  Maintenant le moteur m1 ne peut pas aller plus vite que 50 degrés par seconde. Faites le se déplacer une nouvelle fois pour constater la différence.
Step13:  Les principaux registres sont 
Step14:  Vous pouvez normalement faire bouger ce moteur à la main. Par exemple, cela vous sera utile pour programmer votre robot par démonstration (cf. notebook correspondant).
Et le remettre en mode stiff 
Step15:  Contrôler les LED des moteurs
Les moteurs XL-320 motors utilisés dans le Poppy Ergo Jr ont un petite LED de couleur. Vous pouvez changer sa couleur en utilisant pypot. C'est utile pour rendre votre robot plus vivant, customisé ... 
Chaque moteur possède un registre led auquel on peut affecter un couleur 'green', 'red' parmi les couleurs disponibles.
QUESTION
Comment faire pour que la led du moteur m3 du robot poppy soit verte ?
En affectant la valeur 'off' à ce registre on éteint cette led.
QUESTION
Eteindre la led du moteur m3 du robot poppy.
QUESTION
Avant de le lancer, pouvez-vous décrire l'effet de ce jeu d'instructions ?
Comment faire pour allumer une led sur deux en rouge et une led sur deux en vert dans cet ordre ?
En Python la syntaxe du *si ... alors ... sinon ... * est la suivante 
Step16:  Vous pouvez connaitre toutes les couleurs disponibles à l'aide la commande suivante 
Step17:  Lire des capteurs/sensors
Step18:  Lire des capteurs se fait exactement de la même manière que lire des registres de votre robot. Vous pouvez accéder à vos capteurs via 
Step19:  Ici, nous avons 2 capteurs 
Step20:  Vous pouvez récupérer tous les registres existants d'un capteur 
Step21:  et recupérer et afficher une image à partir de la caméra 
Step22:  Comme pour les moteurs, les valeurs des capteurs sont automatiquement synchronisées en arrière plan avec le capteur physique. Si vous exécutez une nouvelle fois les instructions précédentes, vous obtiendrez une image plus récente.
Step23:  Comportements de haut niveau
Le robot Poppy Ergo Jr intègre un jeu de comportements prédéfinis. Il peut s'agir de postures spécifiques comme la posture de repos - rest_posture utilisée au début - ou d'une danse, ...
Vous pouvez en trouver la liste exhaustive en utilisant l'instruction suivante qui liste les primitives ou comportements 
Step24:  Ces comportements (ou primitives en "terminologie poppy") peuvent être démarrés, arrétés, mis en pause, etc.
Step25:  Vous pouvez faire danser le Poppy Ergo Jr pendant 10 secondes 
<ASSISTANT_TASK:>
Python Code:
%pylab inline
from __future__ import print_function
Explanation: Traduction du notebook Discover your Poppy Ergo Jr par Georges  Saliba sous licence CC BY SA 
Découvrir votre Poppy Ergo Jr
Ce notebook qui permet à la fois d'insérer du code pour faire fonctionner le robot et de le commenter dans le même temps, va vous guider pour apprendre à programmer le Poppy Ergo Jr en Python.
Instancier votre robot
Accéder aux moteurs et les commander
Lire les valeurs des capteurs
S'initier à de la programmation de plus haut niveau
A partir de maintenant, votre robot Poppy Ergo Jr est connecté à l'aide du cable RJ 45 et votre caméra est aussi connectée.
End of explanation
from poppy.creatures import PoppyErgoJr
poppy = PoppyErgoJr()
Explanation: % pylab inline est une commande python qui importe les modules numpy et matplotlib. L'option inline indique que les figures Matplotlib seront insérées dans le notebook lui-même plutôt que dans une fenêtre graphique séparée. C'est la seule option possible car votre système ne dispose pas d'interface graphique. 
Elle exécute en particulier les deux intructions 
* import numpy as np
* import matplotlib.pyplot as plt
La dernière instruction importe du module future le sous module print_function qui permet de gérer les problèmes de compatibilité avec de futures versions de Python.
Instancier votre robot
Pour commencer à utiliser votre robot en Python, vous devez tout d'abord l'instancier. 
C'est le rôle du code suivant.
End of explanation
poppy.rest_posture.start()
Explanation: Cela crée un objet Robot qui peut être utilisé pour accéder aux moteurs et aux capteurs. Il prend en chage toute la communication de bas niveau pour vous. Vous n'avez donc pas besoin de connaitre les détails du protocole de communication pour faire fonctionner un moteur. Les champs motors et sensors du Robot sont automatiquement synchronisés pour correspondre à l'état de leurs équivalents matériels.
QUESTIONS
Dans la ligne de code ci-dessus, quel est le rôle de poppy ? 
PoppyErgoJr() est suivi de parenthèses que devez-vous comprendre ? 
COMPLETER
Le code ci-dessous permet de mettre le robot  ... dans la position appelée ... 
Si le robot avait été nommé poppy_bras et la position avait été position_leve, quelle instruction auriez-vous du envoyer au robot pour lui demander de se mettre dans cette position ?
End of explanation
poppy_ergo_jr.motors
Explanation: Accéder aux moteurs
Dans un Poppy Ergo Jr, le moteur est défini comme illustré ci-dessous :
Image à rajouter
A partir de l'objet Robot, vous pouvez récupérer directement la liste de tous les moteurs conectés à l'aide de l'instruction construite de la manière suivante :
nom_du_conteneur_de_l_objet_robot.motors
QUESTIONS
Quel est le nom du conteneur/variable qui représente votre robot ?
L'instruction ci-dessous est-elle valide ? Si non, la corriger.
End of explanation
for m in poppy.motors:
    print(m.name)
#print ("terminé")
Explanation: Comme vous pouvez le constater, vous obtenez une liste de tous les moteurs de votre objet Robot. 
Vous pouvez alors récupérer tous les noms des moteurs 
En Python, une syntaxe possible de la boucle pour est la suivante : 
for  itérateur in une_liste  : 
*corps de la boucle pour*
Qui est le "l'itérateur" dans la boucle suivante ? Décrivez son fonctionnement.
Quelle est la liste ? Ecrivez-là de manière explicite.
End of explanation
poppy.m1
Explanation: TRAVAIL : 
Si dans la dernière ligne, on supprime le caractère #, l'instruction print("terminé") sera éxécutée. Combien de fois sera affichée la chaine de caractères "terminé" ? 
Les instructions répétées dans la boucle doivent avoir la même indentation ou être dans une structure qui est au même niveau d'indentation.
Faites en sorte que "terminé" soit affiché à la suite du nom de chaque moteur.
On peut aussi appeler chacun des moteurs par son nom (m1,m2,etc.) à l'aide l'instruction contenur_du_robot.nom_du_moteur
 comme dans l'exemple ci-dessous.
End of explanation
poppy.m1.present_position
Explanation: Lire les valeurs des moteurs
A partir de l'objet moteur vous pouvez accéder à ses divers registres. Les principaux sont :
present_position: retourne la position courante du moteur en degrés
present_speed: la vitesse courante du moteur en degrés par seconde
present_load: la charge de travail du moteur (en pourcentage de la charge maximale)
present_temperature: la température du moteur en degrés celsius
angle_limit: les limites atteignables du moteur (en degrés)
Ils sont accessibles directement.
Syntaxe possible : nom_du_robot.nom_du_moteur.registre
QUESTION
Dans l'instruction suivante, quel registre de quel moteur de quel robot est demandé ? Que doit retourner cette instruction ?
End of explanation
[m.present_position for m in poppy.motors]
Explanation: On peut avoir la position courante de tous les moteurs à l'aide de l'instruction ci-dessous. 
QUESTIONS
Pourquoui a-t-on des crochets ? 
Quelles sont toutes les valeurs que va prendre l'itérateur m ? 
Quelle est la structure de poppy.motors ?
End of explanation
poppy.
Explanation: Il est important de comprendre que "poppy.m1.present_position" est automatiquement mis à jour avec la position courante du moteur réel (à 50Hz).
Comme pour les autres registres, la fréquence de mise à jour n'est pas la même et dépend de son importance. Par exemple, la température est rafraichie à 1Hz puisqu'elle ne varie pas très vite. 
Remarque
Lorsque vous appuyez sur la touche tabulation après avoir mis un ., vous pouvez voir la liste des registres pour un objet. 
Essayez dans la cellule de code suivante et observez.
Vous n'avez donc pas besoin de retenir les divers registres existants ni leurs noms.
End of explanation
poppy.m1.goal_position = 20
Explanation: Commander les moteurs
Au début des registres présentés précédemment, il y en a d'autres utilisés pour envoyer des instructions/commandes au robot. Par exemple, la position des moteurs est séparée en deux registres distincts.
En lecture seulement present_position du moteur
En lecture et écriture goal_position qui envoie au moteur une position cible qu'il va essayer d'atteindre.
Pour mettre un moteur dans une nouvelle position, vous pouvez écrire :
End of explanation
#COMPLETER
poppy.m1.goal_position = 
Explanation: QUESTIONS
Quel effet va avoir l'intruction ci-dessus ? 
En quelle unité est exprimé 20 ? 
Comment faire pour que le moteur tourne dans l'autre sens de la même manière ?
End of explanation
#COMPLETER : pour mettre le registre moving_speed du moteur m1 de votre robot poppy à 50
poppy.                 =50
Explanation: Dans ces exemples, le moteur tourne aussi vite que possible (c'est le fonctionnement par défaut). Vous pouvez changer la vitesse maximale du moteur qui est enregistrée dans le registre moving_speed du moteur :
End of explanation
poppy.m1.goal_position = 90
Explanation: Maintenant le moteur m1 ne peut pas aller plus vite que 50 degrés par seconde. Faites le se déplacer une nouvelle fois pour constater la différence.
End of explanation
poppy.m6.compliant = True
Explanation: Les principaux registres sont : 
goal_position : position cible en degrés
moving_speed : la vitesse maximale atteignable en degrés par seconde
compliant : expliqué ci-après
Les servo moteurs dynamixel ont deux modes : 
stiff : le mode normal des moteurs dans lequel ils peuvent être controlés.
compliant : un mode dans lequel les moteurs peuvent être bougés librement à la main. Ce mode est particulièrement utile lors d'interactions physiques humain-robot.
Vous pouvez les faire passer d'un mode à l'autre en utilisant le registre compliant. Ce registre ne pouvant être associé qu'à deux valeurs, c'est un booléen qui ne peut prendre que les valeurs True et False.
Vous pouvez par exemple mettre le moteur m6 en mode compliant via :
End of explanation
poppy.m6.compliant = False
Explanation: Vous pouvez normalement faire bouger ce moteur à la main. Par exemple, cela vous sera utile pour programmer votre robot par démonstration (cf. notebook correspondant).
Et le remettre en mode stiff :
End of explanation
import time
for m in poppy.motors:
    time.sleep(0.5)
    m.led = 'yellow'
    time.sleep(1.0)
    m.led = 'off'
Explanation: Contrôler les LED des moteurs
Les moteurs XL-320 motors utilisés dans le Poppy Ergo Jr ont un petite LED de couleur. Vous pouvez changer sa couleur en utilisant pypot. C'est utile pour rendre votre robot plus vivant, customisé ... 
Chaque moteur possède un registre led auquel on peut affecter un couleur 'green', 'red' parmi les couleurs disponibles.
QUESTION
Comment faire pour que la led du moteur m3 du robot poppy soit verte ?
En affectant la valeur 'off' à ce registre on éteint cette led.
QUESTION
Eteindre la led du moteur m3 du robot poppy.
QUESTION
Avant de le lancer, pouvez-vous décrire l'effet de ce jeu d'instructions ?
Comment faire pour allumer une led sur deux en rouge et une led sur deux en vert dans cet ordre ?
En Python la syntaxe du *si ... alors ... sinon ... * est la suivante : 
if (condition) : 
 instructions du alors
else :  
 instructions du sinon
suite des instructions du programme ...
C'est l'indentation qui structure le programme.
End of explanation
from pypot.dynamixel.conversion import XL320LEDColors
print(list(XL320LEDColors))
Explanation: Vous pouvez connaitre toutes les couleurs disponibles à l'aide la commande suivante :
End of explanation
import cv2
# pour utiliser la caméra
%matplotlib inline
import matplotlib.pyplot as plt
from hampy import detect_markers
# pour détecter des marqueurs
img = poppy.camera.frame
plt.imshow(img)
# Que contient le conteneur img ? 
# Que signifie plt.imshow(img) par quelle autre commande peut-on le remplacer ?  
Explanation: Lire des capteurs/sensors
End of explanation
poppy.sensors
Explanation: Lire des capteurs se fait exactement de la même manière que lire des registres de votre robot. Vous pouvez accéder à vos capteurs via :
End of explanation
poppy.camera
Explanation: Ici, nous avons 2 capteurs : 
* une caméra
* un détecteur de marqueur
Vous pouvez y accéder via leur nom :
End of explanation
poppy.camera.registers
Explanation: Vous pouvez récupérer tous les registres existants d'un capteur :
End of explanation
%matplotlib inline
import matplotlib.pyplot as plt
img = poppy.camera.frame
plt.imshow(img)
Explanation: et recupérer et afficher une image à partir de la caméra :
Les deux premières lignes suivantes permettent d'importer la bibliothèque qui gère l'image.
img est un conteneur qui contient l'image récupérée par la caméra du poppy.
La ligne 4 permet d'afficher l'image contenue dans le conteneur img.
End of explanation
plt.imshow(poppy.camera.frame)
Explanation: Comme pour les moteurs, les valeurs des capteurs sont automatiquement synchronisées en arrière plan avec le capteur physique. Si vous exécutez une nouvelle fois les instructions précédentes, vous obtiendrez une image plus récente.
End of explanation
[p.name for p in poppy.primitives]
Explanation: Comportements de haut niveau
Le robot Poppy Ergo Jr intègre un jeu de comportements prédéfinis. Il peut s'agir de postures spécifiques comme la posture de repos - rest_posture utilisée au début - ou d'une danse, ...
Vous pouvez en trouver la liste exhaustive en utilisant l'instruction suivante qui liste les primitives ou comportements :
End of explanation
poppy.tetris_posture.start()
Explanation: Ces comportements (ou primitives en "terminologie poppy") peuvent être démarrés, arrétés, mis en pause, etc.
End of explanation
import time
poppy.dance.start()
time.sleep(10)
poppy.dance.stop()
Explanation: Vous pouvez faire danser le Poppy Ergo Jr pendant 10 secondes :
End of explanation
<END_TASK>