我正在构建一个无人机应用程序,它将发送用于室内飞行的飞行命令。我正在实现djt_a描述的DJI Mobile SDK虚拟棒。

在尝试DJI的Simulator Tutorial的here之后,我为应用程序实现了精简的非仿真版本。当我在户外测试我的应用程序时,控件将一致且正确地工作。

但是,当我进入室内时,无论发出什么命令,无人驾驶飞机只会执行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

更改偏航的代码(带有一些硬编码的数字)。基本上是用来使无人机完全转向。
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
    }
}

我已经实现了几乎相同的更改音高的方法。如前所述,当前结果对于任何一条命令都没有不同。

最佳答案

与DJI的开发人员反复交流之后,我现在可以提供部分解决方案。

部分解决方案

如果您查看问题的更新#2中提供的代码,则会注意到以下几行:

self.turnTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: (#selector(turnDroneCommand)), userInfo: nil, repeats: true)


self.turnTime += 1
...
if self.turnTime >= 7 {
    self.turnTimer?.invalidate()
    self.turnTime = 0
    // Fire custom success callback
}

timeInterval参数设置为0.2秒。这意味着命令以5Hz的频率发送不到2秒。根据DJI的开发人员的说法,命令的发送频率必须为10Hz(或更高,但我尚未验证),而要长于2秒。

杰出问题

在执行虚拟操纵杆命令之前,Matrice 100(M100)仍向左后螺旋桨“漂移”。 DJI的开发人员似乎无法访问M100,因此无法对其进行自我测试。由于它看起来(基于非常非常有限的测试)是M100特有的问题,因此对于Mobile SDK本身可能不是问题。

我将其标记为答案,以防有人偶然发现另一台DJI无人机的“忽略命令”问题。如果找到了解决漂移的方法,我将进行相应的更新。

关于ios - DJI Virtual Stick控件未正确应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50177654/

10-08 21:57