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