Pour commencer votre programme python devra contenir les lignes de code ci-dessous et le logiciel V-REP devra être lancé.
from poppy.creatures import PoppyTorso
poppy = PoppyTorso(simulator='vrep')
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:
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:
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)
Essaies les commandes:
poppy.head_z.goal_position = 0
poppy.head_z.goal_position = 90
poppy.head_z.goal_position = 0
Essaies les commandes:
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:
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 ?
#essaies ton code ici
# 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)
messager.reset_simulation()
import pypot
poppy.stop_simulation()
pypot.vrep.close_all_connections()
from poppy.creatures import PoppyTorso
poppy=PoppyTorso(simulator='vrep')
import pypot
poppy.stop_simulation()
pypot.vrep.close_all_connections()