大疆移动SDK 3.0
DJI Mobile SDK 3.0
当通过 DJIMissionManager.getInstance() 或 djiAircraftInstance.getMissionManager() 获取任务管理器时,任务管理器实例永远不会连接,即 missionManagerInstance.isConnected() 总是 returns false,并且在没有 isConnected 检查的情况下继续进行会导致崩溃。我是否遗漏了设置或检索任务管理器的步骤?
一分钟前我在他们的论坛上问了同样的问题here。
如有任何帮助,我们将不胜感激。我已经看过他们的例子一千遍了,但似乎所有的例子都使用了旧版本的 sdk。
编辑:您可以找到更多信息,但我会添加进去。
任务管理器实例不为空,因为调用 isConnected() returns false,并且无人机也已连接。
我刚刚测试了 isMissionReadyToExecute 和 MissionManager.isConnected,我发现无论我什么时候调用它们,它们总是 return 为真。所以我认为应该是SDK内部的bug。
我找到了解决这个问题的解决方案。
初始化任务。
// Step 1: create mission
DJIWaypointMission waypointMission = new DJIWaypointMission();
waypointMission.maxFlightSpeed = 14;
waypointMission.autoFlightSpeed = 4;
List<DJIWaypoint> waypointsList = new LinkedList<>();
// Step 2: create waypoints and prepare coordinates
DJIWaypoint northPoint = new DJIWaypoint(mHomeLatitude + 10 * Utils.ONE_METER_OFFSET, mHomeLongitude, 10f);
DJIWaypoint eastPoint = new DJIWaypoint(mHomeLatitude, mHomeLongitude + 10 * Utils.calcLongitudeOffset(mHomeLatitude), 20f);
DJIWaypoint southPoint = new DJIWaypoint(mHomeLatitude - 10 * Utils.ONE_METER_OFFSET, mHomeLongitude, 30f);
DJIWaypoint westPoint = new DJIWaypoint(mHomeLatitude, mHomeLongitude - 10 * Utils.calcLongitudeOffset(mHomeLatitude), 40f);
//Step 3: add actions
northPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.GimbalPitch, -60));
northPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartTakePhoto, 0));
eastPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartTakePhoto, 0));
southPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.RotateAircraft, 60));
southPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartRecord, 0));
westPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StopRecord, 0));
//Step 4: add waypoints into the mission
waypointsList.add(northPoint);
waypointsList.add(eastPoint);
waypointsList.add(southPoint);
waypointsList.add(westPoint);
waypointMission.addWaypoints(waypointsList);
mDJIMission = waypointMission;
准备任务。
mMissionManager.prepareMission(mDJIMission, new DJIMission.DJIMissionProgressHandler() {
@Override
public void onProgress(DJIMission.DJIProgressType type, float progress) {
setProgressBar((int)(progress * 100f));
}
}, new DJICompletionCallback() {
@Override
public void onResult(DJIError error) {
if (error == null) {
Utils.setResultToToast(mContext, "Success!");
} else {
Utils.setResultToToast(mContext, "Prepare: " + error.getDescription());
}
}
});
当通过 DJIMissionManager.getInstance() 或 djiAircraftInstance.getMissionManager() 获取任务管理器时,任务管理器实例永远不会连接,即 missionManagerInstance.isConnected() 总是 returns false,并且在没有 isConnected 检查的情况下继续进行会导致崩溃。我是否遗漏了设置或检索任务管理器的步骤?
一分钟前我在他们的论坛上问了同样的问题here。
如有任何帮助,我们将不胜感激。我已经看过他们的例子一千遍了,但似乎所有的例子都使用了旧版本的 sdk。
编辑:您可以找到更多信息,但我会添加进去。
任务管理器实例不为空,因为调用 isConnected() returns false,并且无人机也已连接。
我刚刚测试了 isMissionReadyToExecute 和 MissionManager.isConnected,我发现无论我什么时候调用它们,它们总是 return 为真。所以我认为应该是SDK内部的bug。
我找到了解决这个问题的解决方案。
初始化任务。
// Step 1: create mission
DJIWaypointMission waypointMission = new DJIWaypointMission();
waypointMission.maxFlightSpeed = 14;
waypointMission.autoFlightSpeed = 4;
List<DJIWaypoint> waypointsList = new LinkedList<>();
// Step 2: create waypoints and prepare coordinates
DJIWaypoint northPoint = new DJIWaypoint(mHomeLatitude + 10 * Utils.ONE_METER_OFFSET, mHomeLongitude, 10f);
DJIWaypoint eastPoint = new DJIWaypoint(mHomeLatitude, mHomeLongitude + 10 * Utils.calcLongitudeOffset(mHomeLatitude), 20f);
DJIWaypoint southPoint = new DJIWaypoint(mHomeLatitude - 10 * Utils.ONE_METER_OFFSET, mHomeLongitude, 30f);
DJIWaypoint westPoint = new DJIWaypoint(mHomeLatitude, mHomeLongitude - 10 * Utils.calcLongitudeOffset(mHomeLatitude), 40f);
//Step 3: add actions
northPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.GimbalPitch, -60));
northPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartTakePhoto, 0));
eastPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartTakePhoto, 0));
southPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.RotateAircraft, 60));
southPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StartRecord, 0));
westPoint.addAction(new DJIWaypoint.DJIWaypointAction(DJIWaypoint.DJIWaypointActionType.StopRecord, 0));
//Step 4: add waypoints into the mission
waypointsList.add(northPoint);
waypointsList.add(eastPoint);
waypointsList.add(southPoint);
waypointsList.add(westPoint);
waypointMission.addWaypoints(waypointsList);
mDJIMission = waypointMission;
准备任务。
mMissionManager.prepareMission(mDJIMission, new DJIMission.DJIMissionProgressHandler() {
@Override
public void onProgress(DJIMission.DJIProgressType type, float progress) {
setProgressBar((int)(progress * 100f));
}
}, new DJICompletionCallback() {
@Override
public void onResult(DJIError error) {
if (error == null) {
Utils.setResultToToast(mContext, "Success!");
} else {
Utils.setResultToToast(mContext, "Prepare: " + error.getDescription());
}
}
});