仇國華 李志煌 孫樹亮
(福建師范大學福清分校電子與信息工程學院, 福建 福清 350300)
隨著科技的發(fā)展,機器人技術(shù)也不斷成熟,機器人可以更好地協(xié)助或替代人們完成工作[1-2]。在農(nóng)業(yè)應用中,機器人大多用來幫助人們完成物體搬運、水果采摘、野外探查或其他有一定危險性的工作,從而使人們的工作效率更高,而工作危險性大大降低。但是,機器人一般只能按照固定的程序指令完成一些簡單的動作,靈活性和智能性仍有不足[3]。為了提高機器人的靈活性和智能性,本次研究將建立基于圖像識別的差異性有色物體自分揀系統(tǒng)。通過該系統(tǒng)將攝像頭和機器人的功能結(jié)合起來,讓攝像頭充當機器人的眼睛,使得機器人能夠像人類一樣“觀察”外界,捕捉外界事物,進而實現(xiàn)對目標的跟蹤定位及物體自主抓取。
系統(tǒng)從底層硬件到頂層應用主要分為機械手設(shè)備、主控核心芯片、機智云平臺和手機App這4部分(見圖1)。
四自由度機械手是整個系統(tǒng)的終端控制設(shè)備,它的動作主要通過舵機轉(zhuǎn)動來實現(xiàn)。該設(shè)備主要由STM32主控芯片來控制,通過相應程序完成一系列動作組,能夠?qū)崿F(xiàn)物體跟蹤和物體抓取等功能。
主控芯片STM32是系統(tǒng)的中樞部分,其功能包括:通過OV7670進行圖像獲取,并在TFT屏上實時顯示;讀取按鍵值,實現(xiàn)機械手物體抓取、機械手物體跟蹤、機械手復位、攝像頭特效切換,以及燈光模式、飽和度、亮度、對比度等效果切換;利用模數(shù)轉(zhuǎn)化通道獲取系統(tǒng)電壓,當電壓過低時啟動蜂鳴器;充當數(shù)據(jù)解讀器,分析WiFi和藍牙數(shù)據(jù),并將命令下達給終端機械手去執(zhí)行;通過PID算法和腐蝕算法讓機械手能夠更加靈活地實現(xiàn)物體自主抓取。
圖1 系統(tǒng)整體框架圖
網(wǎng)絡(luò)服務器中存儲了設(shè)備的所有相關(guān)數(shù)據(jù)信息,如設(shè)備ID、設(shè)備MAC地址、設(shè)備是否在線、設(shè)備是否連網(wǎng)、設(shè)備數(shù)據(jù)點信息以及WiFi的軟硬件版本號等。它充當App與WiFi進行溝通的橋梁,WiFi通過路由器將數(shù)據(jù)上報給服務器,而App通過讀取服務器數(shù)據(jù)來取得底層硬件信息;反過來,App將控制指令上發(fā)給服務器,借由服務器將數(shù)據(jù)下發(fā)給WiFi,從而控制硬件設(shè)備。網(wǎng)絡(luò)服務器只是存儲數(shù)據(jù)的中介。
系統(tǒng)具備WiFi-App和藍牙App以供使用。系統(tǒng)的WiFi-App通過服務器與硬件設(shè)備進行溝通,而藍牙App則不同。系統(tǒng)的藍牙App不必通過服務器的數(shù)據(jù)傳遞,而是與手機本身的藍牙建立連接,實現(xiàn)短距離無線通訊。WiFi-App可對硬件設(shè)備進行異地控制,設(shè)備在網(wǎng)就可以進行通訊;反之,藍牙所提供的App只能實現(xiàn)短距離通訊,一旦超出藍牙信號范圍就無法進行數(shù)據(jù)傳輸。這兩款App各有優(yōu)勢。
OV7670是一款支持多分辨率的攝像頭,同樣支持多種RGB格式,可以通過對100多個寄存器的配置來實現(xiàn)攝像頭的一些功能[4]。該攝像頭是通過8位數(shù)據(jù)進行數(shù)據(jù)采集和存儲,使用方便。系統(tǒng)顯示部分則采用2.8寸TFT液晶屏,其分辨率是240×320,與攝像頭分辨率相同,能夠顯示圖像、漢字、圖片等[5]。相對于普通1 602/12 864顯示屏,本系統(tǒng)的顯示屏更加人性化,更符合本系統(tǒng)的設(shè)計要求。攝像頭數(shù)據(jù)采集和讀取過程如圖2和圖3所示。
圖2 攝像頭模塊圖像采集過程
藍牙HC-05是一款高性能主從一體串口通信芯片,可以和其他串口設(shè)備進行無線數(shù)據(jù)傳送。它所能支持的波特率范圍為4 800~1 382 400,能夠兼容5 V或者3.3 V的單片機系統(tǒng),很容易與其他設(shè)備進行連接。藍牙HC-05可以通過命令響應工作模式來執(zhí)行相應的AT指令設(shè)置模塊的參數(shù),如密碼、波特率等,也可以通過AT指令對其進行相應的控制。
圖3 攝像頭模塊圖像數(shù)據(jù)讀取過程
ESP8266模塊是樂鑫公司生產(chǎn)的高性能WiFi模塊,它的通訊模式不同于藍牙的短距離通訊。 ESP8266模塊可以通過路由器或者熱點等途徑實現(xiàn)聯(lián)網(wǎng)功能,內(nèi)部固件采用AT指令,通過串口與單片機進行通信,與藍牙類似。該模塊可以用于各種3.3 V的單片機系統(tǒng),實現(xiàn)無線數(shù)據(jù)傳輸。ESP8266模塊采用802.11802.11 bgn標準,內(nèi)置TCPIP協(xié)議和ADC數(shù)模轉(zhuǎn)換程序,并且內(nèi)部有低功率的32位CPU,所以可當作處理器來使用。
相比其他電機,舵機更加適用本系統(tǒng)。舵機的角度可以調(diào)控,操作中能夠很輕松地控制機械手的動作,并通過控制占空比來控制其速度。一般情況下,舵機的PWM波周期為20 ms, 占空比0.5~2.5 ms的脈沖電平對應舵機角度為0°~180°,且呈線性關(guān)系[6]。采用500~2 500個脈沖范圍對應舵機控制輸出角度的占空比0.5~2.5 ms的范圍,LDX-335MG舵機的控制精度為3 μs,在2 000個脈沖范圍內(nèi)控制精度能達到0.3°。
為了實現(xiàn)舵機速度的控制,在舵機的起點位置和終點位置之間劃分多個控制點,而不是讓舵機一次性從起點轉(zhuǎn)到終點(此種情況舵機速度是最大的)。舵機的速度將控制點的影響,控制點越多速度越慢,反之越快。本系統(tǒng)程序設(shè)計就是基于此原理,實現(xiàn)機械手動作的速度控制。
蜂鳴器在本系統(tǒng)中充當報警器,無須程序I/O口的干涉,一旦檢測到電池電壓過低將會自動報警。在整個電路圖的設(shè)計當中,利用PNP三極管放大電流以驅(qū)動蜂鳴器。由于PNP三極管在低電平下才能導通,所以將PNP三極管的基極接到比較器LM393的輸出端。LM393的正相為系統(tǒng)電壓,其反相為設(shè)定的閾值,正反相電壓的差值若為正數(shù)則輸出高電平,若為負數(shù)則輸出低電平(即電池電壓過低)[7]。這樣就可以達到低壓報警、高壓不報警的效果。除此之外,在被測輸入電壓處加設(shè)1 ∶ 5分壓電路,比例為1的電路接ADC模擬口。這樣就可以通過ADC轉(zhuǎn)換獲取被測輸入電壓的1/6值,進而推算出被測電壓,最終獲取系統(tǒng)電壓。
通過攝像頭獲取圖像的RGB(色彩)信息,將RGB信息轉(zhuǎn)化成HSL(即色度、飽和度、亮度),對HSL設(shè)定一個閾值和搜索范圍(即圖像分辨率240×320);接著開始以閾值為標準開始搜索第一個腐蝕中心,得到第1個腐蝕中心后,將從該點開始分別向上下左右4個方向進行讀點,若點的顏色符合條件則予以讀取[8-9];當4個方向讀點全部結(jié)束后獲得4個邊緣點的坐標,那么這4個點組成的矩形區(qū)域就是所識別的物體。這就是腐蝕算法的程序?qū)崿F(xiàn)流程(見圖4)。
圖4 腐蝕算法的程序?qū)崿F(xiàn)流程
3.2.1 PID算法工作流程
如圖5所示為PID算法工作流程圖。PID算法相關(guān)參數(shù)如下:
PV1:E1=SV-PV1
PV2:E2=SV-PV2
PV3:E3=SV-PV3
…
PV(K-1):E(K-1)=SV-PV(K-1)
PVK:EK=SV-PVK
其中:PV1~PVK為系統(tǒng)開始運行以來傳感器讀回的控制對象的值(采樣序列,采樣時間間隔越短越好);E1~EK為系統(tǒng)開始運行以來的偏差值,EK為最新一次的偏差。
圖5 PID算法工作流程圖
該算法控制方式包括比例控制、積分控制、微分控制,分析如下:
(1) 比例控制。比例控制主要由EK(當前偏差)來決定,用來表示當前情況。EK表示的當前情況有3種:EK>0,表示當前控制算法不達標;EK=0,表示當前控制算法剛好達標;EK<0,表示當前控制算法已經(jīng)超標。根據(jù)EK的值輸出控制量POUT,POUT主要是用來調(diào)整整個控制算法的增益,POUT=KP*EK,乘以KP相當于放大或者縮小EK的值。比例控制中,輸出信號跟EK成比例,根據(jù)當前偏差值和比例大小輸出控制信號;而傳統(tǒng)位式控制算法只能輸出高低電平,其輸出信號一般是一個PWM波信號。
(2) 積分控制。積分控制主要運用了積分的概念,是通過E1~EK這些歷史數(shù)據(jù)的偏差之和SK來表示歷史情況,SK=E1+E2+…+EK。SK表示的歷史情況有3種:SK>0,表示歷史情況大多是SV>PV,系統(tǒng)歷史情況多數(shù)不達標(即輸出控制信號并沒有將控制對象的值控制到設(shè)定點上,總體上數(shù)值偏低);SK<0,表示歷史情況大多是SV (3) 微分控制。微分控制運用了微分的概念,只考慮最近幾次偏差E(K-2)~EK的變化趨勢DK,DK=EK-E(K-1)。DK表示的變化趨勢有3種:DK>0和DK<0,說明偏差值變化的趨勢,DK絕對值越大,表示離目標值越來越遠;DK=0,表示偏差一直保持某個穩(wěn)定值,但不表示偏差值為零,用DOUT=KP*DK來表示,參數(shù)DOUT只考察偏差變化的趨勢。 通過以上分析可知,比例控制只根據(jù)當前誤差EK來決定輸出控制信號,只要當前有偏差就開始控制,無偏差就不控制,且偏差越大,輸出信號也越大;其缺點是只考慮當前情況,不考慮歷史情況。積分控制只根據(jù)歷史偏差SK來決定輸出控制信號,只要歷史情況不達標,就輸出大量控制信號,如果歷史情況達標就不輸出控制信號。其缺點是只考慮歷史情況而不考慮當前情況。微分控制考慮的是變化趨勢DK,只要DK不等于零就輸出控制信號。其缺點是不能對偏差進行控制,因為一旦DK=0,即使偏差不等于零,也不會輸出控制信號。 3.2.2 PID算法公式與單片機程序?qū)崿F(xiàn) 通過以上分析,得到公式(1): QOUT=POUT+IOUT+DOUT =KP(EK+SK+DK) (1) 式中:QOUT—— 當前控制器的總輸出量; POUT—— 控制器的比例調(diào)節(jié)輸出量; IOUT—— 控制器的積分調(diào)節(jié)輸出量; DOUT—— 控制器的微分調(diào)節(jié)輸出量; Kp—— 比例系數(shù); EK—— 當前偏差值; SK—— 歷史偏差值之和; DK—— 控制器的微分調(diào)節(jié)輸出量。 此公式只是理論雛型,要轉(zhuǎn)換成數(shù)學模型還應對SK和DK進行轉(zhuǎn)換。在單片機實際應用當中,常用到公式(2): (2) 相比式(1),式(2)中多了參數(shù)T、Ti、Td(T為采樣周期,Ti為積分時間,Td為微分時間)。將式(2)帶入式(1)得: (3) 將式(3)簡化如下: Kd*(EK-E(K-1)) (4) 這是PID算法的位置式公式。增量式公式[10]則是: QOUT K-QOUT (K-1)=KP(EK-E(K-1))+ Ki*EK+Kd(EK-2E(K-1)+E(K-2)) (5) 通過公式(5),可以編寫出單片機的PID控制算法。先獲取每次物體坐標(當前值PV),然后與中心坐標(設(shè)定值SV)做差進行PID算法控制,輸出機械手的移動偏移量進行坐標補償(見圖6),從而實現(xiàn)物體跟蹤的目的。 圖6 PID算法坐標補償實現(xiàn) 本系統(tǒng)的App是在APICloud平臺的APICloundStudio開發(fā)環(huán)境下,采用Html、Css及JavaScript語言進行編寫。開發(fā)界面友好,各類控件齊全。API Cloud平臺提供眾多豐富模塊的API接口,已經(jīng)成為 App開發(fā)的首選。在API Clound Studio軟件中,通過機智云服務器提供的SDK包與服務器建立聯(lián)系,獲取或上傳數(shù)據(jù)到服務器,使得App能夠間接控制硬件設(shè)備。 在系統(tǒng)軟硬件調(diào)試完成后,進行圖像采集測試[11]。系統(tǒng)攝像頭所采集的圖像能夠在液晶屏上清楚地顯示出來,通過按鍵也可以準確切換顯示效果。打開手機App,可以在App上可以進行機械手的遠程操作(見圖7、圖8)。傳感器值能夠以形象的曲線圖進行展示,通過模式切換,機械手也能夠進行相應的跟蹤和抓取。 圖7 App控制界面 圖8 數(shù)據(jù)曲線圖 系統(tǒng)下位機的數(shù)據(jù)能夠準確地上傳到云端服務器,利用手機App可以進行設(shè)備相關(guān)信息以及狀態(tài)的查詢,并且該系統(tǒng)能夠準確地獲取圖像并予以實時顯示,能夠?qū)崿F(xiàn)物體跟蹤、物體抓取及低壓報警等功能。3.3 應用層 App 軟件設(shè)計
4 系統(tǒng)測試