999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于WIFI的四旋翼微型勘測飛行器手機控制端設計

2016-04-26 11:57:29桂玲李路周黃晴張為民黃明飛王雙
科技視界 2016年10期

桂玲+李路+周黃晴+張為民+黃明飛+王雙雙

【摘 要】本文所設計的控制平臺以Android手機為基礎,以WIFI為通信網絡,從如何搭建Android開發(fā)環(huán)境入手,通過對界面布局、視頻流獲取、信息交互、異常捕獲、權限控制等幾個方面的應用設計,實現對四旋翼微型勘測器飛行等的控制,并能實時準確地對高清攝像頭、環(huán)境檢測傳感器所采集的圖像和文本數據進行傳輸與顯示,調試結果表明設計結果完全符合設計要求。

【關鍵詞】無線WIFI;Android手機;應用程序設計

0 引言

我國是一個資源大國,野外資源豐富,對野外資源實地勘測任務艱巨。由于野外資源分布廣,加之地形復雜惡劣、森林覆蓋率大、未知區(qū)域居多等這些不利條件都給野外工作人員帶來了極大不便。

本系統通過嵌入式Android手機平臺遠程控制四旋翼微型勘測飛行器,該平臺利用高清攝像頭來采集作業(yè)面環(huán)境圖像,利用多種環(huán)境探測器和GPS定位,探測環(huán)境實情;并通過WIFI將視頻和勘測信息實時回傳給手機,以便直觀地掌握當前的勘測情況。

為實現上述功能,整個勘測平臺搭載于四旋翼飛行器上,為保證整個平臺的穩(wěn)定,每個重要功能由單獨的處理器處理,整個系統構架如圖1所示:

其中,飛控主要解算姿態(tài)傳感器數據以獲得當前飛行器的姿態(tài)信息并調整電機轉速,保持飛行器的平穩(wěn)和飛行方向控制;主控,主要保證飛行器和控制端的連接穩(wěn)定,解析和創(chuàng)建數據包,并傳遞控制指令給飛控。WIFI是建立手持控制端與主控間通信的媒介。手持控制端是控制整個勘測飛行器的工作,在整個系統的大腦,本文將具體對它的設計做闡述。

1 系統分析

現在的智能手機一般有WiFi、藍牙、移動網絡三種通信方式,相比而言WiFi是最合適做控制的短距離通信協議。通信平臺通過寫入OpenWRT系統的TP-LINKWR703N路由器和手機無線連接。OpenWRT是嵌入式設備上運行的linux系統,附帶3000左右的軟件包,開發(fā)者無需在每一次修改后重新編譯,且用戶可以方便的自定義功能來制作固件。也可以方便的移植各類功能到openwrt下[1]。而Android操作系統是基于Linux系統研發(fā)的一款開源的手機操作系統,由操作系統、中間件、用戶界面和應用軟件組成。由于Android提供了豐富的封裝庫,編程時無需在意系統底層設計和兼容性,現已然在現今智能手機操作系統市場占有率為首位。

路由器里的OpenWRT系統帶有Mjpeg stream插件,可以把從USB攝像頭采集的圖像轉換成流媒體輸出,可以通過文件或者HTTP形式得到視頻。路由器帶有調試用串口引腳,通過配置系統文件可以讓路由器將網絡端口(TCP/IP協議)的數據經串口輸出,同樣也可以把串口的數據傳送的到網絡端口上。從而下位機(主控)通過串口便可以和上位機(手持控制端,如手機)的網絡端口實現信息的透傳。由此,手機端需要打開兩個連接端口,一個從Mjpeg-stream中獲得圖像信息,另一個和下位機通信。系統設計流程如圖2所示:

2 系統實現

2.1 搭建Android開發(fā)環(huán)境

2.1.1 安裝JDK

根據電腦的操作系統從Oracle公司官網下載對應的JDK;下載完成后根據安裝向導提示完成JDK的安裝。

