Delivery_robot / app /models.py
minhnghiem32131024429
Deploy delivery robot app
5e8b911
Raw
History Blame Contribute Delete
2.43 kB
from pydantic import BaseModel, Field
class ElevatorStatusUpdate(BaseModel):
Floor: int = Field(..., description="Current floor (1-10)", ge=1, le=10)
Dir: str = Field(..., description="Direction: UP, DOWN, or IDLE")
Doors: str = Field(..., description="Door state: CLOSED, OPENING, OPEN, CLOSING")
State: str = Field(..., description="FSM state: IDLE, MOVING, DOORS_OPENING, DOORS_OPEN, DOORS_CLOSING")
class ElevatorCommandRequest(BaseModel):
floor: int = Field(..., description="Target floor (1-10)", ge=1, le=10)
class ElevatorCommandResponse(BaseModel):
cmd: str = Field(..., description="Command string e.g. CALL_3, or NONE")
class ElevatorStateResponse(BaseModel):
Floor: int = Field(..., description="Current floor")
Dir: str = Field(..., description="Direction")
Doors: str = Field(..., description="Door state")
State: str = Field(..., description="FSM state")
class RobotPose(BaseModel):
x: float = Field(..., description="X position in meters")
y: float = Field(..., description="Y position in meters")
theta: float = Field(..., description="Heading in radians")
class RobotStatusUpdate(BaseModel):
state: str = Field(..., description="Nav state: IDLE, NAVIGATING, ARRIVED, ERROR")
floor: int = Field(..., description="Robot's current floor", ge=1, le=10)
pose: RobotPose = Field(..., description="Current robot pose")
class RobotGoalRequest(BaseModel):
floor: int = Field(..., description="Target floor (1-10)", ge=1, le=10)
pose: RobotPose = Field(..., description="Target pose on the floor")
class RobotGoalResponse(BaseModel):
goal: RobotGoalRequest | None = Field(..., description="Nav goal or null on timeout")
class RobotStateResponse(BaseModel):
state: str = Field(..., description="Nav state")
floor: int = Field(..., description="Robot's current floor")
pose: RobotPose = Field(..., description="Current robot pose")
class LockerCommandRequest(BaseModel):
locker_id: int = Field(..., description="Locker number", ge=1)
action: str = Field(..., description="open, close, or pulse")
duration_ms: int = Field(3000, description="Pulse duration in milliseconds", ge=100, le=60000)
class LockerCommandResponse(BaseModel):
ok: bool = Field(..., description="Whether command was accepted")
command: dict | None = Field(None, description="Command payload for Jetson, or null on timeout")