{ "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 }