DJI-SDK Hotpoint Mission简析

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

DJIHotpointMission 的属性

hotpoint, radius 和 altitude

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

startPoint

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

  • north
  • south
  • west
  • east
  • nearest

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

<a name="heading"></a>

heading

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

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

<a name="angularVelocity"></a>

angularVelocity

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

// 50 为飞行的半径
DJIHotpointMissionOperator.getMaxAngularVelocity(forRadius: 50) { (maxAngularVelocity, error) in
    if let error = error {
        print("error: \(error.localizedDescription)")
    } else {
        print("maxAngularVelocity: \(maxAngularVelocity)")
    }
}

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

DJIHotpointMissionOperator

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

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

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

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

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

© 著作权归作者所有
这个作品真棒,我要支持一下!
奇志技术团队博客 http://meshtech.co/
0条评论
top Created with Sketch.