標題: 一種基于DJI A3飛控的新型光流控制方式 [打印本頁]

作者: iTang    時間: 2020-1-15 15:08
標題: 一種基于DJI A3飛控的新型光流控制方式
N3飛控ONBOARDSDK二次開發(fā)經(jīng)驗分享
開發(fā)流程
步驟一:選擇開發(fā)方式
先去大疆的開發(fā)者網(wǎng)站(https://developer.dji.com/)看資料,我選擇的是ONBOARD SDK stm32(圖1),還有其他的開發(fā)方式,比如QT,ROS,LINUX等。
圖一
步驟二:觀看官方資料
首先要看下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)過不會嚴重干擾到。
定位思路 (代碼已注釋)
注意不一定要使用光流,也可以試試其他方法。例如沈老師的vins
源算法+Realsense+manifold2.
網(wǎng)址https://zhuanlan.zhihu.com/p/59646674
SDK開發(fā)注意事項
                                 圖十
代碼文件:(大疆原先的例程都保留著沒有刪除)
Driver.cpp
板子初始化,并且判斷時間執(zhí)行對應(yīng)任務(wù)
Led.cpp   buzzer.cpp
主要用來提醒自己進入SDK模式,自己用了蜂鳴器,比賽建議使用燈比較明顯,因為四軸噪聲太大
Time.cpp
原先大疆例程的系統(tǒng)時鐘以及定時器初始化
Control.cpp
主要是定位還有發(fā)送位置控制指令
Communication.cpp
初始化串口,用來與N3飛控以及電腦上位機通訊
Sub_information.cpp
用來訂閱相關(guān)信息
Pid.cpp
pid實現(xiàn)的函數(shù),建議大家有空可以試試自抗干擾(ADRC),不過任何改動可以在模擬器還有小飛機試試
Optical_flow.cpp
光流數(shù)據(jù)接收分析代碼,根據(jù)買的光流協(xié)議編寫





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1