孔德肖,張晴暉,李俊萩,鄧祥忠,秦明明,鐘麗輝
(西南林業(yè)大學(xué)大數(shù)據(jù)與智能工程學(xué)院,云南昆明 650224)
智能車,也稱為輪式機器人,適合應(yīng)用于人類無法或較困難工作的環(huán)境。例如,可應(yīng)用于無人生產(chǎn)線,災(zāi)后救援,無人倉庫,地形勘測,服務(wù)機器人等領(lǐng)域[1]。選擇手機作為智能車的遠(yuǎn)程控制端是最便捷的[2]。本設(shè)計使用Android手機端對智能小車的行駛方向及行進(jìn)路線進(jìn)行控制,同時顯示小車采集的環(huán)境視頻。本系統(tǒng)具有很好的便捷性和易用性,在智能家居安防方面具有實用價值[3]。
圖1 系統(tǒng)總體框架圖
圖1為本設(shè)計的系統(tǒng)總體框架圖,由單片機、樹莓派和Android手機端組成[4-6]。STM32F103RCT6單片機接收手機端發(fā)送的控制指令,處理后對電機驅(qū)動板進(jìn)行控制,從而實現(xiàn)小車的前進(jìn)后退以及轉(zhuǎn)向;與MPU6050角度傳感器模塊連接讀取出小車姿態(tài)的原始數(shù)據(jù)并進(jìn)行處理,將處理后的數(shù)據(jù)加入PID控制以實現(xiàn)小車走直線,同時將每個時刻小車的姿態(tài)數(shù)據(jù)顯示在OLED顯示器上。樹莓派用于在小車行進(jìn)過程中進(jìn)行視頻拍攝,并將視頻數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)紸ndroid手機端進(jìn)行顯示。Android手機端程序基于Android Stduio平臺進(jìn)行開發(fā),實現(xiàn)了用戶與小車的交互,用戶可以通過虛擬按鍵、語音識別、重力感應(yīng)方式對小車進(jìn)行控制,同時查看小車行進(jìn)過程中采集的視頻信息。
圖2所示是STM32單片機供電電路,使用LM1117將外部接入的5 V電壓轉(zhuǎn)化成為3.3 V的電壓給STM32單片機供電。
直流電機功率較大,不能直接與單片機進(jìn)行連接,而且直流電機在轉(zhuǎn)動時存在回流,如果直接與單片機連接會燒壞單片機管腳,嚴(yán)重時還會使整個單片機最小系統(tǒng)都被燒壞。本次設(shè)計采用圖3所示的直流電機驅(qū)動電路,通過單片機管腳輸出的PWM信號對電機轉(zhuǎn)速進(jìn)行控制,可以保證電機工作所需的功率,同時又保護(hù)單片機不被損壞。
圖2 單片機電源供電電路
圖3 電機驅(qū)動電路
直流電機驅(qū)動電路使用2片IR2104半橋電機驅(qū)動芯片,通過74LS08與門芯片根據(jù)輸入端來控制其中一片IR2104半橋電機驅(qū)動工作。當(dāng)Ctrl-A管腳輸入為高電平,Ctrl-B管腳輸入為低電平時,PWM信號被送到左側(cè)IR2104電機驅(qū)動芯片上,4個MOS管形成的H橋驅(qū)動電路中Q2和Q4導(dǎo)通,電機正轉(zhuǎn);當(dāng)Ctrl-A管腳輸入為低電平,Ctrl-B管腳輸入為高電平時,PWM信號被送到右側(cè)IR2104電機驅(qū)動芯片上,4個MOS管形成的H橋驅(qū)動電路中Q3和Q1導(dǎo)通,電機反轉(zhuǎn)。電機驅(qū)動邏輯如表1所示,當(dāng)PWM輸入的占空比為0時,電機處于停止?fàn)顟B(tài)[3]。當(dāng)PWM輸入的占空比為0~100之間時,可以使用控制管腳來控制電機正轉(zhuǎn)、反轉(zhuǎn)和停止。
圖4所示為核心控制器與其他硬件模塊的連接圖,以STM32F103RCT6作為控制器和數(shù)據(jù)處理器,外圍連接MPU6050模塊、OLED顯示模塊、WiFi模塊、E3F-DS30C4測距模塊、電機驅(qū)動板、攝像頭舵機和電機編碼器。
MPU6050模塊用于測量小車姿態(tài)的原始數(shù)據(jù);MPU6050模塊初始化成功后,OLED顯示模塊即顯示
表1 電機驅(qū)動邏輯表
圖4 STM32與外圍硬件系統(tǒng)連接圖
小車每個時刻的姿態(tài)數(shù)據(jù);WiFi模塊實現(xiàn)單片機與Android手機的連接;電機驅(qū)動板用于控制電機轉(zhuǎn)速和小車轉(zhuǎn)向;電機編碼器用于測量車輪轉(zhuǎn)速和所轉(zhuǎn)圈數(shù);ESF-DS30C4紅外測距模塊用于實現(xiàn)小車避障;攝像頭舵機控制攝像頭的轉(zhuǎn)向。
手機端可以設(shè)置小車自動行走的距離,圖5所示是控制小車走固定距離的流程圖。通過采集得到車輪旋轉(zhuǎn)圈數(shù)乘以車輪周長來控制小車所行走的距離。本設(shè)計通過記錄電機編碼器的值,而后轉(zhuǎn)換得到車輪旋轉(zhuǎn)圈數(shù)。經(jīng)過測量,該系統(tǒng)的小車輪子直徑為d=6.5 cm,小車周長為C=3.14d,輪子每轉(zhuǎn)一圈對應(yīng)780個編碼器值,所以計算小車所走距離公式為:X=N/780×C,N為記錄的電機編碼器值,將計算得到的X和Android手機端設(shè)定的距離值進(jìn)行比較,如果相等,則小車停止,否則定時器繼續(xù)記錄編碼器的值直到小車停止。
圖5 小車走固定距離流程圖
控制小車走直線很有必要,因為若小車電機存在性能差異,會導(dǎo)致小車行走偏離直線。控制小車走直線主要有2種方法:直接使用電機編碼器的值進(jìn)行控制,但是此法在使用PID調(diào)節(jié)時不穩(wěn)定,不易實現(xiàn);另一種方法是通過使用角度傳感器獲得小車的偏航角,從而控制小車走直線。本系統(tǒng)采用了更易實現(xiàn)PID控制的第2種方法。如圖6所示,首先通過MPU6050角度傳感器獲得小車的初始偏航角,然后使用四元數(shù)算法得到小車行走過程中每個時刻的偏航角,再與初始偏航角進(jìn)行差值計算,放入PID控制器分別對左右兩側(cè)電機的轉(zhuǎn)速進(jìn)行控制,從而實現(xiàn)小車走直線。
圖6 小車走直線流程圖
四元數(shù)的表示式為:
q=[w,x,y,z]T|q|2=w2+x2+y2+z2=1
(1)
式中:w為實數(shù);(x,y,z)為三維空間向量。
通過四元數(shù)轉(zhuǎn)化得到歐拉角過程如下:
首先,通過旋轉(zhuǎn)軸和繞該軸旋轉(zhuǎn)的角度可以構(gòu)造一個四元數(shù),根據(jù)旋轉(zhuǎn)角度得到四元數(shù)。其中α表示旋轉(zhuǎn)角度,cos(βx)、cos(βy)、cos (βz)表示旋轉(zhuǎn)軸在X、Y、Z方向上的分量,如式(2)所示。
w=cos(α/2),x=cos(βx)·sin(α/2)y=cos(βy)·sin(α/2),z=cos(βz)·sin(α/2)
(2)
然后,將四元數(shù)轉(zhuǎn)換成為歐拉角[7-8]。其中Roll、Yaw、Pitch分別表示物體繞x、y、z軸旋轉(zhuǎn)的角度,如式(3)所示。
Roll=atan(2(wx+yz),1-2(x2+y2)) Yaw=arcsin(2(wy-zx)) Pitch=atan(2(wz+xy),1-2(y2+z2))
(3)
Android手機端使用Java語言編程,基于Android Studio平臺開發(fā)[9-10]。用戶在手機端首先選擇控制模式(分為按鍵控制、語音控制、重力感應(yīng)控制),然后控制小車的速度及方向,同時查看小車采集并上傳的實時視頻。
圖7所示為手機端控制界面,虛擬按鍵模式和重力感應(yīng)控制模式可以控制小車前進(jìn)、后退和轉(zhuǎn)向,語音控制模式主要用來控制小車行走固定距離和小車轉(zhuǎn)動固定角度[11]。視頻按鈕可以加載實時視頻畫面,2個進(jìn)度條分別調(diào)節(jié)攝像頭進(jìn)行水平轉(zhuǎn)動和垂直轉(zhuǎn)動,加速和減速按鈕進(jìn)行速度調(diào)節(jié),發(fā)送按鈕進(jìn)行控制命令的發(fā)送。
圖7 Android手機端控制界面
圖8 智能小車實物圖
本設(shè)計的視頻采集智能小車實物如圖8所示。經(jīng)測試,該系統(tǒng)性能穩(wěn)定,用戶可以用手機控制小車行走,且在手機端可查看小車采集的現(xiàn)場視頻。
手機端虛擬按鍵模式下可以通過按鍵來發(fā)送指令到單片機,來控制小車轉(zhuǎn)向、后退和前進(jìn)。當(dāng)前進(jìn)按鈕或后退按鈕一直被按下時,小車前進(jìn)或后退,當(dāng)放開按鍵時,小車停止;當(dāng)轉(zhuǎn)向按鈕被按下時,小車執(zhí)行轉(zhuǎn)向動作,按下的時間越長,轉(zhuǎn)向的角度越大,放開按鍵時小車停止轉(zhuǎn)向。
手機端重力模式下可以通過傾斜手機來控制小車前進(jìn)、后退和轉(zhuǎn)向。手機前傾時小車前進(jìn);手機后仰時,小車后退;手機向左切斜時小車左轉(zhuǎn),手機向右傾斜時小車右轉(zhuǎn);手機處于水平狀態(tài)時小車停止。
表2是語音識別發(fā)送數(shù)據(jù)表,如果語音識別轉(zhuǎn)換為字符串與已定義的語音數(shù)據(jù)幀匹配,則調(diào)用數(shù)據(jù)發(fā)送線程進(jìn)行控制命令的發(fā)送,如果不匹配則通過語音提醒用戶進(jìn)行重新輸入。在該模式下,可以通過語音控制小車行走的固定距離和固定角度,測試結(jié)果如表3和表4所示。
表2 語音識別發(fā)送數(shù)據(jù)表
表3 小車走固定距離測試表
表4 小車轉(zhuǎn)固定角度測試表
本文設(shè)計的智能小車使用STM32單片機作為核心控制器,Android手機端作為用戶控制端,樹莓派實時拍攝監(jiān)控視頻。經(jīng)過測試,本系統(tǒng)的硬件部分和軟件部分具有良好的協(xié)調(diào)性,小車能夠即時執(zhí)行Android手機端發(fā)送的各種控制指令,實時視頻傳輸具有良好實時性和穩(wěn)定性。