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

基于安卓的Multiwii無人機控制系統的實現

2017-12-28 15:45:13趙旭彭克勤北京信息科技大學計算機學院
數碼世界 2017年12期

趙旭 彭克勤 北京信息科技大學計算機學院

基于安卓的Multiwii無人機控制系統的實現

趙旭 彭克勤 北京信息科技大學計算機學院

近來消費級無人機市場的火爆催生了大量無人機愛好者對例如Multiwii的開源飛控的關注,而大量開發者的涌入也將無人機的使用范圍大大拓寬,這時常規的2.4Ghz遙控器控制方式則顯得捉襟見肘。使用同樣開源的安卓手機作為控制器可玩性就增加了許多。

Multiwii 無人機 安卓 控制器

1 概述

目前世界上主要的開源飛控系統有Pixhawk,APM,Multiwii,此項目挑選Multiwii飛控作為研究對象及控制板,主要原因有,Multiwii飛控體積相較APM和Pixhawk來說要小很多,而且價錢非常便宜,只要APM的一半左右,Pixhawk的三分之一,其次,雖然Multiwii功能比較少,但是用來控制小型的無人機(軸距210mm左右)是完全足夠的,而且使用手機進行基本的控制的話其他的功能是多余的,容易造成浪費,所以最終決定使用Multiwii飛控作為實驗對象。

本項目主要使用藍牙來控制無人機,和普通2.4G模塊控制不同,藍牙使用Serial port來進行通信,而2.4G模塊則是使用普通的pin口,通過讀取PWM值來進行控制,使用藍牙的優點是手機本身就自帶藍牙,所以減少了工作量,而且也無需再添加2.4G信號發射機,但缺點顯而易見,控制距離短,所以本項目控制的對象為相對較小的210mm軸距無人機,可以比較輕松的在室內進行飛行。

要使用藍牙控制則需熟悉Multiwii Serial Protocol,串口傳輸協議,簡而言之,只要藍牙發送的指令格式符合協議規定,藍牙終端就可以與Multiwii飛控板進行通信,控制。

2 程序結構

2.1 控制搖桿

使用雙搖桿對無人機進行控制;左搖桿主要控制控制油門和偏航(搖桿縱向,搖桿橫向)右搖桿控制俯仰和滾轉(搖桿縱向,搖桿橫向)除了左搖桿的縱向(Throt油門控制)其他方向均是放開搖桿后自動回中,因為如果油門舵也回中的話會對飛行器高度產生影響,使其不能維持原有高度。每個舵的舵量范圍為1000到2000,中點為1500。搖桿初始化時確定搖桿的中點位置,隨后搖桿運動后經過與中點的差值運算算出舵量,再整合到傳輸的message中,傳送至Multiwii飛控板。搖桿有一個使用范圍,即使手指挪動超出這個范圍搖桿也繼續在手指移動方向的圈上,不超出范圍(確保舵量最大值不超過2000,最小值不小于1000)。搖桿上方顯示各個信號的舵量(Throt油門,Yaw偏航,Pitch俯仰,Roll)使用ProgressBar來直觀的顯示舵量,方便操作。將ProgressBar的總量設為舵量的最大值,然后搖桿運動時產生的舵量顯示在ProgressBar中。搖桿舵量可以進行微調:假設當兩搖桿都在中央(舵量輸出都是1500)但是無人機始終會向一個方向偏移(或者多個方向),就說明舵量輸出不準確,使用微調來調整其數值,使無人機正常飛行。

2.2 控制器

部分包括Rocker和Controller兩部分。Rocker用來得到用戶所需的各舵的數值,創建時首先獲取中心點的坐標,在移動中通過與中心點坐標進行運算得到各個舵量的數值。Controller每經過一小段時間(50ms)獲取一次搖桿的舵量信息,并進行封裝,利用ProtocolSender將整個控制Message進行封裝,然后利用BluetoothService的Binder進行發送控制Message。

2.3 藍牙部分

藍牙模塊主要功能為接受Multiwii端發送的信息和向Multiwii端發送信息,發送使用向BlueToothGatt寫入特征值來實現,而接受消息則使用BlueToothGatt的回調函數中的OnCharactiesChange函數進行接收,接受內容也是BluetoothGatt中的特征值。次要功能則有,搜索BLE設備,連接BLE設備,和斷開BLE設備。藍牙模塊為一個Service,所以有一個對應的Binder來作為中間橋梁,作為Activities操作藍牙的接口。

2.4 通訊協議

