在无人机开发中的 Hotpoint Mission,其实就是我们常说的兴趣点环绕飞行,它可以控制飞机以一个坐标点为中心来进行环绕飞行。在 DJI-SDK 中,要想启动一个 Hotpoint Mission,首先要构建一个 DJIHotpointMission 的对象,然后通过 DJIHotpointMissionOperator 来启动执行 hotpoint 任务。

DJIHotpointMission 的属性

hotpoint, radius 和 altitude

hotpoint 是一个地理坐标值:CLLocationCoordinate2D ,它是整个环绕飞行的圆心。
有了圆心,当然少不了半径 radius ,它是飞机与圆心的距离。这里要注意的是 radius 的取值范围是 5米-500米
altitude 是在环绕飞行中的高度。
image.png

startPoint

startPoint 是一个枚举值,它决定飞机飞到哪个方位开始执行环绕。

  • north
  • south
  • west
  • east
  • nearest

下面这幅图可直观的理解,其中 nearest 意思是飞机离环绕飞行所组成的圆上最近的位置。
image.png

heading

heading 顾名思义,就是决定着飞机在环绕飞行中的机头朝向。它也是一个枚举值。

  • lookingForward:机头方向与环绕飞行的移动方向一致
  • lookingBackward:机头方向背对着环绕飞行的移动方向
  • towardHotpoint:机头方向一直对着圆心
  • awayFromHotpoint:机头方向背对着圆心
  • controlledByRemoteController:通过遥控器摇杆控制机头方向
  • UsingInitialHeading:使用飞机开始环绕飞行时的朝向

image.png

angularVelocity

angularVelocity 角速度,它控制着飞机环绕飞行时每秒转过的角度。
DJIHotpointMissionOperator 提供了一个类方法来计算最大的角速度:

  1. // 50 为飞行的半径
  2. DJIHotpointMissionOperator.getMaxAngularVelocity(forRadius: 50) { (maxAngularVelocity, error) in
  3. if let error = error {
  4. print("error: \(error.localizedDescription)")
  5. } else {
  6. print("maxAngularVelocity: \(maxAngularVelocity)")
  7. }
  8. }

这里还有一个值得注意的点是:当 angularVelocity 的值为负数的时候,飞机会以顺时针的方向进行环绕飞行;当为正数的时候则以逆时针的方向。

DJIHotpointMissionOperator

DJIHotpointMissionOperator 是实际整个 Hotpoint 任务的执行者。
在开始一个 Hotpoint Mission 前,我们应该先检查一下当前的状态(DJIHotpointMissionState) 是否为 readyToStart,DJIHotpointMissionOperator 提供了 currentState 的属性来获取当前 Hotpoint Mission 所处的状态:

  1. // 在开始执行前,判断是否在 readyToStart 的状态。
  2. guard DJISDKManager.missionControl()?.hotpointMissionOperator().currentState == .readyToStart else {
  3. print("Hotpoint mission operator not ready to start")
  4. return
  5. }

通过它提供的 startMission:withCompletion 方法,传入一个 DJIHotpointMission 对象,即可开始执行一个 Hotpoint 任务。

  1. DJISDKManager.missionControl()?.hotpointMissionOperator().start(hotpiontMission) { (error) in
  2. if let error = error {
  3. print("Start hotpoint feature error: \(error.localizedDescription)")
  4. }
  5. }

更详细的内容可以查看 DJI-SDK 的官方文档