#!/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()