使用OSDK 的无人机飞行控制功能,能够设置并获取无人机各项基础参数,控制无人机执行基础飞行动作,通过Joystick 功能控制无人机执行复杂的飞行动作。
OSDK 开放了设置无人机基础参数的接口,开发者通过设置并获取无人机的基础参数,能够实现对无人机的精准控制:
具有消息订阅功能的应用程序,能够方便用户获取无人机基础参数的信息:
无人机的基础飞行动作主要包含无人机锁定、无人机起飞降落和无人机返航三类,开发者使用OSDK 提供的接口,即可根据实际的控制需求,控制无人机执行指定的飞行动作。
表1. 基础飞行动作
功能类型 | 基本功能 | 功能说明 |
---|---|---|
无人机锁定 | 解锁 | 无人机解锁后,无人机的螺旋桨会怠速旋转,但不会飞离地面 |
上锁 | 无人机上锁后,无人机的螺旋桨由怠速旋转状态变为静止状态 | |
起飞和降落 | 自动起飞 | 使用该功能时,无人机会自动起飞1.2 米(该高度不可调整) |
自动降落 | 使用该功能时,无人机会自动降落 | |
取消自动降落 | 使用该功能时,无人机在下降多过程中会停止降落,并悬停在空中 | |
降落确认 | 当无人机已降落到离地面一定距离时,用户使用该功能可确认无人机降落到地面 | |
强制降落 | 无视降停面的状态,强制无人机降落(降落速度较快) | |
无人机返航 | 返航 | 使用该功能时,无人机会自动返航 |
取消返航 | 使用该功能时,无人机会悬停在空中 |
说明
- 不同型号的无人机在执行起飞、降落和返航动作时的高度可能会有差异,详情请参见选购机型的说明书。
- 无人机解锁后,若未接收到起飞指令,无人机将自动上锁,螺旋桨会停止旋转,若无人机解锁失败,请根据错误码查询解锁失败的原因。
Joystick 是一个无人机综合控制功能,使用Joystick 功能时,开发者根据实际的应用需要,通过调用Joystick 中的接口,同时设置无人机使用的坐标系、水平控制的模式、垂直控制的模式、yaw角度控制的模式和悬停模式,才能设计出满足使用需求的无人机飞行控制逻辑。
机体坐标系
机体坐标系以无人机的重心为原点,无人机机头前进的方向为X轴,机头前进方向的右侧为Y轴,Z轴与X轴、Y轴相互垂直交于重心且指向无人机下方(遵循“右手法则”)。在机体坐标下,无人机围绕X轴、Y轴和Z轴旋转时的飞行动作,可称为横滚(无人机仅绕X轴旋转)、俯仰(无人机仅绕Y轴旋转)和偏航(无人机仅绕Z轴旋转)。
大地坐标系
大地坐标系也称世界坐标系或当地水平坐标系,在该坐标系中,无人机指向地球正北的方向为X轴,正东的方向为Y轴,X轴与Y轴相互垂直,Z轴竖直指向无人机下方,在满足“右手法则”的前提下,Z轴将根据无人机飞行的实际情况调节角度,因此该坐标系也称为“北-东-地(N-E-D)坐标系”。
说明: 当位置指令的模不为0时,无人机会以指定的速度向前飞行,否则,无人机将悬停在指定的位置。
仅在水平控制模式中的速度控制模式下,开发者可以设置无人机的悬停模式:
DJI 的无人机在执行飞行任务过程中的基础高度概念如 表2.无人机高度概念 所示。
表2.无人机高度说明
相对起飞高度 | 融合高度 | GPS 高度 | RTK 高度 | 对地高度 | |
---|---|---|---|---|---|
基本含义 | 无人机相对于起飞点的高度变化量 | 以气压计值为初始值,使用融合算法并借助无人机上所有传感器的数据输出的高度值 | 基于GPS 卫星输出的实时椭球高 | 基于RTK 技术输出的实时椭球高 | 借助无人机上的测距传感器获得的无人机与当前下方物体的距离 |
数据来源 | IMU(可能包括视觉传感器、GPS 和RTK)和气压计 | IMU(可能包括视觉传感器、GPS 和RTK)和气压计 | GPS 卫星 | RTK 卫星 | TOF 或超声波和IMU |
高度0 点 | 无人机离地起飞的点 | 标准气压的海平面 | WGS84坐标系 | RTK 坐标系(C2000,WGS84或用户指定的坐标系) | 无人机正下方坚硬物体的表面(如地面) |
应用场景 | 用于获取无人机当前已飞行的高度 | 用于更加精准稳定地控制无人机执行飞行任务 | 用于分析无人机的飞行任务和飞行状态 | 用于精准测绘和航点飞行等飞行任务 | 用于无人机安全降落(避障和降速) |
有效量程 | 数千米 | 数千米 | 数千米 | 数千米 | 10 米内 |
获取方法 | 通过DJI Pilot 获取该信息 基于MSDK 开发的移动端APP 可订阅该信息 |
基于MSDK 开发的移动端APP 可订阅该信息 | 基于MSDK 开发的移动端APP 可订阅该信息 | 基于MSDK 开发的移动端APP 可订阅该信息 | 通过DJI Pilot 获取该信息 基于MSDK 开发的移动端APP 可订阅该信息 |
数据误差 | 有,受无人机飞行距离的影响,高度精度会受影响 | 有,受无人机飞行距离的影响,高度精度会受影响 | 无 | 无 | 无 |
可靠度 | 不可靠 | 不可靠 | 基本可靠 | 可靠 | 可靠 |
误差(噪声)水平 | 低 | 低 | 高 | 低 | 低 |
影响因素 | 受温度,湿度,气压影响 | 受温度,湿度,气压影响 | 受GPS 卫星强度影响,短期误差大,长期误差相对较小 | 受RTK 卫星工作状态和RTK 基站精度的影响,总体误差小 | 无人机正下方坚硬物体表面的性质(如质地和纹理) |
使用无人机飞行控制功能需要先实例化对象,再设置无人机的基础参数,最后再使用Joystick 中的功能。
为方便开发者使用OSDK 开发应用程序,请在使用OSDK 开发应用程序前先实例化无人机的对象。
FlightSample* flightSample = new FlightSample(vehicle); |
使用flightSample
和 flightController
中的接口设置无人机的基础参数。
说明: 为方便开发者快速设置无人机的基础参数,OSDK 将
flightController
中的接口封装在flightSample
中,使用flightController
或flightSample
中的接口均可设置无人机的基础参数。
flightSample->monitoredTakeoff(); |
使用Joystick 功能需要先设置Joystick 的模式和对应的控制指令,再执行Joystick 指令,实现对无人机的控制。如下代码以在flightSample->moveByPositionOffset()
中,使用Joystick 功能控制无人机在水平和垂直方向上运动到指定的位置。
FlightController::JoystickMode joystickMode = { |
说明: 若在无人机飞行的过程中不改变Joystick 中的设置项,则仅在无人机开始执行飞行任务时设置Joystick 模式即可。
说明:
joystickCommand
中z轴方向的位置是相对于起飞点高度的绝对高度。
while (elapsedTimeInMs < timeoutInMilSec) { |