標題: 一種基于DJI A3飛控的新型光流控制方式 [打印本頁]
作者: iTang 時間: 2020-1-15 15:08
標題: 一種基于DJI A3飛控的新型光流控制方式
N3飛控ONBOARDSDK二次開發(fā)經(jīng)驗分享
開發(fā)流程步驟一:選擇開發(fā)方式
圖一步驟二:觀看官方資料
首先要看下Documentation以及API Reference里面的資料(圖二),里面介紹了怎么進行二次開發(fā)以及大部分API的用法。
圖二
步驟三:下載對應(yīng)軟件及代碼
根據(jù)自己的選擇,去Downloads里的ONBOARD SDK下載例程代碼以及DJI Assistant2(圖三)。
圖三
步驟四:注冊獲取開發(fā)ID和KEY
下載完代碼跟軟件后,可以看下Documentation中的Software Setup (圖四),需要在開發(fā)者網(wǎng)站里面注冊一個OSDK application ID and Key pair。
圖四
步驟五:將ID與KEY寫進代碼
打開下載的代碼,點擊Activate.cpp,將自己的注冊的ID跟Key填進去(圖五),那么,軟件部分其實已經(jīng)準備好了。
圖五
步驟六:硬件連接,使能API控制,寫入訂閱信息頻率
接下來就是準備好STM32F407的板子(如果沒有該型號,請自己移植下代碼)。按照Documentation 中的Hardware Setup,連接對應(yīng)的接口。官方例程中是采用串口三與N3飛控進行通訊,串口二與電腦上位機通訊。串口二與電腦通訊,飛控初始化等出現(xiàn)任何問題可以在電腦端看到。因為我使用的板子串口三的接收用作DBUS(硬件取反了),所以我把串口反過來用了。串口二用于與N3通訊,串口三用于與電腦通訊。飛控與板子連接好以后,打開電腦DJI Assistant2軟件,將N3飛控與電腦端連接,在DJI Assistant2軟件,選擇機型配置參數(shù)等,這個就不說了,自己百度,有很多教程?聪翫ocumentation中的Software Setup,,有教程說明怎么配置API模式(圖六),使能API控制,并且需要選擇你要訂閱的信息的頻率。
圖六
可以看下我的代碼,我訂閱的一些信息是50HZ的,所以我訂閱的信息就在這個軟件選擇了50HZ。
步驟七:連接上位機,跑官方例程,觀看現(xiàn)象
官方代碼中的main.cpp中,通過switch選擇你要試的例程(圖七),
圖七
然后此時可以將下載的代碼下載至板子中,打開DJI Assistant2中的模擬器(圖八),
圖八
可以看到飛機按照預設(shè)的軌跡進行飛行。例如官方例程(圖九),飛機在虛擬器中會自動起飛距地面1.2米,然后往右邊方向飛行6米,再向前飛行6米,然后在回到原始位置并且降落。
圖九
飛機飛機如果測試到這里都沒問題,那么恭喜你,可以開始做室內(nèi)定位了。做定位之前,一定要把資料看一下,看下例程的代碼是怎么寫的,自己花點時間寫一下自己想實現(xiàn)的功能,然后可以在模擬器中看飛行效果,模擬器的飛行效果跟實際是差不多的,所以每次寫了新東西,需要現(xiàn)在模擬器試試,不要直接上飛機試。
步驟八:光流選型
要做室內(nèi)定位,那就要去買光流模塊以及激光模塊。光流模塊的話建議不熟悉光流算法的同學購買匿名的光流模塊。這款光流已經(jīng)融合了高度以及加速度計陀螺儀,數(shù)據(jù)比較好,用起來比較方便。光流數(shù)據(jù)主要用來水平定位,而激光高度數(shù)據(jù)要用來修正飛機飛行的高度,因為室內(nèi)純氣壓計定高是不穩(wěn)。具體實現(xiàn)過程代碼已經(jīng)寫明了注釋。如果想自己融合光流數(shù)據(jù)的同學可以購買JL3285A、優(yōu)象或者PMW3901,具體是實現(xiàn)過程就是使用陀螺儀的角速度數(shù)據(jù)與光流的像素數(shù)據(jù)進行融合,使得在原地搖晃光流時,可以用陀螺儀的數(shù)據(jù)去把光流的數(shù)據(jù)抵消掉,再把高度的信息加進去融合,將最終的像素變化信息轉(zhuǎn)化為實際cm單位,再將該數(shù)據(jù)與地理坐標系的加速度計進行融合。這樣可以使得飛機在飛行的時候,下方有車子經(jīng)過不會嚴重干擾到。
定位思路 (代碼已注釋)- 定高思路:室內(nèi)純氣壓定高的話,因為室內(nèi)的氣壓不是很穩(wěn)定,特別是在飛機飛行的過程中,槳葉的風容易干擾到氣壓計,導致數(shù)據(jù)突變,出現(xiàn)飛行高度不穩(wěn)定的現(xiàn)象。GUIDANCE是采用雙目加超聲波的方法實現(xiàn)的,我們這里采用的是激光,也可以使用市面上的其他的高度傳感器。讀取激光的高度,油門回中的時候記住此時激光高度。然后使用PID進行閉環(huán)控制,將最終的結(jié)果控制飛機的垂直速度(使用SDK中的垂直速度控制API)。為了避免飛機飛過一些不平坦的地方,飛行高度變化太過于劇烈,可以使用激光高度的變化率,當變化過大時,削弱激光修正高度的系數(shù),并且當重新穩(wěn)定的時候再次確定高度。
- 定點思路:從光流模塊中,可以得到光流的速度數(shù)據(jù),可以通過定時器計算前后二次數(shù)據(jù)的時間間隔,然后將速度進行積分,得到距離,再將速度以及距離進行閉環(huán)控制,將最終的結(jié)果當飛機的目標角度傳入API中。另外,在飛行過程中關(guān)掉光流的作用,當遙控桿子回中的時候,把目標速度變?yōu)?,此時不要外環(huán)位置環(huán)的作用,可以達到剎車穩(wěn)定的目標。當剎車后速度在一個小范圍內(nèi),就重新加入位置環(huán),并且把目前的位置當為目標位置。
注意:不一定要使用光流,也可以試試其他方法。例如沈老師的vins開
源算法+Realsense+manifold2.
網(wǎng)址https://zhuanlan.zhihu.com/p/59646674
SDK開發(fā)注意事項- STM32的板子初始化后要先等待一段時間,可以在初始化中加延時,或者等飛控成功啟動再給板子上電,否則通訊會不成功。
- 之前出現(xiàn)過飛控的控制權(quán)被搶回去,自己還不知道,所以大家需要給飛機裝個燈或者其他東西,進入SDK模式的時候,可以通過亮燈的形式來提醒飛手。同樣需要寫一個功能,就是可以通過掰動遙控桿子進入或退出SDK模式,當自己寫的東西出錯的時候,遙控可以立馬奪回板子的控制權(quán)。
- 在給飛控增加新功能時,要注意一定要在模擬器中先驗證一下,不能直接拿飛機飛行驗證。(在模擬器中,如果不進入SDK模式,是默認GPS定位的。比如自己寫了光流定位的代碼,可以掰動搖桿進入SDK模式,此時因為飛機的定位信息來自光流模塊的信息,而不是模擬器中虛擬的GPS信息,所以模擬器中的飛機會慢慢飄走,并且飛行過程不會剎車。你可以手動移動一下真實的飛機,那么此時光流就會有移動的數(shù)據(jù),模擬器中的飛機就會朝你移動的反方向一直移動,當你把真實的飛機移動回原來的位置,那么虛擬器中的飛機就會停下來,這樣說明定位思路是正確的,才可以拿出去外面試試。定高修正的思路也是一樣的,目標高度確定了,當你拿起真實飛機的時候,模擬器中的飛機肯定是一直下降,除非你回到之前的位置,它才會停下來)
- 建議大家可以先用小一點的飛機調(diào)試(f330或者f450),等調(diào)試穩(wěn)定才再上大飛機,大四軸有點危險,調(diào)試還是命要緊,同樣錢也重要,所以買小的來玩玩。
- 無論是想在飛機上開發(fā)什么功能,要先在DJI Assistant2軟件上把飛控原本的參數(shù)調(diào)試到最佳,不然其他就白做了,本人原先在f450上做好定位功能,整套拆下來裝到大四軸的時候,大四軸飛起來軟綿綿的。并且大四軸重量變化較大時,飛控原本的參數(shù)也就沒用了,所以大家要調(diào)好參數(shù)(基礎(chǔ)感度,動力帶寬,姿態(tài)感度,具體可以參考https://www.iqiyi.com/v_19rrari2fo.html),使得飛機在定高模式飛行時姿態(tài)平穩(wěn),沒有抖動,原先就是沒有注意這個問題,以為是定位問題,浪費了很多時間。
- 使用API的時候,要注意API可以根據(jù)自己的需求改動,原先的API是當你想控制飛機的姿態(tài)角度的時候,那么垂直方向只能控制高度。當你想控制垂直方向的速度時,那么姿態(tài)角就只能控制角速度,因為垂直方向用高度信息還有YAW用角度控制的話,飛行效果不是很好,有點遲鈍,想用速度控制二個API就矛盾了(可以從模擬器中看出),寫了很多代碼才實現(xiàn),后面發(fā)現(xiàn)可以直接改API,方便了很多,我把PITCH,ROLL改成角度控制,而YAW以及高度采用角速度和速度控制(圖十),飛起來就比較順手,反應(yīng)比之前靈敏(也可能是我自己不會用,我感覺原先的API應(yīng)該是給自動飛行設(shè)計的)。
圖十- 光流的安裝方式也會影響到飛行效果,一般的光流都是需要裝在飛機的正下方,如果沒有裝正下方的話需要自己去修正,如果用匿名光流的話,需要你自己細看一下手冊,直接在上位機上設(shè)置就可以了。(匿名光流可以在淘寶購買,店家就是匿名科創(chuàng))
- 大四軸飛行的時候,如果是在室內(nèi),飛行的高度要高一些,因為會有地效的作用,太低飛機會晃動,調(diào)試飛機參數(shù)的時候,盡量高一些,并且飛機起飛的環(huán)境不要太過于密閉。
- A3等其他飛控同樣支持SDK二次開發(fā),建議可以試試A3,畢竟價格高,優(yōu)勢肯定也是有的。
- 出現(xiàn)自己不懂的問題(SDK方面的問題,請勿發(fā)其他方面的問題),可以發(fā)郵件給大疆(“Support”dev@dji.com;)詢問,一般會在幾天內(nèi)回復解答。
代碼文件:(大疆原先的例程都保留著沒有刪除)
| 板子初始化,并且判斷時間執(zhí)行對應(yīng)任務(wù) |
| 主要用來提醒自己進入SDK模式,自己用了蜂鳴器,比賽建議使用燈比較明顯,因為四軸噪聲太大 |
| 原先大疆例程的系統(tǒng)時鐘以及定時器初始化 |
| |
| |
| |
| pid實現(xiàn)的函數(shù),建議大家有空可以試試自抗干擾(ADRC),不過任何改動可以在模擬器還有小飛機試試 |
| 光流數(shù)據(jù)接收分析代碼,根據(jù)買的光流協(xié)議編寫 |
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |