湯莉莉,程升強(qiáng),黃偉
(1.湖北大學(xué)知行學(xué)院計(jì)算機(jī)與信息工程學(xué)院,湖北 武漢 430011;2.湖北航天技術(shù)研究院總體設(shè)計(jì)所,湖北 武漢 430040)
體感互動(dòng)控制視頻技術(shù),由于不再需要煩瑣的機(jī)械操作,只需通過(guò)肢體語(yǔ)言動(dòng)作,就可進(jìn)行應(yīng)用操作.例如通過(guò)一個(gè)手臂微微向上向下左右擺動(dòng),就可以輕松控制一臺(tái)電視機(jī)的轉(zhuǎn)換視頻節(jié)目,達(dá)到控制設(shè)備的目的.尤其是近幾年的體感控制類(lèi)游戲的興起,各大游戲公司都加大了對(duì)體感類(lèi)游戲的開(kāi)發(fā)力度,其中VR類(lèi)游戲更是受到人們的普遍關(guān)注.虛擬VR技術(shù)結(jié)合體感控制技術(shù),只需要手持控制器,戴上VR眼鏡,通過(guò)操作控制器進(jìn)行游戲操作,這對(duì)游戲用戶(hù)也是一種嶄新的游戲體驗(yàn)方式.本設(shè)計(jì)中,將利用STM32單片機(jī)把體感技術(shù)運(yùn)用于傳統(tǒng)的智能工程車(chē)中,為使用者提供一種全新的控制方式.通過(guò)控制器(手機(jī)或其他自制的控制器)的上下左右等的運(yùn)動(dòng)操作,不用繁瑣地通過(guò)點(diǎn)擊機(jī)械滑動(dòng)按鍵或者點(diǎn)擊手機(jī)上的APP等其他虛擬軟件按鍵,就可控制一臺(tái)工程車(chē)運(yùn)動(dòng).通過(guò)體感自動(dòng)控制系統(tǒng)可以開(kāi)辟一個(gè)新的遙控工程車(chē)體感控制系統(tǒng)方式,不再受限于目前傳統(tǒng)的紅外、藍(lán)牙、Wifi、無(wú)線(xiàn)等各種控制系統(tǒng)方式,更加便捷地控制一輛工程車(chē),同時(shí)也便于企業(yè)推廣遙控工程車(chē).在STM32F407VET6強(qiáng)大的硬件平臺(tái)下,結(jié)合實(shí)際的應(yīng)用場(chǎng)景,亦可以通過(guò)加裝其他一些模塊,如攝像頭模塊、語(yǔ)言模塊,拓寬工程車(chē)的應(yīng)用場(chǎng)景.
體感控制智能工程車(chē)可以實(shí)現(xiàn)的功能有:利用控制器端的MPU6050模塊,通過(guò)藍(lán)牙與工程車(chē)建立數(shù)據(jù)傳輸連接關(guān)系,達(dá)到通過(guò)操作控制器控制工程車(chē)行進(jìn)方向的目的.除此之外,為了便于控制,還增加了手機(jī)APP和搖桿按鍵兩種控制方式,可以根據(jù)實(shí)際需求進(jìn)行切換.
結(jié)合實(shí)際需求采用STM32F407VET6作為主控芯片;通過(guò)MPU6050模塊實(shí)現(xiàn)體感控制方式;輔助顯示采用的是0.96英寸的OLED模塊;電機(jī)驅(qū)動(dòng)方面采用比傳統(tǒng)的L298 N模塊更為精密的TB6612模塊進(jìn)行電機(jī)驅(qū)動(dòng),可以進(jìn)行較為精確的電機(jī)控制;在電機(jī)選擇方面,選擇帶編碼器的直流無(wú)刷電機(jī),通過(guò)編碼器結(jié)合Cortex-M4內(nèi)核中的定時(shí)器的編碼器模式[1],便于獲取工程車(chē)當(dāng)前的速度,對(duì)工程車(chē)的速度進(jìn)行控制;為了達(dá)到精確轉(zhuǎn)向的目的采用舵機(jī)完成這一過(guò)程.
圖1 控制端設(shè)計(jì)流程圖
圖2 小車(chē)端設(shè)計(jì)流程圖
1.1 控制器端設(shè)計(jì)如下圖所示,其中1、0表示鍵值;IIC與ADC表示外設(shè)與MCU建立數(shù)據(jù)通過(guò)該接口[2].系統(tǒng)運(yùn)行后,控制器端對(duì)整個(gè)系統(tǒng)的時(shí)鐘、GPIO以及其他使用的內(nèi)部硬件資源與外設(shè)進(jìn)行初始化.整個(gè)系統(tǒng)正常穩(wěn)定工作后,判斷最小系統(tǒng)板上的K1按鍵是否被按下和藍(lán)牙從機(jī)是否被手機(jī)藍(lán)牙連接,確定當(dāng)前工程車(chē)的控制方式是體感控制、遙桿控制還是手機(jī)APP方式進(jìn)行控制.
確定控制方式后,控制器端主控芯片就可以通過(guò)相應(yīng)的接口,獲取當(dāng)前模塊所傳輸?shù)臄?shù)據(jù),通過(guò)控制板上的藍(lán)牙傳輸給小車(chē)端,約定的數(shù)據(jù)傳輸格式為8位整型,高2位為控制方式(01為體感控制方式,10為遙桿按鍵控制方式),低4位為速度值.
1.2 小車(chē)端設(shè)計(jì)如圖2所示,小車(chē)端的設(shè)計(jì)流程為系統(tǒng)初始化穩(wěn)定工作后,藍(lán)牙從機(jī)接受來(lái)自控制器端的控制命令.STM32F407VET6通過(guò)串口接受到藍(lán)牙發(fā)送的數(shù)據(jù)時(shí),判斷當(dāng)前為哪種控制方式,再通過(guò)PID速度環(huán)進(jìn)行公式換算后,輸出相應(yīng)的PWM值給電機(jī)驅(qū)動(dòng)芯片.
舵機(jī)的控制直接通過(guò)TIM3輸出PWM波進(jìn)行控制,通過(guò)控制舵機(jī)轉(zhuǎn)動(dòng)的角度控制工程車(chē)的轉(zhuǎn)向.芯片與TB6612電機(jī)驅(qū)動(dòng)芯片的控制關(guān)系如表1[3].
表1 控制關(guān)系表
由表1可知,SBTY是整個(gè)系統(tǒng)的開(kāi)關(guān),當(dāng)其為低穩(wěn)壓電平時(shí),會(huì)自動(dòng)關(guān)閉整個(gè)控制模塊.ENA和ENB分別為2個(gè)直流穩(wěn)壓電機(jī)的實(shí)際使用功能引腳,實(shí)際上在使用中為2個(gè)PWM的輸入引腳.IN1、IN2、IN3和IN4分別是方向控制引腳,其中X代表高電平或低電平.
1.3 手機(jī)APP端設(shè)計(jì)本文中的設(shè)計(jì)流程中的智能手機(jī)平臺(tái)APP端的開(kāi)發(fā)設(shè)計(jì)是基于一個(gè)Android的系統(tǒng)語(yǔ)言進(jìn)行設(shè)計(jì)開(kāi)發(fā)的,通過(guò)編寫(xiě)好的Java設(shè)計(jì)語(yǔ)言在Eclipse平臺(tái)上完成設(shè)計(jì)工作流程.可以通過(guò)手機(jī)APP客戶(hù)端自行完成的停車(chē)設(shè)置和制動(dòng)操作主要有:
1)通過(guò)手機(jī)APP上的一個(gè)虛擬制動(dòng)按鍵功能,自動(dòng)控制一輛工程車(chē)的制動(dòng)行進(jìn)速度和方向;
2)通過(guò)APP上的發(fā)送欄直接發(fā)送命令進(jìn)行直接控制;
3)通過(guò)APP的接收欄可以顯示工程車(chē)當(dāng)前的速度[4].
本設(shè)計(jì)結(jié)合體感控制、搖桿按鍵控制以及手機(jī)APP控制為一體,以藍(lán)牙為通信數(shù)據(jù)傳輸方式[5],基于STM32F407VET6平臺(tái)設(shè)計(jì)一個(gè)工程車(chē),充分利用MCU的內(nèi)部的硬件資源,完成設(shè)計(jì)所需的全部要求,總結(jié)如下:
1)利用STM32F407VET6作為強(qiáng)大的硬件平臺(tái).
2)根據(jù)實(shí)際需求有3種控制方式可選擇:體感控制、搖桿按鍵控制和手機(jī)APP控制.
體感量和姿態(tài)驅(qū)動(dòng)控制器設(shè)計(jì)的主要原理:通過(guò)設(shè)計(jì)利用基于MPU6050的一個(gè)數(shù)字模擬器的運(yùn)動(dòng)量和姿態(tài)控制處理器(DMP),結(jié)合基于InvenSense 等所設(shè)計(jì)提供的一個(gè)比較通用化的嵌入式數(shù)字模擬運(yùn)動(dòng)量和姿態(tài)控制驅(qū)動(dòng)系統(tǒng)數(shù)據(jù)庫(kù),將原始的模擬運(yùn)動(dòng)量和姿態(tài)控制計(jì)算器的數(shù)據(jù)直接轉(zhuǎn)換成4個(gè)二元數(shù)據(jù)進(jìn)行控制輸出,得到4個(gè)二元的函數(shù)之后直接計(jì)算和控制輸出歐拉角,從而直接得到它的快速航向旋轉(zhuǎn)航向角(θYaw)、橫向快速翻滾旋轉(zhuǎn)俯仰角(θRoll)和航向旋轉(zhuǎn)俯仰角(θPitch),進(jìn)而直接得到一個(gè)體感姿態(tài)控制器當(dāng)前的實(shí)際運(yùn)動(dòng)量和姿態(tài)[6].其具體實(shí)現(xiàn)公式如下:
q0=quat[0]/q30
(1)
q1=quat[1]/q30
(2)
q2=quat[2]/q30
(3)
q3=quat[3]/q30
(4)
θPitch=asin(-2×q1×q3+2×q0×q2)×57.3
(5)
θRoll=atan2(2×q2×q3+2×q0×q1,-2×q1×q1-2×q2×q2+1)×57.3
(6)
θYaw=atan2(2×(q1×q2+q0×q3),q0×q0+q1×q1-q2×q2-q3×q3)×57.3
(7)
其中,公式中quat[0] ~quat[3]即為DMP解開(kāi)運(yùn)算后的4個(gè)二元數(shù).它是歐拉格式的,也就是浮點(diǎn)數(shù)放大了倍數(shù)的,所以只需要先計(jì)算除以230,其中q30是一個(gè)歐拉常數(shù)即為107 3741 824,即是230,然后可以帶入公式,計(jì)算出歐拉角.上述轉(zhuǎn)換計(jì)算公式的 57.3 是測(cè)量弧度的,該轉(zhuǎn)換也稱(chēng)為測(cè)量角度,即180/π,這樣轉(zhuǎn)換得到的計(jì)算結(jié)果以度為測(cè)量單位.4個(gè)方向0 ~ 90°對(duì)應(yīng)速度變化為0 ~ 3 m/s,起始位置為開(kāi)機(jī)所處的位置.
搖桿按鍵控制方式是將該模塊接入MCU的ADC(2個(gè)通道),利用模塊內(nèi)部的電位計(jì)(X軸與Y軸)處于不同位置時(shí)電壓不同,判斷當(dāng)前遙桿所處的位置以及運(yùn)動(dòng)變化進(jìn)而控制工程車(chē)的運(yùn)動(dòng)狀態(tài).X軸和Y軸2個(gè)方向的電壓變化值都在0 ~ 500 V之間,當(dāng)其處于中間位置時(shí)為(255 V,255 V),4個(gè)方向變化值(255~0 V或255~500 V)對(duì)應(yīng)的速度變化為0~3 m/s.
手機(jī)APP控制方式是利用手機(jī)端藍(lán)牙直接連接小車(chē)端的藍(lán)牙從機(jī)進(jìn)行控制操作的,在手機(jī)APP上進(jìn)行相應(yīng)的操作.
3)通過(guò)編碼器可以實(shí)時(shí)采集工程車(chē)的當(dāng)前速度,并上傳到控制器端OLED或APP端進(jìn)行顯示.
4)運(yùn)用PID技術(shù)對(duì)工程車(chē)進(jìn)行精確控制.在本系統(tǒng)設(shè)計(jì)中小車(chē)端的加速度控制環(huán)路所采用的函數(shù)是快速離散化的2個(gè)增量式函數(shù)PID,公式定義如下:
(8)
其中k為輸入采樣時(shí)刻序號(hào),k=0,1,…;uk為第k次采樣時(shí)刻的計(jì)算機(jī)輸出值;Kp為輸入控制器的輸入比例積分系數(shù);Ti為輸入控制器的輸入積分刻度時(shí)間,也可簡(jiǎn)稱(chēng)輸入積分刻度系數(shù);Td為輸入控制器的輸入微分刻度時(shí)間,也可簡(jiǎn)稱(chēng)刻度微分系數(shù);ek為第k次輸入采樣時(shí)刻每次輸入的輸出偏差系數(shù)值;ek-1為第k- 1次輸入采樣時(shí)刻每次輸入的輸出偏差系數(shù)值;ek-2為第k- 2次采樣時(shí)刻每次輸入的輸出偏差系數(shù)值.
在實(shí)際的應(yīng)用中uk為傳入的速度值,uk-1為當(dāng)前的速度值.△uk為兩速度的差值,即為傳輸給電機(jī)驅(qū)動(dòng)芯片TB6612的PWM值(對(duì)應(yīng)速度的PWM值已由宏定義,不同電機(jī)值不同).采用PID控制的目的是為了讓工程車(chē)快速穩(wěn)定地達(dá)到預(yù)設(shè)的速度.
5)利用舵機(jī)進(jìn)行工程車(chē)的精確轉(zhuǎn)向.
本設(shè)計(jì)方案難點(diǎn):
1)進(jìn)行控制器端代碼編寫(xiě)時(shí),各個(gè)模塊應(yīng)用的系統(tǒng)資源有疊加,需充分分配好系統(tǒng)資源,其中應(yīng)用層代碼設(shè)計(jì)邏輯時(shí)序性要求較高;
2)運(yùn)用PID進(jìn)行工程車(chē)的速度控制,其數(shù)據(jù)采集的準(zhǔn)確性要求比較高;
3)手機(jī)APP端代碼的編寫(xiě)[7].
關(guān)鍵技術(shù)主要有:
1)自動(dòng)體感溫度控制自動(dòng)技術(shù);
2)PID自動(dòng)控制;
3)手機(jī)客戶(hù)端APP的編寫(xiě);
4)藍(lán)牙通信協(xié)議.
本設(shè)計(jì)的調(diào)試分為兩個(gè)部分進(jìn)行,首先進(jìn)行是體感控制和搖桿按鍵控制部分的調(diào)試,然后是藍(lán)牙APP控制部分的調(diào)試.整體調(diào)試效果圖如圖3所示,控制端調(diào)試效果圖如圖4所示.
圖3 整體調(diào)試效果圖
圖4 控制端調(diào)試效果圖
4.1 體感控制和遙桿按鍵控制部分這部分的調(diào)試主要是小車(chē)端與控制器之間的調(diào)試,先給整個(gè)系統(tǒng)供電,待整個(gè)模塊可以穩(wěn)定工作后,按下藍(lán)牙主機(jī)的復(fù)位按鈕,等控制器上OLED上顯示MPU6050和藍(lán)牙模塊正常工作后,連接小車(chē)端的藍(lán)牙從機(jī)(連接成功與否,可以通過(guò)藍(lán)牙模塊上指示燈閃爍的頻率確定).然后通過(guò)最小系統(tǒng)板上的K1按鍵選擇控制方式為體感控制還是搖桿按鍵控制.
體感控制方式,藍(lán)牙連接穩(wěn)定正常后,通過(guò)改變控制器的姿態(tài),工程車(chē)可以相應(yīng)運(yùn)動(dòng),表示該部分的調(diào)試成功,同理?yè)u桿按鍵方式也相同.若失敗則查看硬件連接是否正常,代碼設(shè)置是否有誤.根據(jù)已查的錯(cuò)誤再進(jìn)行修改,修改完之后,再進(jìn)行調(diào)試.
4.2 藍(lán)牙APP控制部分這部分的調(diào)試是手機(jī)APP和工程車(chē)之間的調(diào)試,手機(jī)成功連接工程車(chē)的APP成功后,工程車(chē)上的藍(lán)牙APP指示燈閃爍提示.然后在手機(jī)界面上進(jìn)行相應(yīng)的虛擬按鍵操作,例如按下虛擬按鍵“前”之后,工程車(chē)可以向前行駛,該部分的調(diào)試算成功.若失敗則參考上一部分的調(diào)試方法再進(jìn)行調(diào)試.
本設(shè)計(jì)是在STM32F407硬件平臺(tái)上實(shí)現(xiàn)的一款基于體感控制的智能工程車(chē),主體設(shè)計(jì)分為控制器端和小車(chē)端兩部分,經(jīng)過(guò)方案論證后,采用MPU6050作為體感控制模塊,OLED模塊作為液晶顯示方式模塊,其中采用2個(gè)藍(lán)牙通信串口的HC-05模塊作為藍(lán)牙通信顯示方式控制模塊,在進(jìn)行工程車(chē)速度環(huán)控制時(shí)加入PID進(jìn)行精確控制.在體感控制的基礎(chǔ)上,拓展搖桿按鍵控制和藍(lán)牙APP控制2種方式,調(diào)試完成并可以實(shí)現(xiàn)全部的預(yù)設(shè)功能.