2.1.2 環(huán)境配置

JDK安裝完成后,打開Windows系統的命令窗口,在其中輸入“java-version”,若在下面顯示了Java的版本號說明已經安裝成功;否則要手動配置系統環(huán)境。配置過程如下:按如下步驟打開系統環(huán)境變量設置窗口,計算機->屬性->更改設置->高級->環(huán)境變量,然后在系統變量處新建,變量名為“JAVA_HOME”,變量值中填剛才JDK安裝的路徑,如“C:\Program Files\Java\jdk1.8.0_25”;點擊確定后,再新建一個變量名為classpath,變量值為“.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar”;點擊確定后,找到變量Path,在變量值后加”;%HAVA_HOME%/bin“;最后通過命令窗口驗證JDK是否成功安裝。

2.1.3 開發(fā)工具

從Android下載適合電腦系統的集成ADT的Eclipse開發(fā)工具,解壓后便可直接打開Eclipse開發(fā)平臺。

2.2 新建Android應用程序

在Eclipse項目管理窗口點擊右鍵,依次New->Android Application Project->Next,根據新建工程向導設置應用名、工程名、包名和應用程序圖標等,所有需要設置的設置完成之后點擊Finish完成,至此應用程序的新建已經完成。

2.3 界面布局

顯示和控制是人機交互的重要環(huán)節(jié)。上位機UI操作界面包括攝像頭舵機俯仰左右轉動、飛行器前后左右飛行、傳感器數據顯示和圖像畫面顯示。前三項分別用Button(按鍵)、TextView(文本)、ImageView(圖片)控件即可實現;視頻圖像即通過繼承SurfaceView類在屏幕上顯示實時圖像。

整個布局以RelativeLayout(相對布局)為父本,在其中分別放置子控件Button(按鍵控件)、ImageView(圖片控件)和TextView(文本控件),設置控件大小、添加控件ID和其在父控件的位置。新建MySurfaceView.class繼承SurfaceView類,添加自定義的控件到布局文件里,設置高度和寬度為“fill_parent”(填充父本)并添加ID。

添加控制按鍵:

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_marginLeft="20dp"

android:layout_marginTop="70dp" />

第1行添加控件ID,ID號為32位的常量,通常由編譯工具自動生成存于R.java里;第2行、3行分別設置控件寬高,余下4行設置控件在父本中的位置。

添加自定義的控件:

android:id="@+id/mySurfaceViewVideo"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

至此,界面布局已經基本完成,在Activity中加載布局文件即完成了整個布局的設置[2-3]。

2.4 視頻流獲取

在對路由器進行開發(fā)時,本文在OpenWRT系統中裝了mjpg-streamer應用,這樣便能方便地把攝像頭所采集的數據轉換為視頻流[2]。mjpg-streamer可以通過文件或者是HTTP方式訪問linux UVC兼容攝像頭。為此,要在MySurfaceView.class里新建線程用于接收圖像數據,在接收之前需要建立一塊緩存區(qū),用于存放接收到的數據。以URL發(fā)起請求,然后等待服務器(路由器)返回應答。新建單獨的線程完成視頻流的獲取與圖像顯示[4]。

主要代碼如下:

url = new URL(urlstr);

urlConn = (HttpURLConnection) url.openConnection();

read = urlConn.getInputStream().read(buffer, 0, readSize);

以上代碼必須捕獲異常。

服務器應答后,接下來就要解析出圖片數據并顯示到屏幕上。由于服務器應答是HTTP超文本傳輸協議,我們需要解析出圖像數據。JPEG圖像每個標記都是由兩個字節(jié)組成,其中,前一個字節(jié)固定值0xFF,0xFF 0xD8標記圖像開始,0xFF 0xD9標記圖像結束。截取中間段即為圖像信息,然后通過轉碼轉成Bitmap圖像,轉換圖像大小,繪制圖像,主要代碼如下:

