国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

智能機器人工作站仿真實時系統(tǒng)構(gòu)建方法

2020-12-14 09:12張國棟洪榮晶方成剛
計算機應(yīng)用與軟件 2020年12期
關(guān)鍵詞:變位位姿離線

張國棟 洪榮晶,2 方成剛,2

1(南京工業(yè)大學機械與動力工程學院 江蘇 南京 211816)2(南京工大數(shù)控科技有限公司 江蘇 南京 211800)

0 引 言

機器人虛擬仿真方便了人們對整個機器人工作站的布局規(guī)劃以及整體預(yù)覽[1]。在實際工業(yè)應(yīng)用中,常用的離線編程軟件robotstudio、DELMIA、SprutCAM都需要通過存儲設(shè)備將離線程序?qū)氲綑C器人中,這一操作不能及時驗證機器人軌跡的正確性。在機器人離線編程的過程中,采用虛擬仿真與實際設(shè)備進行聯(lián)動,可以更方便地監(jiān)控周遭設(shè)備的運行狀態(tài)。很多仿真軟件例如roboguide雖然實現(xiàn)了與機器人的信號交互,但與周遭設(shè)備之間的聯(lián)動運動卻不是很好,甚至根本無法做到。

針對以上實際研究過程中的不足與存在的問題,本文使用Python語言基于RoboDK軟件平臺開發(fā)了與周遭設(shè)備之間的信號交互功能,以及與機器人之間實時數(shù)據(jù)交互功能。這兩大功能在實際過程中有如下用途:(1)通過TCP/IP協(xié)議實現(xiàn)與機器人通信,可以將運動指令發(fā)送給機器人,方便檢查機器人軌跡的正確性,方便及時調(diào)整,并可以實時監(jiān)控機器人運行狀態(tài)。(2)通過Python-Snap7模塊實現(xiàn)與周遭設(shè)備進行通信,實現(xiàn)與周遭設(shè)備的聯(lián)動,便于在項目實行時候查看整個工作站的運行情況。

1 機器人伴隨仿真系統(tǒng)搭建

機器人伴隨仿真系統(tǒng)具體流程框架如圖1所示,主要是Python接口函數(shù)與機器人端實現(xiàn)數(shù)據(jù)交互,然后通過解包等相關(guān)流程,結(jié)合RoboDK中Robolink、Robodk相關(guān)模塊,實現(xiàn)伴隨仿真。

圖1 仿真框架結(jié)構(gòu)圖

1.1 創(chuàng)建機器人機構(gòu)

機器人的正向運動學是旋轉(zhuǎn)運動中從機器人關(guān)節(jié)變量空間到笛卡爾坐標系空間的運動變換。對于給定的一組關(guān)節(jié)變量,求取末端執(zhí)行器的位置和方向是正向運動學的主要問題[2]。確定UR機器人的正向運動學,主要是為了在實時傳輸機器人的關(guān)節(jié)值之后可以準確獲得相關(guān)機器人的一個實時姿態(tài),從而在RoboDK的圖形界面中實時顯示機器人的姿態(tài)。

在RoboDK將機器人三維模型根據(jù)運動機構(gòu)數(shù)分為BASE、J1、J2、J3、J4、J5、J6七個部分,保證機器人的基坐標系的位置處于工作站的原點。通過“實用程序”中“創(chuàng)建機構(gòu)或者機器人”選項創(chuàng)建機器人,對于標準6軸機器人,通過其關(guān)節(jié)值和軸運動范圍定義機器人。其中UR機器人的關(guān)節(jié)長度如圖2所示。創(chuàng)建完成之后,機器人的D-H參數(shù)如表1所示。

圖2 UR機器人連桿長度

表1 UR機器人的D-H參數(shù)表

根據(jù)D-H參數(shù)方法,得到機器人的相鄰關(guān)節(jié)n到n-1的位姿變換為:

n-1A(θn)=

Rot(xn-1,θn)Trans(0,0,dn)Trans(an,0,0)Rot(xn,αn)

(1)

式中:an和dn為平移距離;θn和αn為旋轉(zhuǎn)角度。

對于六軸機械手,機器人法蘭末端到機器人的基坐標系的變換矩陣為:

Tn=0A11A22A33A44A55A6

式中:0A11A22A3確定末端法蘭的位置;3A44A55A6確定末端法蘭的姿態(tài)。

1.2 通信連接獲取機器人位姿信息

1.2.1Socket通信獲取機器人信息

