在 DJI Gimbal Attitude Action 之后以编程方式暂停时间线任务

Programatically pause timeline mission after DJIGimbalAttitudeAction

我已经为 运行 一组动作创建了一个时间轴任务,因此无人机沿直线飞行,以 2 秒的间隔拍摄照片,同时相机指向下方。我希望任务在云台动作完成后立即暂停。以下是预定的操作:

任务 运行 很好,但我想在 DJIGimbalAttitudeAction 完成后以编程方式暂停时间线,这样我就可以在最后两个动作 运行 之前调整相机设置。

这可能吗?如果 indexOfScheduledElement 与 DJIMissionControl 的 addListener:(id)listener toTimelineProgressWithBlock 中的 DJIGimbalAttitudeAction 时间线元素的索引匹配,我尝试执行此操作,但我收到 DJISSDKMissionErrorDomain 错误 10007

在玩这个时,如果时间轴处于 DJIGoToAction 之类的中间,则以编程方式暂停似乎可以正常工作,但其他任何事情似乎都会导致错误。有没有更好的方法来干净地执行 pauseTimeline?

经过大量测试后,我发现如果我在当前 运行 时间线元素位于时间线侦听器中的 DJIMissionControlTimelineEventStarted 事件时触发 pauseTimeline,只要 action/element 运行 不是 DJIShootPhotoAction - DJIShootPhotoAction 上的任何暂停都会导致相机忙错误。

如果相同的操作(例如 DJIGoToAction、DJIAircraftYawAction、DJIGimbalAttitudeAction)处于 DJIMissionControlTimelineEventProgressed 阶段,它们将失败并显示 DJISSDKMissionErrorDomain 错误 10007

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