UR機器人通信--上位機通信(python)


一、通信socket

socket()函數

Python 中,我們用 socket()函數來創建套接字,語法格式如下:

socket.socket([family[, type[, proto]]])

參數

  • family: 套接字家族可以使AF_UNIX或者AF_INET
  • type: 套接字類型可以根據是面向連接的還是非連接分為SOCK_STREAMSOCK_DGRAM
  • protocol: 一般不填默認為0.

 

二、ur接口(30001&30002)

Primary & Secondary 接口由機器人控制進程維護和執行的端口。 開機后,機器人
一直從這兩個端口以 10Hz 頻率對外發送機器人的狀態信息(機器人位置, IO,運行狀
態等), 除此之外 Primary 端口還會發送一些全局變量更新等信息。因此如果需要編寫
上位機在線編程以及運行監視, 例如編寫一個類似示教器界面的上位機程序時可以使
Primary 端口(當然對於加載程序,運行程序等操作需要使用 Dashboard29999
接口)。
Primary & Secondary 接口在接收到上位機發送的腳本指令(腳本指令下載) 字符
串后會立即中斷當前執行程序(如果機器人正在運行), 然后運行接收到的腳本指令
值得提醒的是,一些具有返回值的腳本指令,其返回值並不會通過這兩個端口返回,因
為腳本的執行是在機器人控制進程中,其返回值只傳遞給該進程中的變量。
如果想一次性發送一段程序給機器人,需要將發送的程序按照如下格式發送:

_________________________________________

def functionName():
腳本指令
腳本指令
腳本指令
#對於函數或者 while 等結構語句
#需注意同層次具有相同縮進
腳本指令
……
end

**********************************************************

 

sec functionName():
非運動腳本指令
非運動腳本指令
非運動腳本指令
#對於函數或者 while 等結構語句
#需注意同層次具有相同縮進
非運動腳本指令
……
end

_______________________________________________

實際發送字符串(縮進用空格,換行用\n):
“def functionName():\n 腳本指令\n 腳本指令\n ……\nend\n “
“sec functionName():\n 腳本指令\n 腳本指令\n ……\nend\n “

________________________________________________

三、move 命令

移動命令分為moveJ、movel等,這兩個是比較常見的,只是移動方式不同,J是指移動兩點之間時按最快原則,路線不一定是直線,而L的話,則兩點間移動必須是直線的;命令內部,帶p關鍵字的是坐標移動,輸入的內容為坐標值:

     movej(p[239.7/1000, -54/1000, 336/1000, 2.18, -2.235, 0], a = 0.1, v = 0.1)

由於其xyz單位為米,所以如果輸入示教器相同的數據時,需要除以1000轉換成米。

不帶p時候,表示為軸移動,控制的是各個軸的角度
      movej([d2r(-14),d2r(-64),d2r(-114),d2r(-94),d2r(87),d2r(158)],a=0.5, v=0.5)
 其中d2r()為ur的腳本,把輸入角度轉換為弧度,因為這個接口的參數是弧度。

四、發送指令控制機器人

import socket
target_ip = ("169.254.5.2" , 30001)
print("start")
sk = socket.socket()
sk.connect(target_ip)
send_data1 = 'def svt():\n movej(p[0.4,0.4,0.4,3.14,-1.57,1.57],a=1.4, v=1.05, t=0, r=0)\nend\n'
sk.send(send_data1.encode('utf8'))
print("end")
sk.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM