После долгих ошибок и ошибок я выяснил шаги, необходимые для запуска миссии путевой точки:
Установка SDK в режим наземной станции
Сначала вы необходимо установить SDK в режим наземной станции следующим способом:
DJISDKManager.Instance.ComponentManager.GetFlightControllerHandler(0, 0).SetGroundStationModeEnabledAsync(new BoolMsg() { value = true })
Загрузка миссии
Во-вторых, вы должны загрузить свою миссию путевых точек в SDK, используя следующий метод:
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).
LoadMission(waypointMission)
Где waypointMission
может быть обозначением миссии путевой точки в вашем вопросе. Эта путевая миссия должна следовать некоторым ограничениям. Например, общее расстояние не может быть длинным (не знаю, какое именно число). Этот метод возвращает SDKError, если с миссией что-то не так.
Загрузка миссии путевой точки на дрон
После загрузки миссии в SDK ее все равно необходимо загрузить на дрон. Это делается следующим способом:
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).
UploadMission ()
(опционально) с указанием симулятора
На этом этапе вы можете начать Режим симуляции, если вы не хотите, чтобы ваш дрон взлетал. Это можно сделать с помощью следующего кода:
FlightControllerHandler _flightControllerHandler = DJISDKManager.Instance.ComponentManager.GetFlightControllerHandler(0, 0);
var simSettings = new SimulatorInitializationSettings()
{
latitude = 0,
longitude = 0,
satelliteCount = 12
};
await _flightControllerHandler.StartSimulatorAsync(simSettings);
Важно, чтобы значение satelliteCount
было больше 10. В противном случае SDK выдаст ошибку с ошибкой о том, что уровень сигнала GPS недостаточно хорош.
Начало миссии Наконец, вы можете начать миссию путевой точки следующим образом
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).StartMission()
Другие примечания:
- Мост из этих вызовов
async
, и их лучше всего ожидать. Даже если вы ожидаете звонков, я заметил, что загрузка миссии не будет завершена к моменту завершения метода. Поэтому, если вы позвоните StartMission()
сразу после UploadMission()
, это может привести к INVALID_REQUEST_IN_CURRENT_STATE
. Я обошел эту проблему, имея отдельную кнопку для загрузки и запуска миссии. Таким образом, я могу ждать Миссия должна быть загружена до начала миссии.
Все вышеперечисленные методы возвращают тип SDKError
. Если все прошло хорошо, это будет NO_ERROR
, важно проверить, так ли это для каждого звонка.