吳毅文,劉 博
(寶山鋼鐵股份有限公司,上海 201900)
機(jī)器人的研發(fā)、應(yīng)用是衡量國(guó)家科技創(chuàng)新和高端制造業(yè)水平的重要標(biāo)準(zhǔn),工業(yè)機(jī)器人作為《中國(guó)制造2025》重要內(nèi)容之一,是解決日益嚴(yán)峻的勞動(dòng)力供需矛盾[1],推動(dòng)從“中國(guó)制造”走向“中國(guó)智造”的關(guān)鍵設(shè)備。
當(dāng)前,工業(yè)機(jī)器人主要有示教編程、離線編程和自主編程三類編程技術(shù)[2],因?yàn)樵诰€示教編程具有易于學(xué)習(xí)、操作簡(jiǎn)便等優(yōu)勢(shì),所以目前國(guó)內(nèi)工業(yè)機(jī)器人大多采用在線示教編程[3]。然而示教編程需要人工參與,機(jī)器人的位置精度完全依靠人眼判斷,因此對(duì)操作人員的技術(shù)要求很高。此外,每次編程都需要在生產(chǎn)線停工的狀態(tài)下進(jìn)行,因此其過程不僅繁瑣而且耗費(fèi)時(shí)間和資源;如果機(jī)器人的運(yùn)動(dòng)軌跡是復(fù)雜的三維軌跡,采用示教編程不但費(fèi)時(shí)費(fèi)力而且不能保障精度。隨著人工智能、圖像識(shí)別等技術(shù)不斷涌現(xiàn),部分研究學(xué)者提出機(jī)器人的自主編程技術(shù)。機(jī)器人自主編程技術(shù)就是能夠依靠傳感器(視覺、超聲、相機(jī)等)獲取周圍環(huán)境的信息,通過內(nèi)部的模型算法可以識(shí)別目標(biāo)位置,并計(jì)算出軌跡路線,同時(shí)將軌跡路線處理為機(jī)器人的動(dòng)作指令。自主編程技術(shù)具有不停機(jī)、無人員干預(yù)、適用范圍廣、工作效率高等諸多優(yōu)點(diǎn)。因此工業(yè)機(jī)器人的自主編程取代在線示教編程將成為未來的發(fā)展趨勢(shì)[4,5]。
本文針對(duì)ABB工業(yè)機(jī)器人,基于C#語(yǔ)言開發(fā)機(jī)器人自主編程的上位機(jī)軟件,同時(shí)搭建了由上位機(jī)、下位機(jī)和ABB機(jī)器人構(gòu)成的機(jī)器人自主編程控制系統(tǒng),并對(duì)該系統(tǒng)進(jìn)行了仿真和試驗(yàn)驗(yàn)證。
本文設(shè)計(jì)的機(jī)器人自主編程控制系統(tǒng)主要分為上位機(jī)軟件、下位機(jī)程序、ABB的IRC5標(biāo)準(zhǔn)柜控制器和IRB6700通用工業(yè)機(jī)器人三部分組成。該系統(tǒng)運(yùn)行時(shí),上位機(jī)從硬件設(shè)備、數(shù)據(jù)庫(kù)獲取數(shù)據(jù);對(duì)獲取到的數(shù)據(jù)進(jìn)行算法處理,得到控制機(jī)器人所用的數(shù)據(jù),并處理成目標(biāo)格式,然后上位機(jī)通過有線局域網(wǎng)絡(luò)連接機(jī)器人;在上位機(jī)獲取機(jī)器人的控制權(quán)限之后,把控制數(shù)據(jù)和指令發(fā)送到下位機(jī)程序中,并運(yùn)行下位機(jī)程序,完成工業(yè)機(jī)器人的自主編程控制。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 自主編程控制系統(tǒng)整體結(jié)構(gòu)
上位機(jī)軟件運(yùn)行于工控機(jī)等終端上,在系統(tǒng)中起主控作用,在VisualStudio2015平臺(tái)中使用C#語(yǔ)言進(jìn)行開發(fā)。軟件可依據(jù)獲取的數(shù)據(jù)進(jìn)行自主編程,并對(duì)機(jī)器人進(jìn)行基礎(chǔ)控制操作;顯示界面簡(jiǎn)單,軟件預(yù)留接口,方便針對(duì)具體工況二次開發(fā)。
下位機(jī)中運(yùn)行機(jī)器人的控制指令中,ABB官方仿真軟件RobotStudio中用RAPID語(yǔ)言開發(fā)。在下位機(jī)程序中封裝了ABB機(jī)器人常用的控制指令,無特殊需求的應(yīng)用場(chǎng)景下無需對(duì)下位機(jī)中指令模塊進(jìn)行修改;使用時(shí)只需把相應(yīng)的程序模塊導(dǎo)入控制器中即可。
為了驗(yàn)證該軟件的功能,使用上位機(jī)處理的數(shù)據(jù)作為系統(tǒng)的數(shù)據(jù)源,以ABBIRC5標(biāo)準(zhǔn)柜控制器作為下位機(jī),運(yùn)行下位機(jī)程序,控制、驅(qū)動(dòng)ABBIRB6700通用工業(yè)機(jī)器人,完成整個(gè)系統(tǒng)的硬件設(shè)備搭建。
C#語(yǔ)言是基于C語(yǔ)言和.NET平臺(tái)開發(fā)的面向?qū)ο蟮木幊陶Z(yǔ)言。使用C#可以提高開發(fā)效率[6],同時(shí)消除編程中可能導(dǎo)致嚴(yán)重結(jié)果的錯(cuò)誤;使C/C++開發(fā)者可以快速進(jìn)行網(wǎng)絡(luò)開發(fā),同時(shí)保持功能強(qiáng)大性和使用靈活性。
VisualStudio提供了高級(jí)開發(fā)工具、調(diào)試功能、數(shù)據(jù)庫(kù)功能和創(chuàng)新功能,幫助在各種平臺(tái)上快速創(chuàng)建當(dāng)前最先進(jìn)的應(yīng)用程序。
該軟件開發(fā)、試驗(yàn)的計(jì)算機(jī)平臺(tái)為64位Windows10,Intel Corei7-8550U CPU@1.80GHz,8GB。
上位機(jī)運(yùn)行在PC或工控機(jī)等Windows設(shè)備上,上位機(jī)通過修改和監(jiān)控下位機(jī)程序變量實(shí)現(xiàn)對(duì)機(jī)器人的編程控制,故上、下位機(jī)的通信非常重要。機(jī)器人自主編程控制軟件在有線局域網(wǎng)中與下位機(jī)連接,并以TCP/IP的方式,借助ABB官方提供的二次開發(fā)工具包PCSDK實(shí)現(xiàn)上、下位機(jī)之間數(shù)據(jù)、指令的通信[7]。通信過程中需要機(jī)器人開通PC Interface選項(xiàng);此時(shí)上位機(jī)作為服務(wù)機(jī),下位機(jī)作為客戶機(jī),上位機(jī)可以同時(shí)控制多臺(tái)下位機(jī),并通過IP地址、機(jī)器編碼、機(jī)器名等字段標(biāo)識(shí)下位機(jī)。
根據(jù)ABB機(jī)器人的下位機(jī)編程原理,通過同步上、下位機(jī)變量實(shí)現(xiàn)對(duì)機(jī)器人控制。即上位機(jī)把獲取的數(shù)據(jù)進(jìn)行處理,并把自動(dòng)生成的動(dòng)作指令保存到上位機(jī)設(shè)定的變量中;上位機(jī)通過軟件模塊將變量處理成特定格式,上位機(jī)在獲取機(jī)器人控制器的控制權(quán)限后,把變量同步到控制器中;下位機(jī)程序會(huì)依據(jù)變量的更新,重新確定目標(biāo)的坐標(biāo)位置和機(jī)器人的動(dòng)作指令運(yùn)行順序,最終實(shí)現(xiàn)對(duì)機(jī)器人的控制。其流程如圖2所示。
圖2 上、下位機(jī)通信原理示意圖
本文所使用的通信數(shù)據(jù)的種類如表1所示,開發(fā)者可根據(jù)具體工況進(jìn)行修改或補(bǔ)充。其中各類通信數(shù)據(jù)的作用如下所示:①坐標(biāo)信息變量:定義機(jī)器人運(yùn)行所需的坐標(biāo)系信息。②過程數(shù)據(jù)變量:用于下位機(jī)根據(jù)上位機(jī)的指示對(duì)程序運(yùn)行順序、流程等進(jìn)行決策。③控制數(shù)據(jù)變量:定義控制機(jī)器人運(yùn)行的目標(biāo)軌跡點(diǎn)、運(yùn)行速度、到達(dá)空間、軸配置、外軸控制等。
表1 通信數(shù)據(jù)
通過分析焊接、裝配、搬運(yùn)、噴涂和打磨等應(yīng)用中機(jī)器人的常用控制需求,本文所設(shè)計(jì)的機(jī)器人自主編程控制軟件可實(shí)現(xiàn)的功能如圖3所示。
圖3 機(jī)器人自主編程控制軟件功能結(jié)構(gòu)圖
2.3.1 數(shù)據(jù)獲取
若要實(shí)現(xiàn)機(jī)器人的自主編程和無人化全自動(dòng)控制,視覺圖像數(shù)據(jù)等的獲取是基礎(chǔ)[8]。本文以保存在數(shù)據(jù)庫(kù)中的圖像數(shù)據(jù)作為數(shù)據(jù)源。考慮到在實(shí)際應(yīng)用中需要接收外部硬件設(shè)備中數(shù)據(jù),該軟件提供了方便的手動(dòng)操作輸入接口和外部數(shù)據(jù)庫(kù)讀入接口,方便開發(fā)者根據(jù)具體的工況進(jìn)行二次開發(fā)。
2.3.2 運(yùn)動(dòng)求解
上位機(jī)從數(shù)據(jù)庫(kù)中加載目標(biāo)的相關(guān)信息之后,利用內(nèi)嵌模型建立空間坐標(biāo)系,確定目標(biāo)的空間位置。由于機(jī)器人自主編程生成的動(dòng)作指令中需要機(jī)器人各個(gè)關(guān)節(jié)角數(shù)據(jù),因此需要建立運(yùn)動(dòng)學(xué)方程對(duì)機(jī)器人的各個(gè)獨(dú)立運(yùn)動(dòng)的連桿進(jìn)行位姿求解,一般運(yùn)動(dòng)學(xué)方程的建立是通過獲取機(jī)器人的VRML模型中的關(guān)鍵數(shù)據(jù),在模型中需要對(duì)每個(gè)關(guān)節(jié)或連桿建立坐標(biāo)系,在機(jī)器人移動(dòng)或者旋轉(zhuǎn)過程中,通過平移矢量確定節(jié)點(diǎn)下一次的空間坐標(biāo)位置,以此建立機(jī)器人的末端姿態(tài)矩陣,通過機(jī)器人的逆向運(yùn)動(dòng)學(xué)方程求解每個(gè)關(guān)節(jié)角的值。在獲取逆解結(jié)果之后,需要進(jìn)行仿真運(yùn)動(dòng),以檢測(cè)機(jī)器人是否會(huì)發(fā)生碰撞。
2.3.3 通信
建立上、下位機(jī)連接需要在Windows平臺(tái)上配置PCSDK工具包,并在代碼中引用相關(guān)的動(dòng)態(tài)庫(kù)組件。聲明Network Scanner類型的變量Scanner,用于實(shí)例化并保存掃描到的機(jī)器人控制器。在主窗口類中編寫針對(duì)機(jī)器人控制器的掃描方法,當(dāng)該方法被調(diào)用時(shí),上位機(jī)將掃描所有可用的下位機(jī)并把相應(yīng)的信息顯示到待選框中。
2.3.4 自主編程
上、下位機(jī)聯(lián)合實(shí)現(xiàn)自主編程控制的流程如下,首先在上、下位機(jī)中分別聲明變量,例如在上位機(jī)中聲明RapidData類型的變量Polishingtool,用于讀取下位機(jī)中的工具坐標(biāo)系變量;聲明ToolData類型的變量Polishingtool,用于保存上位機(jī)根據(jù)獲取到的數(shù)據(jù)計(jì)算出的工具坐標(biāo)系變量,該數(shù)據(jù)最終會(huì)同步到下位機(jī)程序中。同時(shí)在下位機(jī)中定義ToolData類型的變量Polishingtool,用于定義工具坐標(biāo)系[9]。其次建立上、下位機(jī)中變量的對(duì)應(yīng)關(guān)系,最后進(jìn)行變量同步,其實(shí)質(zhì)就是上位機(jī)遠(yuǎn)程修改下位機(jī)程序。首先上位機(jī)需要把變量處理成特定格式,然后需要獲取下位機(jī)的讀寫控制權(quán)限,最終實(shí)現(xiàn)變量同步。
2.3.5 顯示
為方便使用,保證使用過程中機(jī)器人的運(yùn)行安全,軟件中聲明了相應(yīng)的變量用來反饋機(jī)器人的運(yùn)行狀態(tài),并實(shí)時(shí)在界面顯示出來,方便使用者進(jìn)行觀察、判斷;為方便調(diào)試,上位機(jī)還把機(jī)器人運(yùn)行錯(cuò)誤時(shí)的錯(cuò)誤信息獲取并顯示在界面上。
機(jī)器人自主編程控制軟件的工作需要上、下位機(jī)同步運(yùn)行,相互配合實(shí)現(xiàn)機(jī)器人的自主編程控制,該軟件的程序流程如圖4所示。
圖4 機(jī)器人自主編程控制軟件程序流程
為確保試驗(yàn)人員和設(shè)備的安全,該軟件開發(fā)完成后在RobotStudio平臺(tái)進(jìn)行了軟件仿真[10],驗(yàn)證機(jī)器人自主編程生成動(dòng)作指令的合理性。其仿真過程過程如下所示:
(1)在RobotStudio中搭建了IRB_6700_2.60 m機(jī)器人本體、IRC5_Singel控制器組成的虛擬機(jī)器人系統(tǒng),如圖5所示。
圖5 仿真所用的機(jī)器人系統(tǒng)
(2)為機(jī)器人系統(tǒng)添加616-1PCInterface選項(xiàng),該軟件在應(yīng)用于實(shí)體系統(tǒng)時(shí)也需要該選項(xiàng)的支持。
(3)啟動(dòng)虛擬控制器,并把寫好的與上位機(jī)對(duì)應(yīng)的下位機(jī)程序加載到虛擬控制器中。
(4)設(shè)置虛擬系統(tǒng)為自動(dòng)模式,電機(jī)設(shè)置到上電狀態(tài)。
(5)為確保安全,把系統(tǒng)程序運(yùn)行指針PP到main函數(shù)并運(yùn)行。
仿真環(huán)境搭建完成后,針對(duì)上位機(jī)的功能進(jìn)行了仿真測(cè)試和優(yōu)化,具體內(nèi)容如下:
(1)上位機(jī)讀取文件數(shù)據(jù)的測(cè)試。
(2)上位機(jī)掃描、連接下位機(jī)(此處指虛擬機(jī)器人系統(tǒng))等通信功能的測(cè)試。其中,在測(cè)試掃描功能時(shí),在環(huán)境中同時(shí)運(yùn)行了兩個(gè)下位機(jī)以完成多下位機(jī)場(chǎng)景的測(cè)試。
(3)上位機(jī)處理數(shù)據(jù)功能的測(cè)試。這里主要是通過上位機(jī)編譯環(huán)境設(shè)置斷點(diǎn),在調(diào)試過程中分析上位機(jī)變量的值來判斷該功能是否實(shí)現(xiàn)。
(4)上、下位機(jī)變量同步功能測(cè)試。
(5)上位機(jī)顯示功能測(cè)試。
通過仿真后,又針對(duì)基于該軟件實(shí)現(xiàn)的機(jī)器人TCP線性運(yùn)動(dòng)、TCP圓弧運(yùn)動(dòng)、單軸旋轉(zhuǎn)和一鍵復(fù)位等功能進(jìn)行了仿真測(cè)試和優(yōu)化。仿真結(jié)果表明,機(jī)器人自主編程控制系統(tǒng)的功能均已實(shí)現(xiàn),滿足開展試驗(yàn)的要求。
完成仿真后,根據(jù)仿真時(shí)的方法和步驟配置下位機(jī)(實(shí)體機(jī)器人系統(tǒng)),并把仿真時(shí)所做的工作在實(shí)體機(jī)器人系統(tǒng)上進(jìn)行了試驗(yàn),結(jié)果復(fù)現(xiàn)了仿真結(jié)果,達(dá)到了試驗(yàn)預(yù)期的控制效果。試驗(yàn)現(xiàn)場(chǎng)設(shè)備如圖6所示。
圖6 試驗(yàn)現(xiàn)場(chǎng)設(shè)備圖
本文基于C#語(yǔ)言設(shè)計(jì)了機(jī)器人自主編程軟件,并搭建了由上位機(jī)、下位機(jī)和ABB機(jī)器人構(gòu)成的機(jī)器人自主編程系統(tǒng),為了驗(yàn)證機(jī)器人自主編程功能的可靠性,在RobotStudio平臺(tái)進(jìn)行了模擬仿真,仿真結(jié)果顯示機(jī)器人的自主編程功能可靠。除此之外,該系統(tǒng)在滿足基礎(chǔ)操作的應(yīng)用之上,還預(yù)留多種接口,方便用于二次開發(fā),具有較強(qiáng)的兼容性。機(jī)器人自主編程功能有助于機(jī)器人在復(fù)雜工業(yè)場(chǎng)景下的應(yīng)用,推進(jìn)工業(yè)機(jī)器人智能化發(fā)展。