{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#How to test communication with motors of your robots - Speed tests"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    Test below done with 4 xl-320\n",
    "    USB2AX\n",
    "    Windows 10\n",
    "    Pypot 2.11"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Low level test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pypot.dynamixel\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['COM5']\n"
     ]
    }
   ],
   "source": [
    "print(pypot.dynamixel.get_available_ports())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dxl_io = pypot.dynamixel.Dxl320IO('COM5', use_sync_read=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 3, 4]\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "motors = (dxl_io.scan(range(60)))\n",
    "print motors\n",
    "print len(motors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 loops, best of 3: 4.94 ms per loop\n"
     ]
    }
   ],
   "source": [
    "%timeit dxl_io.get_present_position(motors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nombre d'instructions en 1 seconde : 62 -> 62 Hz\n",
      "le temps pour éxécuter une instruction est de : 6.129032 ms\n"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "i=0\n",
    "latency = 0.01\n",
    "\n",
    "while time.time() - t0 < 1 :\n",
    "    dxl_io.get_present_position(motors)\n",
    "    i+=1\n",
    "    time.sleep(latency)\n",
    "\n",
    "\n",
    "print \"nombre d'instructions en 1 seconde : %d -> %d Hz\" % (i,i) \n",
    "t = ((1.0-(i*latency))/i)*1000\n",
    "print 'le temps pour éxécuter une instruction est de : %f ms' % t\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dxl_io.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "dxl_io = pypot.dynamixel.Dxl320IO('COM5', use_sync_read=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "DxlCommunicationError",
     "evalue": "could not parse received data \u0006\u0000U\u0000”\u0001š after sending DxlSyncReadDataPacket(ids=[1, 2, 3, 4], address=37, length=2)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mDxlCommunicationError\u001b[0m                     Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-26-4844afeb3871>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'timeit dxl_io.get_present_position(motors)'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\interactiveshell.pyc\u001b[0m in \u001b[0;36mmagic\u001b[1;34m(self, arg_s)\u001b[0m\n\u001b[0;32m   2302\u001b[0m         \u001b[0mmagic_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmagic_arg_s\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0marg_s\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpartition\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m' '\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2303\u001b[0m         \u001b[0mmagic_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmagic_name\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprefilter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mESC_MAGIC\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2304\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmagic_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmagic_arg_s\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2305\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2306\u001b[0m     \u001b[1;31m#-------------------------------------------------------------------------\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\interactiveshell.pyc\u001b[0m in \u001b[0;36mrun_line_magic\u001b[1;34m(self, magic_name, line)\u001b[0m\n\u001b[0;32m   2223\u001b[0m                 \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'local_ns'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstack_depth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf_locals\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2224\u001b[0m             \u001b[1;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuiltin_trap\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2225\u001b[1;33m                 \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2226\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2227\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\magics\\execution.pyc\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\magic.pyc\u001b[0m in \u001b[0;36m<lambda>\u001b[1;34m(f, *a, **k)\u001b[0m\n\u001b[0;32m    191\u001b[0m     \u001b[1;31m# but it's overkill for just that one bit of state.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    192\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mmagic_deco\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 193\u001b[1;33m         \u001b[0mcall\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    194\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    195\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\magics\\execution.pyc\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n\u001b[0;32m   1039\u001b[0m                     \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1040\u001b[0m                 \u001b[0mnumber\u001b[0m \u001b[1;33m*=\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1041\u001b[1;33m         \u001b[0mall_runs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtimer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1042\u001b[0m         \u001b[0mbest\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mall_runs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mnumber\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1043\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mquiet\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\timeit.pyc\u001b[0m in \u001b[0;36mrepeat\u001b[1;34m(self, repeat, number)\u001b[0m\n\u001b[0;32m    221\u001b[0m         \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    222\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 223\u001b[1;33m             \u001b[0mt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimeit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    224\u001b[0m             \u001b[0mr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    225\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mr\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\ipython-3.0.0_b1-py2.7.egg\\IPython\\core\\magics\\execution.pyc\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m    130\u001b[0m         \u001b[0mgc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdisable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    131\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 132\u001b[1;33m             \u001b[0mtiming\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mit\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    133\u001b[0m         \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    134\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mgcold\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m<magic-timeit>\u001b[0m in \u001b[0;36minner\u001b[1;34m(_it, _timer)\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36mmy_getter\u001b[1;34m(self, ids, **kwargs)\u001b[0m\n\u001b[0;32m    355\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maccess\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0m_DxlAccess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadonly\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_DxlAccess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadwrite\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    356\u001b[0m             \u001b[1;32mdef\u001b[0m \u001b[0mmy_getter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mids\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 357\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_control_value\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcontrol\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mids\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    358\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    359\u001b[0m             \u001b[0mfunc_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetter_name\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetter_name\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;34m'get_{}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreplace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m' '\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'_'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m_get_control_value\u001b[1;34m(self, control, ids, **kwargs)\u001b[0m\n\u001b[0;32m    387\u001b[0m                 sp = self._send_packet(rp,\n\u001b[0;32m    388\u001b[0m                                        \u001b[0merror_handler\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_handler\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 389\u001b[1;33m                                        _force_lock=True)\n\u001b[0m\u001b[0;32m    390\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0msp\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    391\u001b[0m                     \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m_send_packet\u001b[1;34m(self, instruction_packet, wait_for_status_packet, error_handler, _force_lock)\u001b[0m\n\u001b[0;32m    524\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    525\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0merror_handler\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 526\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__real_send\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minstruction_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwait_for_status_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force_lock\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    527\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    528\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m__real_send\u001b[1;34m(self, instruction_packet, wait_for_status_packet, _force_lock)\u001b[0m\n\u001b[0;32m    492\u001b[0m                 \u001b[1;32mreturn\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    493\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 494\u001b[1;33m             \u001b[0mstatus_packet\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__real_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minstruction_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force_lock\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    495\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    496\u001b[0m             logger.debug('Receiving %s', status_packet,\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m__real_read\u001b[1;34m(self, instruction_packet, _force_lock)\u001b[0m\n\u001b[0;32m    514\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    515\u001b[0m                 \u001b[0mmsg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'could not parse received data {}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbytearray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 516\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0mDxlCommunicationError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minstruction_packet\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    517\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    518\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mstatus_packet\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mDxlCommunicationError\u001b[0m: could not parse received data \u0006\u0000U\u0000”\u0001š after sending DxlSyncReadDataPacket(ids=[1, 2, 3, 4], address=37, length=2)"
     ]
    }
   ],
   "source": [
    "%timeit dxl_io.get_present_position(motors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nombre d'instructions en 1 seconde : 65 -> 65 Hz \n",
      "Temps réellement utilisé pour l'instruction get_present_position : 0.35 s\n",
      "le temps pour éxécuter une instruction est donc de : 5.384615 ms\n"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "i=0\n",
    "latency = 0.01\n",
    "while time.time() - t0 < 1 :\n",
    "    dxl_io.get_present_position(motors)\n",
    "    i+=1\n",
    "    time.sleep(latency)\n",
    "\n",
    "print \"nombre d'instructions en 1 seconde : %d -> %d Hz \" % (i,i) \n",
    "t = (1.0-(i*latency))\n",
    "p = t/i*1000\n",
    "print \"Temps réellement utilisé pour l'instruction get_present_position : %.2f s\" %(t)\n",
    "print 'le temps pour éxécuter une instruction est donc de : %f ms' % p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nombre d'instructions en 1 seconde : 72 -> 72 Hz \n",
      "Temps réellement utilisé pour l'instruction get_present_position : 0.64 s\n",
      "le temps pour éxécuter une instruction est donc de : 8.888889 ms\n"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "i=0\n",
    "latency = 0.005\n",
    "while time.time() - t0 < 1 :\n",
    "    dxl_io.get_present_position(motors)\n",
    "    i+=1\n",
    "    time.sleep(latency)\n",
    "\n",
    "print \"nombre d'instructions en 1 seconde : %d -> %d Hz \" % (i,i) \n",
    "t = (1.0-(i*latency))\n",
    "p = t/i*1000\n",
    "print \"Temps réellement utilisé pour l'instruction get_present_position : %.2f s\" %(t)\n",
    "print 'le temps pour éxécuter une instruction est donc de : %f ms' % p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nombre d'instructions en 1 seconde : 94 -> 94 Hz \n",
      "Temps réellement utilisé pour l'instruction get_present_position : 0.91 s\n",
      "le temps pour éxécuter une instruction est donc de : 9.638298 ms\n"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "i=0\n",
    "latency = 0.001\n",
    "while time.time() - t0 < 1 :\n",
    "    dxl_io.get_present_position(motors)\n",
    "    i+=1\n",
    "    time.sleep(latency)\n",
    "\n",
    "print \"nombre d'instructions en 1 seconde : %d -> %d Hz \" % (i,i) \n",
    "t = (1.0-(i*latency))\n",
    "p = t/i*1000\n",
    "print \"Temps réellement utilisé pour l'instruction get_present_position : %.2f s\" %(t)\n",
    "print 'le temps pour éxécuter une instruction est donc de : %f ms' % p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "DxlCommunicationError",
     "evalue": "could not parse received data \u0000U\u0000”\u0001š¦ after sending DxlSyncReadDataPacket(ids=[1, 2, 3, 4], address=37, length=2)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mDxlCommunicationError\u001b[0m                     Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-41-a36570cdedf6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mlatency\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.0005\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mt0\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m     \u001b[0mdxl_io\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_present_position\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmotors\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      6\u001b[0m     \u001b[0mi\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m     \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlatency\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36mmy_getter\u001b[1;34m(self, ids, **kwargs)\u001b[0m\n\u001b[0;32m    355\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maccess\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0m_DxlAccess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadonly\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_DxlAccess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadwrite\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    356\u001b[0m             \u001b[1;32mdef\u001b[0m \u001b[0mmy_getter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mids\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 357\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_control_value\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcontrol\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mids\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    358\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    359\u001b[0m             \u001b[0mfunc_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetter_name\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetter_name\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;34m'get_{}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcontrol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreplace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m' '\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'_'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m_get_control_value\u001b[1;34m(self, control, ids, **kwargs)\u001b[0m\n\u001b[0;32m    387\u001b[0m                 sp = self._send_packet(rp,\n\u001b[0;32m    388\u001b[0m                                        \u001b[0merror_handler\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_handler\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 389\u001b[1;33m                                        _force_lock=True)\n\u001b[0m\u001b[0;32m    390\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0msp\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    391\u001b[0m                     \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m_send_packet\u001b[1;34m(self, instruction_packet, wait_for_status_packet, error_handler, _force_lock)\u001b[0m\n\u001b[0;32m    524\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    525\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0merror_handler\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 526\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__real_send\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minstruction_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwait_for_status_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force_lock\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    527\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    528\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m__real_send\u001b[1;34m(self, instruction_packet, wait_for_status_packet, _force_lock)\u001b[0m\n\u001b[0;32m    492\u001b[0m                 \u001b[1;32mreturn\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    493\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 494\u001b[1;33m             \u001b[0mstatus_packet\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__real_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minstruction_packet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force_lock\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    495\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    496\u001b[0m             logger.debug('Receiving %s', status_packet,\n",
      "\u001b[1;32mc:\\python27\\lib\\site-packages\\pypot-2.11.2-py2.7.egg\\pypot\\dynamixel\\io\\abstract_io.pyc\u001b[0m in \u001b[0;36m__real_read\u001b[1;34m(self, instruction_packet, _force_lock)\u001b[0m\n\u001b[0;32m    514\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    515\u001b[0m                 \u001b[0mmsg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'could not parse received data {}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbytearray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 516\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0mDxlCommunicationError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minstruction_packet\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    517\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    518\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mstatus_packet\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mDxlCommunicationError\u001b[0m: could not parse received data \u0000U\u0000”\u0001š¦ after sending DxlSyncReadDataPacket(ids=[1, 2, 3, 4], address=37, length=2)"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "i=0\n",
    "latency = 0.0005\n",
    "while time.time() - t0 < 1 :\n",
    "    dxl_io.get_present_position(motors)\n",
    "    i+=1\n",
    "    time.sleep(latency)\n",
    "\n",
    "print \"nombre d'instructions en 1 seconde : %d -> %d Hz \" % (i,i) \n",
    "t = (1.0-(i*latency))\n",
    "p = t/i*1000\n",
    "print \"Temps réellement utilisé pour l'instruction get_present_position : %.2f s\" %(t)\n",
    "print 'le temps pour éxécuter une instruction est donc de : %f ms' % p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dxl_io.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Robot level test (syncloop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from poppy.creatures import Poppy4dofArmMini"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pypot.sensor.test_sensor.watch.Watch'>\n"
     ]
    }
   ],
   "source": [
    "mini_dof=Poppy4dofArmMini()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mini_dof.stop_sync()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####The config :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{u'controllers': {u'my_dxl_controller': {u'attached_motors': [u'bottom',\n",
       "    u'top'],\n",
       "   u'port': u'auto',\n",
       "   u'protocol': 2,\n",
       "   u'sync_read': False}},\n",
       " u'motorgroups': {u'bottom': [u'm1', u'm2'], u'top': [u'm3', u'm4']},\n",
       " u'motors': {u'm1': {u'angle_limit': [-150.0, 150.0],\n",
       "   u'id': 1,\n",
       "   u'offset': 0.0,\n",
       "   u'orientation': u'indirect',\n",
       "   u'type': u'XL-320'},\n",
       "  u'm2': {u'angle_limit': [-90.0, 90.0],\n",
       "   u'id': 2,\n",
       "   u'offset': 0.0,\n",
       "   u'orientation': u'direct',\n",
       "   u'type': u'XL-320'},\n",
       "  u'm3': {u'angle_limit': [-150.0, 150.0],\n",
       "   u'id': 3,\n",
       "   u'offset': 0.0,\n",
       "   u'orientation': u'indirect',\n",
       "   u'type': u'XL-320'},\n",
       "  u'm4': {u'angle_limit': [-150.0, 150.0],\n",
       "   u'id': 4,\n",
       "   u'offset': 0.0,\n",
       "   u'orientation': u'direct',\n",
       "   u'type': u'XL-320'}},\n",
       " u'sensors': {u'test_sensor': {u'type': u'Watch'}}}"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mini_dof.config"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####The controllers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<pypot.dynamixel.syncloop.BaseDxlController at 0x5551970>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mini_dof._controllers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Set the return_delay_time for motors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "dxl_io=mini_dof._controllers[0].io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0, 0, 0)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dxl_io.get_return_delay_time((1,2,3,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "dxl_io.set_return_delay_time({1:250,2:250,3:250,4:250})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Testing of the syncloop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mini_dof.start_sync()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mini_dof.stop_sync()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Set the sync_read"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "dxl_io._sync_read = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Testing of the syncloop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n"
     ]
    }
   ],
   "source": [
    "mini_dof.start_sync()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "closing after 30 secondes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n"
     ]
    }
   ],
   "source": [
    "mini_dof.stop_sync()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Set the return_delay_time for motors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dxl_io.set_return_delay_time({1:0,2:0,3:0,4:0})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####Testing of the syncloop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n",
      "WARNING:pypot.dynamixel.controller:Timeout when getting pos/speed/load from [1, 2, 3, 4]\n"
     ]
    }
   ],
   "source": [
    "mini_dof.start_sync()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "mini_dof.stop_sync()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mini_dof.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "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
}