单独将急停拿出来

This commit is contained in:
孙小云 2025-12-17 11:48:33 +08:00
parent 8f518bca79
commit f84450768b
9 changed files with 96 additions and 142 deletions

View File

@ -48,10 +48,12 @@ public class MachineFrameworkUsageExample {
// 创建新状态
MachineStates newStates = new MachineStates();
newStates.setDroneState(DroneState.PREPARING);
newStates.setAirportState(AirportState.STANDBY);
newStates.setDroneState(DroneState.FLYING);
newStates.setAirportState(AirportState.ONLINE);
newStates.setCoverState(CoverState.OPENED);
newStates.setDrcState(DrcState.EXITED);
newStates.setDebugModeState(DebugModeState.UNKNOWN);
newStates.setStopState(StopState.EXITED);
// 更新状态
commandManager.updateMachineStates(sn, newStates);
@ -204,10 +206,12 @@ public class MachineFrameworkUsageExample {
// 2. 设置初始状态
MachineStates initialStates = new MachineStates();
initialStates.setDroneState(DroneState.PREPARING);
initialStates.setAirportState(AirportState.STANDBY);
initialStates.setDroneState(DroneState.FLYING);
initialStates.setAirportState(AirportState.ONLINE);
initialStates.setCoverState(CoverState.OPENED);
initialStates.setDrcState(DrcState.EXITED);
initialStates.setDebugModeState(DebugModeState.UNKNOWN);
initialStates.setStopState(StopState.EXITED);
commandManager.updateMachineStates(sn, initialStates);
// 3. 检查是否可以起飞

View File

@ -15,32 +15,7 @@ public enum AirportState {
OFFLINE,
/**
* 在线父状态
* 在线
*/
ONLINE,
/**
* 待机
*/
STANDBY,
/**
* 进入调试模式中
*/
ENTERING_DEBUG_MODE,
/**
* 调试模式
*/
DEBUG_MODE,
/**
* 退出调试模式中
*/
EXITING_DEBUG_MODE,
/**
* 重启中
*/
REBOOTING
ONLINE
}

View File

@ -14,23 +14,9 @@ public enum CoverState {
*/
CLOSED,
/**
* 舱门打开中
*/
OPENING,
/**
* 舱门已打开
*/
OPENED,
/**
* 舱门关闭中
*/
CLOSING,
/**
* 舱门状态异常
*/
ERROR
}

View File

@ -0,0 +1,21 @@
package com.tuoheng.machine.state;
/**
* 调试模式状态枚举
*/
public enum DebugModeState {
/**
* 未知状态
*/
UNKNOWN,
/**
* 调试模式
*/
ENTERED,
/**
* 退出调试模式
*/
EXITED_DEBUG
}

View File

@ -14,18 +14,11 @@ public enum DrcState {
*/
EXITED,
/**
* 进入中正在进入DRC模式
*/
ENTERING,
/**
* 进入状态已进入DRC模式
*/
ENTERED,
/**
* 退出中正在退出DRC模式
*/
EXITING
}

View File

@ -5,87 +5,30 @@ package com.tuoheng.machine.state;
* 分为准备中 -> 飞行中 -> 返航 三个大状态
*/
public enum DroneState {
/**
* 未知状态服务器重启后的初始状态等待第一次心跳同步
*/
UNKNOWN,
/**
* 离线
*/
OFFLINE,
// ==================== 准备阶段 ====================
/**
* 准备中
*/
PREPARING,
// ==================== 飞行阶段父状态 ====================
/**
* 飞行中父状态
*/
FLYING_PARENT,
/**
* 飞行中
*/
FLYING,
/**
* 急停飞行阶段
*/
EMERGENCY_STOP,
/**
* 到达目的地
*/
ARRIVED,
// ==================== 返航阶段父状态 ====================
/**
* 返航父状态
*/
RETURNING_PARENT,
/**
* 返航中
*/
RETURNING,
/**
* 急停返航阶段
*/
RETURN_EMERGENCY_STOP,
/**
* 返航完成
*/
RETURN_COMPLETED,
// ==================== 指点操作可在飞行和返航阶段使用 ====================
/**
* 指点操作父状态
*/
POINTING_PARENT,
/**
* 准备指点
*/
POINT_PREPARING,
/**
* 指点飞行中
*/
POINT_FLYING,
/**
* 指点完成
*/
POINT_COMPLETED,
/**
* 指点被取消
*/
POINT_CANCELLED
}

View File

@ -5,7 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 设备的套大状态
* 设备的套大状态
*/
@Data
@NoArgsConstructor
@ -31,10 +31,20 @@ public class MachineStates {
*/
private DrcState drcState = DrcState.UNKNOWN;
/**
* 调试模式状态
*/
private DebugModeState debugModeState = DebugModeState.UNKNOWN;
/**
* 急停状态
*/
private StopState stopState = StopState.UNKNOWN;
/**
* 复制当前状态
*/
public MachineStates copy() {
return new MachineStates(droneState, airportState, coverState, drcState);
return new MachineStates(droneState, airportState, coverState, drcState, debugModeState, stopState);
}
}

View File

@ -0,0 +1,22 @@
package com.tuoheng.machine.state;
/**
* 急停状态
*/
public enum StopState {
/**
* 未知状态服务器重启后的初始状态等待第一次心跳同步
*/
UNKNOWN,
/**
* 退出状态
*/
EXITED,
/**
* 进入状态
*/
ENTERED,
}

View File

@ -46,49 +46,49 @@ public class DjiVendorConfig implements VendorConfig {
DroneState droneState = currentStates.getDroneState();
AirportState airportState = currentStates.getAirportState();
CoverState coverState = currentStates.getCoverState();
DebugModeState debugModeState = currentStates.getDebugModeState();
StopState stopState = currentStates.getStopState();
switch (commandType) {
case TAKE_OFF:
// 准备中状态可以起飞
return droneState == DroneState.PREPARING;
// 未知状态或离线状态且未急停时可以起飞
return (droneState == DroneState.UNKNOWN || droneState == DroneState.OFFLINE) &&
stopState != StopState.ENTERED;
case LAND:
// 飞行中到达目的地急停状态可以降落
return droneState == DroneState.FLYING ||
droneState == DroneState.ARRIVED ||
droneState == DroneState.EMERGENCY_STOP;
// 飞行中到达目的地状态可以降落急停状态不能降落
return (droneState == DroneState.FLYING || droneState == DroneState.ARRIVED) &&
stopState != StopState.ENTERED;
case RETURN_HOME:
// 飞行中到达目的地急停指点飞行中可以返航
return droneState == DroneState.FLYING ||
droneState == DroneState.ARRIVED ||
droneState == DroneState.EMERGENCY_STOP ||
droneState == DroneState.POINT_FLYING;
// 飞行中到达目的地可以返航急停状态不能返航
return (droneState == DroneState.FLYING || droneState == DroneState.ARRIVED) &&
stopState != StopState.ENTERED;
case EMERGENCY_STOP:
// 飞行中返航中指点飞行中可以急停
return droneState == DroneState.FLYING ||
droneState == DroneState.RETURNING ||
droneState == DroneState.POINT_FLYING;
// 飞行中返航中可以急停未处于急停状态
return (droneState == DroneState.FLYING || droneState == DroneState.RETURNING) &&
stopState != StopState.ENTERED;
case RESUME_FLIGHT:
// 急停状态可以继续飞行
return droneState == DroneState.EMERGENCY_STOP ||
droneState == DroneState.RETURN_EMERGENCY_STOP;
return stopState == StopState.ENTERED;
case POINT_FLY:
// 飞行中到达目的地返航中可以指点飞行
return droneState == DroneState.FLYING ||
// 飞行中到达目的地返航中可以指点飞行未急停
return (droneState == DroneState.FLYING ||
droneState == DroneState.ARRIVED ||
droneState == DroneState.RETURNING;
droneState == DroneState.RETURNING) &&
stopState != StopState.ENTERED;
case CANCEL_POINT:
// 指点飞行中可以取消指点
return droneState == DroneState.POINT_FLYING;
// 飞行中可以取消指点
return droneState == DroneState.FLYING;
case START_MISSION:
// 准备中状态可以开始航线任务
return droneState == DroneState.PREPARING;
// 未知状态或离线状态且未急停时可以开始航线任务
return (droneState == DroneState.UNKNOWN || droneState == DroneState.OFFLINE) &&
stopState != StopState.ENTERED;
case OPEN_COVER:
// 舱门关闭状态可以打开
@ -99,17 +99,17 @@ public class DjiVendorConfig implements VendorConfig {
return coverState == CoverState.OPENED;
case ENTER_DEBUG_MODE:
// 待机状态可以进入调试模式
return airportState == AirportState.STANDBY;
// 在线状态且未处于调试模式时可以进入调试模式
return airportState == AirportState.ONLINE &&
debugModeState == DebugModeState.UNKNOWN;
case EXIT_DEBUG_MODE:
// 调试模式可以退出
return airportState == AirportState.DEBUG_MODE;
return debugModeState == DebugModeState.ENTERED;
case REBOOT_AIRPORT:
// 在线状态可以重启
return airportState == AirportState.ONLINE ||
airportState == AirportState.STANDBY;
return airportState == AirportState.ONLINE;
default:
return false;