【摘要】 傳統(tǒng)四軸飛行器的控制多為搖桿遙控器,存在便攜性差的問題,不利于對(duì)飛行器的控制。隨著移動(dòng)網(wǎng)絡(luò)技術(shù)的成熟、智能移動(dòng)終端的普及,移動(dòng)終端代替?zhèn)鹘y(tǒng)遙控器也是大勢(shì)所趨。智能移動(dòng)終端在便攜性、操作靈活性方面都優(yōu)于傳統(tǒng)遙控器。在智能移動(dòng)終端中,Andriod平臺(tái)具備以上優(yōu)勢(shì),所以基于Android平臺(tái),進(jìn)行了對(duì)四軸飛行器的控制系統(tǒng)的設(shè)計(jì),給出了硬件、軟件模塊方案。實(shí)驗(yàn)證明,對(duì)飛行器的控制能達(dá)到預(yù)期要求。
【關(guān)鍵字】 無人飛行器 Android 重力感應(yīng)
近年來,隨著新型材料以及飛行控制技術(shù)的發(fā)展,四軸無人飛行器得到迅猛發(fā)展。它具有結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定性好、承載能力強(qiáng)、低成本、高效益的特點(diǎn),在各個(gè)領(lǐng)域都有著廣闊的應(yīng)用前景。如今大多數(shù)無人飛行器仍需傳統(tǒng)遙控器來控制其飛行,傳統(tǒng)遙控器體積大、重量重,不便于攜帶,給對(duì)飛行器的控制帶來一定的不便性,為改善這一問題,提出利用移動(dòng)終端來代替?zhèn)鹘y(tǒng)遙控器。
雖然目前市面上已經(jīng)出現(xiàn)了可以由iPhone控制的四軸飛行器AR.Drone,但因?yàn)槠漭^高的成本阻礙了多數(shù)人選擇用iPhone。相對(duì)的,Android在高、中、低各端都有產(chǎn)品,能為飛行器的控制帶去便捷性和更多的選擇性。通過實(shí)際需求分析,探討了無人飛行器的軟、硬件實(shí)現(xiàn)方案。
一、系統(tǒng)框架
1.1 控制系統(tǒng)總體結(jié)構(gòu)
傳統(tǒng)四軸飛行器的控制系統(tǒng)通常由主控制模塊、飛行控制器、無線通信模塊、驅(qū)動(dòng)電機(jī)、遙控器等結(jié)構(gòu)組成,分為機(jī)載端控制部分和手持端控制部分。
1.2 控制原理
飛行控制器中的不同傳感器用來測(cè)量四軸飛行器的飛行狀態(tài)信息,主控制器根據(jù)傳感器反饋回來的狀態(tài)信息以及通過遙控器發(fā)射過來的控制信號(hào)進(jìn)行處理,使控制系統(tǒng)根據(jù)處理結(jié)果輸出5路PWM信號(hào),最終傳給電子調(diào)速器,電調(diào)通過對(duì)電流的控制來調(diào)整電機(jī)轉(zhuǎn)速,從而實(shí)現(xiàn)對(duì)飛行器的姿態(tài)控制。本文將傳統(tǒng)遙控器改為了安卓手持端來控制,其余原理不變。
二、系統(tǒng)模塊設(shè)計(jì)
2.1 主控制模塊
控制系統(tǒng)的核心是主控制模塊,它應(yīng)具有多路信號(hào)的高精度采集能力,輸出PWM脈沖控制信號(hào)能力以及其他應(yīng)有的通信信道和數(shù)據(jù)接口。本文采用意法半導(dǎo)體公司的STM32單片機(jī),它具有32位處理器,并自帶PWM波發(fā)生器。STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用而設(shè)計(jì)的 ARM Cor-tex-M3內(nèi)核。它主要負(fù)責(zé)采集傳感器檢測(cè)到的姿態(tài)角速率、三軸的線加速度和航向信息并實(shí)時(shí)解算;并通過無線通信模塊與地面進(jìn)行數(shù)據(jù)的傳輸,實(shí)現(xiàn)接收控制命令改變飛行狀態(tài)和下傳飛行狀態(tài)數(shù)據(jù)[1]。
2.2飛行控制模塊
飛行控制器采用深圳大疆公司的naza lite,它由3軸陀螺儀、3軸加速度計(jì)、地磁傳感器以及微控制芯片集成,用于識(shí)別高度和姿態(tài),從而實(shí)現(xiàn)鎖定高度和平穩(wěn)姿態(tài)等飛行控制功能。出于穩(wěn)定性考慮,在飛控模塊上加裝GPS,可以用全球衛(wèi)星定位系統(tǒng)來提供精準(zhǔn)定位。即使在微風(fēng)環(huán)境中,也可基本實(shí)現(xiàn)穩(wěn)定懸停,即使把飛行器拉離原位,飛行器也可自動(dòng)回位。
2.3 電機(jī)及電機(jī)驅(qū)動(dòng)模塊
針對(duì)飛行器設(shè)計(jì),選用了無刷電機(jī),由于飛行器的姿態(tài)控制需要快速響應(yīng),所以針對(duì)電機(jī),使用了無刷電調(diào)。利用STM32的PWM通道輸出1~2ms的方波脈沖,重復(fù)頻率為20~50Hz,輸出到電調(diào)的油門線(控制線)。由于是單向電調(diào),1ms表示0%的油門,2ms表示100%的油門,從而實(shí)現(xiàn)電機(jī)轉(zhuǎn)速的控制[2]。
2.4 無線通信模塊
最初使用的通信模塊為傳統(tǒng)的NRF24L01無線通信,在不使用功放的情況下,其具有10米左右的通信距離,該距離過短。同時(shí),其一次最多發(fā)送32個(gè)字節(jié),因此,若數(shù)據(jù)幀超過32個(gè)字節(jié),則需人為進(jìn)行分包處理,無法滿足圖像信息的傳送,因此首次嘗試將TP-LINK 3G無線路由器固定在飛行器上,充當(dāng)無線發(fā)射器,通過重新刷入OPENWRT系統(tǒng),讓路由器可以自動(dòng)把收到的各種信息轉(zhuǎn)到串口輸出。
2.5 手持端控制模塊
2.5.1 軟件設(shè)計(jì)
為了便于操控飛行器,擯棄傳統(tǒng)遙控器,改用移動(dòng)手持端來控制飛行器的飛行。總體以Andriod為平臺(tái)進(jìn)行軟件開發(fā)。在進(jìn)入運(yùn)行界面開始后,初始化系統(tǒng)參數(shù),以無線方式連接飛行器,完成對(duì)飛行器的飛行控制。運(yùn)行流程圖如圖1所示。其中,運(yùn)用Socket通信方式完成數(shù)據(jù)通信模塊的功能實(shí)現(xiàn),實(shí)現(xiàn)飛行器與終端控制系統(tǒng)的數(shù)據(jù)通信。
2.5.2 Socket通信
Socket又稱套接字,在程序內(nèi)部提供了與外界通信的端口,即端口通信。通過建立Socket連接,可為通信雙方的數(shù)據(jù)傳輸傳提供通道。Socket的主要特點(diǎn)有數(shù)據(jù)丟失率低,使用簡(jiǎn)單且易于移植。
Socket通信創(chuàng)建流程:
服務(wù)器端首先聲明一個(gè)ServerSocket對(duì)象并且指定端口號(hào),然后調(diào)Serversocket的accept()方法接收客戶端的數(shù)據(jù)。accept()方法在沒有數(shù)據(jù)進(jìn)行接收的處于堵塞狀態(tài)。(Socketsocket=serversocket.accept()),一旦接收到數(shù)據(jù),通過inputstream讀取接收的數(shù)據(jù)。
客戶端創(chuàng)建一個(gè)Socket對(duì)象,指定服務(wù)器端的IP地址和端口號(hào),通過inputstream讀取數(shù)據(jù),獲取服務(wù)器發(fā)出的數(shù)(OutputStreamoutputstream=socket.getOutputStream()),最后將要發(fā)送的數(shù)據(jù)寫入到outputstream即可進(jìn)行TCP協(xié)議的Socket數(shù)據(jù)傳輸。
2.5.3 重力感應(yīng)
Android系統(tǒng)支持多種傳感器類型,包括加速度傳感器、重力傳感器、陀螺儀、線性加速度傳感器、方向傳感器等,用以獲取設(shè)備的外界條件[3]。
加速度傳感器主要用于感應(yīng)手機(jī)的運(yùn)動(dòng),測(cè)量設(shè)備的加速度[4],包括重力加速度,單位是m/s2。主要捕獲三個(gè)參數(shù)values[0]、values[1]、values[2],分別對(duì)應(yīng)三個(gè)坐標(biāo)值x,y,z,X表示左右移動(dòng)的加速度,y表示上下移動(dòng)的加速度,Z表示垂直方向的加速度。
Android平臺(tái)下傳感器的開發(fā)比較固定,主要通過監(jiān)聽機(jī)制實(shí)現(xiàn),當(dāng)外部環(huán)境發(fā)生改變時(shí),Android系統(tǒng)會(huì)通知傳感器獲取外部環(huán)境的數(shù)據(jù),并傳送給監(jiān)聽器。開發(fā)步驟如下;
1、創(chuàng)建 SensorManager 對(duì)象
SensorManager對(duì)象代表系統(tǒng)的傳感器管理服務(wù),用來管理所要調(diào)用的傳感器。先調(diào)用 Content的 getSystemService(Context.SENSOR_SERVICE)方法獲取SensorManager 對(duì)象,再調(diào)用 SensorManager 的getDefaultSensor(int type)方法,獲取指定類型的傳感器。
2、注冊(cè)和注銷監(jiān)聽器
在Activity的onResume()方法中調(diào)用SensorManager的registerListener(Sensor EventListener listener,Sensor sensor,int rate)為指定傳感器注冊(cè)監(jiān)聽器。該方法三個(gè)參數(shù)中的listener監(jiān)聽傳感器事件的監(jiān)聽器,sensor代表傳感器對(duì)象,rate指定獲取傳感器數(shù)據(jù)的頻率。同樣,在Activity的onStop()方法中調(diào)用SensorManager的unregisterListener(SensorEventListener listener)方法注銷傳感器。
三、系統(tǒng)實(shí)現(xiàn)
3.1 硬件實(shí)現(xiàn)
根據(jù)之前的硬件系統(tǒng)模塊介紹,搭建出了四軸飛行器控制圖,見圖2。
3.2 軟件實(shí)現(xiàn)
控制系統(tǒng)軟件設(shè)計(jì)分為手動(dòng)控制和重力感應(yīng)控制,對(duì)應(yīng)不同的控制環(huán)境。手動(dòng)控制中點(diǎn)擊相應(yīng)按鈕控制飛行器的飛行走向,簡(jiǎn)單方便。此外,系統(tǒng)支持重力感應(yīng),再一次省去了點(diǎn)擊屏幕的步驟,能根據(jù)重力方向的不同,實(shí)現(xiàn)對(duì)飛行器的高度、方向的操控。
四、結(jié)束語
本文給出了基于安卓的無人飛行器的控制系統(tǒng)的設(shè)計(jì)方法,改變了傳統(tǒng)以遙控器控制飛行器飛行為主的控制方式。該系統(tǒng)能滿足飛行器起飛及懸停、降落等飛行姿態(tài)的控制要求,并且能根據(jù)手持端的不同姿勢(shì),利用重力感應(yīng)來控制飛行器前、后、左、右以及高度等不同的飛行要求,很好的解決了傳統(tǒng)的遙控器帶來的不便性,給無人飛行器更為廣泛的應(yīng)用打下夯實(shí)的基礎(chǔ)。
參 考 文 獻(xiàn)
[1] 劉乾,孫志峰.基于ARM的四旋翼無人飛行器控制系統(tǒng)[J].機(jī)電工程,2011,28(10):1237-1240.
[2] 謝義建,陳躍東,舒圣焱.基于STM32的四旋翼飛行器的設(shè)計(jì)與實(shí)現(xiàn)[J].四川理工學(xué)院學(xué)報(bào)(自然科學(xué)版),2014,27(3):42-45.
[3] 韓大偉 基于Android的小型飛行器終端控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2014.
[4] 于衛(wèi)紅 基于多Agent與Android傳感器的智能照明控制系統(tǒng)[J].計(jì)算機(jī)與數(shù)字工程,2013,06:1009-1012.