Socket是TCP/IP網(wǎng)絡(luò)通信中最為常用的一個API(應(yīng)用程序接口),任何網(wǎng)絡(luò)通信都是通過Socket來完成的。本文所使用的UR機器人在TCP/IP協(xié)議的基礎(chǔ)上,提供了豐富的端口用于與外部設(shè)備進行交互[3]。其中UR機器人30003為實時反饋端口,與客戶端信息交流的頻率為125 Hz,通過此端口每次收到的數(shù)據(jù)為1 044個字節(jié),以標準網(wǎng)絡(luò)格式排列。主要反饋內(nèi)容包括機器人的關(guān)節(jié)目標、速度、加速度、電流、扭矩等值。在Python中建立通信客戶端,對機器人控制器中的數(shù)據(jù)進行實時讀取,使用到的Python中提供的Socket模塊對象函數(shù)主要如表2所示。

表2 Socket對象函數(shù)

客戶端與服務(wù)器端(機器人端)連接時的時序圖如圖3所示。

圖3 面向連接TCP的時序圖

通過Socket連接之后,客戶端接收由機器人30003端口發(fā)送出來的機器人所有狀態(tài)信息,返回信息以字節(jié)形式返回。其中客戶端接收機器人的主要信息如下:

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′}

1.2.2struct函數(shù)解析數(shù)據(jù)

在TCP/IP協(xié)議進行諸如Int、char之類的數(shù)據(jù)傳輸?shù)臅r候,服務(wù)器端需要某種機制將某些特定的結(jié)構(gòu)體的類型打包成二進制流的字符串后進行網(wǎng)絡(luò)傳輸,而客戶端也應(yīng)該經(jīng)過某種機制進行解包還原原來的結(jié)構(gòu)體數(shù)據(jù)[4]。從機器人控制器端發(fā)送來的1 044個字節(jié),對其進行解包獲得相應(yīng)的數(shù)據(jù),對照機器人30003端口發(fā)送的數(shù)據(jù)表得知前256個字節(jié)的排列順序以及相關(guān)內(nèi)容如表3所示。

表3 實時反饋數(shù)據(jù)包

通過struct.unpack_from()對接收到的機器人的信息進行解包,其流程如圖4所示。

圖4 數(shù)據(jù)解包流程

Struct.unpack_from()函數(shù)中參數(shù)分別表示:格式化字符串格式、緩沖區(qū)、偏移量。函數(shù)定義方法如下:根據(jù)格式化字符串格式從位置偏移處開始從緩沖區(qū)解包。緩沖區(qū)大小(以字節(jié)為單位,減去偏移量)至少為格式所需要的大小。圖4表示從緩存區(qū)第256個字節(jié)開始解包,解包數(shù)據(jù)格式為“!dddddd”,即6個整數(shù),按網(wǎng)絡(luò)字節(jié)順序進行排列,即得到機器人6個實時關(guān)節(jié)值。

1.3 機器人模型運動仿真

通過1.1節(jié)、1.2節(jié)獲得機器人的實時關(guān)節(jié)數(shù)據(jù)。機器人傳輸過來的值為UR所規(guī)定的格式,均為弧度制。需要對其利用相關(guān)的數(shù)學公式轉(zhuǎn)化為度數(shù),然后利用Robolink模塊對應(yīng)函數(shù),實現(xiàn)對模擬環(huán)境中機器人的動作控制。

程序中可設(shè)置刷新時間以及進行多線程編程,可以讓機器人進行數(shù)據(jù)獲取的同時執(zhí)行模擬環(huán)境中機器人移動操作。在RoboDK中,通過其提供的基于Python的API,將工業(yè)機器人虛擬環(huán)境中的三維運動與實際相結(jié)合。用于Python的RoboDK API分為以下兩個模塊:Robolink模塊,Robodk模塊。Robolink模塊主要功能為:檢索RoboDK工作站樹中的任何對象,由Item對象表示;根據(jù)Robolink.Item類對該項執(zhí)行不同的操作。本次運用到的Robolink.ltem類函數(shù)主要是setJoints(),其主要說明為:設(shè)置機器人或目標的當前關(guān)節(jié)。如果設(shè)置了機器人關(guān)節(jié),則將在屏幕上更新機器人位置。

對從上述Socket通信和解包所得到的真實機器人的關(guān)節(jié)值進行相關(guān)數(shù)學轉(zhuǎn)換,轉(zhuǎn)換程序如下:

def on_packet(packet):

global ROBOT_JOINTS

#從數(shù)據(jù)包中檢索所需信息

