在这里,它指出我们可以使用DJISimulator
对象来帮助促进持续集成(即单元/集成测试(。但我似乎想不通这怎么可能。DJISimulator
和DJIFlightController
不符合相同的基本协议,也没有类似的委托。
我希望能够做的是在我的单元测试中,模拟(不连接无人机硬件或运行DJIAssistant 2(无人机起飞并飞行我们构建和上传的航点任务,完成后,回家和着陆;遵循相同的代码流程,如果我们使用真正的无人机飞行,以及我们的自定义iOS应用程序,其中集成了DJISDK。
这可能吗?
目前,在没有硬件(无人机 + RC(物理循环的情况下运行模拟器是不可能的。这是因为实际模拟发生在无人机上,而不同无人机的每个不同飞行控制器模型都有自己的小怪癖,这使得很难在软件中完全准确地模拟整个事情。
但是,您可以通过在测试循环中连接无人机并打开电源来模拟航点任务,而无需实际飞行无人机。
要开始模拟,请从飞行器的飞行控制器中获取DJISimulator
对象,然后使用所需的位置、频率等调用启动模拟方法。启动模拟器后,可以侦听模拟器的委托方法,以获取模拟世界中无人机的状态。
编辑:
为了添加更多关于如何编写单元测试的信息,以下是测试例如这样的任务的一系列粗略步骤[起飞,向北偏航,航点任务,回家和着陆]:
- 确保打开模拟器,或重新启动它以清除无人机的状态(如果模拟器已经打开(。
- 在单元测试方法中,创建所有时间线操作并将其添加到日程表。
- 添加时间线进度侦听器。每当任何时间线元素更新时,都会触发此侦听器。您的大部分单元测试逻辑将在此块中。例如,如果时间轴侦听器元素是索引 1 处的飞机偏航元素,则您知道这是"向北偏航"步骤。因此,每当该元素的状态出现时,您都可以探测无人机询问它的态度,并断言它的偏航像您期望的那样指向北方。同样,在航点期间,到达每个航点后,您可以检查无人机的 GPS 坐标是否在您预期的位置(+几米的误差阈值(。如果时间线在任何时候吐出错误,您认为测试失败了。
- 开始您的时间线。
- 由于一切都是异步的,因此您需要在合理的时间内添加等待超时,如果时间线在此之前未成功完成,则认为测试失败。
附言如果您想获得任务(航点、热点等(的更精细更新,您还可以订阅收听 MissionOperator 侦听器(WaypointMissionOperator、HotpointMissionOperator 等(。那些有上传/下载侦听器,可能会感兴趣。
此外,在测试的任何时间点,您根本不需要侦听模拟器的状态侦听器,因为您只需探测无人机的状态(位置、电机是否打开等(,它会给出模拟值,您可以用预期值进行检查。