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

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