• <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...

    猜你喜歡

    MQTT--學習

    文章目錄 簡介 MQTT應用 MQTT特點 MQTT服務器TCP占用端口 MQTT客戶端 MQTT協議中的術語 MQTT協議報文結構 MQTT協議中的動作 簡介 MQTT(Message Queuing Telemetry Tranport)中文稱消息隊列遙測傳輸協議,IBM公司為了一個通信衛星連接管道的項目研發的,是一種訂閱/發布模式的“輕量級”通信協議,可以為遠程設備提...

    第二次作業

    第二次作業 1)C高級第一次PTA作業(1) 2)C高級第一次PTA作業(2) 3)C高級第一次PTA作業(3) 6-7 刪除字符串中數字字符 //設計思路 1)文字部分 1.確定題意,本題要求為刪除指針 s所指的字符串中的所有數字字符; 2.觀察主函數,主函數輸入輸出部具備,無需返回值; 3.使用for循環,檢索s函數,當遇到數字時把向前推進一位,把數字元素擠掉 2)調試中的錯誤 無 //代碼部...

    JavaNIO基本使用以及性能問題分析

    什么是NIO? NIO在操作系統當前一般定義為:non-blocking io,JDK1.4開始新引入了NIO相關的類庫,所以有時候人們在Java中有叫他:new io。 當你使用NIO請求時,等待客戶端請求,或者等待數據的到達都不會阻塞了,而是直接返回給你一個錯誤信息。 簡單來說就是如果socket標記為阻塞,那么accept調用就會阻塞,直接有連接到達,如果socket標記為非阻塞,并且也沒有...

    模板方法模式

    具體的定義:      模板方法模式在一個方法中定義了一個算法的骨架,而將一些步驟延遲到子類之中,模板方法使得子類可以不再改變算法的情況下,重新定義算法中的某些步驟。這個模式是用來創建一個算法的模板,模板具體說來可以看作是一種方法,更具體的說是我們定義了一組步驟,其中人和步驟都可以是抽象的,由子類負責實現。這個可以確保算法的結構保持不變,同時由子類提供部分實現。 &n...

    SpringBoot整合freemarker

    freemarker和thymeleaf是模板引擎。在早前我們使用Struts或者SpringMVC等框架的時候,使用的都是jsp,jsp的本質其實就是一個Servlet,其中的數據需要在后端進行渲染,然后再在客戶端顯示,效率比較低下。而模板引擎恰恰相反,其中的數據渲染是在客戶端,效率方面比較理想一點。前后端不分離的話用模板引擎比較好,前后端分離的話其實用處并不大很大。Spring官方比較推薦的是...

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