478 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			478 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| {
 | |
|  "cells": [
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "# QuickStart: Playing with a Poppy Ergo (or a PoppyErgoJr)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "**This notebook is still work in progress! [Feedbacks are welcomed](https://github.com/poppy-project/pypot/labels/Notebooks)!**"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "In this tutorial we will show how to get started with your [PoppyErgo](https://www.poppy-project.org/project/mathematics-a-beautiful-elsewhere/) creature. You can use a [PoppyErgoJr](https://github.com/poppy-project/poppy-ergo-jr) instead."
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "<img src=\"https://raw.githubusercontent.com/poppy-project/poppy-ergo-jr/master/doc/img/poppy-ergo-jr.jpg\" alt=\"Poppy Ergo Jr\" style=\"height: 500px;\"/>"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "To run the code in this notebook, you will need:\n",
 | |
|     "* a poppy ergo creature (or a Jr)\n",
 | |
|     "* the [pypot](https://github.com/poppy-project/pypot) library\n",
 | |
|     "* the [poppy-ergo](https://github.com/pierre-rouanet/poppy-ergo) library (or use the [poppy-ergo-jr](https://github.com/poppy-project/poppy-ergo-jr) library instead)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "You can install those libraries with the pip tool (see [here]() if you don't know how to run this):\n",
 | |
|     "```bash\n",
 | |
|     "\n",
 | |
|     "pip install pypot poppy-ergo\n",
 | |
|     "```"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "## Connect to your robot"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "For a PoppyErgo:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 1,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "from pypot.creatures import PoppyErgo"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 2,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "ergo = PoppyErgo()"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "For a PoppyErgoJr:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "from pypot.creatures import PoppyErgoJr\n",
 | |
|     "\n",
 | |
|     "ergo = PoppyErgoJr()"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "## Get robot current status"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 3,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "data": {
 | |
|       "text/plain": [
 | |
|        "<Robot motors=[<DxlMotor name=m1 id=11 pos=-1.69>, <DxlMotor name=m2 id=12 pos=-97.13>, <DxlMotor name=m3 id=13 pos=89.96>, <DxlMotor name=m4 id=14 pos=0.65>, <DxlMotor name=m5 id=15 pos=41.5>, <DxlMotor name=m6 id=16 pos=22.14>]>"
 | |
|       ]
 | |
|      },
 | |
|      "execution_count": 3,
 | |
|      "metadata": {},
 | |
|      "output_type": "execute_result"
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "ergo"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 4,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "data": {
 | |
|       "text/plain": [
 | |
|        "<DxlMotor name=m2 id=12 pos=-97.43>"
 | |
|       ]
 | |
|      },
 | |
|      "execution_count": 4,
 | |
|      "metadata": {},
 | |
|      "output_type": "execute_result"
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "ergo.m2"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 5,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "data": {
 | |
|       "text/plain": [
 | |
|        "-97.13"
 | |
|       ]
 | |
|      },
 | |
|      "execution_count": 5,
 | |
|      "metadata": {},
 | |
|      "output_type": "execute_result"
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "ergo.m2.present_position"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 6,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "data": {
 | |
|       "text/plain": [
 | |
|        "32.0"
 | |
|       ]
 | |
|      },
 | |
|      "execution_count": 6,
 | |
|      "metadata": {},
 | |
|      "output_type": "execute_result"
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "ergo.m2.present_temperature"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 7,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "name": "stdout",
 | |
|      "output_type": "stream",
 | |
|      "text": [
 | |
|       "Motor \"m1\" current position = -1.69\n",
 | |
|       "Motor \"m2\" current position = -97.13\n",
 | |
|       "Motor \"m3\" current position = 89.96\n",
 | |
|       "Motor \"m4\" current position = 0.65\n",
 | |
|       "Motor \"m5\" current position = 41.5\n",
 | |
|       "Motor \"m6\" current position = 22.14\n"
 | |
|      ]
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "for m in ergo.motors:\n",
 | |
|     "    print 'Motor \"{}\" current position = {}'.format(m.name, m.present_position)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "## Turn on/off the compliancy of a motor"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 8,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [
 | |
|     {
 | |
|      "data": {
 | |
|       "text/plain": [
 | |
|        "True"
 | |
|       ]
 | |
|      },
 | |
|      "execution_count": 8,
 | |
|      "metadata": {},
 | |
|      "output_type": "execute_result"
 | |
|     }
 | |
|    ],
 | |
|    "source": [
 | |
|     "ergo.m3.compliant"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 9,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "ergo.m6.compliant = False"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "## Go to the zero position"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 10,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "ergo.m6.goal_position = 0."
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 11,
 | |
|    "metadata": {
 | |
|     "collapsed": false
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "for m in ergo.motors:\n",
 | |
|     "    m.compliant = False\n",
 | |
|     "    \n",
 | |
|     "    # Goes to the position 0 in 2s\n",
 | |
|     "    m.goto_position(0, 2)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "# You can also change the maximum speed of the motors\n",
 | |
|     "# Warning! Goto position also change the maximum speed.\n",
 | |
|     "\n",
 | |
|     "for m in ergo.motors:\n",
 | |
|     "    m.moving_speed = 50"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "## Make a simple dance movement"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "On a single motor:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 13,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "import time\n",
 | |
|     "\n",
 | |
|     "ergo.m4.goal_position = 30\n",
 | |
|     "time.sleep(1.)\n",
 | |
|     "ergo.m4.goal_position = -30"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "On multiple motors:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 14,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "ergo.m4.goal_position = 30\n",
 | |
|     "ergo.m5.goal_position = 20\n",
 | |
|     "ergo.m6.goal_position = -20\n",
 | |
|     "\n",
 | |
|     "time.sleep(1.)\n",
 | |
|     "\n",
 | |
|     "ergo.m4.goal_position = -30\n",
 | |
|     "ergo.m5.goal_position = -20\n",
 | |
|     "ergo.m6.goal_position = 20"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "Wrap it inside a function for convenience:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 15,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "def dance():\n",
 | |
|     "    ergo.m4.goal_position = 30\n",
 | |
|     "    ergo.m5.goal_position = 20\n",
 | |
|     "    ergo.m6.goal_position = -20\n",
 | |
|     "\n",
 | |
|     "    time.sleep(1.)\n",
 | |
|     "\n",
 | |
|     "    ergo.m4.goal_position = -30\n",
 | |
|     "    ergo.m5.goal_position = -20\n",
 | |
|     "    ergo.m6.goal_position = 20\n",
 | |
|     "    \n",
 | |
|     "    time.sleep(1.)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 16,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "dance()"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 17,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "for _ in range(4):\n",
 | |
|     "    dance()"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "metadata": {},
 | |
|    "source": [
 | |
|     "Using goto position instead:"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 18,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "def dance2():\n",
 | |
|     "    ergo.goto_position({'m4': 30, 'm5': 20, 'm6': -20}, 1., wait=True)\n",
 | |
|     "    ergo.goto_position({'m4': -30, 'm5': -20, 'm6': 20}, 1., wait=True)"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": 19,
 | |
|    "metadata": {
 | |
|     "collapsed": true
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "for _ in range(4):\n",
 | |
|     "    dance2()"
 | |
|    ]
 | |
|   }
 | |
|  ],
 | |
|  "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
 | |
| }
 |