| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- """
- SystemState - 机器人系统状态
- 存储机器人自身的状态信息,如电量、位置、任务等
- """
- from __future__ import annotations
- from dataclasses import dataclass, field
- from enum import Enum
- import time
- class RobotMode(Enum):
- """机器人模式枚举"""
- IDLE = "idle"
- WORKING = "working"
- CHARGING = "charging"
- ERROR = "error"
- MAINTENANCE = "maintenance"
- @dataclass
- class SystemState:
- """
- 系统状态类
-
- Attributes:
- battery: 电量 (0-100)
- position: 位置 [x, y, z]
- mode: 当前模式
- current_task: 当前任务
- error_code: 错误码 (0 表示无错误)
- timestamp: 状态时间戳
- """
- battery: float = 100.0
- position: list = field(default_factory=lambda: [0.0, 0.0, 0.0])
- mode: str = "idle"
- current_task: str = ""
- error_code: int = 0
- timestamp: float = field(default_factory=time.time)
-
- def update(self, new_data: dict, current_time: float | None = None) -> dict:
- """
- 更新系统状态,返回变化部分
-
- Args:
- new_data: 新数据字典
- current_time: 当前时间戳
-
- Returns:
- 变化的数据字典
- """
- if current_time is None:
- current_time = time.time()
-
- diff = {}
- for key, value in new_data.items():
- if hasattr(self, key):
- old_value = getattr(self, key)
- if old_value != value:
- diff[key] = {'old': old_value, 'new': value}
- setattr(self, key, value)
-
- self.timestamp = current_time
- return diff
-
- def to_dict(self) -> dict:
- """转换为字典"""
- return {
- 'battery': self.battery,
- 'position': self.position,
- 'mode': self.mode,
- 'current_task': self.current_task,
- 'error_code': self.error_code,
- 'timestamp': self.timestamp,
- }
-
- @classmethod
- def from_dict(cls, data: dict) -> SystemState:
- """从字典创建"""
- return cls(
- battery=data.get('battery', 100.0),
- position=data.get('position', [0.0, 0.0, 0.0]),
- mode=data.get('mode', 'idle'),
- current_task=data.get('current_task', ''),
- error_code=data.get('error_code', 0),
- timestamp=data.get('timestamp', time.time()),
- )
|