如何设置单元测试来测试自定义 DJI 任务?



在这里,它指出我们可以使用DJISimulator对象来帮助促进持续集成(即单元/集成测试(。但我似乎想不通这怎么可能。DJISimulatorDJIFlightController不符合相同的基本协议,也没有类似的委托。

我希望能够做的是在我的单元测试中,模拟(不连接无人机硬件或运行DJIAssistant 2(无人机起飞并飞行我们构建和上传的航点任务,完成后,回家和着陆;遵循相同的代码流程,如果我们使用真正的无人机飞行,以及我们的自定义iOS应用程序,其中集成了DJISDK。

这可能吗?

目前,在没有硬件(无人机 + RC(物理循环的情况下运行模拟器是不可能的。这是因为实际模拟发生在无人机上,而不同无人机的每个不同飞行控制器模型都有自己的小怪癖,这使得很难在软件中完全准确地模拟整个事情。

但是,您可以通过在测试循环中连接无人机并打开电源来模拟航点任务,而无需实际飞行无人机。

要开始模拟,请从飞行器的飞行控制器中获取DJISimulator对象,然后使用所需的位置、频率等调用启动模拟方法。启动模拟器后,可以侦听模拟器的委托方法,以获取模拟世界中无人机的状态。


编辑

为了添加更多关于如何编写单元测试的信息,以下是测试例如这样的任务的一系列粗略步骤[起飞,向北偏航,航点任务,回家和着陆]:

  1. 确保打开模拟器,或重新启动它以清除无人机的状态(如果模拟器已经打开(。
  2. 在单元测试方法中,创建所有时间线操作并将其添加到日程表。
  3. 添加时间线进度侦听器。每当任何时间线元素更新时,都会触发此侦听器。您的大部分单元测试逻辑将在此块中。例如,如果时间轴侦听器元素是索引 1 处的飞机偏航元素,则您知道这是"向北偏航"步骤。因此,每当该元素的状态出现时,您都可以探测无人机询问它的态度,并断言它的偏航像您期望的那样指向北方。同样,在航点期间,到达每个航点后,您可以检查无人机的 GPS 坐标是否在您预期的位置(+几米的误差阈值(。如果时间线在任何时候吐出错误,您认为测试失败了。
  4. 开始您的时间线。
  5. 由于一切都是异步的,因此您需要在合理的时间内添加等待超时,如果时间线在此之前未成功完成,则认为测试失败。

附言如果您想获得任务(航点、热点等(的更精细更新,您还可以订阅收听 MissionOperator 侦听器(WaypointMissionOperator、HotpointMissionOperator 等(。那些有上传/下载侦听器,可能会感兴趣。

此外,在测试的任何时间点,您根本不需要侦听模拟器的状态侦听器,因为您只需探测无人机的状态(位置、电机是否打开等(,它会给出模拟值,您可以用预期值进行检查。

最新更新