{ "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 12 xl-320\n", " Pixl\n", " Raspi Jessie\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": [ "['/dev/ttyAMA0']\n" ] } ], "source": [ "print(pypot.dynamixel.get_available_ports())" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dxl_io = pypot.dynamixel.Dxl320IO('/dev/ttyAMA0', use_sync_read=False)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]\n", "12\n" ] } ], "source": [ "motors = (dxl_io.scan(range(60)))\n", "print (motors)\n", "print(len(motors))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 loops, best of 3: 19.4 ms per loop\n" ] } ], "source": [ "%timeit dxl_io.get_present_position(motors)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nombre d'instructions en 1 seconde : 34 -> 34 Hz \n", "Temps réellement utilisé pour l'instruction get_present_position : 0.66 s\n", "le temps utilisé par une instruction get_present_position est donc de : 19.411765 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))\n", "p = t/i*1000\n", "print (\"Temps réellement utilisé pour l'instruction get_present_position : %.2f s\" %(t))\n", "print ('le temps utilisé par une instruction get_present_position est donc de : %f ms' % p)\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dxl_io.close()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dxl_io = pypot.dynamixel.Dxl320IO('/dev/ttyAMA0', use_sync_read=True)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "ename": "DxlCommunicationError", "evalue": "could not parse received data bytearray(b'U\\x00\\t\\x02)r\\xff') after sending DxlSyncReadDataPacket(ids=[11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43], address=37, length=2)", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\u001b[0m in \u001b[0;36m__real_read\u001b[1;34m(self, instruction_packet, _force_lock)\u001b[0m\n\u001b[0;32m 509\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 510\u001b[1;33m \u001b[0mheader\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_protocol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mDxlPacketHeader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfrom_string\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 511\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_serial\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpacket_length\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/protocol/v2.py\u001b[0m in \u001b[0;36mfrom_string\u001b[1;34m(cls, data)\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlength\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mheader\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmarker\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmarker\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 40\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'try to parse corrupted data ({})'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 41\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: try to parse corrupted data (bytearray(b'U\\x00\\t\\x02)r\\xff'))", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[1;31mDxlCommunicationError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m<ipython-input-23-3568df29ecc8>\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;34m'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;32m/usr/local/lib/python3.4/dist-packages/IPython/core/interactiveshell.py\u001b[0m in \u001b[0;36mmagic\u001b[1;34m(self, arg_s)\u001b[0m\n\u001b[0;32m 2161\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 2162\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-> 2163\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 2164\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2165\u001b[0m \u001b[1;31m#-------------------------------------------------------------------------\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/IPython/core/interactiveshell.py\u001b[0m in \u001b[0;36mrun_line_magic\u001b[1;34m(self, magic_name, line)\u001b[0m\n\u001b[0;32m 2082\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 2083\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-> 2084\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 2085\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2086\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m<decorator-gen-59>\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/IPython/core/magic.py\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;32m/usr/local/lib/python3.4/dist-packages/IPython/core/magics/execution.py\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n\u001b[0;32m 1039\u001b[0m \u001b[0mnumber\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1040\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1041\u001b[1;33m \u001b[0mtime_number\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtimer\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 1042\u001b[0m \u001b[0mworst_tuning\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mworst_tuning\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtime_number\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[0;32m 1043\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtime_number\u001b[0m \u001b[1;33m>=\u001b[0m \u001b[1;36m0.2\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/IPython/core/magics/execution.py\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m 135\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 136\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 137\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 138\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 139\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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[1;32mTrue\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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 bytearray(b'U\\x00\\t\\x02)r\\xff') after sending DxlSyncReadDataPacket(ids=[11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43], address=37, length=2)" ] } ], "source": [ "%timeit dxl_io.get_present_position(motors)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nombre d'instructions en 1 seconde : 55 -> 55 Hz \n", "Temps réellement utilisé pour l'instruction get_present_position : 0.45 s\n", "le temps utilisé par une instruction get_present_position est donc de : 8.181818 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 utilisé par une instruction get_present_position est donc de : %f ms' % p)\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nombre d'instructions en 1 seconde : 76 -> 76 Hz \n", "Temps réellement utilisé pour l'instruction get_present_position : 0.62 s\n", "le temps utilisé par une instruction get_present_position est donc de : 8.157895 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 utilisé par une instruction get_present_position est donc de : %f ms' % p)\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "ename": "DxlCommunicationError", "evalue": "could not parse received data bytearray(b'\\xff\\xff\\xfd/\\xf9\\xdf\\xdf') after sending DxlSyncReadDataPacket(ids=[11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43], address=37, length=2)", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\u001b[0m in \u001b[0;36m__real_read\u001b[1;34m(self, instruction_packet, _force_lock)\u001b[0m\n\u001b[0;32m 509\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 510\u001b[1;33m \u001b[0mheader\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_protocol\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mDxlPacketHeader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfrom_string\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 511\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_serial\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpacket_length\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/protocol/v2.py\u001b[0m in \u001b[0;36mfrom_string\u001b[1;34m(cls, data)\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlength\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mheader\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmarker\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcls\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmarker\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 40\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'try to parse corrupted data ({})'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 41\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: try to parse corrupted data (bytearray(b'\\xff\\xff\\xfd/\\xf9\\xdf\\xdf'))", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[1;31mDxlCommunicationError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m<ipython-input-28-b71986cdebad>\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.001\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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[1;32mTrue\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;32m/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py\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 bytearray(b'\\xff\\xff\\xfd/\\xf9\\xdf\\xdf') after sending DxlSyncReadDataPacket(ids=[11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43], address=37, length=2)" ] } ], "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 utilisé par une instruction get_present_position est donc de : %f ms' % p)\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dxl_io.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Robot level test (syncloop)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from roboticia_horse import RoboticiaHorse" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot=RoboticiaHorse()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "robot.stop_sync()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The config :" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'controllers': {'my_dxl_controller': {'attached_motors': ['leg1',\n", " 'leg2',\n", " 'leg3',\n", " 'leg4'],\n", " 'port': 'auto',\n", " 'protocol': 2,\n", " 'sync_read': True}},\n", " 'motorgroups': {'leg1': ['m11', 'm12', 'm13'],\n", " 'leg2': ['m21', 'm22', 'm23'],\n", " 'leg3': ['m31', 'm32', 'm33'],\n", " 'leg4': ['m41', 'm42', 'm43']},\n", " 'motors': {'m11': {'angle_limit': [-150.0, 150.0],\n", " 'id': 11,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm12': {'angle_limit': [-150.0, 150.0],\n", " 'id': 12,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm13': {'angle_limit': [-150.0, 150.0],\n", " 'id': 13,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm21': {'angle_limit': [-150.0, 150.0],\n", " 'id': 21,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm22': {'angle_limit': [-150.0, 150.0],\n", " 'id': 22,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm23': {'angle_limit': [-150.0, 150.0],\n", " 'id': 23,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm31': {'angle_limit': [-150.0, 150.0],\n", " 'id': 31,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm32': {'angle_limit': [-150.0, 150.0],\n", " 'id': 32,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm33': {'angle_limit': [-150.0, 150.0],\n", " 'id': 33,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm41': {'angle_limit': [-150.0, 150.0],\n", " 'id': 41,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm42': {'angle_limit': [-150.0, 150.0],\n", " 'id': 42,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'},\n", " 'm43': {'angle_limit': [-150.0, 150.0],\n", " 'id': 43,\n", " 'offset': 0.0,\n", " 'orientation': 'direct',\n", " 'type': 'XL-320'}}}" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "robot.config" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The controllers" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[<pypot.dynamixel.syncloop.BaseDxlController at 0x6e2e0ed0>]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "robot._controllers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Set the return_delay_time for motors" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dxl_io=robot._controllers[0].io" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dxl_io.get_return_delay_time((11,12,13,21,22,23,31,32,33,41,42,43))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dxl_io.set_return_delay_time({11:250,12:250,13:250,21:250,22:250,23:250,31:250,32:250,33:250,41:250,42:250,43:250})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing of the syncloop" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot.start_sync()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "robot.stop_sync()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Set the sync_read" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dxl_io._sync_read = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing of the syncloop" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot.start_sync()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "closing after 30 secondes." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot.stop_sync()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Set the return_delay_time for motors" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dxl_io.set_return_delay_time({11:0,12:0,13:0,21:0,22:0,23:0,31:0,32:0,33:0,41:0,42:0,43:0})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing of the syncloop" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot.start_sync()" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [], "source": [ "robot.stop_sync()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": true }, "outputs": [], "source": [ "robot.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.2" } }, "nbformat": 4, "nbformat_minor": 0 }