通訊協議主要包含協議的指令集(Protocol),協議接收模塊(ProtocolHandler),協議發送模塊(ProtocolSender)。協議指令集(Protocol)最主要的功能就是提供對Multiwii進行通信中所需的所有控制指令(Command)和發送或接收數據的數據包頭部(Header)。協議接收模塊(ProtocolHandler)功能為:將藍牙接收的消息按照Multiwii Serial Protocol進行分析,根據不同的控制指令(Command)來對數據進行處理以得到不同的信息。協議發送模塊(ProtocolSender)的功能為將搖桿傳回的舵量,依據Multiwii Serial Protocol來進行封裝,將數據個數(舵的個數),控制指令(Command),封裝的各個舵量,校驗和封裝為一個Message,因為每次向Multiwii傳輸的Message長度不都一樣,所以先將Message放入ArrayList中,再調用listToArray轉為byte數組,至此整個Message封裝完畢。

2.5 遙控封裝

RC(RadioControl);RC 部分包括 Channel模塊和Data模塊。Channel為每個舵量原始值的封裝,通過搖桿移動時,對搖桿中間的值進行運算的到的數值做基本的封裝,Channel部分實現了輸出舵量在1000-2000之間,微調時也是通過調整Channel的value來實現輸出舵量的變化。Data模塊功能則是將各個舵量的Channel進一步進行封裝,為封裝控制Message做準備。Data分別將四個 Channel(Throt,Yaw,Pitch,Roll)的值取出,然后封裝進一個ArrayList中,再通過listToArray轉換為byte數組,至此完成封裝。

3 實現方法

3.1 搖桿

搖桿的父類為Button,但是修改Button的Shape,修改為圓形。搖桿需要實現的功能為搖桿隨手指移動但是并不是搖桿的中心一直在手指按壓的地方。有一個活動界限,當手指移動超出活動界限時,搖桿依舊在活動界限的邊緣。當實例化搖桿時先獲取搖桿的中心點坐標(centerValue_x,centerValue_y)。為實現搖桿功能,重寫了父類的onTouchEvent方法。實現隨動功能,當手指按下時,先獲取按下的坐標(x,y),再計算x,y與centerValue_x, centerValue_y的差值toCenter_x,toCenter_y,然后使搖桿 button invisible。實際上隨手指移動的并不是搖桿本身,而是搖桿的一個鏡像(ImageView),所以得到toCenter后開啟搖桿的繪圖緩沖,獲取搖桿的 bitmap(Bitmap.createBitmap(getDra wingCache())),隨后便釋放緩存,避免重復鏡像。隨后添加WindowManager.LayoutParams的參數,主要有gravity,x,y(x,y并不是需要繪制的圖形的中心,而是左邊緣和上邊緣),alpha(透明度),width,height。之前已經獲取了CenterValue所以x的值為cneterValue_x-getWidth/2,y為 centerValue_y-getHeight/2。之前已經獲取了搖桿的bitmap,所以使用setImageBitmap方法初始化拖拽用的imageView,隨后將這個ImageView利用windowManager的addView添加至屏幕中。拖拽的實現只需改變layoutParams的x,y再調用windowManager的updateViewLayout即可。拖拽過程中隨手指移動的imageView的x=moveX - toCenter_x - getWidth()/2,y=moveY - toCenter_y -getHeight()/2 - statusHeight(statusHeight為狀態欄的高度),只要刷新x,y值就可實現隨手指移動。邊界使用一個比搖桿大一些的圓形Button,中點與搖桿相同,位置在搖桿下方,可省去觸摸事件分配的代碼量。邊界主要作用是限制搖桿的移動,以及確保傳出的數值無論縱向橫向都是1000-2000。邊界的實現(舉x方向為列)當搖桿移動時的中心在邊界內時,按照正常的拖拽即可,當超出時,搖桿只會停留在邊界,但是如果手指在邊界外移動,搖桿也要在邊界移動,實現方法為利用相似三角形定理,moveX到centerValue_x的距離比上搖桿中心到center的距離 = x比上邊界半徑,由此可求出當手指移出邊界外,移動時,搖桿在邊界上的坐標,實現邊界的作用。搖桿移動時需隨時傳出舵量,搖桿上下移動時舵量的輸出大小是以中點1500來做運算。先得出每像素代表多少舵量(分量),然后用移動中的搖桿的中點坐標(layoutParams.x,layoutParams.y)減去中心點坐標(centerValue_X,centerValue_y)然后乘上分量,加或減去1500(在中點上方,或右方為加。在中點下方或左方為減)。手指離開屏幕時,從WindowManager中移除ImageView然后使原來的搖桿button visible

3.2 藍牙傳輸

BLE和Blutooth2.0的開發有一 些區別,由于BLE誕生較晚,所以整體設計語言也是以之后的回調機制為主,相較更為復雜,連接不再只是一段代碼,而是將一個遠程BLE設備抽象為一個BlueToothGatt對象,連接則變為與這個Gatt對象進行連接,之后再通獲取Gatt的BlueToothGattService,再 獲 取Service中的BlueToothGattCharacteristic作為傳輸介質,然后上位機和下位機通過對BlueToothGattCharacteristic的Value進行寫值,從而實現兩端的通信。在回 調 類(BluetoothGattCallback) 中 通 過 重 寫onCharacteristicChanged方法實現對接受到的信息進行處理。掃描設備同樣采用了回調機制(scanCallback),通過重寫scanCallbakc的onScanResult方法可獲取遠程BluetoothDevice列表,再通過用戶選擇來得到想要的遠程BluetoothGatt。

