隨著各種科學(xué)技術(shù)的不斷提高,自動(dòng)化技術(shù)的不斷加深,智能遙控技術(shù)將跨領(lǐng)域應(yīng)用,并深入普及。機(jī)器人小車的研究是移動(dòng)機(jī)器人分支的一部分,是一項(xiàng)涉及到計(jì)算機(jī)技術(shù)、傳感技術(shù)、通訊技術(shù)等相關(guān)技術(shù)的綜合系統(tǒng)。它的主要功能是利用無線網(wǎng)絡(luò)視頻技術(shù)實(shí)現(xiàn)識(shí)別路徑,控制車速及操縱轉(zhuǎn)向等。
小車采用STM32單片機(jī)作為主制器,通過一款Wifi射頻模塊RT5350實(shí)現(xiàn)遠(yuǎn)程視頻畫面的傳輸,整個(gè)項(xiàng)目涵蓋的知識(shí)面廣,包括單片機(jī)編程技術(shù),OpenWrt路由器系統(tǒng)以及Windows上位機(jī)軟件開發(fā)等等不同技術(shù)領(lǐng)域。下面分為三個(gè)層面來介紹視頻小車的實(shí)現(xiàn)方法:
(1)底層驅(qū)動(dòng)層:以STM32單片機(jī)實(shí)現(xiàn)對(duì)小車的驅(qū)動(dòng)控制;
(2)中層傳輸層:借助RT5350路由器平臺(tái)傳輸控制命令以及視頻流;
(3)頂層控制層:在Windows平臺(tái)實(shí)現(xiàn)對(duì)小車的控制。
1、底層驅(qū)動(dòng)層
小車整體是實(shí)現(xiàn)STM32單片機(jī)控制小車電機(jī)的運(yùn)動(dòng)和控制攝像頭的舵機(jī)云臺(tái)的運(yùn)動(dòng)。由于STM32單片機(jī)提供的電流非常微小,不足以讓小車動(dòng)起來,所以需要電機(jī)驅(qū)動(dòng)模塊,這里使用了L298N模塊驅(qū)動(dòng)小車的直流電機(jī)。
1.1、電機(jī)驅(qū)動(dòng)原理
小車左輪右輪上分別配有兩個(gè)電機(jī),左輪電機(jī)A與右輪電機(jī)B的正轉(zhuǎn)、反轉(zhuǎn)和停止決定著小車的運(yùn)動(dòng)模式。而STM32單片機(jī)4根電機(jī)控制信號(hào)線連接著L298N的IN1~I(xiàn)N4,另外兩根PWM調(diào)速信號(hào)線連著ENA和ENB。電路圖詳情見圖1。
圖1 電路原理圖
輸入信號(hào)線IN1和IN2控制電機(jī)A的運(yùn)動(dòng),直流電機(jī)A接OUT1和OUT2。同理,IN3和IN4合起來控制了電機(jī)B的運(yùn)動(dòng)。對(duì)應(yīng)小車的對(duì)應(yīng)的運(yùn)動(dòng)模式詳情見表1。
表1小車的對(duì)應(yīng)的運(yùn)動(dòng)模式
1.2、電機(jī)調(diào)速原理
如上圖1中L298N上還有有ENA和ENB兩個(gè)信號(hào)輸入端口,這兩個(gè)端口的作用是控制信號(hào)的使能,低電平有效。只有當(dāng)信號(hào)線拉低時(shí)候,L298N才會(huì)遵循表1中列出的運(yùn)動(dòng)模式。
由于L298N有控制使能的信號(hào)線,則可以通過控制ENA和ENB的信號(hào)來進(jìn)行PWM調(diào)速。原理是開關(guān)管在一個(gè)周期T的時(shí)間內(nèi)導(dǎo)通的時(shí)間為t,那么電機(jī)兩端的平均電壓U=V*t/T=aV。其中,a=t/T(占空比),V是電源電壓。電動(dòng)機(jī)的轉(zhuǎn)速與電動(dòng)機(jī)兩端的電壓成正比,而電動(dòng)機(jī)兩端的電壓與控制波形的占空比成正比,因此電動(dòng)機(jī)的轉(zhuǎn)動(dòng)速度與PWM信號(hào)的占空比成比例,信號(hào)的占空比越大電動(dòng)機(jī)轉(zhuǎn)動(dòng)得越快。
1.3、云臺(tái)驅(qū)動(dòng)原理
云臺(tái)控制攝像頭的運(yùn)動(dòng),這里采用了MG995舵機(jī)云臺(tái)。二自由度的MG995舵機(jī)云臺(tái)是一款扭矩大、性價(jià)比高的小型云臺(tái),可以在水平方向和垂直方向做180°的二自由度運(yùn)動(dòng)。安裝上攝像頭可以實(shí)現(xiàn)圖像監(jiān)控、圖像識(shí)別和定位追蹤等功能;加裝超聲波測(cè)距傳感器或紅外傳感器可以組合成一體化探測(cè)裝置,使機(jī)器人能感測(cè)周圍的障礙物,從而可以實(shí)現(xiàn)機(jī)器人自動(dòng)避障功能。
舵機(jī)云臺(tái)驅(qū)動(dòng)原理也是PWM調(diào)速信號(hào)控制,舵機(jī)最早用于船舶上實(shí)現(xiàn)特定的轉(zhuǎn)向功能,由于通過程序可以控制其連續(xù)轉(zhuǎn)角,因而被廣泛應(yīng)用在智能小車和機(jī)器人等關(guān)節(jié)運(yùn)動(dòng)上。舵機(jī)的控制信號(hào)周期為20ms的脈寬調(diào)制信號(hào),脈沖寬度0.5~1.5ms相對(duì)應(yīng)的舵盤位置為0~180°,這個(gè)過程呈線性變化。給舵機(jī)提供周期為20ms寬度在0.5~1.5ms中的某個(gè)的脈寬信號(hào),舵機(jī)的輸出軸就會(huì)保持相對(duì)應(yīng)角度。無論外界轉(zhuǎn)矩怎么改變,輸出軸的位置不會(huì)改變。除非提供一個(gè)新的脈寬信號(hào),舵機(jī)才會(huì)改變輸出角度到新的對(duì)應(yīng)位置上。
在STM32單片機(jī)上給出兩條信號(hào)線分別連接水平方向和垂直方向上的兩個(gè)舵機(jī),通過調(diào)制出周期為20ms寬度在0.5~1.5ms的PWM信號(hào)即可控制舵機(jī)在兩個(gè)方向上的角度,即可控制云臺(tái)攝像機(jī)的位置。初始化時(shí)將脈寬調(diào)制到1.5ms,使舵機(jī)在90度的中間位置,程序正常運(yùn)行時(shí)通過上位機(jī)的指令來調(diào)整脈寬的寬度來控制舵機(jī)相應(yīng)的位置。
1.4、小車實(shí)物展示
實(shí)物見圖2。
圖 2 ?視頻小車實(shí)物圖
2、中層傳輸層
傳輸層是完成對(duì)控制命令的傳輸,是連接小車和電腦的橋梁,同時(shí)也負(fù)責(zé)視頻畫面的采集和編碼,這里用Ralink公司的一款RT5350路由器芯片完成工作。RT5350平臺(tái)是基于MISP的Linux系統(tǒng),和我們的PC配置類似,有必要的CPU、內(nèi)存和硬盤。CPU是MIPS架構(gòu)360M主頻RT5350芯片,內(nèi)存則是32MBSDRAM芯片,硬盤是8MB的FLASH閃存,采用的是基于Linux的OpenWrt路由器系統(tǒng)。內(nèi)核里安裝了UVC的USB攝像頭驅(qū)動(dòng)程序,并且運(yùn)行了Mjpg-Streamer視頻傳輸服務(wù)器軟件,實(shí)現(xiàn)了對(duì)視頻畫面的傳輸。控制命令的傳輸是通過Ser2net一款I(lǐng)P轉(zhuǎn)串口的軟件,實(shí)現(xiàn)IP協(xié)議與單片機(jī)命令的對(duì)接。
2.1RT5350芯片
RT5350的特征是性價(jià)比高,成本優(yōu)勢(shì)大,因而迅速占領(lǐng)了很大部分的低端路由器市場(chǎng)。由于支持USB2.0的擴(kuò)展,配合3G網(wǎng)卡能擴(kuò)展成3G路由器,配合USB攝像頭能擴(kuò)展成Wifi攝像機(jī),配合USB聲卡能擴(kuò)展成Wifi音響,還可以用來做Wifi智能插座。這里,正是運(yùn)用了配合USB攝像頭來實(shí)現(xiàn)視頻畫面的傳輸。
2.2、OpenWrt系統(tǒng)
OpenWrt是一個(gè)嵌入式Linux發(fā)行版,是三大主流路由器系統(tǒng)之一。很多智能路由器都采用了OpenWrt系統(tǒng),能在系統(tǒng)上實(shí)現(xiàn)很多第三方功能,如能實(shí)現(xiàn)校園網(wǎng)認(rèn)證登錄功能,能支持SAMBA服務(wù)器,能支持離線下載等等功能。
由于RT5350的普及性,OpenWrt系統(tǒng)已經(jīng)全面支持RT5350系統(tǒng)。大致編譯方法:在Ubuntu系統(tǒng)上下載OpenWrt的源碼,安裝相應(yīng)的交叉編譯器,配置相應(yīng)的驅(qū)動(dòng)及軟件即可編譯出所需要的OpenWrt系統(tǒng)。有了操作系統(tǒng),接下來安裝所需要的功能軟件。主要安裝的是MJPG-Streamer和Ser2net軟件,前者負(fù)責(zé)視頻傳輸,后者負(fù)責(zé)命令傳輸。
2.3、MJPG-streamer
MJPG-streamer是一款MJPG視頻流服務(wù)器,其中”input-uvc.so”輸入插件是Linux上的通用攝像頭插件,”ouput_http.so”輸出插件是網(wǎng)站服務(wù)器插件,這兩款插件配合使用,將USB攝像頭采集的視頻數(shù)據(jù)復(fù)制到了Http服務(wù)器中,用戶通過訪問服務(wù)器即可獲得USB攝像頭上的MJPG視頻流,再通過相應(yīng)的解碼即可獲得視頻圖像。
當(dāng)系統(tǒng)啟動(dòng)完成后,MJPG-streamer正常運(yùn)行,就可以在PC通過Http協(xié)議訪問相應(yīng)的視頻地址獲得MJPG視頻流數(shù)據(jù),火狐瀏覽器就可以播放MJPG視頻流,也可以參考MJPG視頻流協(xié)議寫出解碼程序。
2.4、Ser2net
Ser2net是運(yùn)行在Linux系統(tǒng)上一款I(lǐng)P轉(zhuǎn)串口軟件。由于電腦上通信協(xié)議是IP協(xié)議,而STM32單片機(jī)資源有限使用了串口通信協(xié)議,Ser2net正是溝通這兩種協(xié)議間的橋梁,有了它電腦就能通過IP編程對(duì)小車控制了。
大致原理是RT5350平臺(tái)開啟一個(gè)TCP服務(wù)端口比如2001,當(dāng)電腦端連接上此端口后,所有傳向2001端口的IP流數(shù)據(jù)都會(huì)轉(zhuǎn)發(fā)帶RT5350的串口上,所以發(fā)向RT5350串口的數(shù)據(jù)都會(huì)轉(zhuǎn)發(fā)到遠(yuǎn)程IP終端。而RT5350的串口連接上STM32單片機(jī)串口,所以Ser2net軟件實(shí)現(xiàn)了IP協(xié)議到小車的數(shù)據(jù)通路。
3、頂層控制層
3.1、通信協(xié)議定義
在STM32單片機(jī)里定義了控制協(xié)議,這個(gè)協(xié)議自己定義,比如發(fā)送數(shù)據(jù)包0xff,0xff,0x01,0x01代表前進(jìn)。前面兩位用于標(biāo)識(shí)頭碼,第三位標(biāo)識(shí)對(duì)象,第四位標(biāo)識(shí)數(shù)據(jù)值。
表2控制小車的通信協(xié)議
3.2、MJPG視頻解碼
小車上的RT5350模塊已經(jīng)提供了基于HTTP協(xié)議的MJPG視頻流,在上位機(jī)軟件端需要編寫軟件解碼視頻流即可獲得小車視頻畫面。這里簡單介紹一下在VS2010中C#的解碼思路:
第一步:Http請(qǐng)求視頻地址
第二步:獲取視頻流
第三步:找到JPEG頭和尾
第四步:將獲得的JPEG圖像顯示出來
3.3、控制小車電腦程序
小車的控制方法是創(chuàng)建一個(gè)TCP連接至小車的2001端口,向這個(gè)端口直接發(fā)送控制命令,參考表1的通信協(xié)議即可控制小車的運(yùn)動(dòng)。這里簡單介紹一下在VS2010中C#的編程思路:
第一步:創(chuàng)建一個(gè)套接字
第二步:連接上小車的IP地址和控制端口
第三步:繪出控制相應(yīng)的按鈕和按鍵
第四步:編寫響應(yīng)按鈕和按鍵的事件,通過已連接的套接字發(fā)送對(duì)應(yīng)的控制命令
3.4、主界面
主界面見圖4。
圖4 ?C#編寫的小車上位機(jī)軟件
評(píng)論
查看更多