{
"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": [
""
]
},
{
"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": [
", , , , , ]>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ergo"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"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
}