楊 琨, 崔 敏, 龐博維
(五邑大學(xué) 智能制造學(xué)部, 廣東 江門(mén) 529020)
隨著工業(yè)的快速發(fā)展, 機(jī)器人技術(shù)也得到了快速的發(fā)展,機(jī)器人除被廣泛應(yīng)用于工業(yè)制造領(lǐng)域,也被廣泛應(yīng)用于如智能家居,醫(yī)學(xué)治療、娛樂(lè)服務(wù)、軍事以及太空探索等領(lǐng)域,盡管它們的用途及形態(tài)各有不同,但是大都要求能精確地定位到三維(或二維)空間上的某一點(diǎn)進(jìn)行作業(yè),以完成對(duì)指定物品的抓取和放置,減少人工操作[1]。目前市場(chǎng)上現(xiàn)有的智能服務(wù)機(jī)器人或抓取結(jié)構(gòu)復(fù)雜, 成本高昂,或機(jī)器人運(yùn)行和抓取精度較低,穩(wěn)定性不足,工作效率低。
為此本文設(shè)計(jì)了一種基于語(yǔ)音和視覺(jué)聯(lián)控的移動(dòng)抓取機(jī)器人,通過(guò)聲音對(duì)機(jī)器人下達(dá)指令,由語(yǔ)音模塊接收分辨指令,Openmv 視覺(jué)模塊尋找目標(biāo),Arduino 單片機(jī)控制機(jī)器人移動(dòng),實(shí)現(xiàn)抓取指定目標(biāo)(如某種顏色小球),并使機(jī)器人返回到指定點(diǎn)。 移動(dòng)抓取機(jī)器人采用三輪作為移動(dòng)方式,機(jī)械手為偏置曲柄滑塊機(jī)構(gòu),通過(guò)舵機(jī)帶動(dòng)機(jī)械手升降,完成抓取動(dòng)作。 該機(jī)器人具有動(dòng)作靈敏,結(jié)構(gòu)輕巧,制作安裝方便等特點(diǎn)。
移動(dòng)抓取機(jī)器人由機(jī)器人本體和控制模塊兩大部分所組成,機(jī)器人本體由全向輪作為移動(dòng)部分,并搭載由曲柄滑塊原理設(shè)計(jì)的機(jī)械臂以及機(jī)械爪; 控制模塊主要有Arduino 單片機(jī)、Openmv 視覺(jué)模塊及語(yǔ)音模塊, 總體架構(gòu)設(shè)計(jì)如圖1 所示。

圖1 總體架構(gòu)設(shè)計(jì)Fig.1 Overall architecture design
當(dāng)聲音把指令傳遞給語(yǔ)音模塊之后, 系統(tǒng)將指令轉(zhuǎn)換成為信號(hào), 利用串口通信輸送到Arduino 單片機(jī)上,再由Arduino 單片機(jī)將信號(hào)輸送給Openmv 視覺(jué)模塊。 在Openmv 視覺(jué)模塊中進(jìn)行顏色識(shí)別以及距離判斷,再把物體位置信息準(zhǔn)確返回給Arduino 單片機(jī),使機(jī)器人準(zhǔn)確的移動(dòng)到物體可被抓取范圍,并實(shí)施抓取。在完成抓取動(dòng)作之后,還會(huì)判斷是否已抓取到物體,若未抓取到,將再次進(jìn)行抓取;并可以通過(guò)屏幕實(shí)時(shí)顯示機(jī)器人移動(dòng)速度。
總體機(jī)械結(jié)構(gòu)分為基座和抓取兩部分,如圖2 所示。基座結(jié)構(gòu)采用三層底板作為搭載層,總體外觀呈龜形;下底板2 裝配有三個(gè)全向輪1, 每個(gè)全向輪配備具有一定減速比并自帶霍爾編碼器的電機(jī); 基座的主要機(jī)械結(jié)構(gòu)(如車(chē)輪等)嵌入在三層底板之內(nèi),使得機(jī)械手及運(yùn)動(dòng)部件不易受到碰撞損害,更好地保護(hù)重要部分。
抓取結(jié)構(gòu)由機(jī)械臂、 機(jī)械爪和Openmv 視覺(jué)云臺(tái)三部分組成。 用舵機(jī)板6 固定升降舵機(jī)5, 導(dǎo)桿11 上安裝有連桿機(jī)構(gòu)8,升降舵機(jī)5 控制機(jī)械爪10 升降,實(shí)現(xiàn)對(duì)物體的抓取;Openmv 視覺(jué)云臺(tái)7 采用舵機(jī)方式控制。
(1)機(jī)械臂結(jié)構(gòu)設(shè)計(jì)。 主要由升降舵機(jī)5、舵機(jī)板6、連桿機(jī)構(gòu)8、導(dǎo)桿11 組成。 如圖2 所示。 以舵機(jī)2 為動(dòng)力源,采用曲柄滑塊機(jī)構(gòu),光軸與直線軸承的配合,實(shí)現(xiàn)機(jī)械爪的上下升降,提升結(jié)構(gòu)的順暢性。
(2)Openmv 視覺(jué)模塊云臺(tái)設(shè)計(jì)。如圖2 Openmv 視覺(jué)模塊云臺(tái)7 所示。 通過(guò)舵機(jī)旋轉(zhuǎn)方式,使視覺(jué)模塊旋轉(zhuǎn)、調(diào)整角度,實(shí)現(xiàn)實(shí)時(shí)跟蹤目標(biāo)物體。

