Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Funny error with UR5 arm #4

Open
neildhir opened this issue Feb 20, 2017 · 2 comments
Open

Funny error with UR5 arm #4

neildhir opened this issue Feb 20, 2017 · 2 comments

Comments

@neildhir
Copy link

neildhir commented Feb 20, 2017

Hi Travis,

Excellent blog as always.

I was playing around with your ur5_ctrl.py example and I am running into this funny error where I can run the code from outside an IDE like so:

[90] → python ur5_ctrl.py
Connected to remote API server
Generating transform function for EE
connection closed...
Traceback (most recent call last):
  File "ur5_ctrl.py", line 364, in <module>
    ax.plot([track_hand[0, 0]],
IndexError: too many indices for array

If I then run it inside and IDE like sublime or a notebook, I get the same error above once, but then if I try to run it again I get this rather worrying chunk of stuff:

Connected to remote API server
Generating transform function for EE
connection closed...
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-d8786628c253> in <module>()
    149             # calculate position of the end-effector
    150             # derived in the ur5 calc_TnJ class
--> 151             xyz = robot_config.Tx('EE', q)
    152 
    153             # calculate the Jacobian for the end effector

/Users/nd/cloud/control/src/vrep/ur5.pyc in Tx(self, name, q, x)
    213             # both have their own transform calculated with this check
    214             self._Tx[name] = self._calc_Tx(
--> 215                 name, x=x)
    216         parameters = tuple(q) + tuple(x)
    217         return self._Tx[name](*parameters)[:-1].flatten()

/Users/nd/cloud/control/src/vrep/ur5.pyc in _calc_Tx(self, name, x, lambdify)
    384         if (os.path.isfile('%s/%s.T' % (self.config_folder, name))):
    385             Tx = cloudpickle.load(open('%s/%s.T' %
--> 386                                        (self.config_folder, name), 'rb'))
    387         else:
    388             T = self._calc_T(name=name)

/Users/nd/anaconda2/lib/python2.7/pickle.pyc in load(file)
   1382 
   1383 def load(file):
-> 1384     return Unpickler(file).load()
   1385 
   1386 def loads(str):

/Users/nd/anaconda2/lib/python2.7/pickle.pyc in load(self)
    862             while 1:
    863                 key = read(1)
--> 864                 dispatch[key](self)
    865         except _Stop, stopinst:
    866             return stopinst.value

/Users/nd/anaconda2/lib/python2.7/pickle.pyc in load_reduce(self)
   1137         args = stack.pop()
   1138         func = stack[-1]
-> 1139         value = func(*args)
   1140         stack[-1] = value
   1141     dispatch[REDUCE] = load_reduce

/Users/nd/anaconda2/lib/python2.7/site-packages/sympy/core/numbers.pyc in __new__(cls, num, prec)
    823                 else:
    824                     _mpf_ = mpmath.mpf(
--> 825                         S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
    826         elif isinstance(num, Float):
    827             _mpf_ = num._mpf_

TypeError: can't multiply sequence by non-int of type 'float'

Do you know why it might be doing that?

EDIT:

The issue seems to be with cloudpickle

If I do

Tx = cloudpickle.load((open('%s/%s.T' % ('ur5_config', 'EE'), 'rb')))

I get

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-d19e02c244b8> in <module>()
----> 1 Tx = cloudpickle.load((open('%s/%s.T' % ('ur5_config', 'EE'), 'rb')))

/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.pyc in load(file)
   1382 
   1383 def load(file):
-> 1384     return Unpickler(file).load()
   1385 
   1386 def loads(str):

/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.pyc in load(self)
    862             while 1:
    863                 key = read(1)
--> 864                 dispatch[key](self)
    865         except _Stop, stopinst:
    866             return stopinst.value

/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.pyc in load_reduce(self)
   1137         args = stack.pop()
   1138         func = stack[-1]
-> 1139         value = func(*args)
   1140         stack[-1] = value
   1141     dispatch[REDUCE] = load_reduce

/usr/local/lib/python2.7/site-packages/sympy/core/numbers.pyc in __new__(cls, num, prec)
    823                 else:
    824                     _mpf_ = mpmath.mpf(
--> 825                         S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
    826         elif isinstance(num, Float):
    827             _mpf_ = num._mpf_

TypeError: can't multiply sequence by non-int of type 'float'

I think, possibly, maybe, there is an issue with the files in ur5_config/ - surely I should be able to use the ones on this repo and not process them myself (it takes a few hours as you have noted :)

@studywolf
Copy link
Owner

Ah interesting, I'll try to check this out asap! Thanks for posting! In the meantime, I've removed the simplify calls from the code, which should drop the generation time to under a minute, so at least it shouldn't be a horrible experience to regenerate things!

@aichilongxia
Copy link

Hi, I also got the same question. Is there some solutions? thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants