大疆無人機開發:手寫全景(思路 + 大疆的坑)
標簽: 大疆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
這篇文章用了三周的時間去調研、測試、完善,踩坑埋坑。
搬磚不易,我也深知完不成功能的無助。歡迎轉載,請注明出處。
智能推薦
大疆無人機二次開發進階-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...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...