我正在尝试复制 DJI Go 应用程序的“音高锁定”开/关功能。我怎样才能做到这一点?
我正在使用 XCode 8.2.1,为 iOS 10.1 构建,连接到带有 iPhone 6s 的 Osmo Mobile。Osmo Mobile 具有最新的固件(版本 01.30.01.52)。
到目前为止一切正常(registerApp、通过蓝牙连接、按下手持按钮、获取云台电池更新、获取云台更新)。
将 setGimbalWorkMode 设置为 .freeMode 或 .yawFollowMode 似乎没有任何效果。完成块没有返回错误,但对云台操作没有影响。
云台的行为就像它处于 .freeMode 状态(总是移动到手持摇杆指向的确切方向),但 DJIGimbalDelegate 只接收 .yawFollowMode 更新(这是 pitchLock 模式应该做的)。
将 setGimbalWorkMode 设置为其他模式会导致错误(正如 Osmo 移动设备所预期的那样)。
这是我尝试打开/关闭pitchLock的方式。
@IBAction func pitchLockPressed(_ sender: UIButton) {
pitchLock = !pitchLock
if let gimbal = fetchGimbal() {
var workMode : DJIGimbalWorkMode = .freeMode // .freeMode .fpvMode and .unknown return error using Osmo Mobile
if pitchLock {
workMode = .yawFollowMode
}
gimbal.setGimbalWorkMode(workMode, withCompletion: { (error) in
if (error != nil) {
print("error workMode: \(error?.localizedDescription)")
self.pitchLock = !(self.pitchLock) // back to previous
}
})
}
}
这是委托,无论我做什么,它都只报告 .yawFollowMode:
func gimbal(_ gimbal: DJIGimbal, didUpdate gimbalState: DJIGimbalState) {
// var needUpdate = false
if lastReportedWorkMode != gimbalState.workMode {
lastReportedWorkMode = gimbalState.workMode
switch lastReportedWorkMode {
case DJIGimbalWorkMode.fpvMode:
print("FPV\n")
case DJIGimbalWorkMode.freeMode:
print("Free\n")
case DJIGimbalWorkMode.yawFollowMode:
print("Yaw-follow\n")
case DJIGimbalWorkMode.unknown:
print("Unknown\n")
}
}
有人让 setGimbalWorkMode 真正改变云台模式吗?