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