rob_joints_RAD=packet_value(packet,UR_GET_JOINT_POSITIONS)

#print(rob_joints_RAD)

ROBOT_JOINTS=[ji*180.0/pi for ji in rob_joints_RAD]

轉(zhuǎn)換完成之后得到的機器人的關(guān)節(jié)值為度數(shù),將變量放入到setJoints函數(shù)中即可。在此之前,需要獲取已經(jīng)配置好的機器人名稱,其中更新位姿的主要流程如圖5所示。

圖5 更新位姿流程

上述過程完成之后,在RoboDK客戶端實時獲取實際機器人的末端位姿,在UR5機器人控制器中固定IP,啟用機器人以太網(wǎng)通信。通過UR機器人控制面板polyscope面板控制機器人運動,即可在RoboDK中實時顯示機器人位姿,如圖6所示。其中,左端為離線編程的環(huán)境中機器人位姿,右端為機器人polyscope控制面板。可以看出,實際機器人的關(guān)節(jié)值實時傳遞給虛擬環(huán)境中的機器人,到達位姿一致,且可以實時更新,保證機器人控制面板和虛擬機器人面板的關(guān)節(jié)值均保持相同。

圖6 實驗結(jié)果圖

2 機構(gòu)仿真系統(tǒng)搭建

在工業(yè)機器人的離線編程的實際應(yīng)用中,機器人常會與周遭設(shè)備進行互動,例如焊接時,焊接機器人往往需要與變位機設(shè)備進行互動,如果在仿真場景中實時反饋變位機的位姿,對機器人的離線編程具有很大的幫助。在自動化系統(tǒng)之中,很多設(shè)備都是由PLC監(jiān)控其運行,通過PLC可以知道當前設(shè)備的一個運行狀態(tài)、位置??梢栽谔摂M場景中得知PLC相關(guān)狀態(tài)的信號,然后將這些信號通過RoboDK中Robolink、Robodk兩大模塊,虛擬出實際場景中運動機構(gòu)的動作。機構(gòu)半實物仿真相關(guān)過程如圖7所示。

圖7 機構(gòu)半實物仿真過程

2.1 Python讀取PLC數(shù)據(jù)

Python與西門子PLC進行通信,主要是靠snap7套件。snap7是一個開源的32/64位多平臺以太網(wǎng)通信套件[5],主要用于與西門子S7系列1200、1500的PLC進行本地連接。Python-snap7是snap7庫的Python包裝器。通過RoboDK中嵌套的Python API接口,安裝好Python-snap7模塊、snap7模塊。完成環(huán)境搭建工作之后,方可與相關(guān)的PLC之間進行通信。

結(jié)合Python-snap7的模塊函數(shù)的相關(guān)分析以及相關(guān)文檔,Python-snap7庫中的函數(shù)主要類方法是read_area和write_area[6],函數(shù)中主要的函數(shù)參數(shù)為需要提供PLC的區(qū)域地址(area、dbnumber)、起始偏移地址(start)、讀和寫的數(shù)據(jù)長度(size/data)。PLC能提供如下信息:PLC的存儲區(qū)通過tag的形式與存儲區(qū)間關(guān)聯(lián),分為輸入(I)、輸出(O)、位存儲區(qū)(M)、數(shù)據(jù)塊(DB)。程序在訪問對應(yīng)的(I/O)tag時,是通過訪問CPU中的過程影響存儲區(qū)對應(yīng)的地址進行操作的。函數(shù)參數(shù)中area、size的取值與數(shù)據(jù)區(qū)域、數(shù)據(jù)類型的對應(yīng)關(guān)系如表4所示。

表4 函數(shù)參數(shù)對應(yīng)關(guān)系表

從PLC的用戶手冊可知,對于M3.4,對應(yīng)的就是MK(0x83),對應(yīng)的起始地址是3,對應(yīng)的bit位為4,即數(shù)據(jù)類型為bit。在讀取該位即調(diào)用函數(shù)的時候,其變量需要設(shè)置為area=snap7.snap7types.areas.MK,dbnumber=0,start=3.3,size=1,即可讀取關(guān)于M3.4的狀態(tài)。為了更好地對PLC狀態(tài)進行讀寫,現(xiàn)通過Python語言實現(xiàn)了PLC程序監(jiān)控測試面板,并且通過RoboDK中嵌入的API接口將面板嵌入其中,如圖8所示,通過該交互界面可以實現(xiàn)以下功能:

圖8 PLC程序監(jiān)控面板

