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