一键起飞条件分析
根据代码分析,一键起飞功能涉及前端检查 、后端校验 和用户确认三个层面的条件约束:
一、前端条件检查
1. 电量限制
文件:droneCommon.ts(file:///d:/java/Dji/dji-cloud-main/wvp-ui/src/views/auth/system/air/components/droneCommon.ts#L45-49)
typescript
export const TAKEOFF_MIN_BATTERY_PERCENT = 30
export function isTakeoffBlockedByBattery (osd: any): boolean {
const battery = osd?.battery?.capacityPercent
return Number(battery) <= TAKEOFF_MIN_BATTERY_PERCENT
}
条件 :电池电量 ≤ 30% 时禁止起飞
2. 信号质量检查
文件:droneCommon.ts(file:///d:/java/Dji/dji-cloud-main/wvp-ui/src/views/auth/system/air/components/droneCommon.ts#L52-71)
| 检查项 | 阈值 | 处理方式 |
|---|---|---|
| 电量警告 | 30% < 电量 < 60% | 警告提示 |
| 搜星质量 | RTK/GPS 数量 < 10 | 警告提示 |
3. 多机高度冲突检测
文件:droneCommon.ts(file:///d:/java/Dji/dji-cloud-main/wvp-ui/src/views/auth/system/air/components/droneCommon.ts#L80-100)
条件 :多架次无人机之间的安全起飞高度 和返航高度 需间隔 10米,否则冲突检测失败。
二、后端核心校验
1. 起飞条件校验(核心)
文件:ControlServiceImpl.java(file:///d:/java/Dji/dji-cloud-main/dji-cloud/wvp-server/src/main/java/com/gbcom/wvp/dji/control/service/impl/ControlServiceImpl.java#L162-173)
java
private void checkTakeoffCondition(String dockSn) {
Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(dockSn);
// 条件1:设备必须在线 且 状态必须是 IDLE
if (!dockOpt.isPresent() || DockModeCodeEnum.IDLE != deviceService.getDockMode(dockSn)) {
throw new RuntimeException("The current state does not support takeoff.");
}
// 条件2:必须获取飞行控制权
HttpResultResponse result = seizeAuthority(dockSn, DroneAuthorityEnum.FLIGHT, null);
if (HttpResultResponse.CODE_SUCCESS != result.getCode()) {
throw new IllegalArgumentException(result.getMessage());
}
}
后端起飞条件:
| 条件 | 说明 | 失败时异常信息 |
|---|---|---|
| 设备在线 | 无人机/基站必须处于在线状态 | "The current state does not support takeoff." |
| 设备空闲 | 基站状态必须为 IDLE |
"The current state does not support takeoff." |
| 飞行权限 | 平台必须获取飞行控制权 | 权限获取失败信息 |
2. 飞行配置限高检查
文件:ControlServiceImpl.java(file:///d:/java/Dji/dji-cloud-main/dji-cloud/wvp-server/src/main/java/com/gbcom/wvp/dji/control/service/impl/ControlServiceImpl.java#L189-238)
| 配置项 | 检查规则 | 失败时异常信息 |
|---|---|---|
| 安全起飞高度 | ≤ 系统限高配置 | "安全起飞点高度超过限高" |
| 返航高度 | ≤ 系统限高配置 | "返航高度超过限高" |
| 目标高度 | ≤ 系统限高配置(默认20米) | "目标高度超过限高" |
三、用户确认(UI层)
起飞前检查弹窗
文件:takeoff-check-modal.vue(file:///d:/java/Dji/dji-cloud-main/wvp-ui/src/views/auth/system/air/components/takeoff-check-modal.vue#L1-152)
必须确认的信息:
| 项目 | 说明 |
|---|---|
| 安全起飞高度(ALT) | 默认为50米 |
| 返航高度(ALT) | 默认为100米 |
| 目标点高度 | 可选显示 |
| 失联动作 | 非M300/M350机型显示 |
强制要求 :必须勾选 "已确认周边环境安全" 复选框才能点击"立即执行"。
完整起飞条件流程图
用户点击"一键起飞"
↓
┌─────────────────────────────────────┐
│ 前端检查层 │
│ ├─ 电量 ≤ 30% ? → 禁止起飞 │
│ ├─ 搜星质量 < 10 ? → 警告 │
│ └─ 多机高度冲突检测 → 冲突则提示 │
└─────────────────────────────────────┘
↓ 通过
┌─────────────────────────────────────┐
│ UI确认层 │
│ ├─ 显示起飞配置信息 │
│ └─ 必须勾选"周边环境安全"确认 │
└─────────────────────────────────────┘
↓ 确认
┌─────────────────────────────────────┐
│ 后端校验层 │
│ ├─ 设备在线 + 状态IDLE ? │
│ ├─ 飞行权限获取成功 ? │
│ └─ 配置高度 ≤ 系统限高 ? │
└─────────────────────────────────────┘
↓ 通过
┌─────────────────────────────────────┐
│ 发送起飞命令到无人机 │
└─────────────────────────────────────┘
总结
一键起飞需同时满足以下全部条件:
| 层级 | 条件 | 严格程度 |
|---|---|---|
| 前端硬限制 | 电池电量 > 30% | 必须满足 |
| 前端警告 | 搜星质量 ≥ 10 | 建议满足 |
| 前端冲突检测 | 高度间隔 ≥ 10米(多机场景) | 必须满足 |
| 用户确认 | 勾选环境安全确认 | 必须满足 |
| 后端状态校验 | 设备在线 + 状态IDLE | 必须满足 |
| 后端权限校验 | 获取飞行控制权 | 必须满足 |
| 后端配置校验 | 各高度值 ≤ 系统限高 | 必须满足 |