UR5e, URSoftware 5.5.1, Python 3
Hello,
I am currently dealing with the TCP/IP socket connection. I have been able to establish a connection between the UR5e and my laptop via TCP/IP socket. I was able to turn signals on and off, as well as drive to positions.
import socket
HOST = “”
PORT = 30002
ADDR = (HOST, PORT)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
Befehl = “set_digital_out(0,True)” + “\n”
#Befehl = “set_digital_out(0,False)” + “\n”
msg = Befehl.encode (“utf8”)
s.send (msg)
s.close()
My next step was to get data from the robot. Here I tried to get the weight of the lifted part by using the force() function through repr(data). The result of this, for me an arbitrary looking data stream in hex.
import socket
import time
HOST = “”
PORT = 30002
ADDR = (HOST, PORT)
FORMAT = ‘utf-8’
Ort = “movej(p[-0.425, 0.075, 0.4, 2.0, -2.4, -0.019], a=1.0, v=0.1)” + “\n”
print(“Programm wird gestartet!”)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
s.send(Ort.encode(FORMAT))
time.sleep(4)
s.send((“set_tool_digital_out(0,True)” + “\n”).encode(FORMAT))
time.sleep(2)
s.send((“force()” + “\n”).encode(FORMAT))
DATA = s.recv(1024)
print(“The weight is”, repr(DATA))
time.sleep(2)
s.send((“set_tool_digital_out(0,False)” + “\n”).encode(FORMAT))
s.close()
Answer:
b’\x00\x00\x007\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x03\tURControl\x05\x05\x00\x00\x00\x00\x00\x00\x00\x0028-08-2019, 08:56:36\x00\x00\x00\x18\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x05j\x10\x00\x00\x00/\x00\x00\x00\x00\x01\xbd\ …
Then I tried to decode this data stream, but I got back an arbitrary number, when I asked repeatedly. I also tried different ports.
import socket
import time
import struct
from codecs import encode, decode
from pip._vendor.html5lib.constants import voidElements
HOST = “”
PORT = 30002
ADDR = (HOST, PORT)
FORMAT = ‘utf8’
print(“Programm wird gestartet!”)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
time.sleep(1)
for x in range(0, 5):
DATA = s.recv(8)
DATA = encode(DATA, “hex”)
x = struct.unpack(’!d’, decode(DATA,‘hex’))[0]
print(x)
s.close()
print(“Programmende”)
Answer:
1.1688383847e-312
nan
1.022634920301348e+103
2.2113118192368592e+212
1.06565439285e-312
Now to my questions:
- what exactly do I get back? (State data of the robot?)
- is it possible to filter out the force data from the data stream? So how do I decode the result?