3.3 協議封裝

Multiwii Serial Protocol。要是想與FC進行通信,Message就必須遵循一定的格式,這個格式就是MSP(Multiwii Serial Protocol),協議分兩種,一種是向F'C發送消息,一種是從F'C獲得信息。發送消息的格式為 <header>,<direction>,<size>,<command>,<data>...,<crc>,Header為 $M 的字符串,direction 確定是從F'C獲取信息還是向Multwii發送消息,’>’為向FC發送消息,’<’為從FC獲取消息。size為data的數據長度,crc為Message的校驗和,校驗和的算法為:先將校驗和初始為(char)0再依次與size,command,每個data作異或運算(^=)最后得出校驗和。例如,我想獲取FC的版本,這條指令是想從FC獲取信息,所以direction為’<’,查詢MSP(MSP_IDENT)得command(MSP文檔中為message_id)為100(0x64)所以,因為是獲取信息,所以data為空,crc為command,所以整合得一個獲取FC版本的Message為”$M<0dd”(字符d的ascii碼為100)。

4 結語

安卓端使用搖桿控制無人機只是一種最基本的用法,這也就意味著在安卓端實現了了一個控制接口,而擁有控制接口之后就可以進行一些很有趣的拓展,例如在手機端實現一個環境的建模,手機就可以針對這個環境規劃這個環境的飛行路線,從而做到自動控制。

[1]郭霖.第一行代碼,北京: 人民郵電出版社,2016-12-01

[2]張元亮.深入理解Android系統,北京:清華大學書版社,2015-5

[3]Multiwii 官方文檔http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol

[4][美] Michael Margolis 著;楊昆云 譯.Arduino權威指南(第2版),北京: 人民郵電出版社,2015-03-01

本文由計算機學院大學生創新實踐基地建設項目資助,項目號:5111723400。

趙旭,男,本科,北京信息科技大學計算機學院。彭克勤,女,碩士,副教授,北京信息科技大學計算機學院。

主站蜘蛛池模板: 一级成人a毛片免费播放| 亚洲黄色片免费看| www.亚洲一区| 一本一道波多野结衣av黑人在线| 99热国产在线精品99| 日韩视频精品在线| 亚洲天堂区| 精品欧美一区二区三区久久久| 国产精品七七在线播放| 亚洲综合色婷婷| 国内精品一区二区在线观看| 亚洲精品麻豆| 欧美高清日韩| 午夜视频www| 久久精品国产999大香线焦| 欧美激情第一欧美在线| 欧美不卡视频在线| 亚洲精品你懂的| 国内精品免费| 亚洲精品国产综合99| 国产亚洲精| 99尹人香蕉国产免费天天拍| 亚洲视频免费播放| 激情无码视频在线看| 亚洲第一区欧美国产综合| 亚洲欧美日韩视频一区| 久久成人国产精品免费软件 | 97国产成人无码精品久久久| 日韩天堂视频| 亚洲一区二区视频在线观看| 国产高清无码第一十页在线观看| 国产在线观看第二页| 国产日韩精品欧美一区喷| 岛国精品一区免费视频在线观看| 色135综合网| 狠狠干综合| V一区无码内射国产| 国产在线视频福利资源站| 国产一区二区三区在线观看免费| 欧美高清国产| 国产精品无码制服丝袜| 青青青视频免费一区二区| 青草娱乐极品免费视频| 一级做a爰片久久毛片毛片| 日本爱爱精品一区二区| 久久精品人人做人人爽97| 18禁高潮出水呻吟娇喘蜜芽| 国产精品视频导航| 成人国产精品一级毛片天堂 | 性做久久久久久久免费看| 国产青榴视频| 色婷婷啪啪| 黄色成年视频| a级毛片在线免费| 亚洲欧洲一区二区三区| 国产第一页免费浮力影院| 色婷婷天天综合在线| 日韩高清成人| 国产麻豆福利av在线播放 | 中文字幕资源站| 狠狠亚洲婷婷综合色香| 少妇人妻无码首页| 亚洲综合九九| 亚洲综合婷婷激情| 亚洲美女视频一区| 国产浮力第一页永久地址| 亚洲毛片一级带毛片基地| 亚洲成aⅴ人片在线影院八| 51国产偷自视频区视频手机观看| 最新国产在线| 色网站在线免费观看| 久久99精品久久久大学生| 成人在线不卡视频| 日韩欧美在线观看| 国产免费久久精品99re丫丫一| 久久国产拍爱| 一级毛片免费观看久| 91九色国产在线| 久久久噜噜噜| 最新亚洲av女人的天堂| 精品在线免费播放| 欧美视频在线播放观看免费福利资源 |