• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 大疆無人機安卓Mobile Sdk開發(三)制定航點任務WaypointMission

    標簽: 安卓  大疆無人機開發  mobile sdk  waypointMission  dji sdk

    大疆無人機安卓Mobile Sdk開發(一)簡單介紹

    大疆無人機安卓Mobile Sdk開發(二)連接無人機,獲取無人機信息

    大疆無人機安卓Mobile Sdk開發(三)制定航點任務WaypointMission

    qq505057618

            mobile sdk提供了很多種任務類型,有WaypointMission,FollowMeMission,PanoramaMission,HotPointMission,TapFlyMission等,其中最主要也是最常用的就是WaypointMission,我們可以提前根據坐標規劃好航點,每個航點除了坐標外還可以設置高度、航向、自定義動作等,飛機會按照制定的航點按順序去執行任務,目前消費級無人機最多支持99個航點設置。

    dji.common.mission.waypoint.WaypointMission.Builder builder = new dji.common.mission.waypoint.WaypointMission.Builder();
            builder.autoFlightSpeed(rawMission.getFlySpeed());
            builder.finishedAction(toDJI(rawMission.getFinishedAction()));
            builder.flightPathMode(WaypointMissionFlightPathMode.NORMAL);
            builder.gotoFirstWaypointMode(WaypointMissionGotoWaypointMode.SAFELY);
            builder.headingMode(toDJI(rawMission.getHeadingMode()));
            builder.maxFlightSpeed(15);
            builder.setExitMissionOnRCSignalLostEnabled(rawMission.exitMissionOnRCSignalLost);
            builder.setGimbalPitchRotationEnabled(true);
            builder.repeatTimes(1);

    這是初始化一個WaypointMission,下面解釋每個方法的含義

    autoFlightSpeed

    如果沒有設置航點速度那么會按照任務的 autoFlightSpeed 速度飛行。與航點速度只能是正數不同,任務自動飛行速度可以是負數,取值范圍是 -15 到 15 m/s。當速度是負數時,無人機會朝著前一個航點往回飛。在任務過程中,用戶手中的遙控器撥桿也可以調整無人機的飛行速度。遙控器也可以讓飛機往回飛。
    總結一下,航點間速度只能是正數,autoFlightSpeed 和遙控器調整的速度可以是負數,可以讓無人機往回飛。那么這三種方式都可以控制飛行速度,那么優先級是怎樣的呢?遙控器 > 航點速度 > autoFlightSpeed。無人機優先響應遙控器的控制,其次是按照每個航點預設好的速度飛行,如果沒有設置航點速度使用 autoFlightSpeed

    maxFlightSpeed

    前面提到的執行任務時的默認速度屬性是 autoFlightSpeed。與之相關的還有 maxFlightSpeed。因為執行任務期間遙控器可以調整當前飛行速度。maxFlightSpeed 的值用來限制遙控器影響飛行速度時的最大偏移量。比如當前 autoFlightSpeed 是 5,maxFlightSpeed 的值是 10。這個時候遙控器提高飛行速度,那么速度到 10 m_s 后就不會再提高了。遙控器還可以降低飛機速度到負數,所以也同時限制了無人機往回飛的時候速度最快是 -10 m_s。往回飛如果到底第一個點飛機就會懸停。

    finishedAction

    FinishedAction 指的是無人機飛到最后一個航點后要進行什么操作。有五個 action 可供選擇:

    • NoAction:什么都不做
    • GoHome:任務結束后返航
    • AutoLand:到達最后一個航點后自動降落
    • GoFirstWaypoint:回到第一個航點
    • ContinueUntilStop:任務的狀態不會自動結束(可以繼續手動控制無人機做一些操作),直到調用 stopMission 任務才會結束

    headingMode

    無人機在航點間飛行時的航向。有以下 5 種選擇:

    • Auto:和無人機飛行方向一致
    • UsingInitialDirection:使用無人機到達第一個航點時的航向。在到達第一個航點前遙控器可以控制航向,到達第一個點后航向就固定不再改變。
    • ControlledByRemoteController:遙控器控制
    • UsingWaypointHeading:使用每個航點設置的航向
    • TowardPointOfInterest:總是朝向設置的興趣點
      默認航向的策略是 auto。

    flightPathMode

    航點間的路徑。默認是 normal ,使用直線飛行。如果希望按照曲線飛行,設置為 Curved,但是需要配合 waypoint 的 cornerRadiusInMeters

    曲線飛行時的弧度:cornerRadiusInMeters

    通常 waypoint 間的路徑都是直線飛行,不過如果 pathMode 是 DJIWaypointMissionFlightPathCurved 時航點間就是以曲線飛行。在按照曲線飛行的模式下,不同航點間的弧度通過 cornerRadiusInMeters 屬性調整。航點設置了航點圓角半徑后,無人機就不會飛過航點的坐標,而是按照航點的設置的半徑弧線飛行

    gotoFirstWaypointMode

    無人機如何到達第一個航點。有兩種方式:

    • PointToPoint:起飛后徑直朝第一個航點以最短距離飛過去。
    • Safely:無人機先垂直上升到和第一個航點同樣的高度后水平飛過去。
      假設起飛地點和第一個航點的路線中有一棟樓,如果采用 Safely 模式則可以避過這棟樓,所以安全一些。

    exitMissionOnRCSignalLost

    無人機丟失遙控器信號后是否停止任務。Waypoint 任務航點是一次性上傳好的,如果剛好某個位置遙控器信號差,只要 GPS 信號正常無人機還是可以按照規劃好的航點飛行。默認值是 false,如果遙控器信號丟失,無人機繼續執行任務。
    如果在航點過程中需要手動控制航向,或者一些拍照動作,遙控器信號丟失肯定數據采集的就有問題了,這種場景下就會把 exitMissionOnRCSignalLost 設置成 true。

    rotateGimbalPitch

    布爾值,飛行過程中云臺角度是否可以被設置。如果設置為 true,航點的 gimbalPitch 可以控制云臺角度。

    repeatTimes

    任務結束后是否重復一次。默認值是 0,表示任務只執行一次。1 表示任務結束后再重復一次,那么就是總共執行兩次任務。

    waypointList

    傳入一組wayPoint的list,就是傳入一組航點,然后任務按照航點順序去執行,一個wayPoint代表一個航點。

    下面我們看如何添加WayPoint

    List<Waypoint> resultList = new ArrayList<>(rawList.size());
            for (int i = index; i < rawList.size(); i++) {
                DIYWaypoint item = rawList.get(i);
                Waypoint waypoint = new Waypoint(item.getLatLng().getLat(), item.getLatLng().getLng(), item.getAltitude());
                waypoint.gimbalPitch = item.getGimbalPitch();
                waypoint.heading = item.getHeading();
                waypoint.turnMode = toDJI(item.getTurnMode());
                waypoint.altitude = item.getAltitude();
                List<DIYWaypoint.DIYWaypointAction> rawActionList = item.getWaypointActions();
                if (rawActionList != null && rawActionList.size() > 0) {
                    for (DIYWaypoint.DIYWaypointAction action : rawActionList) {
                        waypoint.addAction(new WaypointAction(toDJI(action.getmActionType()), action.getmActionParam()));
                    }
                }
                resultList.add(waypoint);
            }
            builder.waypointList(resultList);
            builder.waypointCount(resultList.size());

     這里我的代碼是是用我自定義的類轉換成大疆的WayPoint,大家可以參考官方的文檔,這里wayPoint可以設置很多參數,比如設置云臺的角俯仰角,飛機的航向角,飛機的高度,最主要的是到了航點飛機要執行的動作WaypointAction

    Action 的執行時間最多只有 6 秒時間(除了 stay action,因為 stay 是用戶主動表示要飛機停留的 action),如果一個 aciton 超過 6 秒沒有執行完,這個 action 會被停止,無人機繼續往下一個航點飛行。

    一個 waypoint 中 action 數量沒有限制,但是對所有 action 執行總時長是有限制的。DJI 也提供了actionTimeoutInSeconds 屬性來自定義 action 的執行總時長限制,取值范圍是 0 - 999 秒,默認是 60 秒。如果有一組 action 是重復執行的,可以設置 waypoint 的 actionRepeatTimes 來實現。actionRepeatTimes 表示配置 action 的執行次數,默認是 1 次。

     

    任務的上傳,開始和監聽

    在 DJI SDK 中 Mission 的執行是由各自對應的 operator 管理的,WaypointMission 的生命周期由 DJIWaypointMissionOperator 管理。

    當WaypintMission定義完成之后,我們可以調用operator.uploadMission()去上傳任務,同時我們可以監聽任務的上傳進度

     private void uploadMission(WaypointMission mission) {
            DJIError checkError = mission.checkParameters();
            if (checkError != null) {
                passResult(MISSION_UPLOAD, VALUE_FAILED, checkError.getDescription());
            } else {
                DJIError loadError = operator.loadMission(mission);
                if (loadError != null) {
                    passResult(MISSION_UPLOAD, VALUE_FAILED, loadError.getDescription());
                } else {
                    operator.uploadMission(djiError -> {
                        if (djiError != null) {
                            passResult(MISSION_UPLOAD, VALUE_FAILED, djiError.getDescription());
                        } else {
                            passResult(MISSION_UPLOAD, VALUE_STARTED, "");
                        }
                    });
                }
            }
        }

     

    當任務上傳完成之后,我們可以調用operator.startMission()去執行任務,在任務執行的過程中我們可以通過WaypointMissionOperatorListener監聽任務執行的進度,同時我們也可以通過operator.startMission()去暫定任務的執行,通過operator.resumeMission會繼續執行任務。

     @Override
        public void startMission() {
            operator.startMission(djiError -> {
                if (djiError == null) {
                    passResult(MISSION_START, VALUE_SUCCEED, "");
                } else {
                    passResult(MISSION_START, VALUE_FAILED, djiError.getDescription());
                }
            });
        }
    
        @Override
        public void pauseMission() {
            operator.pauseMission(djiError -> {
                if (djiError == null) {
                    passResult(MISSION_PAUSE, VALUE_SUCCEED, "");
                } else {
                    passResult(MISSION_PAUSE, VALUE_FAILED, djiError.getDescription());
                }
            });
        }
    
     @Override
        public void resumeMission() {
            operator.resumeMission(djiError -> {
                if (djiError == null) {
                    passResult(MISSION_RESUME, VALUE_SUCCEED, "");
                } else {
                    passResult(MISSION_RESUME, VALUE_FAILED, djiError.getDescription());
                }
            });
        }

    以上是一個航點任務定義和執行的流程,有不懂的歡迎交流。

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

    智能推薦

    大疆無人機基于自搭建RTMP服務端推流直播

    思路 大疆在手機端提供了軟件DJI GO 4控制飛行參數等,其中包含自定義RTMP接口來向第三方推流進行直播業務,而我們可以利用這種直播的思路來完成畫面傳輸。 環境 精靈Phantom 4 Pro V2.0 DJI GO 4(手機端) win10(PC端) 步驟 一、搭建、啟動RTMP服務端 Notice:搭建RTMP服務端主要參考[1]、[2]鏈接中的步驟。因為我們是通過DJI GO 4來推流,...

    無人機三維建模(5) Photoscan建模

    由于在線建模具有建模完成時間不確定,采用本機建模的方式,這里使用Photoscan建模。 我用的是1.4.0**版,**很簡單,下載包里就有一個exe,覆蓋安裝目錄中的文件就行。 Agisoft PhotoScan軟件介紹      Agisoft PhotoScan是俄羅斯公司Agisoft開發的一款基于影響自動生成高質量三維模型的優秀軟件,這對于3D建模...

    無人機三維建模(1) 調研

    項目需要調研一下無人機三維建模的信息 無人機三維建模核心技術是三維重建,或者說基于圖片的建模(Image-Based Modeling)。 項目需要是建立園區的三維模型,其他應用上可以用于古街道、文物建模。 (參考http://www.sohu.com/a/141731974_154576) 另外室內建模也是三維重建吧,基于激光掃描的。 其他資料:三維重建技術在無人機方面的應用如何?三維重建未來的...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

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