圖2 機(jī)器人結(jié)構(gòu)示意圖Fig.2 Schematic diagram of robot structure
(1)硬件設(shè)計(jì)。移動(dòng)抓取機(jī)器人控制模塊的組成與功能有: ①Arduino 主控模塊采用USB 接口的核心電路板,具有多路數(shù)字輸入輸出端口。 有多個(gè)PWM 脈寬調(diào)制接口,以改變頻率及占空比,并有若干串口通信。 以Arduino作為控制模塊的通信核心, 分別控制3 個(gè)全向輪移動(dòng)及視覺(jué)模塊、 語(yǔ)音模塊的串口通信, 接受并發(fā)送數(shù)據(jù);②Openmv 視覺(jué)模塊利用攝像頭進(jìn)行顏色追蹤,并發(fā)送物體的X、Y 坐標(biāo)。 通過(guò)物體坐標(biāo)與攝像頭中心坐標(biāo)對(duì)比,發(fā)送信號(hào)給Arduino 單片機(jī),使機(jī)器人通過(guò)算法移動(dòng)至目標(biāo)物體;③語(yǔ)音模塊采用文本方式編譯語(yǔ)音內(nèi)容,并轉(zhuǎn)換為串口數(shù)據(jù),與Arduino 進(jìn)行數(shù)據(jù)傳輸。通過(guò)語(yǔ)音輸入,實(shí)現(xiàn)控制機(jī)器人執(zhí)行不同動(dòng)作;④其余模塊采用三個(gè)全向輪實(shí)現(xiàn)機(jī)器人的移動(dòng),選擇帶有霍爾編碼器的電機(jī),對(duì)車(chē)輪轉(zhuǎn)速進(jìn)行PID 調(diào)控,電源選擇12V 供電,降壓模塊DC-DC。
(2)工作原理。 ①語(yǔ)音模塊接收到語(yǔ)音下達(dá)的指令,語(yǔ)音模塊將指令轉(zhuǎn)化為字符, 發(fā)送給Arduino 單片機(jī);②Arduino 單片機(jī)接收到語(yǔ)音模塊發(fā)送過(guò)來(lái)的指令后,對(duì)指令進(jìn)行區(qū)分,執(zhí)行不同動(dòng)作:手機(jī)藍(lán)牙操控機(jī)器人、視覺(jué)模塊智能識(shí)別抓取指定物體。 液晶屏顯示當(dāng)前機(jī)器人車(chē)速;③Openmv 視覺(jué)模塊接收到Arduino 單片機(jī)指令,尋找指定顏色的物體,將物體X、Y 坐標(biāo)、物體的像素值、面積等數(shù)據(jù)進(jìn)行處理分析, 最后把處理之后的數(shù)據(jù)發(fā)送給Arduino 單片機(jī),由Arduino 單片機(jī)驅(qū)動(dòng)電機(jī),移動(dòng)至物體面前;④由Openmv 視覺(jué)模塊判定機(jī)器人是否移動(dòng)至目標(biāo)物體,機(jī)械手可抓取的范圍內(nèi)。 若是,可發(fā)送指令給Arduino 單片機(jī),執(zhí)行機(jī)械手抓取;否則將重新移動(dòng)機(jī)器人直至物體在抓取范圍內(nèi)。若抓錯(cuò)物體,機(jī)械手將放下被抓錯(cuò)物體,并重新尋找目標(biāo)物體;⑤在成功抓取目標(biāo)物體之后,Openmv 視覺(jué)模塊尋找視覺(jué)基準(zhǔn)系統(tǒng)(AprilTag)指定地點(diǎn),將物體放置指定位置。
控制流程如圖3 所示,由語(yǔ)音模塊接收指令,執(zhí)行小球判斷之后, 通過(guò)串口通信把信號(hào)傳輸給Arduino 單片機(jī),并由Openmv 視覺(jué)模塊做視覺(jué)算法處理實(shí)現(xiàn)語(yǔ)音和視覺(jué)的聯(lián)控。

圖3 控制流程示意圖Fig.3 Control flow diagram
(1)Arduino 控制算法。 增量式PI 控制算法調(diào)控電機(jī),實(shí)現(xiàn)速度穩(wěn)定可控,保持在穩(wěn)定的數(shù)值,當(dāng)電壓不穩(wěn)定或者電壓下降時(shí)仍能保證機(jī)器人正常速度運(yùn)行。 手機(jī)藍(lán)牙連接機(jī)器人,通過(guò)發(fā)送指令,操控機(jī)器人移動(dòng)及機(jī)械手的控制。顯示屏顯示車(chē)輪轉(zhuǎn)速。 圖4 為Arduino 控制流程圖。

圖4 Arduino 控制流程圖Fig.4 Arduino control flow graph
(2)Openmv 視覺(jué)模塊控制算法。 利用色域區(qū)分物體,通過(guò)每個(gè)色域的面積大小判別離機(jī)器人最近的目標(biāo)物體,再把最近的目標(biāo)物體的坐標(biāo)、像素值、高度等數(shù)據(jù)提取。 物體的坐標(biāo)值與Openmv 視覺(jué)模塊的中心坐標(biāo)進(jìn)行對(duì)比,調(diào)整機(jī)器人姿態(tài),使視覺(jué)模塊中心坐標(biāo)與物體的坐標(biāo)一致,保證機(jī)器人正方向?qū)?zhǔn)目標(biāo)物體。通過(guò)目標(biāo)物體反饋的像素值調(diào)整Openmv 視覺(jué)模塊的舵機(jī)云臺(tái), 調(diào)節(jié)視覺(jué)模塊角度,實(shí)時(shí)跟蹤目標(biāo)物體;當(dāng)機(jī)械臂夾取物體之后,通過(guò)閾值和像素值判斷是否夾取到目標(biāo)物體;把視覺(jué)基準(zhǔn)系統(tǒng)(Apriltag) 作為放置物體的目標(biāo)地點(diǎn), 獲取Apriltag 標(biāo)簽位置, 通過(guò)算法控制機(jī)器人移動(dòng)至目標(biāo)地點(diǎn)。 Openmv 視覺(jué)模塊算法如圖5 所示。

圖5 Openmv 視覺(jué)模塊算法Fig.5 Visual module algorithm
機(jī)器人的總體控制程序是由Openmv 視覺(jué)模塊進(jìn)行數(shù)據(jù)的采集、分析及處理。再將處理后的數(shù)據(jù)經(jīng)過(guò)串口通信傳給Arduino。 Arduino 把接收到的數(shù)據(jù)進(jìn)行對(duì)比,執(zhí)行相應(yīng)的動(dòng)作,例如前進(jìn)、后退、機(jī)械手夾球等。
Openmv 視覺(jué)模塊與Arduino 的串口通信接口:
Openmv 視覺(jué)模塊P4(TX)--RX2
Openmv 視覺(jué)模塊P5(RX)--TX2
Arduino 串口調(diào)用:Serial2.print();
(3)Openmv 視覺(jué)模塊云臺(tái)控制算法。 如圖6 所示為
云臺(tái)控制算法, 由于Openmv 視覺(jué)模塊位于機(jī)械手上方,
需要調(diào)整一定的角度才能看到小球、 機(jī)械爪以及視覺(jué)基
準(zhǔn)系統(tǒng)“Apriltag”,因此,Openmv 視覺(jué)模塊在使用中設(shè)計(jì)了三個(gè)位置,第一個(gè)為初始位置(俯角45°),方便大范圍
尋找小球; 第二個(gè)位置為檢測(cè)位置 (初始位置向下旋轉(zhuǎn)
45°),用于檢測(cè)機(jī)械手是否夾取到小球,以及是否夾取了
正確顏色的小球; 第三個(gè)位置為尋找Apriltag 標(biāo)簽位置,
在夾取正確顏色小球之后, 配合底盤(pán)移動(dòng)控制,Openmv視覺(jué)模塊通過(guò)獲取Apriltag 標(biāo)簽信息,返回指定地點(diǎn)。

圖6 云臺(tái)控制算法Fig.6 Cradle head control algorithm
(4)語(yǔ)音模塊控制算法。 本系統(tǒng)選用WEGASUN-M6 語(yǔ)音模塊,用于識(shí)別、處理語(yǔ)音關(guān)鍵詞,將其轉(zhuǎn)換為信號(hào)發(fā)送給Arduino 單片機(jī), 其執(zhí)行流程圖如圖7 所示。
語(yǔ)音模塊與Arduino 的串口通信接口:
語(yǔ)音模塊TX—RX0 Arduino
語(yǔ)音模塊RX—TX0 Arduino
Arduino 串口調(diào)用:Serial.print()。

圖7 語(yǔ)音模塊執(zhí)行流程圖Fig.7 Voice module execution flow graph
本文所設(shè)計(jì)的龜形多層式抓取機(jī)器人采用語(yǔ)音模塊接收指令信息,Openmv 視覺(jué)模塊做視覺(jué)算法處理, 識(shí)別位置信息,由Arduino 單片機(jī)控制機(jī)器人移動(dòng),抓取指定目標(biāo)物體。 實(shí)驗(yàn)結(jié)果表明;利用語(yǔ)音和視覺(jué)的聯(lián)控機(jī)制,能夠準(zhǔn)確地實(shí)現(xiàn)機(jī)器人對(duì)指定目標(biāo)的抓取及轉(zhuǎn)運(yùn)。