我在嘗試在Swift中使用iOS的DJI-SDK非常糟糕。來自swift的DJI虛擬棒控制
該SDK使用Objective-c編寫,並使用鍵值系統存儲值並將命令發送給無人機,因此如果您需要告訴無人機啓用虛擬杆,您需要執行如下操作:
DJISDKManager.keyManager()?.setValue(true as NSNumber, for: enableVirtualStickModeKey!, withCompletion: { (error) in......
這是非常簡單的,因爲我們的價值是Bool
投給NSNumber
,問題開始時,我需要發送結構值,如虛擬棒(Objective-C的結構)的位置,這是一個例子使無人機以1m/s上升的值:
var controlData = DJIVirtualStickFlightControlData()
controlData.verticalThrottle = 1
controlData.pitch = 0
controlData.roll = 0
controlData.yaw = 0
DJISDKManager.keyManager()?.setValue(controlData, for: virtualSticksKey!, withCompletion: { (error) in..
但是,SDK嘗試設置值時出現錯誤。 我寫信給DJI支持團隊,得到的答覆是,他們希望社會能夠幫助我解決問題....
的問題是我需要什麼類型的演員,使這一DJIVirtualStickFlightControlData
對象轉換爲一個目標-C兼容型?
這是從DJIFlightControllerBaseTypes.h
typedef struct
{
float pitch;
float roll;
float yaw;
float verticalThrottle;
} DJIVirtualStickFlightControlData;
的DJIVirtualStickFlightControlData
定義,這是setValue方法從DJIKeyManager.h
/**
* Performs a set on a settable key, changing attributes on the connected product.
*
* @param value A value object relevant to the given key
* @param key A valid settable key
* @param completion A set completion block.
*/
- (void)setValue:(id)value
forKey:(DJIKey *)key
withCompletion:(DJIKeyedSetCompletionBlock)completion;
setValue返回什麼錯誤? – paiv
有一些方法可以將'struct'轉換爲'(NS)Data',這是藍牙低能耗問題並不罕見。檢查那裏:https://stackoverflow.com/questions/29556610/cast-a-swift-struct-to-unsafemutablepointervoid? – Larme