#!/usr/bin/env python # coding: utf-8 # # #Premiers pas avec une créature ##### 10 choses à savoir sur poppy 1. Ouvrir l'interface 2. Instancier Poppy (démarrer la simulation) 3. Redémarrer la simulation 4. Eteindre la simulation 5. Moteurs & capteurs de poppy 6. Bouger - fonction goal_position 7. Bouger - fonction goto_position 8. Instancier d'autres créatures 9. Démarrer avec une créature réelle 10. Particularités des modèles réelle # ##1 - Ouvrir l'interface # # ####Ouvrir V-REP ou connecter le robot. # ####Ouvrir Jupyter - ipython [vidéo démonstrative](https://www.youtube.com/watch?v=roWqTz9fQSE) # # - via un terminal avec la commande : ipython notebook # - via l'exécutable: rechercher dans 'tout les programmes' anaconda\IPython (Py 2.7) Notebook # - via l'exécutable 'Launcher' : rechercher dans 'tout les programmes' anaconda\Launcher # # # - Pour Poppy réel : via http://poppy.local (ou si vous avez modifié le nom de votre Poppy: http://new-name.local) # # # ##2 - Instancier Poppy # Pour démarrer la simulation ; éxécuter les commandes suivantes: # In[ ]: from poppy.creatures import PoppyHumanoid creature = PoppyHumanoid(simulator='vrep') # ##3 - Redémarrer la simulatiuon # In[ ]: creature.reset_simulation() # ##4 - Eteindre la simulation # In[ ]: import pypot creature.stop_simulation() pypot.vrep.close_all_connections() # In[1]: from poppy.creatures import PoppyHumanoid poppy = PoppyHumanoid(simulator='vrep') # ##5 - Moteurs & capteurs # # #####Poppy, comment tu fonctionnes? # In[4]: print"Réponse:" print "j'ai", len( poppy.motors ), "moteurs" print "ils sont tous indexés dans une ", type( poppy.motors ), "qui s'appelle poppy.motors \n\n la voici: " for m in poppy.motors: print "-------------" print "nom du moteur: ", m.name print "position actuelle du moteur: ", m.present_position, "degrès" # #####Explication: # # Ici on utilise une liste pour stocker le nom des moteurs: poppy.motors # # chaque moteur possède: # # - un nom ; exemple: poppy.head_z.name # - une id ; exemple: poppy.head_z.id # - une position courante ; exemple: poppy.head_z.present_position # #####Aperçu de l'ensemble des moteurs: # # ##6 - Bouger - fonction 'goal_position' # # #####Poppy, tu es prêt ? # In[ ]: # éteindre la simulation précédente... import pypot creature.stop_simulation() pypot.vrep.close_all_connections() # In[ ]: # ...avant d'en démarrer une nouvelle. from poppy.creatures import PoppyHumanoid poppy = PoppyHumanoid(simulator='vrep') # In[ ]: # Poppy dit oui for i in range(2): poppy.head_y.goal_position = -20 poppy.head_y.goal_position = +20 poppy.head_y.goal_position = 0 # In[ ]: #####Il ne se passe rien... si ! #####mais Poppy va trop vite, essayons ça : # In[ ]: # Poppy dit oui import time for i in range(2): poppy.head_y.goal_position = -20 time.sleep(1) poppy.head_y.goal_position = +20 time.sleep(1) poppy.head_y.goal_position = 0 # #####Explication: # # Ici on utilise la fonction 'goal_position', précédée du nom du moteur, précédé du nom de la créature. # # Elle accepte des valeurs de positions allant de -180° à +180°
# # Les lignes de code s'exécutent de façon quasi instantannées ; même si la position (demandée en ligne précédente) n'a pas été atteinte. # # Le module 'Time' nous permet d'attendre (grâce à la fonction 'time.sleep') que le moteur ai atteint la position voulue avant d'exécuter la commande suivante. # ##7 - Bouger - fonction 'goto_position' # # #####Bonjour Poppy # In[ ]: poppy.l_shoulder_x.goto_position(90,2) poppy.l_arm_z.goto_position(90,2) poppy.abs_z.goto_position(10,2) poppy.l_elbow_y.goto_position(-120,2,wait=True) for i in range(3): poppy.l_elbow_y.goto_position(-90,0.5,wait=True) poppy.l_elbow_y.goto_position(-120,0.5,wait=True) poppy.l_shoulder_x.goto_position(0,2) poppy.l_arm_z.goto_position(0,2) poppy.abs_z.goto_position(0,2) poppy.l_elbow_y.goto_position(0,2) # #####Explication: # # Ici on utilise la fonction 'goto_position', précédée du nom du moteur, précédé du nom de la créature. # # Elle accepte entre 2 et 3 paramètres: # - la position en dégrès # - le temps en secondes pour atteindre cette position # - paramètre facultatif 'wait=True' # # L'option 'wait=True' permet d'attendre que la position soit atteinte avant de passer à la ligne suivante.
# Par défaut 'wait=False' ne bloque pas le défilement, on peut donc lancer plusieurs moteurs au même moment. # ##8 - Démarrer avec d'autres créatures # # #####Poppy, y a t-il d'autres créatures comme toi ? # In[ ]: for i in range(3): poppy.head_y.goto_position(-20,1) poppy.head_y.goto_position(+20,1) poppy.head_y.goto_position(0,0.5) print "Torso, Ergo, et toute la family" # Plus d'informations sur les prochaines créatures Poppy sur ce topic : [Poppy mini family](https://forum.poppy-project.org/t/cfc-extending-the-poppy-mini-family-we-need-your-help/1346) # # ####Instancier Poppy-Torso # Pour démarrer la simulation ; éxécuter les commandes suivantes: # In[ ]: #si une simulation est active, n'oubliez pas de la quitter from poppy.creatures import PoppyTorso torso = PoppyTorso(simulator='vrep') # ####Instancier Ergo # Pour démarrer la simulation ; éxécuter les commandes suivantes: # In[ ]: #si une simulation est active, n'oubliez pas de la quitter from poppy.creatures import PoppyErgo ergo = PoppyErgo(simulator='vrep') # etc # ##9 - Démarrer avec une créature réelle # # Pour passer d'un programme destiné à une version simulée vers une version réelle, cela nécéssite une unique modification lorsque la créture est instanciée: # # Dans votre programme, la ligne... # # - creatures = PoppyHumanoid(simulator='vrep') # # ...devient : # # - creatures = PoppyHumanoid() # # ####Particularités des modèles réels # # - Les moteurs peuvent être dans deux états: compliant / non compliant # # 1. l'état compliant permet de déplacer manuellement les moteurs sans résistance. # 2. l'état non compliant bloque les moteurs. # # Exemple:
# poppy.head_z.compliant = True
# poppy.head_z.compliant = False
# # # - La vitesse des moteurs peut être modifiée via la fonction 'moving_speed' # # Exemple:
# poppy.head_z.moving_speed = 150 #vitesse en milliseconde # # # ##10 - Achat, construction, créer sa créature : # # Acheter :
# Rendez vous sur : [Génération robots](http://www.generationrobots.com/en/279-poppy-opensource-robotics-platform) plusieurs modèles vous y sont proposés. # # # Construire :
# Rendez vous sur : [Assembling Poppy Humanoid](https://github.com/poppy-project/poppy-humanoid/blob/master/hardware/doc/Poppy_Humanoid_assembly_instructions.md) une notice et des vidéos vous aident à construire votre poppy # # # Création :
# Retrouvez toute la documentation pour imprimer et acheter individuellement les éléments nécessaires à la construction d'un « pypot robot » sur le site [poppy-project.org](http://www.poppy-project.org). # # Pour plus d'informations rendez-vous sur le [Forum](http://www.forum.poppy-project.org) # ##Aller plus loin # # - La possibilité d'ajouter des objets interactifs (balle, cube, etc) plus de details [ici](https://forum.poppy-project.org/t/torso-interacting-with-objects-in-v-rep/1321) # # - Installation détaillée [ici](https://github.com/HumaRobotics/poppy-examples/blob/master/doc/softwareGuide/softwareGuide.pdf) # # - d'autres notebooks pour # [V-REP](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20humanoid%20in%20V-REP%20using%20pypot.ipynb) ; # [Torso](http://nbviewer.ipython.org/github/poppy-project/poppy-torso/blob/master/software/doc/tutorial/Poppy%20Torso%20interacting%20with%20objects%20in%20V-REP%20using%20Pypot.ipynb) ; # [Snap!](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20Creature%20using%20SNAP.ipynb) ; # et l'ensemble des notebooks via le site [poppy-project.org](http://poppy-project.org) # # In[ ]: # essaies ton propre code ;)