久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5123|回復: 0
收起左側

一種基于DJI A3飛控的新型光流控制方式

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品理论片 | 日本视频一区二区三区 | 天天色播 | 宅男的天堂 | 永久免费看mv网站入口亚洲 | 男女搞黄网站 | 欧美精品日韩少妇 | 亚洲久久久 | 三级黄色录像片 | 亚洲精品视频在线播放 | 黄色一级片黄色一级片 | 国产成人一区 | 中日韩毛片 | 欧美一级黄色大片 | 国产二区视频在线观看 | 国产在线一 | 国产福利视频在线观看 | 国产在线麻豆精品观看 | 看片黄全部免费 | 精品乱子伦一区二区三区 | 在线视频成人 | 亚洲男人在线 | 亚洲狠狠 | 成人免费黄色大片 | 一区二区三区在线播放 | 可以免费看的毛片 | 九九超碰 | 欧美又大粗又爽又黄大片视频 | 日韩毛片网站 | 欧美狠狠干 | 国产午夜一区二区 | 久久av片 | 久久精品www人人爽人人 | 黄色片免费在线观看 | 高潮毛片无遮挡免费看 | 一区二区影视 | 成人羞羞网站 | 欧美日韩国产一区 | 国产精品99久久久久久www | 国产在线资源 | 日韩av高清在线观看 |