SintefManufacturing / python-urx

Python library to control a robot from 'Universal Robots' http://www.universal-robots.com/
GNU Lesser General Public License v3.0
510 stars 272 forks source link

'PoseVector' object is not iterable when using movel #123

Open n-conq opened 5 months ago

n-conq commented 5 months ago

When using movel, I always get a not iterable-error. Has anyone had a similar problem?

from urx import Robot
from time import sleep

rob = Robot("169.254.1.2")

#tool center point (tcp) in (x,y,z,rx,ry,rz)
rob.set_tcp((0, 0, 0.1, 0, 0, 0))
#payload in (kg, (center of gravity x, cog y, cog z))
rob.set_payload(0.85, (0, 0, 0.1))
sleep(0.5)
print("Current tool pose is: ",  rob.getl())

x, y, z = 0, 0, -0.1
rx, ry, rz = 0, 0, 0
a, v = 0.1, 0.1
rob.movel((x, y, z, rx, ry, rz), a, v, relative= True, wait=True)

sleep(0.5)

exit()

Current tool pose is: [0.4542542097095572, -0.15457210675762453, -0.027859574520904748, 1.5646499092156947, -2.4645236374310726, -0.6841622895865939] Traceback (most recent call last): File "c:\Users\Sophie\OneDrive\Desktop\Promotion\CryoTec\UR5_control", line 18, in rob.movel((x, y, z, rx, ry, rz), a, v, relative= True, wait=True) File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\urrobot.py", line 284, in movel return self.movex("movel", tpose, acc=acc, vel=vel, wait=wait, relative=relative, threshold=threshold) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\robot.py", line 178, in movex return self.add_pose_base(t, acc, vel, wait=wait, command=command, threshold=threshold) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\robot.py", line 114, in add_pose_base return self.set_pose(trans * pose, acc, vel, wait=wait, command=command, threshold=threshold) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\robot.py", line 105, in set_pose pose = URRobot.movex(self, command, t.pose_vector, acc=acc, vel=vel, wait=wait, threshold=threshold) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\urrobot.py", line 313, in movex prog = self._format_move(command, tpose, acc, vel, prefix="p") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Sophie\AppData\Local\Programs\Python\Python312\Lib\site-packages\urx\urrobot.py", line 299, in _format_move
tpose = [round(i, self.max_float_length) for i in tpose] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'PoseVector' object is not iterable

flonzu commented 5 months ago

I had the same error. I was able to fix it with https://github.com/SintefManufacturing/python-urx/issues/117

1538933805 commented 4 months ago

Maybe math3d is too new, try 3.3.x or 3.4.x? I had the same problem befor I uninstalled math3d==4.0.0 and then installed math3d==3.3.0

lemio commented 3 months ago

I solved it by doing this, but some features are not available in 0.8.2

In the meantime, downgrading to version 0.8.2 works fine if you change this line to False:

MATH3D = False