• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于RoboDK Python編程的工業(yè)機(jī)器人工作站工件生成及搬運(yùn)仿真

      2021-04-12 10:56:00朱小利王夢(mèng)茹
      關(guān)鍵詞:碼盤偏移量原點(diǎn)

      朱小利,王夢(mèng)茹

      (安徽郵電職業(yè)技術(shù)學(xué)院,安徽 合肥 230000)

      0 引 言

      隨著“工業(yè)4.0”概念在德國的提出,以“智能工廠、智能制造”為主導(dǎo)的第四次工業(yè)革命已經(jīng)悄然來臨。工業(yè)機(jī)器人產(chǎn)業(yè)在其中發(fā)揮了不可替代的作用。隨著工業(yè)機(jī)器人技術(shù)以及智能水平的提高,工業(yè)機(jī)器人已在眾多領(lǐng)域得到了廣泛的應(yīng)用。未來幾年,隨著行業(yè)的需要和勞動(dòng)力成本的不斷提高,中國機(jī)器人市場(chǎng)增長(zhǎng)潛力巨大[1]。工業(yè)機(jī)器人專業(yè)的人才需求也會(huì)愈來愈強(qiáng)烈?;诖似鯔C(jī),我院順應(yīng)時(shí)代發(fā)展潮流,開設(shè)了工業(yè)機(jī)器人專業(yè)。新事物的產(chǎn)生會(huì)帶來一系列的變革,同時(shí)也會(huì)面臨發(fā)展初期的困境。如在實(shí)訓(xùn)室建設(shè)方面,由于工業(yè)機(jī)器人實(shí)訓(xùn)系統(tǒng)設(shè)備普遍較為昂貴,且設(shè)備的使用維護(hù)成本也較高,在資金有限的情況下,實(shí)訓(xùn)設(shè)備數(shù)量難以滿足實(shí)訓(xùn)要求[2]。為解決此問題,各院校采用機(jī)器人虛擬仿真軟件配合真實(shí)的工業(yè)機(jī)器人實(shí)訓(xùn)設(shè)備進(jìn)行實(shí)訓(xùn)教學(xué)。采用虛擬仿真軟件可以形象地對(duì)工業(yè)機(jī)器人各種實(shí)際的工作案例進(jìn)行仿真,能使學(xué)生即使沒條件去工業(yè)現(xiàn)場(chǎng)也能了解工業(yè)機(jī)器人的實(shí)際工作過程,并且安全可靠,不會(huì)出現(xiàn)實(shí)際的實(shí)訓(xùn)設(shè)備在使用過程中出現(xiàn)的碰撞、損壞等情況。虛擬仿真實(shí)驗(yàn)室的建設(shè)成本較低,只需在相應(yīng)機(jī)房安裝仿真軟件即可,且維護(hù)成本較低[3]。為工業(yè)機(jī)器人專業(yè)學(xué)生從學(xué)校走向企業(yè)提供了良好過渡,為培養(yǎng)應(yīng)用型人才提供支撐。

      為此,各國都在開發(fā)研制工業(yè)機(jī)器人虛擬仿真軟件,目前市面上比較著名的且應(yīng)用較為廣泛的有ABB公司的RobotStudio、KUKA公司的KUKASim、Fanuc公司的RoboGuide以及一些第三方公司的仿真軟件,如RoboDK、RobotMaster、ROBCAD等[4]。與其他軟件相比RoboDK有許多優(yōu)勢(shì),各個(gè)公司生產(chǎn)的仿真軟件只能對(duì)其本品牌的工業(yè)機(jī)器人進(jìn)行仿真,如RobotStudio只能仿真ABB品牌的機(jī)器人,KUKASim只能仿真KUKA品牌的機(jī)器人。而RoboDK可以仿真市面上大多數(shù)品牌的機(jī)器人,如ABB、KUKA、安川、匯博、埃夫特等,還可在軟件中創(chuàng)建機(jī)器人,且仿真功能強(qiáng)大,支持基于Python的編程仿真,并支持和機(jī)器人的通訊,可將在軟件中編制好的程序下載到機(jī)器人本體,以便于更好、更方便調(diào)試實(shí)現(xiàn)工業(yè)機(jī)器人工作站的功能[5]。

      本文將在RoboDK中創(chuàng)建工作站,完成工作站、機(jī)器人、工具以及工件等的加載與布局,并采用Python編程來實(shí)現(xiàn)工件的生成與布局、工件的搬運(yùn)等功能任務(wù)。

      1 系統(tǒng)任務(wù)要求

      要實(shí)現(xiàn)的任務(wù)如下。首先,打開RoboDK新建工作站,并完成工作站、機(jī)器人、吸盤工具、工件的加載及位置布局,如圖1所示;之后編制Python程序,將圖1碼盤1中的1個(gè)工件復(fù)制生成9個(gè)工件,并放置到碼盤1對(duì)應(yīng)的卡槽中;最后,編制Python程序,實(shí)現(xiàn)9個(gè)工件的搬運(yùn)任務(wù),將碼盤1中的9個(gè)工件搬運(yùn)到碼盤2對(duì)應(yīng)的卡槽位置中,且搬運(yùn)程序可反復(fù)無誤地運(yùn)行,2個(gè)碼盤及碼盤中卡槽位置如圖2所示。

      圖1 工作站系統(tǒng) 圖2 碼盤及卡槽位置

      2 模型的導(dǎo)入及布局

      表1 模型位置坐標(biāo)值 mm

      打開RoboDK新建工作站,將事先用其他三維軟件創(chuàng)建好的保存在本地的工作站模型、吸盤工具模型、ABB-120系列機(jī)器人模型加載進(jìn)來,并根據(jù)表1所示坐標(biāo)值對(duì)它們進(jìn)行位置的布局。模型導(dǎo)入及布局后效果如圖3所示。

      圖3 系統(tǒng)布局 圖4 工件坐標(biāo)系及工件布局

      3 創(chuàng)建工件坐標(biāo)系

      表2 工件坐標(biāo)系 mm

      為實(shí)現(xiàn)將碼盤1中的9個(gè)工件搬運(yùn)到碼盤2中對(duì)應(yīng)的9個(gè)卡槽位置中,可分別以碼盤1及碼盤2的左上邊角為坐標(biāo)系原點(diǎn)創(chuàng)建2個(gè)工件坐標(biāo)系Frame1和Frame2。這樣,碼盤1中的1~9個(gè)卡槽的中心點(diǎn)位置相對(duì)于坐標(biāo)系Frame1的原點(diǎn)位置偏移量與碼盤2中的1~9個(gè)卡槽的中心點(diǎn)位置相對(duì)于坐標(biāo)系Frame2的原點(diǎn)位置偏移量是相同的,利用此特點(diǎn),可使9個(gè)工件的搬運(yùn)程序指令簡(jiǎn)化,具體實(shí)現(xiàn)在后面詳細(xì)介紹。

      由第三方軟件測(cè)得,碼盤1和碼盤2左上邊角相對(duì)于機(jī)器人基座標(biāo)系原點(diǎn)偏移量見表2。根據(jù)此偏移量創(chuàng)建坐標(biāo)系Frame1和Frame2,之后導(dǎo)入紅色三角形工件,并根據(jù)表2中的位置值進(jìn)行布局,如圖4所示。

      4 工件的生成

      在RoboDK中創(chuàng)建Python程序,命名為“生成工件”,調(diào)用相關(guān)函數(shù),編寫相關(guān)指令,實(shí)現(xiàn)將1個(gè)紅色工件復(fù)制成9個(gè),并放置到碼盤1相應(yīng)的卡槽中。用第三方軟件測(cè)得新生成的8個(gè)工件在碼盤1中相對(duì)于參考坐標(biāo)系Frame1的原點(diǎn)位置偏移量(表3)。為實(shí)現(xiàn)此功能,將調(diào)用工件的復(fù)制函數(shù)iPart.Copy(),此函數(shù)的功能是將工件iPart進(jìn)行復(fù)制;并將調(diào)用工件的粘貼函數(shù)fFrame.Paste(),此函數(shù)的功能是將復(fù)制的工件粘貼到fFrame坐標(biāo)系下;除此之外,還需調(diào)用函數(shù)iNewPart.setName( ),對(duì)新生成的工件名稱進(jìn)行設(shè)置;最后調(diào)用iNewPart.setPose()函數(shù)。根據(jù)表3中的位置偏移量對(duì)新生成的工件進(jìn)行布局。

      表3 新工件位置 mm

      具體程序指令如下所示:

      首先導(dǎo)入API模塊RoboDK和Robolink:from robolink import * # RoboDK API

      from robodk import * # Robot toolbox

      RDK = Robolink()

      然后對(duì)工作站中的對(duì)象進(jìn)行定義:

      1)iPart=RDK.Item('工件1')#定義工件。

      2)fFrame1=RDK.Item('Frame1')#定義編碼盤1的工件坐標(biāo)系。

      之后調(diào)用相關(guān)函數(shù)進(jìn)行工件的生成及布局,具體程序指令如下:

      iPart.Copy()#復(fù)制工件

      iNewPart1=fFrame1.Paste()#粘貼工件

      iNewPart2=fFrame1.Paste()#粘貼工件

      iNewPart3=fFrame1.Paste()#粘貼工件

      iNewPart4=fFrame1.Paste()#粘貼工件

      iNewPart5=fFrame1.Paste()#粘貼工件

      iNewPart6=fFrame1.Paste()#粘貼工件

      iNewPart7=fFrame1.Paste()#粘貼工件

      iNewPart8=fFrame1.Paste()#粘貼工件

      iNewPart1.setName('工件2')#設(shè)置工件的名字

      iNewPart2.setName('工件3')#設(shè)置新工件的名字

      iNewPart3.setName('工件4')#設(shè)置新工件的名字

      iNewPart4.setName('工件5')#設(shè)置新工件的名字

      iNewPart5.setName('工件6')#設(shè)置新工件的名字

      iNewPart6.setName('工件7')#設(shè)置新工件的名字

      iNewPart7.setName('工件8')#設(shè)置新工件的名字

      iNewPart8.setName('工件9')#設(shè)置新工件的名字

      iNewPart1.setPose(transl(58.5,23,3))#設(shè)置新工件的位置

      iNewPart2.setPose(transl(100,23,3))#設(shè)置新工件的位置

      iNewPart3.setPose(transl(25,53,3)*rotz(-pi))#設(shè)置新工件的位置

      iNewPart4.setPose(transl(66,53,3)*rotz(-pi))#設(shè)置新工件的位置

      iNewPart5.setPose(transl(108,53,3)*rotz(-pi))#設(shè)置新工件的位置

      iNewPart6.setPose(transl(17,83,3))#設(shè)置新工件的位置

      iNewPart7.setPose(transl(58.5,83,3))#設(shè)置新工件的位置

      iNewPart8.setPose(transl(100,83,3))#設(shè)置新工件的位置

      運(yùn)行程序,進(jìn)行新工件的生成及布局,如圖5所示。

      圖5 新工件的生成及布局 圖6 工件的初始化

      5 工件的搬運(yùn)

      5.1 工件位置的初始化

      本系統(tǒng)所要實(shí)現(xiàn)的工件搬運(yùn)功能是將碼盤1中的9個(gè)工件搬運(yùn)到碼盤2對(duì)應(yīng)的卡槽中,并且每次運(yùn)行程序之初,保證9個(gè)工件在碼盤1中的9個(gè)卡槽中,即需進(jìn)行9個(gè)工件的位置初始化設(shè)置。為實(shí)現(xiàn)此功能,工件生成并如圖5所示布局后,可在Python程序中自定義初始化函數(shù),并調(diào)用;也可先創(chuàng)建Program程序,命名為“初始化物體位置”,并添加工件的初始化指令,對(duì)工件1~9的位置進(jìn)行初始化設(shè)置,本項(xiàng)目采用后者,具體操作如圖6所示。之后在Python搬運(yùn)程序中編寫指令語句:RDK.RunProgram(‘初始化物塊位置’),調(diào)用此Program程序,完成9個(gè)工件的位置初始化。

      5.2 工件的搬運(yùn)程序編制

      創(chuàng)建Python程序,命名為“搬運(yùn)”,調(diào)用相關(guān)函數(shù),編寫語句指令,完成碼盤1中的9個(gè)工件搬運(yùn)到碼盤2對(duì)應(yīng)的卡槽中的操作。為使搬運(yùn)過程簡(jiǎn)化,已在碼盤1和碼盤2的邊角處創(chuàng)建工件坐標(biāo)系Frame1和Frame2。因碼盤1中9個(gè)卡槽中心點(diǎn)相對(duì)于Frame1坐標(biāo)系原點(diǎn)的偏移量與碼盤2中相對(duì)應(yīng)的9個(gè)卡槽中心點(diǎn)相對(duì)于Frame2坐標(biāo)系原點(diǎn)的偏移量相同,即某一工件的抓取點(diǎn)相對(duì)于Frame1坐標(biāo)系原點(diǎn)的偏移量與其放置點(diǎn)相對(duì)于Frame2坐標(biāo)系原點(diǎn)的偏移量相同。因此,在搬運(yùn)程序編寫過程中,在參考坐標(biāo)系Frame1下計(jì)算出某一工件的抓取點(diǎn)之后,只需將參考坐標(biāo)系改成Frame2即可計(jì)算出其放置點(diǎn)。工件的抓取點(diǎn)可由工件在碼盤1中的放置位置點(diǎn)(即在Frame1坐標(biāo)系下的位置偏移量)在x軸方向旋轉(zhuǎn)180°得到。因此,可用指令iPart = RDK.Item('工件'+str(i))計(jì)算出第i個(gè)工件的位置,再編寫指令target_i = iPart.Pose()*rotx(pi)計(jì)算出第i個(gè)工件的抓取點(diǎn)或放置點(diǎn)。當(dāng)參考坐標(biāo)系選擇Frame1時(shí),target_i即為第i個(gè)工件的搬運(yùn)抓取點(diǎn);當(dāng)參考坐標(biāo)系選擇Frame2時(shí),target_i即為第i個(gè)工件的搬運(yùn)放置點(diǎn)。要實(shí)現(xiàn)9個(gè)工件的搬運(yùn),因此i取值在1~9之間。工件的搬運(yùn)流程:機(jī)器人坐標(biāo)原點(diǎn)→第i個(gè)工件預(yù)抓取點(diǎn)→第i個(gè)工件抓取點(diǎn)→抓取工件→返回第i個(gè)工件預(yù)抓取點(diǎn)→第i個(gè)工件預(yù)放置點(diǎn)→第i個(gè)工件放置點(diǎn)→放置工件→返回第i個(gè)工件預(yù)放置點(diǎn)→第i+1個(gè)工件預(yù)抓取點(diǎn)┄┄。為簡(jiǎn)化搬運(yùn)指令,可采用for循環(huán)語句實(shí)現(xiàn)9個(gè)工件的搬運(yùn)。

      具體指令如下所示:

      導(dǎo)入API模塊RoboDK和Robolink:

      from robolink import * # RoboDK API

      from robodk import * # Robot toolbox

      RDK = Robolink()

      定義工作站中的對(duì)象:

      iWorkstation = RDK.Item('workstation7') #定義工作臺(tái)

      iRobot = RDK.Item('ABB IRB 120-3/0.6') #定義機(jī)器人

      iTool = RDK.Item('Gripper') #定義工具

      iFrame1 = RDK.Item('Frame 1') #定義編碼盤1的工件坐標(biāo)系

      iFrame2 = RDK.Item('Frame 2') #定義編碼盤2的工件坐標(biāo)系

      定義機(jī)器人初始位置目標(biāo)點(diǎn):

      jHome = [0,0,0,0,90,0] #定義機(jī)器人初始關(guān)節(jié)值

      調(diào)用Program指令“初始化物塊位置”完成9個(gè)工件的初始化設(shè)置:

      RDK.RunProgram('初始化物塊位置') #定義工件的初始化程序

      設(shè)置機(jī)器人的工具及運(yùn)行速度:

      iRobot.setPoseTool(iTool) #設(shè)置機(jī)器人工具

      iRobot.setSpeed(20,20) #設(shè)置機(jī)器人速度

      編寫運(yùn)動(dòng)指令,完成9個(gè)工件的搬運(yùn):

      iRobot.MoveJ(jHome)#機(jī)器人以關(guān)節(jié)運(yùn)動(dòng)方式回原點(diǎn)位置

      for i in range(1,10):#采用循環(huán)語句,實(shí)現(xiàn)9個(gè)工件的搬運(yùn)

      iPart = RDK.Item('工件'+str(i)) #定義待搬運(yùn)塊“工件 i”

      target_i = iPart.Pose()*rotx(pi) #計(jì)算工件的抓取點(diǎn)或放置點(diǎn)

      iRobot.setPoseFrame(iFrame1) #設(shè)置抓取工件的參考坐標(biāo)系

      iRobot.MoveJ(target_i*transl(0,0,-50)) #機(jī)器人以關(guān)節(jié)運(yùn)動(dòng)方式移動(dòng)到工件預(yù)抓取位置,即抓取位置點(diǎn)正上方50 mm的位置,也即在抓取點(diǎn)z軸方向偏移-50 mm

      iRobot.MoveL(target_i) #機(jī)器人以直線運(yùn)動(dòng)方式移動(dòng)到工件抓取位置

      iTool.AttachClosest() #抓取工件

      iRobot.MoveL(target_i*transl(0,0,-50)) #機(jī)器人以直線運(yùn)動(dòng)方式返回工件預(yù)抓取位置

      iRobot.setPoseFrame(iFrame2) #設(shè)置放置工件的參考坐標(biāo)系

      iRobot.MoveL(target_i*transl(0,0,-50)) #機(jī)器人移動(dòng)到工件預(yù)放置位置

      iRobot.MoveL(target_i) #機(jī)器人移動(dòng)到工件放置位置

      iTool.DetachAll(iFrame2) #放置工件于iFrame2坐標(biāo)系下

      iRobot.MoveL(target_i*transl(0,0,-50)) #機(jī)器人返回工件預(yù)放置位置

      圖7 搬運(yùn)程序運(yùn)行結(jié)果

      iRobot.MoveJ(jHome)#機(jī)器人返回原點(diǎn)位置

      用Python編寫指令實(shí)現(xiàn)對(duì)機(jī)器人工作站搬運(yùn)案例進(jìn)行仿真,需要先導(dǎo)入API模塊RoboDK和Robolink模塊;之后對(duì)工作站中的對(duì)象進(jìn)行定義,并調(diào)用Item函數(shù)將工作站中的對(duì)象與在Python中對(duì)其定義的變量關(guān)聯(lián)起來。并需設(shè)定工具坐標(biāo)系及工件坐標(biāo)系,機(jī)器人運(yùn)動(dòng)過程中所走路徑的目標(biāo)點(diǎn)均是在相應(yīng)的坐標(biāo)系下創(chuàng)建確定的。在編寫實(shí)現(xiàn)搬運(yùn)功能的運(yùn)動(dòng)指令之前還需設(shè)置機(jī)器人的運(yùn)動(dòng)速度。執(zhí)行搬運(yùn)指令之后的運(yùn)行結(jié)果如圖7所示。

      6 結(jié) 論

      隨著工業(yè)機(jī)器人在制造業(yè)中的應(yīng)用越來越廣泛,對(duì)工業(yè)機(jī)器人專業(yè)人才的需求也日益增多[6],因此,許多院校都開設(shè)了工業(yè)機(jī)器人專業(yè),來培養(yǎng)適應(yīng)需求的工業(yè)機(jī)器人專業(yè)應(yīng)用型人才,而工業(yè)機(jī)器人仿真軟件在教學(xué)、科研及生產(chǎn)過程中起到了非常大的作用,RoboDK是一款應(yīng)用非常廣泛、功能強(qiáng)大且支持離線編程的仿真軟件[7]。

      本文采用RoboDK中基于API的Python編程實(shí)現(xiàn)對(duì)工件的生成及位置布局以及對(duì)多個(gè)工件的搬運(yùn)任務(wù)的仿真。采用Python編程可實(shí)現(xiàn)用Program編程無法實(shí)現(xiàn)的工件的生成功能,可方便地編寫相關(guān)指令語句實(shí)現(xiàn)目標(biāo)點(diǎn)的計(jì)算,省去在工作站中一個(gè)個(gè)去創(chuàng)建目標(biāo)點(diǎn)的過程。另外,采用Python中的for循環(huán)語句編程,可將多個(gè)工件的搬運(yùn)指令簡(jiǎn)化?;赗oboDK API的Python編程實(shí)現(xiàn)工件的生成與搬運(yùn)仿真可通過編制Python指令語句實(shí)現(xiàn)將1個(gè)工件生成多個(gè)工件并進(jìn)行位置的布局,同時(shí)可方便地完成多個(gè)工件的搬運(yùn)任務(wù),且RoboDK仿真界面立體直觀,使得搬運(yùn)過程的仿真更為直觀,更有利于對(duì)工業(yè)機(jī)器人的研究以及教學(xué)活動(dòng)的開展。

      猜你喜歡
      碼盤偏移量原點(diǎn)
      三角碼盤定位機(jī)構(gòu)相對(duì)于十字碼盤的準(zhǔn)確度分析和補(bǔ)償計(jì)算
      基于格網(wǎng)坐標(biāo)轉(zhuǎn)換法的矢量數(shù)據(jù)脫密方法研究
      Book Pilot 飛行選書師,讓書重新回到原點(diǎn)
      DA42NG飛機(jī)空調(diào)系統(tǒng)組成及日常維護(hù)
      科技視界(2019年11期)2019-06-20 01:22:08
      重返歷史“原點(diǎn)”的旅程
      攪拌針不同偏移量對(duì)6082-T6鋁合金接頭勞性能的影響
      基于最小二乘平差的全極化SAR配準(zhǔn)偏移量估計(jì)方法
      在原點(diǎn)震蕩的擾動(dòng)Schr?dinger-Poisson系統(tǒng)的無窮多個(gè)解
      關(guān)于原點(diǎn)對(duì)稱的不規(guī)則Gabor框架的構(gòu)造
      基于金屬碼盤的光電編碼器改進(jìn)研究
      黎平县| 哈巴河县| 逊克县| 石嘴山市| 翁牛特旗| 灵武市| 万安县| 新昌县| 道真| 台东市| 吉水县| 瓮安县| 南溪县| 九寨沟县| 龙井市| 岱山县| 察哈| 侯马市| 汽车| 江北区| 荥阳市| 全州县| 酒泉市| 新绛县| 抚州市| 广德县| 长沙县| 林周县| 方山县| 泉州市| 京山县| 海门市| 十堰市| 尼木县| 琼海市| 镇康县| 务川| 航空| 六安市| 邢台县| 澄江县|