{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
""
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"\n",
"#Premiers pas avec une créature\n",
"##### 10 choses à savoir sur poppy\n",
"\n",
"1. Ouvrir l'interface\n",
"2. Instancier Poppy (démarrer la simulation)\n",
"3. Redémarrer la simulation\n",
"4. Eteindre la simulation\n",
"5. Moteurs & capteurs de poppy\n",
"6. Bouger - fonction goal_position\n",
"7. Bouger - fonction goto_position\n",
"8. Instancier d'autres créatures\n",
"9. Démarrer avec une créature réelle\n",
"10. Particularités des modèles réelle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##1 - Ouvrir l'interface\n",
"\n",
"####Ouvrir V-REP ou connecter le robot.\n",
"####Ouvrir Jupyter - ipython [vidéo démonstrative](https://www.youtube.com/watch?v=roWqTz9fQSE)\n",
"\n",
"- via un terminal avec la commande : ipython notebook\n",
"- via l'exécutable: rechercher dans 'tout les programmes' anaconda\\IPython (Py 2.7) Notebook\n",
"- via l'exécutable 'Launcher' : rechercher dans 'tout les programmes' anaconda\\Launcher\n",
"\n",
"\n",
"- Pour Poppy réel : via http://poppy.local (ou si vous avez modifié le nom de votre Poppy: http://new-name.local)\n",
"\n",
"\n",
"##2 - Instancier Poppy\n",
"Pour démarrer la simulation ; éxécuter les commandes suivantes:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from poppy.creatures import PoppyHumanoid\n",
"creature = PoppyHumanoid(simulator='vrep')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##3 - Redémarrer la simulatiuon "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"creature.reset_simulation()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##4 - Eteindre la simulation"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pypot\n",
"creature.stop_simulation()\n",
"pypot.vrep.close_all_connections()"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"from poppy.creatures import PoppyHumanoid\n",
"poppy = PoppyHumanoid(simulator='vrep')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##5 - Moteurs & capteurs\n",
"\n",
"#####Poppy, comment tu fonctionnes?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Réponse:\n",
"j'ai 25 moteurs\n",
"il sont tous indexés dans une qui s'appelle poppy.motors \n",
"\n",
" la voici: \n",
"-------------\n",
"nom du moteur: l_elbow_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_elbow_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_knee_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: head_y\n",
"position actuel du moteur: -2.3 degrès\n",
"-------------\n",
"nom du moteur: head_z\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_arm_z\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_ankle_y\n",
"position actuel du moteur: 0.1 degrès\n",
"-------------\n",
"nom du moteur: r_shoulder_x\n",
"position actuel du moteur: -1.0 degrès\n",
"-------------\n",
"nom du moteur: r_shoulder_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_hip_z\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: r_hip_x\n",
"position actuel du moteur: 0.2 degrès\n",
"-------------\n",
"nom du moteur: r_hip_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: l_arm_z\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: l_hip_x\n",
"position actuel du moteur: -0.3 degrès\n",
"-------------\n",
"nom du moteur: l_hip_y\n",
"position actuel du moteur: -2.0 degrès\n",
"-------------\n",
"nom du moteur: l_hip_z\n",
"position actuel du moteur: 0.1 degrès\n",
"-------------\n",
"nom du moteur: abs_x\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: abs_y\n",
"position actuel du moteur: 0.1 degrès\n",
"-------------\n",
"nom du moteur: abs_z\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: l_ankle_y\n",
"position actuel du moteur: 0.1 degrès\n",
"-------------\n",
"nom du moteur: bust_y\n",
"position actuel du moteur: 0.1 degrès\n",
"-------------\n",
"nom du moteur: bust_x\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: l_knee_y\n",
"position actuel du moteur: 0.0 degrès\n",
"-------------\n",
"nom du moteur: l_shoulder_x\n",
"position actuel du moteur: 0.3 degrès\n",
"-------------\n",
"nom du moteur: l_shoulder_y\n",
"position actuel du moteur: -0.3 degrès\n"
]
}
],
"source": [
"print\"Réponse:\"\n",
"print \"j'ai\", len( poppy.motors ), \"moteurs\"\n",
"print \"ils sont tous indexés dans une \", type( poppy.motors ), \"qui s'appelle poppy.motors \\n\\n la voici: \"\n",
"for m in poppy.motors:\n",
" print \"-------------\"\n",
" print \"nom du moteur: \", m.name\n",
" print \"position actuelle du moteur: \", m.present_position, \"degrès\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#####Explication:\n",
"\n",
"Ici on utilise une liste pour stocker le nom des moteurs: poppy.motors\n",
"\n",
"chaque moteur possède:\n",
"\n",
"- un nom ; exemple: poppy.head_z.name\n",
"- une id ; exemple: poppy.head_z.id\n",
"- une position courante ; exemple: poppy.head_z.present_position"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#####Aperçu de l'ensemble des moteurs:\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##6 - Bouger - fonction 'goal_position'\n",
"\n",
"#####Poppy, tu es prêt ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# éteindre la simulation précédente...\n",
"import pypot\n",
"creature.stop_simulation()\n",
"pypot.vrep.close_all_connections()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# ...avant d'en démarrer une nouvelle.\n",
"from poppy.creatures import PoppyHumanoid\n",
"poppy = PoppyHumanoid(simulator='vrep')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Poppy dit oui\n",
"for i in range(2):\n",
" poppy.head_y.goal_position = -20\n",
" poppy.head_y.goal_position = +20\n",
"poppy.head_y.goal_position = 0\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#####Il ne se passe rien... si !\n",
"#####mais Poppy va trop vite, essayons ça :"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Poppy dit oui\n",
"import time\n",
"for i in range(2):\n",
" poppy.head_y.goal_position = -20\n",
" time.sleep(1)\n",
" poppy.head_y.goal_position = +20\n",
" time.sleep(1)\n",
"poppy.head_y.goal_position = 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#####Explication:\n",
"\n",
"Ici on utilise la fonction 'goal_position', précédée du nom du moteur, précédé du nom de la créature.\n",
"\n",
"Elle accepte des valeurs de positions allant de -180° à +180°
\n",
"\n",
"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.\n",
"\n",
"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."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##7 - Bouger - fonction 'goto_position'\n",
"\n",
"#####Bonjour Poppy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"poppy.l_shoulder_x.goto_position(90,2)\n",
"poppy.l_arm_z.goto_position(90,2)\n",
"poppy.abs_z.goto_position(10,2)\n",
"poppy.l_elbow_y.goto_position(-120,2,wait=True)\n",
"\n",
"for i in range(3):\n",
" poppy.l_elbow_y.goto_position(-90,0.5,wait=True)\n",
" poppy.l_elbow_y.goto_position(-120,0.5,wait=True)\n",
" \n",
"poppy.l_shoulder_x.goto_position(0,2)\n",
"poppy.l_arm_z.goto_position(0,2)\n",
"poppy.abs_z.goto_position(0,2)\n",
"poppy.l_elbow_y.goto_position(0,2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#####Explication:\n",
"\n",
"Ici on utilise la fonction 'goto_position', précédée du nom du moteur, précédé du nom de la créature.\n",
"\n",
"Elle accepte entre 2 et 3 paramètres:\n",
" - la position en dégrès\n",
" - le temps en secondes pour atteindre cette position\n",
" - paramètre facultatif 'wait=True'\n",
" \n",
"L'option 'wait=True' permet d'attendre que la position soit atteinte avant de passer à la ligne suivante.
\n",
"Par défaut 'wait=False' ne bloque pas le défilement, on peut donc lancer plusieurs moteurs au même moment."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##8 - Démarrer avec d'autres créatures\n",
"\n",
"#####Poppy, y a t-il d'autres créatures comme toi ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"for i in range(3):\n",
" poppy.head_y.goto_position(-20,1)\n",
" poppy.head_y.goto_position(+20,1)\n",
"poppy.head_y.goto_position(0,0.5)\n",
"\n",
"print \"Torso, Ergo, et toute la family\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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)\n",
"\n",
"####Instancier Poppy-Torso\n",
"Pour démarrer la simulation ; éxécuter les commandes suivantes:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#si une simulation est active, n'oubliez pas de la quitter\n",
"from poppy.creatures import PoppyTorso\n",
"torso = PoppyTorso(simulator='vrep')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"####Instancier Ergo\n",
"Pour démarrer la simulation ; éxécuter les commandes suivantes:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#si une simulation est active, n'oubliez pas de la quitter\n",
"from poppy.creatures import PoppyErgo\n",
"ergo = PoppyErgo(simulator='vrep')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"etc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##9 - Démarrer avec une créature réelle\n",
"\n",
"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:\n",
"\n",
"Dans votre programme, la ligne...\n",
"\n",
"- creatures = PoppyHumanoid(simulator='vrep') \n",
"\n",
"...devient : \n",
"\n",
"- creatures = PoppyHumanoid()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"####Particularités des modèles réels\n",
"\n",
"- Les moteurs peuvent être dans deux états: compliant / non compliant\n",
"\n",
" 1. l'état compliant permet de déplacer manuellement les moteurs sans résistance.\n",
" 2. l'état non compliant bloque les moteurs.\n",
" \n",
" Exemple:
\n",
" poppy.head_z.compliant = True
\n",
" poppy.head_z.compliant = False
\n",
"\n",
"\n",
"- La vitesse des moteurs peut être modifiée via la fonction 'moving_speed'\n",
"\n",
" Exemple:
\n",
" poppy.head_z.moving_speed = 150 #vitesse en milliseconde\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##10 - Achat, construction, créer sa créature :\n",
"\n",
"Acheter :
\n",
"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.\n",
"\n",
"\n",
"Construire :
\n",
"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\n",
"\n",
"\n",
"Création :
\n",
"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).\n",
"\n",
"Pour plus d'informations rendez-vous sur le [Forum](http://www.forum.poppy-project.org)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Aller plus loin\n",
"\n",
"- 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)\n",
"\n",
"- Installation détaillée [ici](https://github.com/HumaRobotics/poppy-examples/blob/master/doc/softwareGuide/softwareGuide.pdf)\n",
"\n",
"- d'autres notebooks pour\n",
"[V-REP](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20humanoid%20in%20V-REP%20using%20pypot.ipynb) ;\n",
"[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) ;\n",
"[Snap!](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20Creature%20using%20SNAP.ipynb) ;\n",
"et l'ensemble des notebooks via le site [poppy-project.org](http://poppy-project.org)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# essaies ton propre code ;)\n",
"\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}