#!/usr/bin/env python # coding: utf-8 # ##Decouverte – Niveau 1 - Python # # ###TP3 # Pour commencer votre programme python devra contenir les lignes de code ci-dessous et le logiciel V-REP devra être lancé. # # # - Dans V-REP (en haut à gauche) utilise les deux icones flèche pour déplacer la vue et regarder poppy sous tous les angles.
# - Dans notebook, utilise le raccourci 'Ctrl+Enter' pour éxécuter les commandes. # In[ ]: from poppy.creatures import PoppyTorso poppy = PoppyTorso(simulator='vrep') #

Boucle et memoire

# #

Les dictionnaires

# # Les dictionnaires varient des listes dans l'accès aux éléments. # # Comme nous l'avons vu l'accès aux éléments de la liste se fait grâce à leur numéro d'index.
# Pour accéder aux éléments d'un dictionnaire, nous passons par une clé. # # Essaies les commandes: # In[ ]: print "\n------------\nDico :" dico = {} for m in poppy.motors: dico[m.name] = m.present_position print dico print '\n------------' print 'Valeur à la clé head_z :', dico['head_z'] print 'Valeur à la clé head_y :', dico['head_y'] print 'Valeur à la clé l_arm_z :', dico['l_arm_z'] print '\n------------\nDico :' for m in dico: print 'cle: ',m print 'valeur : ',dico[m] print '-' print 'fin\n-------------' # Ainsi, il suffit de connaitre la clé pour récupérer l'information associée.
# Cette information stockée peut-être: du texte, une variable, une liste, un dicitionnaire, etc # # Pour récupérer l'ensemble des clés d'un dictionnaire essaies la commande: # In[ ]: dico = { m.name : m.present_position for m in poppy.motors } cle = dico.keys() print cle compteur = 0 for m in cle: compteur = compteur + 1 print 'clé : ', m print '\nNombre total de clé = ', compteur print "Nombre d'élément dans la liste 'cle' = ", len(cle) #

Boucle while & condition

# Essaies les commandes: # In[ ]: poppy.head_z.goal_position = 0 poppy.head_z.goal_position = 90 poppy.head_z.goal_position = 0 # - Se passe-t-il quelque chose ? oui / non # - Y-a-t-il un bug ? oui / non # - les commandes s'éxecutent-t-elles? oui / non # - trop vite? oui / non # # Essaies les commandes: # In[ ]: import time poppy.head_z.goal_position = 0 time.sleep(.1) poppy.head_z.goal_position = 90 time.sleep(.1) poppy.head_z.goal_position = 0 # On comprend mieux ce qu'il se passe: les commandes s'éxecutent trop rapidement pour l'observer. # # On voudrait trouver une méthode pour attendre qu'une condition soit remplie ; autrement dit: # # Tant que (while) 'attendre' est vrai (True) : (faire), si (if) la position du moteur est égale (==) à la position voulue : (faire), 'attendre' devient faux (False). # # Ceci se traduit par: # In[ ]: attendre = True poppy.head_z.goal_position = 90 while attendre == True: time.sleep(1) if poppy.head_z.present_position == 90: attendre = False poppy.head_z.goal_position = 0 # On peut même récupérer le temps (approximatif) qu'il a fallu pour effectuer le mouvement. # # Comment ? # # # In[ ]: #essaies ton code ici # In[ ]: # correction def time_position(m,goal,unite=0.001): start,attendre,tps=m.present_position,True,0 poppy.head_z.goal_position = goal while attendre==True: time.sleep(unite) if poppy.head_z.present_position == goal: attendre=False else: tps+=1 poppy.head_z.goal_position = start return tps print time_position(poppy.head_z,90), 'milliseconde' time.sleep(1) print time_position(poppy.head_z,90,1), 'seconde' time.sleep(1) print time_position(poppy.head_z,90,.1), 'dixième de seconde' time.sleep(1) print time_position(poppy.head_z,90,.01), 'centième de seconde' for i in range(5): #problème précision time.sleep(0.5) print time_position(poppy.head_z,90) # _________________________________________________________________ # # # #### Tu as raté? c'est pas grâve, recommmence, essaies ces lignes pour redémarrer : # In[ ]: messager.reset_simulation() # #### Encore buger ? essaies celles-ci : # In[ ]: import pypot poppy.stop_simulation() pypot.vrep.close_all_connections() from poppy.creatures import PoppyTorso poppy=PoppyTorso(simulator='vrep') # ####Tu as fini? coupes la simulation ici: # In[ ]: import pypot poppy.stop_simulation() pypot.vrep.close_all_connections()