Я создаю приложение для дронов, которое будет отправлять команды полета для полета в помещении. Я внедряю виртуальные джойстики DJI Mobile SDK, которые описаны здесь .
После экспериментирования с учебником по симуляторам DJI, найденным здесь , я реализовал урезанную версию без симуляции для своего приложения. Когда я тестировал свое приложение на открытом воздухе, элементы управления работают последовательно и правильно.
Однако, когда я выхожу в помещение, дрон выполняет только 1 действие независимо от отправленной команды: дрон летит в направлении своего заднего левого винта. Дрон всегда будет летать в этом направлении, даже если команда только повернет дрона.
Есть идеи, что может происходить? Я не уверен, какой код отправлять, так как мой код работает на открытом воздухе.
ОБНОВЛЕНИЕ # 1
Вот мои настройки контроллера полета (реализовано в Swift):
self.flightController = (DJISDKManager.product() as? DJIAircraft)?.flightController
self.flightController?.rollPitchControlMode = DJIVirtualStickRollPitchControlMode.velocity
self.flightController?.yawControlMode = DJIVirtualStickYawControlMode.angle
self.flightController?.rollPitchCoordinateSystem = DJIVirtualStickFlightCoordinateSystem.body
ОБНОВЛЕНИЕ № 2
Код для изменения Yaw (с некоторыми жестко закодированными числами). В основном используется для того, чтобы дрон полностью развернулся.
private var turnTime = 0
private var turnTimer: Timer? = nil
func turn() {
self.turnTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: (#selector(turnDroneCommand)), userInfo: nil, repeats: true)
}
@objc func turnDroneCommand() {
self.turnTime += 1
let data = DJIVirtualStickFlightControlData(pitch: 0, roll: 0, yaw: Float(180), verticalThrottle: 0)
self.flightController.send(data, withCompletion: { (error) in
if error != nil {
// Fire custom error callback
}
})
if self.turnTime >= 7 {
self.turnTimer?.invalidate()
self.turnTime = 0
// Fire custom success callback
}
}
Я реализовал практически идентичный метод изменения высоты тона. Как уже говорилось, текущий результат не отличается для обеих команд.