Невозможно включить точную посадку через вызов API

Я работаю с дроном Phantom 4 Pro, у которого есть возможность точной посадки. Я использую Swift и iPad для управления дроном. В программном обеспечении DJI Go я могу включить его, и он работает правильно. Однако в приложении, над которым я работаю, никакие вызовы для его включения не работают.

Это код, который пытается его включить:

static func setPrecisionLandingEnabled(precisionLandingEnabled: Bool, _ completeFunction: @escaping (Error?) -> Void) throws {
    guard let djiKeyManager = DJISDKManager.keyManager() else {
        GLog.Log("Error in Flight Controller Observer. Problem getting djiKeyManager in \(#file) \(#function)")
        throw FlightControllerManager.FlightControllerError.cantGetKeyManager
    }

    guard let precisionLandingEnabledKey = DJIFlightControllerKey(param: DJIFlightAssistantParamPrecisionLandingEnabled) else {
        GLog.Log("Error in Flight Controller Observer. Problem getting precisionLandingEnabledKey in \(#file) \(#function)")
        throw FlightControllerManager.FlightControllerError.cantGetKey
    }

    djiKeyManager.setValue(precisionLandingEnabled, for: precisionLandingEnabledKey, withCompletion: completeFunction)
}

Когда я вызываю функцию, функция завершения DJI SDK вернула следующую ошибку:

Домен ошибки = DJISDKErrorDomain Code = -1013 \ "Текущий продукт не поддерживает эту функцию. (Код: -1013) \"

Рассматриваемый API находится здесь: https://developer.dji.com/api-reference/ios-api/Components/IntelligentFlightAssistant/DJIIntelligentFlightAssistant.html?search=precision&i=0&#djiintelligentflightassistant_setprecisionlineingenable

Я проверил, и нет никаких параметров, переданных при вызове "взлета", который связан с точной посадкой. Итак, почему я получаю эту ошибку, когда знаю, что у дрона есть эта функция (что подтверждено собственным приложением DJI)? Должен ли дрон сначала лететь, прежде чем включить это? Или есть другие условия, которые должны быть выполнены, прежде чем я смогу включить это?


person Brent Patterson    schedule 07.03.2018    source источник


Ответы (1)


Мне кажется, вы должны создать объект DJIFlightAssistant, а затем использовать существующий метод setPrecisionLandingEnabled(_: Bool, completion: DJICompletionBlock)

Почему вы пишете свой собственный setPrecisionLandingEnabled() метод?

person Duncan C    schedule 08.03.2018
comment
Ах, я был сбит с толку, потому что был ключ словаря, который можно было использовать для изменения различных свойств, таких как максимальная высота полета, и я перепутал это с этим. Использование предложенного вами метода сработало, спасибо! - person Brent Patterson; 08.03.2018