UR机器人上位机通信-python版(一)

以UR5机器人为例,通过30003,30004端口实现不同的控制需求。本篇文章先针对30003端口。

1、通过socket与UR控制器建立通信连接

import socket
import struct
import math
import numpy as np
HOST = "192.168.2.23"    # The remote host
PORT = 30003        # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

2、解析30003端口的数据

30003端口为Realtime端口,UR5达到125hz,UR5e为500hz。端口数据的定义规则可参考UR官方Excel文档,截图如下。
在这里插入图片描述
UR5,版本为5.2,字节数共有1108个,首先,将字节所表示的名称和字节类型放入字典中:

dic= {'MessageSize': 'i', 'Time': 'd', 'q target': '6d', 'qd target': '6d', 'qdd target': '6d','I target': '6d',
      'M target': '6d', 'q actual': '6d', 'qd actual': '6d', 'I actual': '6d', 'I control': '6d',
      'Tool vector actual': '6d', 'TCP speed actual': '6d', 'TCP force': '6d', 'Tool vector target': '6d',
      'TCP speed target': '6d', 'Digital input bits': 'd', 'Motor temperatures': '6d', 'Controller Timer': 'd',
      'Test value': 'd', 'Robot Mode': 'd', 'Joint Modes': '6d', 'Safety Mode': 'd', 'empty1': '6d', 'Tool Accelerometer values': '3d',
      'empty2': '6d', 'Speed scaling': 'd', 'Linear momentum norm': 'd', 'SoftwareOnly': 'd', 'softwareOnly2': 'd', 'V main': 'd',
      'V robot': 'd', 'I robot': 'd', 'V actual': '6d', 'Digital outputs': 'd', 'Program state': 'd', 'Elbow position': '3d', 'Elbow velocity': '3d'}

按照字典中的格式解析,解析之后将解析的数据再放入字典中,代码如下:

data = s.recv(1108)
names=[]
ii=range(len(dic))
for key,i in zip(dic,ii):
    fmtsize=struct.calcsize(dic[key])
    data1,data=data[0:fmtsize],data[fmtsize:]
    fmt="!"+dic[key]
    names.append(struct.unpack(fmt, data1))
    dic[key]=dic[key],struct.unpack(fmt, data1)
print(names)
print(dic)

查看解析效果:查看6个关节“q actual”(关节角度值,弧度表示):
弧度转角度后,print。

a=dic["q actual"]
a2=np.array(a[1])
print(a2*180/math.pi)

结果如下:

[ -91.71335427  -98.9555408  -126.22260227  -46.29498985   91.3924979   -1.77616916]

本实验通过URsim模拟UR5,测试了可行性。URsim与上位机通信链接可参考如下:
https://download.csdn.net/download/seing128/11143127

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章