Canvascanvas = surfaceHolder.lockCanvas() ; //獲得canvas對象

Bitmap bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(jpg_buf));

mBitmap = Bitmap.createScaledBitmap(bmp, width, height, false);

canvas.drawBitmap(mBitmap,(mScreenWidth-width)/2,(mScreenHeight-height)/2, null);

surfaceHolder.unlockCanvasAndPost(canvas); //釋放canvas鎖,并且顯示視圖

2.5 信息交互

Activity生命周期里,啟動Activity時系統會先調用onCreate方法,Activity退出時會調用onDestroy方法。通常在onCreate方法里進行按鍵綁定、變量初始化等一系列Activity初始化操作,而在onDestroy方法里釋放資源。

2.5.1 綁定按鍵

在MainActivity.class的onCreate方法里為控件綁定監(jiān)聽器,這樣當這個按鍵被按下時系統會調用這個監(jiān)聽函數,便可以在按鍵被按下時做出相應的反應。

按鍵綁定監(jiān)聽器:

findViewById(R.id. button_front).

setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

sendfrontData();

}

});

在onClick方法里寫按鍵操作的代碼,當綁定的按鍵被按下此段代碼將會被調用。

2.5.2 獲取輸入流和輸出流

新建一個Socket連接,此連接用來和下位機串口間數據透傳。依據OpenWRT里設置的地址和端口打開Secket連接,并獲得Socket的輸入流和輸出流,主要代碼如下:

mSocketClient = new Socket(CtrlIp, CtrlPort);

inStream = mSocketClient.getInputStream();

outStream = mSocketClient.getOutputStream();

打開Socket連接,獲得當前Socket的輸入輸出流。以上代碼必須捕獲異常。新建接收線程,接收下位機發(fā)來的數據,并解析和更新UI。

new Thread(){

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

while(true) {

inStream.read(buffer);

parseData(buffer);

}

}

}.start();

只有在run方法里寫入自己的代碼,當線程運行后會直接調用run方法,整個代碼在循環(huán)體內,Socket接收到數據后,在線程調用數據解析方法解析數據并更新到UI界面。

2.5.3 UI更新

下位機發(fā)來的數據有狀態(tài)信息和其他數據信息,主要顯示方式為文本顯示。Android系統里,文本顯示由TextView控件實現,若要顯示文本到屏幕,首先需要獲得文本控件的ID號,然后再設置控件顯示的文本內容以及字體大小和字體類型、排列方式等,同樣TextView的屬性可以在layout布局文件里設置。

顯示文本到屏幕:

TextViewbt = (TextView) findViewById(R.id.textv);

bt.setText(str);

第一句獲得文本控件textv的ID,第二句,通過setText()為此控件設置文本內容。

2.6 異常捕獲

當退出應用時用戶需要釋放掉之前使用的資源,在MainActivity.class里復寫onDestroy方法,在onDestroy方法里斷開Socket連接和關閉輸入輸出流:

try {

if(mSocketClient!=null)

{

mSocketClient.close();

inStream.close();

outStream.close();

mSocketClient = null;

}

} catch (IOException e) {

e.printStackTrace();

}

mThreadClient.interrupt();

2.7 權限控制

Android 提供了豐富的 SDK(Software development kit),開發(fā)人員在對 Android 系統資源的訪問需要有相應的訪問權限,這個權限就稱為 Android 應用程序權限,由AndroidManifest.xml文件管理,它在應用程序設計時設定,在 Android 系統中初次安裝時即生效。此應用需要以下權限:

<!-- internet -->

STATE"/>

STATE"/>

3 應用調試

