###前提・実現したいこと
DJIのSDKを用いて、CustomMissionを動作させたいです。
現在takeoffを行った後、4つのwaypointを巡ることをさせたいと思っています
###発生している問題・エラーメッセージ
phantom3はtakeoffを行った後に、waypointが実行されません。
ソースコードはrunnableを実装し、ボタンを押した時点で、missoinをスタートさせようとしています。
###ソースコード
Java
1package ; 2 3import java.util.LinkedList; 4import java.util.List; 5 6import dji.sdk.FlightController.DJIFlightController; 7import dji.sdk.FlightController.DJIFlightControllerDataType; 8import dji.sdk.MissionManager.DJICustomMission; 9import dji.sdk.MissionManager.DJIMission; 10import dji.sdk.MissionManager.DJIMissionManager; 11import dji.sdk.MissionManager.DJIWaypoint; 12import dji.sdk.MissionManager.DJIWaypointMission; 13import dji.sdk.MissionManager.MissionStep.DJIMissionStep; 14import dji.sdk.MissionManager.MissionStep.DJITakeoffStep; 15import dji.sdk.MissionManager.MissionStep.DJIWaypointStep; 16import dji.sdk.Products.DJIAircraft; 17import dji.sdk.base.DJIBaseComponent; 18import dji.sdk.base.DJIBaseProduct; 19import dji.sdk.base.DJIError; 20 21 22public class waypoint implements Runnable{ 23 24 25 26 protected DJIBaseProduct mproduct; 27 28 29 //座標 30 final double PointAlat = ; 31 final double PointBlat = ; 32 final double PointClat = ; 33 final double PointDlat = ; 34 35 final double PointAlon = ; 36 final double PointBlon = ; 37 final double PointClon = ; 38 final double PointDlon = ; 39 40 41 protected double homeLocationLatitude; 42 protected double homeLocationLongitude; 43 44 private DJIMissionManager djiMissionManager = null; 45 46 @Override 47 public void run() { 48 49 try { 50 mproduct = FPVApplication.getProductInstance(); 51 } catch (Exception e) { 52 mproduct = null; 53 } 54 if (mproduct != null) { 55 djiMissionManager = mproduct.getMissionManager(); 56 DJIAircraft aircraft = (DJIAircraft)mproduct; 57 DJIFlightController flightcontroller = aircraft.getFlightController(); 58 homeLocationLatitude = getcurrentlocation(flightcontroller).getAltitude(); 59 homeLocationLongitude = getcurrentlocation(flightcontroller).getLongitude(); 60 } 61 62 63 DJIWaypointMission waypointMission = new DJIWaypointMission(); 64 waypointMission.autoFlightSpeed = 2; 65 List<DJIWaypoint> waypoints = new LinkedList<>(); 66 67 DJIWaypoint waypoint1 = new DJIWaypoint(PointAlat, PointAlon, 20f); 68 DJIWaypoint waypoint2 = new DJIWaypoint(PointBlat, PointBlon, 20f); 69 DJIWaypoint waypoint3 = new DJIWaypoint(PointClat, PointClon, 20f); 70 DJIWaypoint waypoint4 = new DJIWaypoint(PointDlat, PointDlon, 20f); 71 DJIWaypoint home = new DJIWaypoint(homeLocationLatitude, homeLocationLongitude, 20f){ 72 { 73 heading = 0; 74 gimbalPitch = -90; 75 } 76 }; 77 78 DJIWaypoint.DJIWaypointAction djiWaypointAction = new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.Stay,1000); 79 80 waypoint1.addAction(djiWaypointAction); 81 waypoint2.addAction(djiWaypointAction); 82 waypoint3.addAction(djiWaypointAction); 83 waypoint4.addAction(djiWaypointAction); 84 home.addAction(djiWaypointAction); 85 86 waypoints.add(waypoint1); 87 waypoints.add(waypoint2); 88 waypoints.add(waypoint3); 89 waypoints.add(waypoint4); 90 waypoints.add(home); 91 waypointMission.addWaypoints(waypoints); 92 93 List<DJIMissionStep> djiMissionSteps = new LinkedList<>(); 94 djiMissionSteps.add(new DJITakeoffStep(new DJIBaseComponent.DJICompletionCallback() { 95 @Override 96 public void onResult(DJIError djiError) { 97 98 } 99 })); 100 101 djiMissionSteps.add(new DJIWaypointStep(waypointMission, new DJIBaseComponent.DJICompletionCallback() { 102 @Override 103 public void onResult(DJIError djiError) { 104 105 } 106 107 })); 108 109 DJICustomMission djiMission = new DJICustomMission(djiMissionSteps); 110 111 if(djiMissionManager != null) { 112 djiMissionManager.prepareMission(djiMission, new DJIMission.DJIMissionProgressHandler() { 113 @Override 114 public void onProgress(DJIMission.DJIProgressType djiProgressType, float v) { 115 116 } 117 }, new DJIBaseComponent.DJICompletionCallback() { 118 119 @Override 120 public void onResult(DJIError djiError) { 121 122 } 123 }); 124 djiMissionManager.startMissionExecution(new DJIBaseComponent.DJICompletionCallback() { 125 @Override 126 public void onResult(DJIError djiError) { 127 128 } 129 }); 130 } 131 } 132 133 private DJIFlightControllerDataType.DJILocationCoordinate3D getcurrentlocation(DJIFlightController flightcontroller) { 134 DJIFlightControllerDataType.DJIFlightControllerCurrentState flightControllerCurrentState = flightcontroller.getCurrentState(); 135 DJIFlightControllerDataType.DJILocationCoordinate3D djiLocationCoordinate3D = flightControllerCurrentState.getAircraftLocation(); 136 137 return djiLocationCoordinate3D; 138 } 139}
###補足情報(言語/FW/ツール等のバージョンなど)
andoroid studio 1.5.1
smartphone api 22
dji sdk 3.0.1
drone Phantom3 Advanced
初心者でコードが汚いかもしれませんが
よろしくお願いします
あなたの回答
tips
プレビュー