{ "metadata": { "name": "", "signature": "sha256:84b021eb75b3117c006d8e35e4d4e5f03bfc7b71fec2168e35c4dda9eae1c1bf" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Setting Environments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Explauto, an *environment* implements the physical properties of the interaction between the robot body and the environment in which it evolves. Explauto comes with several sensorimotor systems available from the [environment package](http://flowersteam.github.io/explauto/explauto.environment.html):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from explauto.environment import environments\n", "print 'Available environments: {}'.format(environments.keys())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Available environments: ['npendulum', 'pendulum', 'simple_arm']\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to your installation, you will see at least two available environments:\n", "* a multi-joint arm acting on a plan ('simple_arm')\n", "* an under-actuated torque-controlled inverse pendulum ('pendulum')\n", "* a pendulum chain ('npendulum', still in a beta version).\n", "\n", "These environments are simulated. Explauto also provides an interface with real robots based on Dynamixel actuators by providing bindings to the [Pypot](https://github.com/poppy-project/pypot) library ([this tutorial](http://nbviewer.ipython.org/github/flowersteam/explauto/blob/master/notebook/poppy_environment.ipynb) shows how to use it on a [Poppy](http://www.poppy-project.org/) robot)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the simple arm for this tutorial. It consists in the simulation of a $n$ degrees-of-freedom (DoF) arm with movements limited to a 2D plan.\n", "\n", "Each available environment comes with a set of predefined configurations. A default configuration will always be defined." ] }, { "cell_type": "code", "collapsed": false, "input": [ "env_cls, env_configs, _ = environments['simple_arm']\n", "print 'Available configurations for the simple arm environment: {}'.format(env_configs.keys())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Available configurations for the simple arm environment: ['mid_dimensional', 'default', 'high_dim_high_s_range', 'low_dimensional', 'high_dimensional']\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 4 different configurations for the simple arm (we see 5 above, but the 'default' one actually corresponds to the 'low_dimensional' one).\n", "\n", "In the case of the simple_arm environment, a configuration must defines the following values:\n", "* m_mins and m_maxs (bounds of the motor space)\n", "* s_mins ans s_maxs (bounds of the sensory space)\n", "* length_ratio (length ratio from one segment to the following one)\n", "* noise (gaussian noise added in the sensor space)\n", "\n", "The motor space corresponds to the angular position of each joint (hence $n$-dimensional), and the sensory space corresponds to the position of the end-effector on the plan ($x,y$: hence 2-dimensional). Arm total length is normalized to 1.\n", "\n", "For instance, the default configuration defines a $n=3$ DoF arm where each segment is three time smaller than the previous one (from the \"shoulder\" to the end-effector). Each joint can move between $-\\pi/3$ and $\\pi/3$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "config = env_configs['default']\n", "\n", "print 'Default configuration for the simple arm:'\n", "for config_key, value in config.items():\n", " print '\\t{}: {}'.format(config_key, value)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Default configuration for the simple arm:\n", "\ts_mins: [-0.5 -1. ]\n", "\tm_mins: [-1.04719755 -1.04719755 -1.04719755]\n", "\tnoise: 0.02\n", "\tm_maxs: [ 1.04719755 1.04719755 1.04719755]\n", "\ts_maxs: [ 1. 1.]\n", "\tlength_ratio: 3.0\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you have choose a configuration, say the 'default' one, you can create the Environment instance:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "environment = env_cls(**config)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you already now the name of the environment and the configuration you want to use (here: 'simple_arm' and 'default', respectively), you can alternatively use that shortcut:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from explauto import Environment\n", "environment = Environment.from_configuration('simple_arm', 'default')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each environment has an [update](http://flowersteam.github.io/explauto/explauto.environment.html#explauto.environment.environment.Environment.update) method, we take as argument a motor command vector $m$ (here: $n=3$-dimensional). It computes $m\\_bounds$, the command $m$ bounded according to the configuration used (m_mins, m_maxs values), then computes the corresponding sensory effect vector $s$ ($2$-dimensional) and returns the corresponding $n+2=5$-dimensional vector:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from math import pi\n", "m = [-pi/6., pi, pi/4.]\n", "print environment.update(m)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-0.52359878 1.04719755 0.78539816 0.80835484 -0.15155271]\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that the second value $\\pi$ has been bounded to $m\\_maxs[1] = \\pi/3$. The two last values correspond to the resulting $x, y$ end-effector postion." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simple arm environment also comes with a method to visualize the arm shape for a given motor configuration:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "\n", "ax = axes()\n", "m = [-pi/6., pi/3., pi/4.]\n", "environment.plot_arm(ax, m)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "WARNING: pylab import has clobbered these variables: ['pi']\n", "`%matplotlib` prevents importing * from pylab and numpy\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n+2/v2EHL4oe3L7necqykZXfX7cdKBg4c6PdBUaE+VtKdUBYAuqxAz0rq06ePMzvpzmdhdWWUBYBu\nwXa9Q4uW6zu8Xq+Sk5PVq1cvl5PenygLAN3SxYsXneKoq6tTcnKyvF6vYmJimD10AsoCAGDV0dfO\n+/N6dgBAUFEWAAArygIAYEVZAACsKAsAgBVlAQCwoiwAAFaUBQDAirIAAFhRFgAAK8oCAGAVbh8S\nPDU1NXr66ad16tQpJSYm6m9/+5sGDRrUalxiYqIGDBigsLAwRUREqLCw0M2YAIDbuDqz2Lx5s2bN\nmqXjx49r5syZ2rx5c5vjPB6PCgoKVFRURFEAQBfgallkZ2crKytLkpSVlaX333+/3bGsKAsAXYer\nu6Gqq6sVExMjSYqJiVF1dXWb4zwej5544gmFhYVpxYoVWr58eZvj1q9f7/w7IyNDGRkZwY4MAN1a\nQUGBCgoK7vlxgv55FrNmzVJVVVWrr2/cuFFZWVmqra11vjZ48GDV1NS0GltZWanY2FidPXtWs2bN\n0rZt2zRt2jT/4HyeBQDctY6+dgZ9ZrF37952t8XExKiqqkrDhw9XZWWloqOj2xwXGxsrSRo2bJi+\n8Y1vqLCwsFVZAADc4+oxi/nz5+v111+XJL3++utasGBBqzHXrl1zPqj96tWr+sc//qEJEya4GRMA\ncBtXP1a1pqZG3/72t3X69Gm/U2fPnDmj5cuXKycnRydPntQ3v/lNSVJjY6O+973v6aWXXmodnN1Q\nAHDX+AxuAIAVn8ENAOg0lAUAwIqyAABYURYAACvKAgBgRVkAAKwoCwCAFWUBALCiLAAAVpQFAMCK\nsgAAWFEWAAArygIAYEVZAACsKAsAgBVlAQCwoiwAAFaUBQDAirIAAFhRFgAAK8oCAGBFWQAArCgL\nAIAVZQEAsKIsAABWlAUAwIqyAABYURYAACvKAgBgRVkAAKwoCwCAFWUBALCiLAAAVpQFAMCKsgAA\nWFEWAAArygIAYEVZAACsKAsAgBVlAQCwoiwAAFaUBQDAirIAAFhRFgAAK8oCAGBFWQAArCiL2xQU\nFIQ6wl3rbpm7W16JzG7obnml7pm5o1wti3feeUfjxo1TWFiYDh061O64/Px8jRkzRl6vV1u2bHEx\nYff8z+9umbtbXonMbuhueaXumbmjXC2LCRMm6L333tPjjz/e7pimpiatWrVK+fn5Onr0qN566y0d\n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\n", "text": [ "" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The base of the arm is fixed at (0, 0) (circle). The first angle position m[0] corresponds to the angle between a horizontal line and the segment attached to the base, anticlock-wise. Each following angle position, m[1] and m[2] are measured with respect to their respective previous segment. \n", "\n", "The sensory space (what will actually perceive the simulated robot) is the 2D hand position (position of the square).\n", "\n", "Now let's see various arm shapes corresponding to random motor configurations. The Environment base class, from which every explauto environments derive, provides a random_motor method to uniformely sample motor configurations within their bounds (defined in the configuration dictionary, see above)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "motor_configurations = environment.random_motors(n=10)\n", "ax = axes()\n", "for m in motor_configurations:\n", " environment.plot_arm(ax, m)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot arm shapes corresponding to random motor configurations using the 'high_dimensional' configuration of the simple_arm. Then plot more, e.g. $100$, random configurations.\n", "\n", "An interpretation of the obtained plot is provided below." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load exercise_solutions/setting_environment__high_dim_configuration.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "\n" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Interpretation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that when sampling many random motor configurations on the high dimensional arm, the sensory space (corresponding to hand positions) is not covered uniformely: there are far more motor configurations resulting in front hand positions ($x\\simeq 1$) than resulting in back positions ($x\\simeq -0.2$).\n", "\n", "On such an arm, front positions can be attained by several very distinct configurations (e.g. those mirroring horizontally). It is not the case for back positions, in particular due to the small angle ranges allowed here ($\\pm \\pi/6$)." ] } ], "metadata": {} } ] }