筆者把該控制平臺與飛行器一起來檢測其工作性能,打開手機調試功能,連接電腦,并安裝好手機驅動,然后在Eclipse里選中項目右擊,選Run as -> Android Application,直接在手機上運行程序,調試如圖3所示。測試表明該平臺能在Android手機終端的控制下攝像頭上下左右旋轉90°拍攝圖像信息;飛行器能平穩(wěn)地前進、后退和左右旋轉飛行;并對有害可燃氣體濃度檢測和PM2.5等顆粒污染物環(huán)境參數信息檢測快速、準確;GPS定位系統精準,室內精度為2.0m以下而室外為0.5m以下。數據,視頻顯示正常,各項性能完全符合設計的要求并能方便地拓展其功能和應用。

【參考文獻】

[1]向誠,謝峰粹.基于WIFI和Android的智能探測車設計[J].電子技術應用,2013.12:82-85.

[2]張余,編著.Android網絡開發(fā)從入門到精通[M].清華大學出版社,2014.

[3]候國照.基于OpenWrt的無線傳感器網絡協議研究與實現[D].哈爾濱:哈爾濱工業(yè)大學,2009.02:102-105.

[4]王雷,藍箭,陳雪娟.基于Android 平臺的無線WiFi控制方法[J].微型電腦應用,2012,7:58-61.

[責任編輯:王楠]

主站蜘蛛池模板: 97久久精品人人做人人爽| 亚洲v日韩v欧美在线观看| 国产99视频精品免费视频7| 国产在线第二页| 国产资源免费观看| 国产成人久久综合一区| 天天做天天爱天天爽综合区| 国产粉嫩粉嫩的18在线播放91| 国产丝袜第一页| 成人午夜精品一级毛片| 另类欧美日韩| 亚洲国语自产一区第二页| jizz国产视频| 亚洲最大情网站在线观看 | 成人无码区免费视频网站蜜臀| 91精品国产91久无码网站| 国产精品自拍合集| 国产精品区网红主播在线观看| 秋霞午夜国产精品成人片| 色婷婷综合激情视频免费看| 日韩国产无码一区| 毛片在线播放网址| 婷婷开心中文字幕| 亚洲人成网站色7777| 亚洲成人在线免费| 成人毛片在线播放| 456亚洲人成高清在线| 亚洲无码A视频在线| 国产精品综合色区在线观看| 亚洲第一区欧美国产综合| 国产日韩丝袜一二三区| 亚洲第一在线播放| 国产精品第| 国产农村1级毛片| jizz在线免费播放| 亚洲中文字幕无码爆乳| 久久国产成人精品国产成人亚洲| 欧美日韩一区二区在线播放 | 亚洲天堂久久新| 国产又大又粗又猛又爽的视频| 老司国产精品视频91| 中国精品自拍| 欧美国产在线看| 蜜桃视频一区二区三区| 亚洲天天更新| 综合色区亚洲熟妇在线| 亚洲欧美一区二区三区蜜芽| 国产毛片久久国产| 亚洲乱码在线播放| 国产在线无码一区二区三区| 欧美一区二区三区不卡免费| 欧美啪啪精品| 九九热精品在线视频| 国产乱人伦AV在线A| 日韩精品一区二区深田咏美| 国产亚洲高清在线精品99| 欧洲亚洲欧美国产日本高清| 国产熟睡乱子伦视频网站| 99ri精品视频在线观看播放| 国产毛片高清一级国语| 伦精品一区二区三区视频| 国产欧美网站| 男女性色大片免费网站| 亚洲第一色网站| 国产免费a级片| 国产在线观看一区精品| 高清无码一本到东京热| 日韩国产亚洲一区二区在线观看| 欧美亚洲中文精品三区| 青青青国产视频手机| 中文字幕人成乱码熟女免费| 无码专区在线观看| 日韩免费中文字幕| 亚洲伦理一区二区| 亚洲日韩精品无码专区97| 亚洲精品午夜无码电影网| 亚洲视频四区| 网久久综合| 狼友av永久网站免费观看| 国产在线观看精品| 美女裸体18禁网站| 91香蕉视频下载网站|