单独将急停拿出来
This commit is contained in:
parent
8f518bca79
commit
f84450768b
|
|
@ -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. 检查是否可以起飞
|
||||
|
|
|
|||
|
|
@ -15,32 +15,7 @@ public enum AirportState {
|
|||
OFFLINE,
|
||||
|
||||
/**
|
||||
* 在线(父状态)
|
||||
* 在线
|
||||
*/
|
||||
ONLINE,
|
||||
|
||||
/**
|
||||
* 待机
|
||||
*/
|
||||
STANDBY,
|
||||
|
||||
/**
|
||||
* 进入调试模式中
|
||||
*/
|
||||
ENTERING_DEBUG_MODE,
|
||||
|
||||
/**
|
||||
* 调试模式
|
||||
*/
|
||||
DEBUG_MODE,
|
||||
|
||||
/**
|
||||
* 退出调试模式中
|
||||
*/
|
||||
EXITING_DEBUG_MODE,
|
||||
|
||||
/**
|
||||
* 重启中
|
||||
*/
|
||||
REBOOTING
|
||||
ONLINE
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,23 +14,9 @@ public enum CoverState {
|
|||
*/
|
||||
CLOSED,
|
||||
|
||||
/**
|
||||
* 舱门打开中
|
||||
*/
|
||||
OPENING,
|
||||
|
||||
/**
|
||||
* 舱门已打开
|
||||
*/
|
||||
OPENED,
|
||||
|
||||
/**
|
||||
* 舱门关闭中
|
||||
*/
|
||||
CLOSING,
|
||||
|
||||
/**
|
||||
* 舱门状态异常
|
||||
*/
|
||||
ERROR
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
package com.tuoheng.machine.state;
|
||||
|
||||
/**
|
||||
* 调试模式状态枚举
|
||||
*/
|
||||
public enum DebugModeState {
|
||||
/**
|
||||
* 未知状态
|
||||
*/
|
||||
UNKNOWN,
|
||||
|
||||
/**
|
||||
* 调试模式
|
||||
*/
|
||||
ENTERED,
|
||||
|
||||
/**
|
||||
* 退出调试模式
|
||||
*/
|
||||
EXITED_DEBUG
|
||||
}
|
||||
|
|
@ -14,18 +14,11 @@ public enum DrcState {
|
|||
*/
|
||||
EXITED,
|
||||
|
||||
/**
|
||||
* 进入中(正在进入DRC模式)
|
||||
*/
|
||||
ENTERING,
|
||||
|
||||
/**
|
||||
* 进入状态(已进入DRC模式)
|
||||
*/
|
||||
ENTERED,
|
||||
|
||||
/**
|
||||
* 退出中(正在退出DRC模式)
|
||||
*/
|
||||
EXITING
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package com.tuoheng.machine.state;
|
||||
|
||||
/**
|
||||
* 急停状态
|
||||
*/
|
||||
public enum StopState {
|
||||
/**
|
||||
* 未知状态(服务器重启后的初始状态,等待第一次心跳同步)
|
||||
*/
|
||||
UNKNOWN,
|
||||
|
||||
/**
|
||||
* 退出状态
|
||||
*/
|
||||
EXITED,
|
||||
|
||||
/**
|
||||
* 进入状态
|
||||
*/
|
||||
ENTERED,
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue