桂林電子科技大學(xué) 譚花花
在人類迅速進(jìn)步的現(xiàn)在,計(jì)算機(jī)所表現(xiàn)出來(lái)的形態(tài)越來(lái)越繁多,所具備的功能也越來(lái)越強(qiáng)大。隨著現(xiàn)在攝像頭技術(shù)的不斷進(jìn)步,計(jì)算算法越發(fā)的強(qiáng)大。目前體感交互式技術(shù)也得到了廣泛應(yīng)用。本文根據(jù)實(shí)際應(yīng)用需求設(shè)計(jì)了一種采用kinect體感設(shè)備通過(guò)攝像頭和紅外發(fā)射器捕捉人體的動(dòng)作信息通過(guò)PC機(jī)操控的機(jī)器人。
基于Kinect的體感控制機(jī)器人系統(tǒng)主要如下幾個(gè)部分組成。第一部分為Kinect對(duì)人體圖像的捕捉以及捕捉后的算法處理,第二部分為將捕捉處理的數(shù)據(jù)通過(guò)電腦串口發(fā)送到無(wú)線模塊的主機(jī),第三部分是無(wú)線模塊從機(jī)接收到主機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù)傳輸?shù)組CU上,MCU通過(guò)獲得的數(shù)據(jù)表現(xiàn)為驅(qū)動(dòng)電機(jī)后機(jī)器人的運(yùn)動(dòng)狀態(tài)。系統(tǒng)整體設(shè)計(jì)框圖如圖1.1所示。
圖1 .1 系統(tǒng)整體設(shè)計(jì)框圖動(dòng)作
微控制器:MCU采用STM32RBT6它是ST公司推出的一款控制器,采用了Cortex-M3的內(nèi)核,使用目前主流ARM V7-M的架構(gòu),擁有低功耗、低成本、高性能三大特點(diǎn)。
電源:電源供電電路的設(shè)計(jì)需要綜合每一個(gè)芯片或模塊的工作電壓,本系統(tǒng)硬件主要有三個(gè)需要考慮,主控制器STM32RBT6、ESP8266模塊和舵機(jī)。STM32RBT6輸入電源電壓范圍2.0 - 3.6V,ESP8266的輸入電源電壓范圍為3.0 - 3.6V,舵機(jī)的輸入電源電壓范圍為3.5 - 6.0V。且ESP8266與舵機(jī)的工作電流相對(duì)較大,所以采用5V電壓,選擇采用2節(jié)18650電池作為供電方案。兩節(jié)18650電池串聯(lián)電壓為7.4V,通過(guò)穩(wěn)壓芯片LM1117-5V將7.4V直接穩(wěn)壓到5V。在電源的正極加入二極管對(duì)電源保護(hù),得到5V電平衙再次通過(guò)穩(wěn)壓芯片LM1117-3.3V將5V直接穩(wěn)壓到3.3V從而得到3.3V的供電電源。
舵機(jī)驅(qū)動(dòng)電路:舵機(jī)是一種通過(guò)直流脈沖來(lái)驅(qū)動(dòng)旋轉(zhuǎn)的一種裝置,舵機(jī)主要是由五個(gè)部分組成,即外殼、電路板、驅(qū)動(dòng)馬達(dá)、減速器與位置檢測(cè)元件。其工作原理是由接收機(jī)發(fā)出訊號(hào)給舵機(jī),經(jīng)由電路板上的 IC驅(qū)動(dòng)無(wú)核心馬達(dá)開(kāi)始轉(zhuǎn)動(dòng),透過(guò)減速齒輪將動(dòng)舵機(jī)力傳至擺臂,同時(shí)由位置檢測(cè)器送回訊號(hào),判斷是否已經(jīng)到達(dá)定位。位置檢測(cè)器其實(shí)就是可變電阻,當(dāng)舵機(jī)轉(zhuǎn)動(dòng)時(shí)電阻值也會(huì)隨之改變,即由檢測(cè)電阻值便可知轉(zhuǎn)動(dòng)的角度。舵機(jī)的驅(qū)動(dòng)電路可采用L298模塊和若干個(gè)光耦結(jié)合進(jìn)行驅(qū)動(dòng)。
WIFI通信驅(qū)動(dòng)電路:本系統(tǒng)中選擇了ESP8266模塊作為無(wú)線通信方案。ESP8266專為移動(dòng)設(shè)備、可穿戴電子產(chǎn)品和物聯(lián)網(wǎng)應(yīng)用而設(shè)計(jì),通過(guò)多項(xiàng)專有技術(shù)實(shí)現(xiàn)了超低功耗。ESP8266EX 具有的省電模式適用于各種低功耗應(yīng)用場(chǎng)景。本模塊在系統(tǒng)中主要是對(duì)數(shù)據(jù)進(jìn)行無(wú)線通信,將PC端采集的手勢(shì)動(dòng)作發(fā)送給單片機(jī)設(shè)備端。
Kinect是由微軟公司開(kāi)發(fā)的一款姿態(tài)傳感輸入設(shè)備,作為Xbox360 外接的3D體感攝影機(jī),利用它特有的功能讓用戶擺脫傳統(tǒng)輸入設(shè)備的束縛,通過(guò)自己的肢體控制終端。Kinect 傳感器由四個(gè)揚(yáng)聲器,兩個(gè)麥克風(fēng)陣列,一個(gè)高速 Flash,一個(gè)USB2.0 總線接口,三個(gè)攝像頭。該傳感器工作的原理如圖 3.1 所示。
圖3 .1 Kinect傳感器工作原理圖
由上圖可知彩色攝像頭用來(lái)采集 RGB 圖像,通過(guò)增量直方圖算法計(jì)算增量直方圖,并通過(guò)粒子濾波算法計(jì)算權(quán)值,最后實(shí)現(xiàn)相對(duì)應(yīng)的目標(biāo)追蹤。Kinect 傳感器的驅(qū)動(dòng)能夠產(chǎn)出 RGB圖像流和深度圖像流與采集到的 RGB 圖像與深度圖像的像素點(diǎn)完全對(duì)應(yīng)起來(lái),通過(guò) Kinect 傳感器可以實(shí)現(xiàn)對(duì)影像資料的辨識(shí)通過(guò)采集得到基本的影像資料。
骨骼圖像原理:獲取骨骼圖像之前,需要從深度圖像中將人體從背景環(huán)境中分離出來(lái)。首先會(huì)分析接近傳感器的區(qū)域,其次是通過(guò)逐點(diǎn)掃描接近傳感器區(qū)域的深度圖像的像素,來(lái)形成判斷:是否屬于人體的部位。該過(guò)程需要使用CPU的圖形視覺(jué)技術(shù),其應(yīng)用到了影像邊緣處理、噪聲閾值收集消除、人體特征點(diǎn)的目標(biāo)歸類。
本系統(tǒng)的軟件可分為兩個(gè)部分,即上位機(jī)軟件部分和下位機(jī)從機(jī)軟件部分。上位機(jī)軟件部分主要的功能又分兩部分,一部分是獲取到Kinect設(shè)備上人體當(dāng)前做出的一個(gè)動(dòng)作信息;另一部分是將人體的動(dòng)作信息處理后,將數(shù)據(jù)通過(guò)電腦的串口將數(shù)據(jù)傳輸?shù)絎IFI模塊的主機(jī)端。下位機(jī)從機(jī)部分的軟件程序是獲取到WIFI從機(jī)模塊的信息然后,驅(qū)動(dòng)舵機(jī)做出相應(yīng)的轉(zhuǎn)動(dòng),實(shí)現(xiàn)人體動(dòng)作和舵機(jī)動(dòng)作的一個(gè)對(duì)應(yīng),從而完成人機(jī)交互實(shí)現(xiàn),其軟件控制更適合廣泛的硬件配置,進(jìn)而提高實(shí)際應(yīng)用的普及力度和市場(chǎng)需求。
圖4 .1
手勢(shì)識(shí)別算法設(shè)計(jì)∶在Kinect應(yīng)用程序中手勢(shì)識(shí)別部分的算法是整個(gè)系統(tǒng)應(yīng)用的核心,好的程序結(jié)構(gòu)可以是的程序具有健壯性、可維護(hù)性以及模塊化。因此在手勢(shì)識(shí)別算法設(shè)計(jì)中,采用了模塊化程序設(shè)計(jì)的思想和相應(yīng)劃分,從而將這部分的軟件設(shè)計(jì)內(nèi)容分為初始化子程序、平滑處理子程序、最近用戶獲取子程序、手勢(shì)識(shí)別子程序、模擬鼠標(biāo)子程序等模塊。初始化子程序用于對(duì)Kinect設(shè)備初始化和注冊(cè)數(shù)據(jù)流事件;平滑處理子程序,用于減少用戶快速運(yùn)動(dòng)過(guò)程中偶爾發(fā)生的關(guān)節(jié)點(diǎn)跳躍;最近用戶獲取子程序,用于在多用戶存在時(shí)查找離Kinect最近的、被跟蹤的骨骼,有利于相應(yīng)運(yùn)動(dòng)的捕捉,方便程序后續(xù)的處理及過(guò)渡的連貫性;手勢(shì)識(shí)別子程序,用于計(jì)算判斷用戶當(dāng)前的動(dòng)作是否是約定的姿勢(shì);模擬鼠標(biāo)子程序,用于將手的骨骼跟蹤坐標(biāo)點(diǎn)映射為鼠標(biāo)的屏幕坐標(biāo),同時(shí)根據(jù)約定的手勢(shì)來(lái)觸發(fā)鼠標(biāo)的點(diǎn)擊事件。手勢(shì)識(shí)別算法的流程圖如圖4.1手勢(shì)識(shí)別算法的流程圖所示。
對(duì)于手勢(shì)識(shí)別算法的調(diào)試主要是對(duì)深度圖像獲取部分進(jìn)行調(diào)試,為了方便調(diào)試通常會(huì)為現(xiàn)有的程序工程添加Kinect自帶的Microsoft.Kinect.Toolkit.Controls庫(kù),這個(gè)庫(kù)里包含較多的控件可以直接調(diào)用。KinectUserViewer控件顯示是用戶在Kinect識(shí)別范圍中的深度圖像數(shù)據(jù),Kinect是否追蹤到用戶,是根據(jù)能否看到相應(yīng)的影像。
上位機(jī)串口通信部分的程序調(diào)試,為了方便上位機(jī)串口通信的測(cè)試,在調(diào)試過(guò)程中使用“虛擬串口軟件”將一個(gè)COM進(jìn)行虛擬成兩個(gè)虛擬COM1和COM3。打開(kāi)手勢(shì)識(shí)別軟件和“串口調(diào)試助手”,將之前通過(guò)虛擬串口軟件虛擬出來(lái)的兩個(gè)串口COM1和COM3,分別作為手勢(shì)識(shí)別軟件和“串口調(diào)試助手”所連接的端口,因?yàn)樵诨瑒?dòng)過(guò)程中將會(huì)有大量的數(shù)據(jù)通過(guò)串口進(jìn)行發(fā)送,所以將串口的波特率設(shè)置為115200,檢測(cè)位為無(wú),數(shù)據(jù)位為8位,停止位為1位。調(diào)試完成后機(jī)器人能實(shí)際跟隨手勢(shì)力運(yùn)動(dòng)。
測(cè)試者 機(jī)器人第一次右手垂直向下88度第二次左手垂直向上90度左手垂直向下90度右手垂直向上90度右手垂直向下90度右手垂直向下93度第三次左手垂直向上95度左手垂直向下95度右手垂直向上88度左手垂直向上90度左手垂直向下90度右手垂直向上90度右手垂直向下90度右手下擺左右42度第四次左手垂直向上93度左手垂直向下93度右手垂直向上92度左手上擺左右45度左手下擺左右45度右手上擺左右45度右手下擺左右45度左手上擺左右50度左手下擺左右48度右手上擺左右48度左手上擺左右45度左手下擺左右45度右手上擺左右45度右手下擺左右45度左手上擺左右48度左手下擺左右49度右手上擺左右42度右手下擺左右40度
本文設(shè)計(jì)實(shí)現(xiàn)了體感控制系統(tǒng)對(duì)人體手勢(shì)的識(shí)別,使用者可以通過(guò)做出的人體手勢(shì),由體感傳感器提取其動(dòng)作的深度圖像,PC端進(jìn)一步進(jìn)行算法處理獲得控制動(dòng)作,再與單片機(jī)進(jìn)行通信,將處理結(jié)束獲得的動(dòng)作傳遞給單片機(jī),單片機(jī)實(shí)現(xiàn)對(duì)操作對(duì)象的控制,同時(shí)支持個(gè)性化體感操作,提供全新的用戶體驗(yàn)。