張驍哲,劉成清
(西南交通大學(xué) 土木工程學(xué)院,成都 610031)
制藥企業(yè)在藥片的生產(chǎn)加工過程中,不可避免地會(huì)產(chǎn)生各種缺陷,例如斷裂、缺角、漏印、異色等,一些生產(chǎn)企業(yè)仍然采用人工肉眼觀察的方法分揀出有缺陷的藥片[1-2]。由于檢驗(yàn)人員的視覺疲勞,以及對(duì)細(xì)微部分的識(shí)別局限,很容易造成漏檢,并且檢驗(yàn)速度很慢[3-4]。人工分揀缺陷藥片,不但效率低,而且很難保證產(chǎn)品的整批質(zhì)量。對(duì)缺陷藥片進(jìn)行高效揀出、高合格率出廠,是目前中小型制藥企業(yè)面臨的低成本智能制造難題。雖然國外已經(jīng)有專用的藥片檢驗(yàn)設(shè)備,但幾百萬元甚至上千萬元的售價(jià)過于昂貴。國內(nèi)專用藥片檢驗(yàn)設(shè)備的技術(shù)受到國外核心技術(shù)的封鎖,進(jìn)展較慢,所研發(fā)的專用藥片檢驗(yàn)與分揀設(shè)備同樣也是價(jià)格昂貴,而且通用性差、適用范圍也不理想。
研制缺陷藥片智能分揀機(jī)器人,代替人工分揀,對(duì)于提高生產(chǎn)效率和產(chǎn)品質(zhì)量具有重要意義。目前專用檢驗(yàn)設(shè)備不能普遍被采用,一個(gè)重要瓶頸問題就是設(shè)備成本過高問題,所以研制成本低廉的機(jī)器人分揀系統(tǒng),對(duì)于中小型制藥企業(yè)實(shí)現(xiàn)低成本智能制造、代替人工分揀以及降低人工成本,意義重大。已有一般設(shè)備雖然可以實(shí)現(xiàn)缺陷藥片的檢驗(yàn),但其專用性的特點(diǎn)注定了適用產(chǎn)品型號(hào)單一[5],而且用戶不能進(jìn)行二次開發(fā)以滿足不同工況的使用需求。所以,本文提出的智能分揀機(jī)器人技術(shù)適用范圍廣、通用性好、智能化程度高,對(duì)于在中小企業(yè)中推廣低成本應(yīng)用具有重要意義。
分揀機(jī)器人系統(tǒng)由關(guān)節(jié)型機(jī)器人本體、電動(dòng)手爪、傳送帶、控制器、驅(qū)動(dòng)器、電機(jī)、工業(yè)相機(jī)、計(jì)算機(jī)及視覺軟件系統(tǒng)等組成。視覺系統(tǒng)通過機(jī)器視覺[6]來獲取目標(biāo)物體的特征點(diǎn),由機(jī)器人根據(jù)目標(biāo)位置,完成快速動(dòng)態(tài)的抓取任務(wù)。將相機(jī)布置在藥片輸送帶上方,機(jī)器人位于傳送帶側(cè)面。藥片在圖像識(shí)別區(qū)時(shí),經(jīng)相機(jī)采集圖像,圖像經(jīng)視覺處理系統(tǒng)處理后,將得出的輪廓和位置等數(shù)據(jù)結(jié)果傳給機(jī)器人控制器,機(jī)器人對(duì)其進(jìn)行分類抓取,并放在藥片規(guī)定的終檢區(qū)域。智能分揀機(jī)器人系統(tǒng)整體原理設(shè)計(jì)縮比結(jié)構(gòu)圖見圖1所示。
圖1 機(jī)器人系統(tǒng)組成原理結(jié)構(gòu)圖
為了對(duì)缺陷藥片進(jìn)行快速定位,對(duì)拍攝到的圖像進(jìn)行預(yù)處理是必不可少的工作?;贖alcon視覺開發(fā)平臺(tái)[7]進(jìn)行圖像處理,包括圖像分割、區(qū)域連通、圓擬合、獲得中心等[8-9]。對(duì)將要分揀的藥片進(jìn)行目標(biāo)檢測(cè)時(shí),首先利用gen_rectangle1對(duì)需要分析的區(qū)域進(jìn)行選定。目前,對(duì)于目標(biāo)物體的檢測(cè)方法主要有:幀間差分法、光流法、背景減除法和閾值分割法[10-11]。通過對(duì)比和結(jié)合實(shí)際藥片分揀工作環(huán)境,最終選擇了簡單易行的閾值分割法中的固定閾值分割法。采用thread 函數(shù)對(duì)圖像進(jìn)行閾值分割。處理函數(shù):threshold(ho_Image, out ho_Region,grayValueMin,grayValueMax);這個(gè)函數(shù)的輸入為圖片即用戶想要處理的圖像,輸出的區(qū)域即想要得到的特征區(qū)域,兩個(gè)參數(shù)grayValueMin與grayValueMax 是需設(shè)置的最小與最大閾值,這個(gè)值的選取通過圖片的灰度直方圖獲得。然后利用物體的圓度和面積腐蝕出圓形結(jié)構(gòu),最后得到物體的坐標(biāo)中心點(diǎn),具體如下:
grab_image(Image,FGHandle) //獲取圖像
dev_display(Image) //顯示圖像
gen_rectangle1 (ROI, Row111, Column111, Row222, Column222) //選擇區(qū)域
reduce_domain (Image, ROI, ImageROI) //減少到選擇的區(qū)域
threshold(ImageROI, write, 131, 255) //閾值分割
fill_up_shape(write, RegionFillUp, 'area', 1, 100) //形狀填充
opening_circle(RegionFillUp, RegionOpening, 1)
connection(RegionOpening,SingleBalls) //區(qū)域連通
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.8, 1.0) //用圓度區(qū)分
select_shape(IntermediateBalls, SelectedRegionsWhite, 'area', 'and', 7000, 10000) //用面積區(qū)分
erosion_circle(SelectedRegionsWhite, RegionErosionWhite, 3.5) //腐蝕一個(gè)圓形結(jié)構(gòu)基礎(chǔ)的一個(gè)區(qū)域
dev_display(RegionErosionWhite)
count_obj(RegionErosionWhite, NumberWhite) //得到物體的個(gè)數(shù)
area_center(RegionErosionWhite, AreaWhite, Row1, Column1) //獲得物體中心點(diǎn)。
分揀機(jī)器人系統(tǒng)所設(shè)計(jì)的關(guān)節(jié)型機(jī)器人具有4個(gè)旋轉(zhuǎn)關(guān)節(jié),從底座至末端依次為0~3關(guān)節(jié) ,其中1~3關(guān)節(jié)軸線相互平行,0~2的3個(gè)關(guān)節(jié)由電機(jī)驅(qū)動(dòng),第4個(gè)關(guān)節(jié)為被動(dòng)關(guān)節(jié),受第2個(gè)關(guān)節(jié)和第3個(gè)關(guān)節(jié)電機(jī)控制,保持自身姿態(tài)為0°。因此,被動(dòng)關(guān)節(jié)4運(yùn)動(dòng)的末端執(zhí)行器工具保持水平,即保持自身與水平面平行。利用D-H坐標(biāo)變換法[12]研究機(jī)器人運(yùn)動(dòng)學(xué),確定機(jī)器人各連桿之間的坐標(biāo)系,建立坐標(biāo)系如下圖2所示。
圖2 機(jī)器人連桿坐標(biāo)系
關(guān)節(jié)軸i-1和關(guān)節(jié)軸i之間的公垂線的長度為ai,即為連桿長度;垂直于ai所在的平面內(nèi)的兩軸線之間的夾角用連桿扭角αi表示;兩條公法線ai-1與ai為兩連桿之間的偏置用di表示;兩條公法線ai-1與ai之間的夾角為關(guān)節(jié)角,用θi表示。首先對(duì)機(jī)器人每一個(gè)桿件上分別固定一個(gè)坐標(biāo)系進(jìn)行編號(hào),基座即為桿件0號(hào),坐標(biāo)系{0},第一個(gè)有相對(duì)運(yùn)動(dòng)的剛體為桿件1,其坐標(biāo)系為{1},以此類推。
(1)中間連桿坐標(biāo)系{i}:
坐標(biāo)軸Zi:與關(guān)節(jié)軸i+1共線,指向任意;
坐標(biāo)軸Xi:沿連桿i兩關(guān)節(jié)軸線之公垂線,指向由i關(guān)節(jié)到i+l關(guān)節(jié);
坐標(biāo)軸Yi:按照右手法則確定。
(2)首、末連桿坐標(biāo)系:
基礎(chǔ)坐標(biāo)系{0}與基座固接,常用它來描述操作臂與其他連桿的運(yùn)動(dòng)。
機(jī)器人系統(tǒng)原理樣機(jī)的縮比機(jī)械結(jié)構(gòu)尺寸如圖3所示(單位mm)。
圖3 機(jī)器人系統(tǒng)原理縮比結(jié)構(gòu)圖
根據(jù)圖2建立的機(jī)器人的連桿坐標(biāo)系,從而確定連桿參數(shù)表。
表1 連桿參數(shù)表
(1)
其中:ci= cosθi,si=sinθi,cij=cos(θi+θj),sij=sin(θi+θj)??梢郧蟪鰅關(guān)節(jié)相對(duì)i+1關(guān)節(jié)的變化矩陣。
(5)
可得位姿方程為:
(6)
根據(jù)機(jī)器人的D-H參數(shù),建立如下MATLAB程序:L1=link([-pi/2 65 0 90],'standard');
L2=link([0 135 -pi/2 0],'standard');
L3=link([0 170 pi/2 0],'standard');
r=robot({L1 L2 L3 });
r.name='Robot';
drivebot(r)
為了驗(yàn)證變換矩陣的準(zhǔn)確性,在MATLAB中給定初始角度:θ1=0,θ2=-pi/2,θ3= pi/2,得到末端坐標(biāo)點(diǎn)X=235,Y=0,Z=225,與機(jī)器人結(jié)構(gòu)尺寸一致,也驗(yàn)證了上述算法的正確性。
通過MATLAB機(jī)器人工具箱,輸入關(guān)節(jié)位置后,得到機(jī)器人的仿真圖如圖4所示。
圖4 機(jī)器人正解仿真圖
在藥片分揀實(shí)際工程中,是根據(jù)視覺系統(tǒng)識(shí)別的藥片位置規(guī)劃機(jī)器人末端運(yùn)動(dòng)位置和姿態(tài),根據(jù)藥片位置計(jì)算每個(gè)關(guān)節(jié)角度的相應(yīng)值,驅(qū)動(dòng)各個(gè)關(guān)節(jié)電機(jī)運(yùn)動(dòng),完成運(yùn)動(dòng)軌跡,求解各個(gè)關(guān)節(jié)角度值的過程稱為逆運(yùn)動(dòng)學(xué)。
求解關(guān)節(jié)變量θ1,根據(jù)式(6)可得:
(7)
從而得出:
(8)
其中:u14=a3c23+a2c2,u24=a3s23+a2s2,u34=0。
根據(jù)方程兩端的元素(3,4)(1,4)和(2,4)分別對(duì)應(yīng)相等,得出如下方程:
-s1px+c1py=0
(9)
(10)
根據(jù)式(9)得到θ1:
θ1=Atan2(py,px)
(11)
根據(jù)式(10)的聯(lián)立方程,可得到θ2和θ3的值。
得出:
(12)
根據(jù)式(12)已求出θ3的值,將式(10)展開,求解θ2。得到θ2的值:
得出:
(13)
從而得出:
θ4=-(θ2+θ3)
(14)
因此,根據(jù)藥片位置,得到通過運(yùn)動(dòng)學(xué)逆解計(jì)算的機(jī)器人各關(guān)節(jié)的運(yùn)動(dòng)角度θ1、θ2、θ3和θ4的值。
根據(jù)機(jī)器人自身結(jié)構(gòu)特征及逆解特點(diǎn),通過Halcon程序,利用atan2函數(shù)可以確定θ1的運(yùn)動(dòng)角度。其次對(duì)θ2進(jìn)行判斷,選擇與上一路徑點(diǎn)相近的關(guān)節(jié)變量θ2,確定θ2以后,依次類推求解θ3。利用“最短行程”求解降低機(jī)器人運(yùn)動(dòng)能量消耗、縮短運(yùn)動(dòng)時(shí)間。對(duì)運(yùn)動(dòng)學(xué)逆解的實(shí)時(shí)性選擇優(yōu)化,大大提高了機(jī)器人的工作效率。
機(jī)器人手爪與機(jī)器人末端的位置關(guān)系如圖5所示,可以看出,T_03和T_04的位置關(guān)系為:
X0=X1-L×cos(β1)
(15)
Y0=Y1-L×sin(β1)
(16)
圖5 機(jī)器人手爪與末端的位置關(guān)系圖
相機(jī)安放于固定位置,當(dāng)藥片運(yùn)行到相機(jī)視野范圍時(shí),相機(jī)進(jìn)行拍照。經(jīng)實(shí)驗(yàn),機(jī)器人手爪在相機(jī)坐標(biāo)系下像素點(diǎn)為(1 069,1 314)。被抓取的物體位置在視野中是任意的,設(shè)為(Row1[0],Column1[0]),同時(shí)測(cè)得Column方向上65.4個(gè)像素代表10 mm,Row方向上63.9個(gè)像素代表10 mm。由于機(jī)器人電動(dòng)手爪在圖像中的位置為定值,這樣即可得到物體與手爪在實(shí)際坐標(biāo)系下的相對(duì)位置。關(guān)系如下:
CharX:=(round( -(Row1[0]-1069)/63.9))*10
CharY:=(round(-(Column1[0]-1314)/65.4))*10
根據(jù)圖3,得到T_04初始的位置為:
X=235+50=285,Y=0,Z=225-14-85=126(其中85是指電動(dòng)手爪的高度)。在實(shí)現(xiàn)物體快速抓取的過程中,相機(jī)采集到物體圖像進(jìn)行分析后,得出CharX和CharY這兩個(gè)偏移量,即可計(jì)算出:
X1=285+CharX
Y1=0+CharY
根據(jù)式(15)和式(16)得到機(jī)器人T_03的位置(X0和Y0),再經(jīng)過逆解求得每個(gè)軸當(dāng)前的角度,記為theta1、theta2、theta3。
根據(jù)電機(jī)轉(zhuǎn)1圈發(fā)20000個(gè)脈沖,可以得到電機(jī)轉(zhuǎn)1°發(fā)56個(gè)脈沖。每個(gè)軸電機(jī)應(yīng)發(fā)的脈沖數(shù)為:
Pulse1=round(theta1*56)
Pulse2=round((90+theta2)*56)
Pulse3=round(theta3*56)
其中,round是取整,theta1-theta3是抓取位置時(shí)電機(jī)的角度,并不是從原點(diǎn)到抓取位置所需走過角度值。因此需要根據(jù)當(dāng)前角度值減去建模時(shí)的初始值(0,-90,90)。并且根據(jù)機(jī)器人特殊的機(jī)械結(jié)構(gòu),theta3等于theta2與theta3的和。發(fā)送給控制器的代碼如下:
send_data (Socket, 'czc', [10,' MOVE',13], To)
send_data (Socket, 'czc', [10,'SH',13], To)
send_data (Socket, 'czc', [10,'AC320,320,320',13], To) //每個(gè)軸的加速度值
send_data (Socket, 'czc', [10,'DC320,320,320',13], To) //每個(gè)軸的減速度值
send_data (Socket, 'czc', [10,'SP220,220,220',13], To) // 每個(gè)軸的速度值
send_data(Socket,'czc', [10,'PR'+ords(Pulse1)+','+ords(-Pulse2)+','+ords(Pulse3),13], To) //發(fā)送每個(gè)軸的脈沖數(shù)
send_data (Socket, 'czc', [10,'BGXYZ',13], To) //開始運(yùn)行
send_data (Socket, 'czc', [10,'AMXYZ',13], To) //等待動(dòng)作完成
系統(tǒng)上電完成后,機(jī)器人末端先到達(dá)預(yù)設(shè)定的位置等待,傳送帶上放置藥片啟動(dòng)運(yùn)行,相機(jī)開始拍照識(shí)別,當(dāng)進(jìn)入相機(jī)視野范圍并識(shí)別出傳送帶上的缺陷藥片后,機(jī)器人控制器發(fā)送指令,控制傳送帶停止,機(jī)器人開始運(yùn)行抓取。機(jī)器人執(zhí)行端運(yùn)動(dòng)到待分揀的藥片位置后,電動(dòng)手爪閉合抓取。抓取完成后,機(jī)器人到達(dá)指定藥片放置位置,電動(dòng)手爪自動(dòng)松開釋放,機(jī)器人回到初始位置,以此循環(huán)抓取缺陷藥片。視野范圍內(nèi)無缺陷藥片時(shí),機(jī)器人運(yùn)動(dòng)在初始原點(diǎn)位置等待下一次的識(shí)別與抓取。若傳送帶無缺陷藥片,傳送帶一直運(yùn)行,機(jī)器人無動(dòng)作,完整藥片流放到規(guī)定區(qū)域。
根據(jù)上述的方法研究,機(jī)器人分揀缺陷藥片的實(shí)現(xiàn)程序在Halcon視覺開發(fā)軟件平臺(tái)中完成,整個(gè)程序包括圖像識(shí)別算法、機(jī)器人正逆解算法、電機(jī)驅(qū)動(dòng)、數(shù)據(jù)通訊與交互等。PC端與機(jī)器人控制器創(chuàng)建通訊連接使用open_socket_connect('192.168.1.2', 3000, 'protocol', 'TCP4', Socket),打開相機(jī)使用open_framegrabber('GenICamTL', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'default', 'default', 'default', -1, 1, FGHandle)。
機(jī)器人工作時(shí),首先從任意位置回到原點(diǎn)初始位置,傳送帶運(yùn)行,相機(jī)開始采集圖像,在Halcon中利用第2節(jié)圖像分析方法進(jìn)行圖像處理與分析,缺陷藥片圖像處理算法與檢測(cè)分析處理結(jié)果如圖6所示。
從圖6右下角可以看出已檢測(cè)出缺陷藥片,藥片在圖像坐標(biāo)系下的位置為(572,1423),從而可以計(jì)算得出藥片所在位置處機(jī)器人手爪的X1和Y1數(shù)值。
X1=362.778
Y1=-16.6667
根據(jù)式(15),(16)可以計(jì)算出機(jī)器人末端處的位置,Z0的高度根據(jù)傳送帶的高度得出,按照機(jī)器人可抓取到藥片末端的高度為195 mm,由此可得:
X0=314,Y0=-14,Z0=195
經(jīng)逆解式(11),(12),(13)可以得到每個(gè)軸相對(duì)于初始位置轉(zhuǎn)動(dòng)的角度,從而可得每個(gè)軸應(yīng)該發(fā)送的脈沖數(shù),然后根據(jù)第5節(jié)的控制指令,將數(shù)據(jù)發(fā)送到機(jī)器人控制器中,驅(qū)動(dòng)電機(jī)進(jìn)行運(yùn)動(dòng),以此計(jì)算驅(qū)動(dòng)機(jī)器人進(jìn)行缺陷藥片分揀工作,脈沖數(shù)計(jì)算結(jié)果如下:
Pulse1=-147,Pulse2=2016,Pulse3=79
經(jīng)實(shí)驗(yàn)驗(yàn)證與反復(fù)測(cè)試,通過以上算法,機(jī)器人可以準(zhǔn)確定位識(shí)別抓取藥片,并實(shí)現(xiàn)智能分揀功能。
針對(duì)中小型制藥企業(yè)對(duì)缺陷藥片準(zhǔn)確高效且低成本分揀的迫切需求,研究了缺陷藥片視覺智能識(shí)別與定位技術(shù)、關(guān)節(jié)機(jī)器人位置和姿態(tài)解算技術(shù)、機(jī)器人系統(tǒng)結(jié)構(gòu)優(yōu)化設(shè)計(jì)技術(shù)等關(guān)鍵技術(shù),研制出具有缺陷藥片智能識(shí)別定位與分揀功能的機(jī)器人原理縮比樣機(jī),通過對(duì)藥片分揀的實(shí)際驗(yàn)證,具有成本低、工作范圍大、智能識(shí)別定位準(zhǔn)確、通用性好的特點(diǎn),具備缺陷藥片智能識(shí)別定位與分揀功能,為中小型制藥企業(yè)提高藥片分揀效率和藥品質(zhì)量、降低成本奠定了技術(shù)基礎(chǔ)。