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。

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

主站蜘蛛池模板: 国内精品九九久久久精品| 日韩大片免费观看视频播放| 99精品欧美一区| 亚洲国产中文精品va在线播放| 91香蕉视频下载网站| 国产精品视频白浆免费视频| 亚洲国产成人无码AV在线影院L| 91午夜福利在线观看精品| 91免费在线看| 国产精品久久久久久影院| 国产视频久久久久| 她的性爱视频| 黄色一及毛片| 一本大道视频精品人妻| 中文字幕日韩视频欧美一区| 呦视频在线一区二区三区| 天天综合天天综合| 嫩草影院在线观看精品视频| 少妇高潮惨叫久久久久久| 专干老肥熟女视频网站| 亚洲欧美另类久久久精品播放的| 中文纯内无码H| 在线观看国产精品日本不卡网| www.99在线观看| 欧美啪啪网| 青青青国产视频| 天堂久久久久久中文字幕| 天天摸天天操免费播放小视频| 国产精鲁鲁网在线视频| 女人18毛片久久| 亚洲黄网视频| 亚洲天堂视频网| 日韩福利在线观看| 91精品aⅴ无码中文字字幕蜜桃| 成人欧美日韩| 亚洲经典在线中文字幕| 97se亚洲综合| 久久久黄色片| 日韩色图区| 中文字幕乱码中文乱码51精品| 久久99国产乱子伦精品免| 日韩欧美中文| 亚洲国产成人久久精品软件| 欧美亚洲一区二区三区导航| 狠狠干综合| 亚洲人成网站日本片| 亚洲日本www| jizz在线观看| 亚洲乱伦视频| 亚洲色图综合在线| 国产精品三级专区| 国产原创演绎剧情有字幕的| 人妻无码一区二区视频| 国产免费好大好硬视频| 亚洲日韩欧美在线观看| 国语少妇高潮| 欧美不卡视频一区发布| 国内毛片视频| 国产91精品最新在线播放| 国产精品久久久久久久久久98| a色毛片免费视频| 亚洲va欧美va国产综合下载| 91在线日韩在线播放| 青青操国产视频| 免费在线播放毛片| 成年A级毛片| 国产永久在线观看| 最新国产网站| 无码人中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 欧美在线综合视频| 久草视频精品| 欧美日韩在线第一页| 久久久久亚洲AV成人人电影软件| a级毛片视频免费观看| 99久视频| 国产高清无码第一十页在线观看| 久久国产拍爱| 99久视频| 国产人成午夜免费看| 婷婷六月色| 9丨情侣偷在线精品国产|