Программно приостановить миссию на временной шкале после DJIGimbalAttitudeAction - PullRequest
0 голосов
/ 28 мая 2020

Я создал миссию на временной шкале, чтобы запустить набор действий, чтобы дрон летел по прямой линии, делая снимки с интервалом в 2 секунды, пока камера направлена ​​прямо вниз. Я хочу, чтобы миссия приостановилась сразу после завершения действия кардана. Вот запланированные действия:

  • DJITakeOffAction
  • DJIGoToAction (координаты с высотой)
  • DJIGimbalAttitudeAction (pitch -90)
  • DJIShootPhotoAction (initWithPhotoCount 20 , интервал 2 секунды, подождите НЕТ)
  • DJIGoToAction (координаты с высотой)

Миссия работает нормально, но я хочу программно приостановить временную шкалу после завершения DJIGimbalAttitudeAction, чтобы я мог настроить настройки камеры перед выполнением двух последних действий.

Возможно ли это? Я попытался выполнить это, если indexOfScheduledElement соответствовал индексу элемента временной шкалы DJIGimbalAttitudeAction в addListener:(id)listener toTimelineProgressWithBlock DJIMissionControl, но у меня возникла ошибка DJISDKMissionErrorDomain 10007

При игре с этим программная пауза работает нормально если временная шкала находится в середине чего-то вроде DJIGoToAction, но что-то еще вызывает ошибку. Есть ли лучший способ аккуратно выполнить pauseTimeline?

1 Ответ

0 голосов
/ 30 мая 2020

После большого количества тестов я обнаружил, что если я запускаю pauseTimeline, когда текущий элемент временной шкалы находится в событии DJIMissionControlTimelineEventStarted в слушателе временной шкалы, он будет просто приостановлен, пока выполняемое действие / элемент НЕ является DJIShootPhotoAction - любая пауза на DJIShootPhotoAction приводит к ошибке занятости камеры.

Если те же действия (например, DJIGoToAction, DJIAircraftYawAction, DJIGimbalAttitudeAction) находятся на этапе DJIMissionControlTimelineEventProgressed, они завершаются с ошибкой DJISDKMissionErrorDomain 10007

[DJISDKManager.missionControl addListener:self toTimelineProgressWithBlock:^(DJIMissionControlTimelineEvent event, id<DJIMissionControlTimelineElement>  _Nullable element, NSError * _Nullable error, id  _Nullable info) {
    if (event == DJIMissionControlTimelineEventStarted) {
      [DJISDKManager.missionControl pauseTimeline];
    }
  }];
...