(1)PLC狀態(tài)讀取。通過GUI界面中輸入PLC的IP,確定其機架號、插槽號;并且設(shè)置相關(guān)的讀取數(shù)據(jù)區(qū)域,其中讀寫數(shù)據(jù)的參數(shù)主要由表4到表6決定,設(shè)置好相關(guān)參數(shù)之后,點擊“查詢數(shù)據(jù)”按鈕,即可在最下方文本顯示框中看到相關(guān)數(shù)據(jù)。

(2)PLC 數(shù)據(jù)寫入。先設(shè)置好要寫入的數(shù)據(jù)區(qū)域(基本步驟參見第一步),然后設(shè)置要寫入的數(shù)據(jù),如要寫入MB0中的M0.3、M0.4為1,設(shè)置好讀寫區(qū)域之后,將準備發(fā)送的數(shù)據(jù)寫為“2#0001 1000”或“24”即可。

2.2 設(shè)備仿真

將上述功能面板進行精簡化之后,所得PLC信號監(jiān)控面板如圖9所示。為了方便對機構(gòu)的控制,通過博途軟件進行PLC程序的編寫,將梯形圖程序下載到PLC中之后,通過PLC信號設(shè)置精簡面板,設(shè)置相對應(yīng)的PLC輸入信號以及監(jiān)控相關(guān)輸出信號,驅(qū)動相應(yīng)機構(gòu)運動,并且設(shè)置相關(guān)的仿真機構(gòu)的運動。本次仿真機構(gòu)為變位機,其驅(qū)動程序如圖10所示。

圖9 PLC信號設(shè)置精簡面板

圖10 變位機驅(qū)動程序

變位機運動由三個電磁閥控制,其中:閥1、閥2分別控制變位機正轉(zhuǎn)、反轉(zhuǎn);閥3控制壓緊氣缸的伸縮,并且有一光電傳感器開關(guān)為變位機運動到位的標記信號。M2.0、M2.1控制變位機的正反轉(zhuǎn),如表5所示。對PLC進行值寫入時,直接對MB2進行操作即可。

表5 變位機狀態(tài)與MB2取值對應(yīng)表

通過變位機的三維創(chuàng)建其機構(gòu),如圖11所示。設(shè)置其變位機機構(gòu)回轉(zhuǎn)速度和回轉(zhuǎn)加速度與真實機構(gòu)一致,將仿真機構(gòu)的驅(qū)動信號設(shè)置為PLC的等待信號。程序結(jié)構(gòu)如圖12所示。

圖11 創(chuàng)建變位機機構(gòu)

圖12 變位機運動程序

通過驅(qū)動該程序,設(shè)置MB2信號為1,真實變位機正轉(zhuǎn),同時變位機仿真程序也開始運行。設(shè)置MB2信號為0,真實變位機回零位,同時仿真程序驅(qū)動虛擬變位機回零位[7]。

3 結(jié) 語

本文通過RoboDK中Python的API接口,實現(xiàn)機器人關(guān)節(jié)目標值的讀取,并且利用了RoboDK API接口中Robolink模塊,完成了從實際機器人控制虛擬機器人的伴隨仿真。拓展了該軟件的新功能,并且可在其他支持TCP/IP通信的機器人上進行相關(guān)測試。該功能可在離線環(huán)境中實時觀測機器人的位置,便于機器人位置的監(jiān)控,且可以方便機器人創(chuàng)建相對工件坐標系。對于離線軌跡的創(chuàng)建也較為方便,在離線仿真中意義重大。同時也實現(xiàn)與PLC控制系統(tǒng)之間的信號交互,可實現(xiàn)與實際設(shè)備之間的伴隨仿真。目前該系統(tǒng)功能測試階段已過,處于程序優(yōu)化階段,但基本功能已經(jīng)實現(xiàn)。今后將繼續(xù)優(yōu)化該系統(tǒng)的兩大功能,進一步完善RoboDK相關(guān)拓展功能[8-9]。

猜你喜歡
變位位姿離線
基于卷積神經(jīng)網(wǎng)絡(luò)的離線筆跡鑒別系統(tǒng)
角變位齒輪的測繪與計算方法研究
異步電機離線參數(shù)辨識方法
新版Windows 10補丁離線安裝更簡單
基于位置依賴的密集融合的6D位姿估計方法
曲柄搖桿機構(gòu)的動力學仿真
基于單目視覺的工件位姿六自由度測量方法研究
特大橋單元式多向變位伸縮裝置更換施工及質(zhì)量控制
西班牙語動詞變位學習法之探討
奶牛皺胃變位的病因與防治