一键起飞条件分析
根据代码分析,一键起飞功能涉及前端检查、后端校验和用户确认三个层面的条件约束:
一、前端条件检查
1. 电量限制
文件:[droneCommon.ts](file:///d:/java/Dji/dji-cloud-main/wvp-ui/src/views/auth/system/air/components/droneCommon.ts#L45-49)
exportconstTAKEOFF_MIN_BATTERY_PERCENT=30exportfunctionisTakeoffBlockedByBattery(osd:any):boolean{constbattery=osd?.battery?.capacityPercentreturnNumber(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)
privatevoidcheckTakeoffCondition(StringdockSn){Optional<DeviceDTO>dockOpt=deviceRedisService.getDeviceOnline(dockSn);// 条件1:设备必须在线 且 状态必须是 IDLEif(!dockOpt.isPresent()||DockModeCodeEnum.IDLE!=deviceService.getDockMode(dockSn)){thrownewRuntimeException("The current state does not support takeoff.");}// 条件2:必须获取飞行控制权HttpResultResponseresult=seizeAuthority(dockSn,DroneAuthorityEnum.FLIGHT,null);if(HttpResultResponse.CODE_SUCCESS!=result.getCode()){thrownewIllegalArgumentException(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 | 必须满足 |
| 后端权限校验 | 获取飞行控制权 | 必须满足 |
| 后端配置校验 | 各高度值 ≤ 系统限高 | 必须满足 |