蘭天翔, 劉 英
(南京林業(yè)大學(xué)機(jī)械電子工程學(xué)院,江蘇 南京 210037)
近年來,隨著倉儲物流行業(yè)的迅速發(fā)展,自動化立體倉庫的應(yīng)用日益廣泛,機(jī)器人搬運(yùn)技術(shù)在節(jié)省勞動力、降低生產(chǎn)成本、改善生產(chǎn)環(huán)境、提高生產(chǎn)效率等方面有著舉足輕重的作用,搬運(yùn)機(jī)器人在搬運(yùn)速度、抓取重量、軌跡優(yōu)化等方面不斷優(yōu)化,取得了很大的成效。
本文的搬運(yùn)任務(wù):在物料區(qū)有若干隨機(jī)擺放的藍(lán)色或黃色的塑料小物塊,尺寸為30 mm×30 mm×30 mm,需要將兩種顏色的物塊搬運(yùn)至指定的放置區(qū),工作區(qū)域?yàn)? 000 mm×2 000 mm。針對該任務(wù),本文設(shè)計(jì)并實(shí)現(xiàn)一種智能搬運(yùn)機(jī)器人,如圖1所示。在實(shí)現(xiàn)搬運(yùn)的基本功能的基礎(chǔ)上,探索機(jī)器視覺在搬運(yùn)機(jī)器人中的應(yīng)用,并且為了進(jìn)一步提高搬運(yùn)機(jī)器人的智能程度,實(shí)現(xiàn)一種搬運(yùn)機(jī)器人自主的路徑規(guī)劃。
圖1 智能搬運(yùn)機(jī)器人
智能搬運(yùn)機(jī)器人系統(tǒng)主要由機(jī)械結(jié)構(gòu)及其控制系統(tǒng)、圖形化用戶界面、機(jī)器視覺、路徑規(guī)劃等4個(gè)模塊組成,如圖2所示。
圖2 智能搬運(yùn)機(jī)器人系統(tǒng)總框架圖
搬運(yùn)機(jī)器人的機(jī)械結(jié)構(gòu)及其控制系統(tǒng)的基本功能是提供工作所需要的運(yùn)動和動力,其基本工作原理是通過控制搬運(yùn)機(jī)器人上的各個(gè)運(yùn)動件的運(yùn)動,使搬運(yùn)機(jī)器人上的末端執(zhí)行器執(zhí)行相應(yīng)的動作功能。
機(jī)器人的樣式多種多樣,在不同的工作條件下,不同的機(jī)械結(jié)構(gòu)的執(zhí)行效率大不相同,選擇合適的機(jī)械結(jié)構(gòu)將大大提高工作效率。因此,根據(jù)工作場景選擇一種合適的機(jī)械結(jié)構(gòu)十分重要。按照幾何結(jié)構(gòu)類型分類,常用的機(jī)器人的機(jī)械結(jié)構(gòu)有四類:圓柱坐標(biāo)結(jié)構(gòu)、球坐標(biāo)結(jié)構(gòu)、關(guān)節(jié)坐標(biāo)結(jié)構(gòu)和直角坐標(biāo)結(jié)構(gòu)。其中,直角坐標(biāo)結(jié)構(gòu)也叫做笛卡爾坐標(biāo)結(jié)構(gòu),其特點(diǎn)是結(jié)構(gòu)簡單,精度及剛度高,按直角坐標(biāo)的形式進(jìn)行動作。針對搬運(yùn)任務(wù),直角坐標(biāo)結(jié)構(gòu)能極大減少設(shè)計(jì)工作量以及降低編程控制難度,同時(shí)獲得較高的控制精度,因此本搬運(yùn)機(jī)器人選用直角坐標(biāo)結(jié)構(gòu)。
為了降低成本、提高搬運(yùn)機(jī)器人制造效率、降低維護(hù)成本,綜合考慮后,本搬運(yùn)機(jī)器人采用模塊化設(shè)計(jì)的思路,選用同步帶型直線模組作為傳動機(jī)構(gòu)。直線模組發(fā)展至今,被廣泛應(yīng)用于工業(yè)機(jī)械手、貼片和涂膠等各類設(shè)備中。這種機(jī)械結(jié)構(gòu)的特點(diǎn)有:精度高、占用空間小、運(yùn)動速度快及壽命長等。
選用北京時(shí)代超群電器科技有限公司生產(chǎn)的DS45M72型同步帶型直線模組,取X方向有效行程為600 mm,Y方向有效行程為900 mm。電機(jī)型號為57EBP98ALC,并選用與該閉環(huán)步進(jìn)電機(jī)相配套的HBS57AJ-XL型號的步進(jìn)電機(jī)驅(qū)動器。運(yùn)用Solid Works進(jìn)行建模,如圖3(a)所示。并完成硬件搭建,如圖3(b)所示。
圖3 機(jī)械結(jié)構(gòu)
在機(jī)器人系統(tǒng)中,下位機(jī)是指機(jī)器人系統(tǒng)中的從屬控制器或從屬設(shè)備,負(fù)責(zé)執(zhí)行上位機(jī)發(fā)送的指令,控制機(jī)器人的運(yùn)動和操作。在本搬運(yùn)機(jī)器人中,下位機(jī)作為控制系統(tǒng),兼顧電機(jī)驅(qū)動、輸入、譯碼、插補(bǔ)等。本搬運(yùn)機(jī)器人控制系統(tǒng)從硬件平臺選型和軟件結(jié)構(gòu)設(shè)計(jì)入手進(jìn)行設(shè)計(jì)并實(shí)現(xiàn)。
控制系統(tǒng)的硬件平臺形式繁多,通常有三種方案,可編程序控制器(PLC)、標(biāo)準(zhǔn)的工業(yè)控制計(jì)算機(jī)和設(shè)計(jì)專用的微機(jī)控制系統(tǒng)。其中專用微控制器系統(tǒng)根據(jù)實(shí)際任務(wù)出發(fā),只需包含通用系統(tǒng)的部分功能,一般以夠用為準(zhǔn),其特點(diǎn)是造價(jià)低、靈活性強(qiáng)、體積小等。為降低成本,提高控制器專用性,綜合分析后,選用專用微控制器系統(tǒng)作為本搬運(yùn)機(jī)器人的下位機(jī)硬件。
常用的微控制器有8位單片機(jī)和32位微控制器等。在搬運(yùn)任務(wù)中,下位機(jī)需要處理的任務(wù)較多、計(jì)算量較大,8位單片機(jī)相較于32位微處理器計(jì)算速度慢、存儲空間小,不太能滿足本搬運(yùn)機(jī)器人下位機(jī)要求。而隨著電子技術(shù)的發(fā)展,32位微處理器集成度越來越高,外設(shè)越來越豐富的同時(shí),價(jià)格越來越低,32位微處理器的應(yīng)用越來越廣泛,是現(xiàn)在以及未來的大趨勢,因此選擇32位微處理器作為本搬運(yùn)機(jī)器人的下位機(jī)。選用型號為STM32F103的最小系統(tǒng)板作為本搬運(yùn)機(jī)器人的下位機(jī)硬件平臺,并使用Keil μVision5集成開發(fā)環(huán)境進(jìn)行程序編寫。
搬運(yùn)機(jī)器人的下位機(jī)控制系統(tǒng),是一個(gè)實(shí)時(shí)多任務(wù)系統(tǒng),因此需要對其軟件結(jié)構(gòu)進(jìn)行設(shè)計(jì)。常用的控制系統(tǒng)軟件結(jié)構(gòu)有多任務(wù)并行處理結(jié)構(gòu)、前后臺型軟件結(jié)構(gòu)、中斷型軟件結(jié)構(gòu)等。本搬運(yùn)機(jī)器人下位機(jī)軟件結(jié)構(gòu)采用前后臺型軟件結(jié)構(gòu),如圖4所示。前后型軟件結(jié)構(gòu)適合于單微處理器的數(shù)控裝置,這種軟件結(jié)構(gòu)中,以一個(gè)實(shí)時(shí)中斷服務(wù)程序作為前臺程序,承擔(dān)與運(yùn)動直接相關(guān)的插補(bǔ)、位置控制等實(shí)時(shí)性要求較高的功能;以一個(gè)循環(huán)執(zhí)行的程序作為后臺程序,承擔(dān)顯示、譯碼、數(shù)據(jù)處理等實(shí)時(shí)性要求不高的功能。在后臺程序循環(huán)工作的過程中,前臺程序通過中斷不斷地進(jìn)行定時(shí)插入。
圖4 前后臺型軟件結(jié)構(gòu)
設(shè)計(jì)并編寫了本搬運(yùn)機(jī)器人專用的下位機(jī)軟件,如圖5所示。實(shí)現(xiàn)了輸入、譯碼、插補(bǔ)、電機(jī)驅(qū)動等功能,使下位機(jī)能通過按鍵或上位機(jī)發(fā)送的G代碼指令,控制搬運(yùn)機(jī)器人執(zhí)行相應(yīng)的動作。
圖5 程序框圖
上位機(jī)是操作者與機(jī)器人設(shè)備之間進(jìn)行信息交換的接口,作為機(jī)器人系統(tǒng)中的主控制器,負(fù)責(zé)整個(gè)系統(tǒng)的高級控制和決策,是機(jī)器人系統(tǒng)中重要的一部分。上位機(jī)通常具有更高的計(jì)算能力和更強(qiáng)大的處理能力,可以進(jìn)行復(fù)雜的算法運(yùn)算、路徑規(guī)劃、決策等任務(wù)。在本搬運(yùn)機(jī)器人系統(tǒng)中,需要將下位機(jī)、機(jī)器視覺、路徑規(guī)劃等通過上位機(jī)軟件有機(jī)結(jié)合起來,因此上位機(jī)的設(shè)計(jì)是十分重要的一部分。
針對本設(shè)計(jì)對上位機(jī)軟件的需求進(jìn)行分析,為了實(shí)現(xiàn)機(jī)器視覺檢測、路徑規(guī)劃、控制搬運(yùn)機(jī)器人運(yùn)動等,本搬運(yùn)機(jī)器人中上位機(jī)軟件的主要功能有:實(shí)現(xiàn)與下位機(jī)通信,并能發(fā)送相應(yīng)的G代碼指令;實(shí)現(xiàn)通過圖形化按鍵等控制搬運(yùn)機(jī)器人運(yùn)動及執(zhí)行相應(yīng)的功能;能夠顯示攝像頭采集到的圖形,并通過點(diǎn)擊相應(yīng)的按鍵調(diào)用相關(guān)的圖像處理程序;實(shí)現(xiàn)點(diǎn)擊相應(yīng)的按鍵調(diào)用路徑規(guī)劃算法程序等。因此,本設(shè)計(jì)中主要包括串口界面、控制界面和圖像處理界面三大部分。本搬運(yùn)機(jī)器人使用python的標(biāo)準(zhǔn)Tk GUI工具包tkinter作為圖形化界面開發(fā)工具,使用Visual Studio Code開發(fā)平臺,對上位機(jī)軟件的進(jìn)行設(shè)計(jì)與開發(fā)。
串口界面,如圖6所示。在搬運(yùn)機(jī)器人中,上位機(jī)與下位機(jī)之間通過UART實(shí)現(xiàn)通信,上位機(jī)向下位機(jī)發(fā)送G代碼,下位機(jī)發(fā)送實(shí)時(shí)狀態(tài)信息給上位機(jī),并打印在上位機(jī)接收區(qū)相應(yīng)位置上以供操作者監(jiān)控搬運(yùn)當(dāng)前狀態(tài)。
圖6 串口界面
控制界面如圖7所示。在本搬運(yùn)機(jī)器人中,設(shè)計(jì)并實(shí)現(xiàn)了對搬運(yùn)機(jī)器人的控制界面,為了更直觀地反映出搬運(yùn)機(jī)器人的運(yùn)動路徑,設(shè)計(jì)并實(shí)現(xiàn)了圖形化的控制區(qū),并可以通過點(diǎn)擊鼠標(biāo)實(shí)現(xiàn)對搬運(yùn)機(jī)器人位置的控制,攝像頭捕捉到畫面經(jīng)過圖像處理后獲取到物塊位置和顏色信息也能在該區(qū)域直觀地顯示出來,并且預(yù)留了相應(yīng)的按鍵調(diào)用路徑規(guī)劃算法程序,并將規(guī)劃出的路徑顯示在控制區(qū)畫面上。
圖7 控制界面
圖像處理界面如圖8所示。圖像處理是本設(shè)計(jì)中重要的一部分,設(shè)計(jì)并實(shí)現(xiàn)了圖像處理相關(guān)界面。
圖8 圖像處理界面
在機(jī)器人系統(tǒng)中,機(jī)器視覺的一般流程為:首先對工作區(qū)域進(jìn)行完整與可靠的圖像采集,然后對圖像進(jìn)行相應(yīng)的處理,最后得到任務(wù)所需的參數(shù)。其中,圖像處理大致分為圖像預(yù)處理和特征提取兩個(gè)步驟。圖像預(yù)處理通過圖像去噪、圖像增強(qiáng)、圖像平滑、圖像二值化等方法,達(dá)到消除圖像中的噪聲、增強(qiáng)圖像的對比度、提高圖像的質(zhì)量等目的,以便更好地進(jìn)行后續(xù)的圖像處理和分析。特征提取的目的是將圖像中的信息轉(zhuǎn)化為可量化的特征量,以便進(jìn)行后續(xù)的分類、識別等任務(wù)。
針對本搬運(yùn)機(jī)器人,為引導(dǎo)搬運(yùn)機(jī)器人執(zhí)行機(jī)構(gòu)完成路徑規(guī)劃和抓取等一系列動作,需要獲取所需抓取物塊的顏色和位置信息。使用普通RGB彩色攝像頭實(shí)現(xiàn)采集圖像,選用攝像頭型號為羅技C270。設(shè)計(jì)圖像處理流程:圖像矯正→圖像濾波→轉(zhuǎn)換HSV圖像→腐蝕與膨脹→閾值分割→獲取信息,流程圖如圖9所示。使用OpenCV編程實(shí)現(xiàn),為更方便地與上位機(jī)軟件協(xié)調(diào)工作,選用python作為編程語言。
圖9 圖像處理流程圖
采集一張圖像,如圖10(a)所示。由于相機(jī)與工作平面并不能保證絕對垂直,并且捕捉到原始圖像中的像素位置并不能直接映射成實(shí)際坐標(biāo)位置,為了削弱由于相機(jī)位置不確定引起的誤差,因此需要進(jìn)行矯正。使用OpenCV中warpPerspective()方法來實(shí)現(xiàn)透視矯正,如圖10(b)所示。圖像濾波可以有效降低圖片噪聲,常用的濾波器有均值濾波器、中值濾波器、高斯濾波器等。經(jīng)過實(shí)際測試,采用高斯濾波器進(jìn)行濾波處理。使用OpenCV中GaussianBlur()方法實(shí)現(xiàn)高斯濾波處理,如圖10(c)所示。本圖像處理通過物塊顏色的特征獲取所需的信息,然而RGB色彩空間不能很好地反映出物體具體的顏色信息,而HSV色彩空間可以表達(dá)色彩的明暗,色調(diào),以及鮮艷程度,可以很好地反映顏色信息。OpenCV中提供cvtColor()方法,能將圖像轉(zhuǎn)換到HSV色彩空間,如圖10(d)所示。腐蝕和膨脹是圖像形態(tài)學(xué)中兩個(gè)核心操作,可以使用腐蝕和膨脹清除或強(qiáng)化圖像中的細(xì)節(jié)。由于后續(xù)操作中篩選顏色信息得到的圖像可能由于存在毛刺而導(dǎo)致誤差,因此需要對圖像進(jìn)行腐蝕操作處理。使用OpenCV中提供erode()方法實(shí)現(xiàn)腐蝕處理,如圖10(e)所示。通過OpenCV中提供的inRange()方法,設(shè)定顏色的上下限,即可根據(jù)顏色信息篩選出物塊在圖像中的位置,并將圖像轉(zhuǎn)化為二值圖,如圖10(f)所示。至此,已經(jīng)得到表示某一顏色的二值圖,需要檢測其位置,可通過檢測二值圖連通區(qū)域的輪廓實(shí)現(xiàn)。OpenCV中提供的findContours()方法可以通過計(jì)算圖像梯度來判斷圖像的邊緣,然后將邊緣的點(diǎn)封裝成數(shù)組返回,通過調(diào)用該方法,就可實(shí)現(xiàn)物塊的位置信息的獲取,如圖10(g)所示。
圖10 圖像處理
針對搬運(yùn)任務(wù)進(jìn)行分析,其目的是將一定數(shù)量的物塊從取塊位置搬運(yùn)到指定的放置位置,取塊位置的數(shù)量和放塊位置的數(shù)量相等。而對于任意一個(gè)取塊位置上的物塊,都可能被放入任意一個(gè)放塊位置。同理,任意一個(gè)放塊位置的物塊,都可來源于任意一個(gè)取塊位置。并且任意一個(gè)取塊位置的物塊都不可能放入另一個(gè)取塊位置。同理,任意一個(gè)放塊位置的物塊都不可能來源于另一個(gè)放塊位置。用圖與網(wǎng)絡(luò)的數(shù)學(xué)模型分析,將所有取塊位置和放塊位置組成一個(gè)非空有限集合V(G),所有V(G)中每一個(gè)可能存在的取塊位置vi與放塊位置的vj組成的無序?qū)M成一個(gè)非空有限集合E(G),E(G)中的每一個(gè)元素ek記為ek=(vi,vj)或ek=vivj=vjvi(k=1,2,…,m),稱為該圖的一條從vi到vj的邊。任意一個(gè)取塊位置?vi與任意一個(gè)放塊位置的?vj都相鄰,而任意一個(gè)取塊位置?vi與其他取塊位置不相鄰,任意一個(gè)放塊位置?vj與其他放塊位置不相鄰。將所有取塊位置組成一個(gè)非空有限集合X, 所有放塊位置組成一個(gè)非空有限集合Y,則V(G)=X∪Y,X∩Y=?,|X||Y|≠0(|X|表示集合X中的元素個(gè)數(shù)),X中無相鄰頂點(diǎn)對,Y中亦然。并且?xi∈X,?yj∈Y,有xiyj∈E(G),圖G為完全二分圖。
在搬運(yùn)任務(wù)中,每一個(gè)取塊位置到每一個(gè)放塊位置的距離不盡相同,為了提高工作效率,需要規(guī)劃出一條盡可能短的路徑。又由上文分析可知,搬運(yùn)任務(wù)抽象出的圖G為完全二分圖,需找出一組一一對應(yīng)的取塊位置和放塊位置,那么搬運(yùn)任務(wù)中的路勁規(guī)劃即對應(yīng)圖與網(wǎng)絡(luò)中的匹配問題。將搬運(yùn)任務(wù)抽象為數(shù)學(xué)問題:G為二分圖,頂點(diǎn)集V(G)=X∪Y,X={x1,x2,…,xn},Y={y1,y2,…,ym},且?xi∈X,?yj∈Y,有xiyj∈E(G),圖G的每邊加上權(quán)w(xiyj)≥0,表示xi到y(tǒng)j的距離系數(shù),求加權(quán)圖G上的權(quán)最大的完美對集。至此,分析出搬運(yùn)任務(wù)的圖與網(wǎng)絡(luò)數(shù)學(xué)模型。
為解決上述問題,本搬運(yùn)機(jī)器人使用庫恩-曼克萊斯(Kuhn-Munkres)算法,即KM算法,這個(gè)算法是在埃德蒙茲(Edmonds)提出的匈牙利算法的基礎(chǔ)上發(fā)展而來。匈牙利算法提出了在二分圖G中求最大對集的方法,基本思想是不斷地尋找增廣軌,如果找到,就互換匹配邊和非匹配邊,讓匹配邊增加一條,如果找不到匹配邊了,就表示已經(jīng)是最大匹配了。其算法的核心就是根據(jù)一個(gè)初始匹配不停地找增廣軌,直到?jīng)]有增廣軌為止。而KM算法在此基礎(chǔ)上稍加修改,提出了求加權(quán)圖G上權(quán)最大的完美對集的方法。
使用python編程語言將KM算法編寫為相應(yīng)程序,并移植到上位機(jī)中。實(shí)際測試,通過機(jī)器視覺捕捉到所抓取物塊的顏色及位置信息如圖11所示,選取放塊位置后,進(jìn)行路徑規(guī)劃,實(shí)際效果如圖12所示。
圖11 獲取物塊顏色及位置信息
圖12 路徑規(guī)劃
本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于機(jī)器視覺的智能搬運(yùn)機(jī)器人。選擇直角坐標(biāo)結(jié)構(gòu)作為搬運(yùn)機(jī)器人的機(jī)械結(jié)構(gòu),選用同步帶型直線模組作為搬運(yùn)機(jī)器人的傳動機(jī)構(gòu),使用三維建模軟件Solid Works對搬運(yùn)機(jī)器人的機(jī)械結(jié)構(gòu)進(jìn)行建模,并搭建了實(shí)物。選用了STM32F103C8T6最小系統(tǒng)板作為下位機(jī)控制系統(tǒng)的硬件平臺,并編寫了相應(yīng)的下位機(jī)軟件。使用python庫中tkinter作為圖形化用戶界面開發(fā)工具,完成上位機(jī)的編寫開發(fā),將下位機(jī)、機(jī)器視覺、路徑規(guī)劃等通過上位機(jī)軟件有機(jī)結(jié)合起來。選用OpenCV進(jìn)行圖像處理,實(shí)現(xiàn)了通過攝像頭捕捉畫面,經(jīng)過圖像處理后,獲取物塊顏色及位置信息。通過學(xué)習(xí)圖與網(wǎng)絡(luò)模型及方法,然后運(yùn)用圖與網(wǎng)絡(luò)中的基本概念,針對本搬運(yùn)機(jī)器人的路徑規(guī)劃任務(wù)進(jìn)行了分析,并建立了相應(yīng)的圖與網(wǎng)絡(luò)的數(shù)學(xué)模型。使用KM算法生成路徑,并使用python編程語言將KM算法編寫為相應(yīng)程序,實(shí)現(xiàn)了搬運(yùn)機(jī)器人的路徑規(guī)劃。
雖然本文成功設(shè)計(jì)并實(shí)現(xiàn)了一種基于機(jī)器視覺的智能搬運(yùn)機(jī)器人,但在具體實(shí)施過程中,通過不斷學(xué)習(xí)和反思,發(fā)現(xiàn)仍有許多方面有待提升,以及有更好的方案選擇可作為后期優(yōu)化。下位機(jī)部分,后續(xù)可設(shè)計(jì)專用化的電子電路硬件結(jié)構(gòu),選用算力更強(qiáng)的微處理器作為軟件功能的有力支撐。上位機(jī)部分,后續(xù)可加入更多功能,如通過上位機(jī)進(jìn)行參數(shù)修改等。界面可做進(jìn)一步優(yōu)化升級,使界面更加美觀。機(jī)器視覺部分,目前僅實(shí)現(xiàn)靜態(tài)檢測,后續(xù)可加入動態(tài)檢測的功能,以適應(yīng)更多實(shí)際環(huán)境,如工業(yè)流水線。對于路徑規(guī)劃部分,目前使用的KM算法僅是在一定條件下的最優(yōu)路徑,后續(xù)可研究學(xué)習(xí)更加優(yōu)秀的前沿路徑規(guī)劃算法,規(guī)劃出更短的路徑,提高效率。