亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于安卓的Multiwii無人機(jī)控制系統(tǒng)的實現(xiàn)

        2017-12-28 15:45:13趙旭彭克勤北京信息科技大學(xué)計算機(jī)學(xué)院
        數(shù)碼世界 2017年12期
        關(guān)鍵詞:飛控搖桿中點

        趙旭 彭克勤 北京信息科技大學(xué)計算機(jī)學(xué)院

        基于安卓的Multiwii無人機(jī)控制系統(tǒng)的實現(xiàn)

        趙旭 彭克勤 北京信息科技大學(xué)計算機(jī)學(xué)院

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

        Multiwii 無人機(jī) 安卓 控制器

        1 概述

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

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

        要使用藍(lán)牙控制則需熟悉Multiwii Serial Protocol,串口傳輸協(xié)議,簡而言之,只要藍(lán)牙發(fā)送的指令格式符合協(xié)議規(guī)定,藍(lán)牙終端就可以與Multiwii飛控板進(jìn)行通信,控制。

        2 程序結(jié)構(gòu)

        2.1 控制搖桿

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

        2.2 控制器

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

        2.3 藍(lán)牙部分

        藍(lán)牙模塊主要功能為接受Multiwii端發(fā)送的信息和向Multiwii端發(fā)送信息,發(fā)送使用向BlueToothGatt寫入特征值來實現(xiàn),而接受消息則使用BlueToothGatt的回調(diào)函數(shù)中的OnCharactiesChange函數(shù)進(jìn)行接收,接受內(nèi)容也是BluetoothGatt中的特征值。次要功能則有,搜索BLE設(shè)備,連接BLE設(shè)備,和斷開BLE設(shè)備。藍(lán)牙模塊為一個Service,所以有一個對應(yīng)的Binder來作為中間橋梁,作為Activities操作藍(lán)牙的接口。

        2.4 通訊協(xié)議

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

        2.5 遙控封裝

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

        3 實現(xiàn)方法

        3.1 搖桿

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

        3.2 藍(lán)牙傳輸

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

        3.3 協(xié)議封裝

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

        4 結(jié)語

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

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

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

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

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

        本文由計算機(jī)學(xué)院大學(xué)生創(chuàng)新實踐基地建設(shè)項目資助,項目號:5111723400。

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

        猜你喜歡
        飛控搖桿中點
        街機(jī)、格斗游戲更暢爽
        電腦愛好者(2022年5期)2022-05-30 14:58:47
        例談圓錐曲線中的中點和對稱問題
        曲柄搖桿機(jī)構(gòu)的急回程度分析與探討*
        曲柄與搖桿擺角的關(guān)系
        民用飛機(jī)飛控通電自檢測安全性研究
        無人機(jī)飛控軟件架構(gòu)設(shè)計初探
        電子測試(2018年23期)2018-12-29 11:11:36
        中點的聯(lián)想
        02 飛控技術(shù)與機(jī)場安保引關(guān)注
        飛控系統(tǒng)故障告警實時監(jiān)控軟件的設(shè)計與實現(xiàn)
        曲柄搖桿行星系取苗機(jī)構(gòu)參數(shù)匹配與優(yōu)化
        日本一区二区三区在线视频观看| 久久久久人妻精品一区蜜桃| 久久亚洲精品无码va大香大香| 成人无码区免费AⅤ片WWW| 一区二区三区日本在线| 性色视频加勒比在线观看| 亚洲七久久之综合七久久| 免费视频一区二区| 久久久亚洲精品蜜臀av| 人妖av手机在线观看| 免费观看的a级毛片的网站| āV第三区亚洲狠狠婷婷综合久久| 日本午夜一区二区视频| 久久狼精品一区二区三区| 少妇aaa级久久久无码精品片| 国产精品片211在线观看| 日本不卡一区二区三区在线| 亚洲视频在线一区二区| 亚洲 精品 综合 精品 自拍| 国产小屁孩cao大人| 亚洲天堂线上免费av| 精品无码久久久久久久久| 中文字幕日韩一区二区三区不卡| 亚洲免费一区二区三区视频| 日韩一级137片内射视频播放| 色综合久久无码五十路人妻| 亚洲熟妇丰满大屁股熟妇| 国产福利97精品一区二区| 蜜桃av中文字幕在线观看| 国产精品国三级国产av| 免费人成又黄又爽的视频在线 | 最近最新中文字幕| 欧美韩国精品另类综合| 精品国产三区在线观看| 蜜臀av无码人妻精品| 综合网自拍| 国产麻豆成人精品av| 国产欧美日韩中文久久| 亚洲av日韩av无码av| 亚洲精品无人区一区二区三区| 青青草在线免费视频播放|