• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 大疆無人機開發:手寫全景(思路 + 大疆的坑)

    標簽: 大疆Android開發  android  

    大疆手寫全景的三個思路:

    1.采用missionTimeLine的方式實現。

    2.采用航點的方式WayPoint實現。

    3.采用虛擬搖桿的方式VirtualStick實現。

     

    第一種方案:

    其中最符合軟件開發思路的還是第一種方案,寫好算法,將所有的action提交給timeLine就可以了。對于開發者來說無需關心內部是如何執行的,只需關注業務及算法就可以。簡易Demo代碼:

    for (int j = 0; j < 9; j++) {
        if (j != 0) { // 首次不轉機身
            AircraftYawAction yawAction = new AircraftYawAction(45, 20);
            elements.add(yawAction);
        }
        for (int i = 0; i < 5; i++) {
            double pitch = 0;
            Attitude attitude;
            // 以下計算為簡易方式
            pitch = 30 - 30 * i;
            attitude = new Attitude((float) pitch, Rotation.NO_ROTATION, Rotation.NO_ROTATION);
            // 設置云臺轉動element
            GimbalAttitudeAction gimbalAction = new GimbalAttitudeAction(attitude);
            gimbalAction.setCompletionTime(3); // 完成時間,默認1秒,太短容易報動作超時
            gimbalAction.setGimbalMode(GimbalMode.FPV);
            elements.add(gimbalAction);
            // 拍照
            ShootPhotoAction photoAction = newShootSinglePhotoAction();
            elements.add(photoAction);
        }
    }

    但是,你不關注大疆內部如何寫的代碼還不行,因為你這么設置了之后,無人機不是按照官方文檔以及你認為的那樣進行的,也叫作不適配,或者直接就是bug。

    給大疆發郵件,首先肯定了大疆的態度是好的,人工回復并且很效率,只是我沒有時間陪著他們一點點改這個bug。義工也得保證吃飯的,所以。。。對于那種很空的回復,這種方案就PASS掉了。

    這種方案一個是不適配御相關機型(官方文檔跟實際效果不是一回事);另一個是不可控,TimeLine偶爾報TimeOut等,不是很靠譜。精靈挺好,但是偶爾會多拍照片。

    作為開發者表示理解,畢竟無人機這種難度比較高的硬件會有很多困難,期待大疆不斷完善bug,走得更遠!

     

     

    第二種方案:

    這種方案其實是不可行的,想到這個是因為大疆提供航點的WayPoint可以帶waypointActions的,這個Action可以是云臺、拍照、轉向。不可行是因為大疆官方文檔寫了:(搜WayPoint)

    雖然大疆提供了removeAction,但是航點任務是一下子寫入無人機的,感興趣的同學可以再嘗試嘗試。

     

     

    第三種方案:

    這種方案排在最后是因為比較笨重,程序員都不希望發生的,就是將1 * 100 寫成 1 + 1 + 1 + 1 ... 的方式,將無人機設置成VirtualStick的方式,監聽回調,像鞭炮一樣一個一個的向無人機發送指令。因為大疆封裝的SDK都是回調方式,也就是說... 你得想辦法去解決這一百多個回調形成的回調地獄。要不然功能實現了這代碼也很爛。。。

    實現思路是響應式編程,具體實現用的隊列(用棧也可以),觀察者模式。

    寫一個Observer實現具體云臺、拍照、無人機yaw軸移動,Observeable作為算法具體實現的控制類。實現中途取消,完成回調即可。

    這種方案的好處是可控,每一個action你都自己寫了,可以非常高效完成全景任務,媲美大疆自己軟件的全景。

    代碼不貼了,大疆都提供了API,我自己封裝的也比較水。。。

     

     

    寫在最后:

    可以參考大疆官網給提供的思路,代碼是OC的:https://developer.dji.com/cn/document/ef495549-6501-4504-bbc1-3e1f39d4985c

     

     

    這篇文章用了三周的時間去調研、測試、完善,踩坑埋坑。

    搬磚不易,我也深知完不成功能的無助。歡迎轉載,請注明出處。

    版權聲明:本文為qq_24712507原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_24712507/article/details/108006654

    智能推薦

    大疆無人機二次開發進階-DJI mobile SDK和DJI onboard SDK聯合開發行業應用項目

    上一篇文章講到了怎么使用DJI mobile SDK,這次主要講解DJI mobile SDK和DJI onboard SDK聯合開發。 android APP那端向DJI onborad SDK端發數據和收數據我就不做詳細介紹了,調一個函數即可,無需封裝和解析協議,如下:下面詳細介紹DJI onborad SDK的使用,以M600 PRO為例: 1、首先申請DJI onborad SDK&nbs...

    大疆睿熾Tello EDU無人機python操控教程之二——使用Tello-Python-master示例程序控制Tello EDU

    使用Tello-Python-master示例程序控制Tello EDU 上篇文章我們應該可以掌握使用socket調試工具操控Tello EDU無人機,那么本篇文章我們將使用“正宗”python語言來實現Tello EDU的的控制,接下來直接上代碼,我會在代碼注釋中對代碼進行講解: 運行之后還沒完,這是肯定的,因為我們還需要在控制臺中輸入相應的指令,然后回車發送(這點肯定不...

    E:大疆M300二次開發PSDKV2.1.0。無法識別無人機型號。一直出現 aircraft type 0

    連接好設備后(M300無人機,開發套件2.0,選用樹莓派4B),可以運行示例程序,但是一直打印 [35.664][module_core]-[Info]-[PsdkCore_Init:134]PSDK is connecting aircraft, aircraft type 0, PSDK adapter type&...

    大疆文檔(3)-開發流程

    本節全篇為開發流程,內容較多,只記錄android部分 開發流程(1) 預備知識 使用DJI Mobile SDK開發應用程序需要幾個通用的和平臺特定的先決條件。 生成 了解如何去開發一個IOS或Android應用程序 一個與DJI Mobile SDK兼容的DJI產品。兼容產品列表 信用卡或電話號碼用于大疆開發者注冊驗證(不收費)。 至少一個兼容iOS或Android的移動設備。 注意: 對于i...

    猜你喜歡

    Android逆向筆記(一):逆向工具使用,簡單的代碼插入、修改包名/文案 示例

    最近對逆向技術比較感興趣,研究了一下,收獲不少,這里記錄一下。 注:本文僅供學習參考,不可做任何不合法或不道德的用途 首先介紹一下常用的逆向工具,要逆向一個APP,通常目的是 文案翻譯、去廣告、api**等,而要實現這些目的,一般需要以下操作: 反編譯apk 閱讀代碼 修改源碼、資源、Manifest等 重新打包簽名 網上介紹比較多的是用 apktools進行反編譯,用dex2jar來還原java...

    Spring——事務

    什么是事務? (1)事務是數據庫操作最基本單元,邏輯上一組操作,要么都成功,如果有一個失敗所有操 作都失敗 (2)典型場景:銀行轉賬 lucy 轉賬 100 元 給 mary lucy 少 100,mary 多 100 事務四個特性(ACID) (1)原子性 (2)一致性 (3)隔離性 (4)持久性 事務操作(搭建事務操作環境) 1、創建數據庫表,添加記錄 2、創建 service,搭建 dao,...

    BPF數據傳遞的橋梁——BPF Map(一)

    Docker 技術鼻祖系列 對 ebpf 技術感興趣的同學可以訂閱作者的博客主題: https://davidlovezoe.club/wordpress/archives/tag/ebpf 這是一個實戰系列文章,它是eBPF 學習計劃[1]里面的應用場景之網絡部分,終極目標是源碼級別學習云原生網絡方案 Cilium(聲明:下文提到的 BPF 字樣是泛指,包括 cBPF 和 eBPF)。本篇文章從...

    SpringBoot實戰(三)——junit4單元測試

    利用SpringBoot搭建的項目含有非常多的默認配置,所以搭建起來非常方便,單元測試也不例外,簡單幾步就可以實現,直接看代碼: 1、pom.xml引入test測試: 2、在src/test/java里創建class進行測試: Application是項目啟動類的名稱,且可以利用Autowired注入service等等使用。。。。 最后方法名上右鍵即可進行測試: 另外項目打包時建議去除TEST測試...

    藍橋2——Beaver's Calculator

    問題描述   從萬能詞典來的聰明的海貍已經使我們驚訝了一次。他開發了一種新的計算器,他將此命名為”Beaver’s Calculator 1.0”。它非常特別,并且被計劃使用在各種各樣的科學問題中。   為了測試它,聰明的海貍邀請了n位科學家,編號從1到n。第i位科學家給這個計算器帶來了 ki個計算題。第i個科學家帶來的問題編號1到n,并且它們必須按照編號一個一...

    精品国产乱码久久久久久蜜桃不卡