Decoding socket response

Hi,

I’m trying to communicate with the robot via Python. I have no problem moving it and sending commands etc. However I cannot decode what the robot is saying… I basically want to be able to move the robot in python (movej) wait for it to reach it’s destination and then execute another move.

As an example I have the following

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))
time.sleep(0.5)

s.send(( "textmsg(get_inverse_kin(get_forward_kin()), \"endinversekin\")" + "\n").encode())
time.sleep(0.5)


data = s.recv(1024)

When trying to decode data using utf-8, 16 and many others. I get errors. The response from the robot is:

b’\x00\x00\x007\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x03\tURControl\x05\x0b\x00\x00\x00\x0b\x00\x00\x00\x0011-04-2022, 07:48:21\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\x05\xbf\x10\x00\x00\x00/\x00\x00\x00\x00\x00\x98l\x95\x88\x01\x01\x01\x00\x00\x00\x00\x07\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x01\xc0\x01\xd7\x07\xa8\x88Z0\xc0\x01\xd7\n=p\xa3\xda\x00\x00\x00\x00\x00\x00\x00\x00\xbdh\x08NB>e\xa5A\xc5\x80\x00\x00\x00\x00\x00\xfd\xc0\x0cz\xe8\xd2\xb1|\xd8\xc0\x0cz\xe1G\xae\x14|\x00\x00\x00\x00\x00\x00\x00\x00@\xa4\x06\x83B>V\xf8A\xca\x00\x00\x00\x00\x00\x00\xfd?\xf5\x1e\x9b\xd1\x10\xb4?\xf5\x1e\xb8Q\xeb\x85\x18\x80\x00\x00\x00\x00\x00\x00\x00?\xdd\x04;B>e\xa5A\xc8\x80\x00\x00\x00\x00\x00\xfd\xbf\xfd\x99k\xa5b\xf9\xb0\xbf\xfd\x99\x99\x99\x99\x99\x90\x00\x00\x00\x00\x00\x00\x00\x00>\x8bf*B>\xaf\x08A\xe3\x00\x00\x00\x00\x00\x00\xfd@\x04z\xdc\xc0\x00\x00\x00@\x04z\xe1G\xae\x14\x80\x00\x00\x00\x00\x00\x00\x00\x00>\x86"\x92B>*\xf0A\xf1\x80\x00\x00\x00\x00\x00\xfd?\x84j\x13\x00\x00\x00?\x84z\xe1G\xae\x10\x00\x80\x00\x00\x00\x00\x00\x00\x00\xbd\x80S B>9\x9eA\xf7\x80\x00\x00\x00\x00\x00\xfd\x00\x00\x00e\x04\xbf\xdaOB\xfe\xcaS\x16\xbf\xe6m–\x81\x1a\x9a?\xcd,#\x08Q\xb7L@\x00\xfb\xa5\xe6nS\x0b\xbf\xd6\xc9+\xaf\xb2\xc2\x8a?\xebw\x92\x0e&\x93\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc7\xe2.]\xe1\\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\t!\xf9\xf0\x1b\xeaV\x00\x00\x00\xe1\x05\xa6G0\\xa66\xc0U'[\xe2\x99\xa6\xd7\x17\xdf\xa6\xf9\xfcJ\xa6\xfd\xcdt\xbeg\xc2b\x1b \x00\x00\xbf\xf1\xd5\xaa\x81t\x8c\xac@\x1d\xb5p\x91$\xfd\xa2\xbf\x9e\nI\xf1\xdb\xc5\xb4\xbe\xb28C\xdeN\xc0\x00\xbeyh\xce\x05\x92\x00\x00?+\xe0s\x96\rA\xd7\xbf\xc7\xf6H\nj\xdc\x92\xbf\xd9\x17\x8b6;:\xd3\xbf\x1d\x9f$\xd9\xc2\xa2\t?\x16z\x9b\xa3j\x8c\xc1\x00\x00\x00\x00\x00\x00\x00\x00?\xc4\xd4\x8a\xcc\xa6\xa1\xaf\xc0q\xa4+\xf7lF\xd2@q\xb9\xd0\x19\xe7\x1eg\xbf\xf3\x80q\x1a\x87\xa6\xb6?\xb9\x80\x82>=\x1e\xf5?\xb9s\xd4\x10\x98\x1e\xdf?\xf9"\xe5\xca\x1b\xf1o?V%\xb1\xbawy\x9f?\x81kB\x99\xb2\xba\xbf?\xf9\x1a\xf6\xdf\x86\xf0!\xbf\xf9\x1b\xf3\xbc\x0c\xf0\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x005\t?\xe4\x11:4\xe433\xc0\x17\x8c\xa1\xa1\x16\xa7\xa0\xc0\x18\x0e\x10\xd4g\xd9\x04\xbf\xe3\xe1.\x00JA\xc0\xbf\xfb\xe8N\x93\xd9z\xce?\xe0p\x1e\xe7U9`\x00\x00\x00K\x03\x00\x02\x00\x00\x00\x01\x00\x00\x01\x01\x80\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00?pbM\xe0\x00\x00\x00?pbM\xe0\x00\x00\x00A\xfc\x80\x00B?4\xc2?!G'\x00\x00\x00\x00\x01\x00\x00W\xf4([\x00\x01\x01\x00\x00\x00%\x02\x01\x01?\xe3\xbc$\x80\x00\x00\x00?\x98\x8f\x1c\x80\x00\x00\x00\x00\x00\x00\x00\x18=5\xc5\x10A\xf7\x00\x00\xfd\x00\x00\x01\xbd\x06\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n’

Any help would be much appreciated.

Hi,

just add .decode()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))
time.sleep(0.5)

s.send(( "textmsg(get_inverse_kin(get_forward_kin()), \"endinversekin\")" + "\n").encode())
time.sleep(0.5)
                                   
data = s.recv(1024).decode()
                #.   ^ this one

I don’t believe benjamin.schmautz response will work. Function decode() is used for standard encodings such as base64, ascii, gbk, hz, iso2022_kr, utf_32, utf_16.

This response is encoded using Universal Robot’s custom encoding defined in their primary / secondary client interface specification.

I’m writing a client library to decode these responses which can be found here. The current implementation can be used to receive kinematics data.