DJI虚拟摇杆控制未正确应用

时间:2018-05-04 14:49:11

标签: ios dji-sdk

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

在使用DJI的模拟器教程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

更改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
    }
}

我实现了一种改变音高的几乎相同的方法。如前所述,目前的结果对于任何一个命令都没有区别。

2 个答案:

答案 0 :(得分:0)

经过与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无人机上遇到“忽略命令”问题。如果找到漂移的解决方案,我会相应更新。

答案 1 :(得分:0)

我们在M100上使用虚拟RC时遇到了类似的问题,这是M100固件而不是sdk的问题。我们没有使用任何SDK,而是使用直接串行命令直接连接到M100板上的com端口。我们放弃了尝试使用虚拟RC的尝试,现在发送了运行良好的速度命令。