211 lines
4.9 KiB
C#
211 lines
4.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using AGVNavigationCore.Controls;
|
|
using AGVNavigationCore.PathFinding;
|
|
using AGVNavigationCore.PathFinding.Core;
|
|
|
|
namespace AGVNavigationCore.Models
|
|
{
|
|
/// <summary>
|
|
/// 이동 가능한 AGV 인터페이스
|
|
/// 실제 AGV와 시뮬레이션 AGV 모두 구현해야 하는 기본 인터페이스
|
|
/// </summary>
|
|
public interface IMovableAGV
|
|
{
|
|
#region Events
|
|
|
|
/// <summary>
|
|
/// AGV 상태 변경 이벤트
|
|
/// </summary>
|
|
event EventHandler<AGVState> StateChanged;
|
|
|
|
/// <summary>
|
|
/// 위치 변경 이벤트
|
|
/// </summary>
|
|
event EventHandler<(Point, AgvDirection, MapNode)> PositionChanged;
|
|
|
|
/// <summary>
|
|
/// RFID 감지 이벤트
|
|
/// </summary>
|
|
event EventHandler<string> RfidDetected;
|
|
|
|
/// <summary>
|
|
/// 경로 완료 이벤트
|
|
/// </summary>
|
|
event EventHandler<AGVPathResult> PathCompleted;
|
|
|
|
/// <summary>
|
|
/// 오류 발생 이벤트
|
|
/// </summary>
|
|
event EventHandler<string> ErrorOccurred;
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
/// AGV ID
|
|
/// </summary>
|
|
string AgvId { get; }
|
|
|
|
/// <summary>
|
|
/// 현재 위치
|
|
/// </summary>
|
|
Point CurrentPosition { get; set; }
|
|
|
|
/// <summary>
|
|
/// 현재 방향 (모터 방향)
|
|
/// </summary>
|
|
AgvDirection CurrentDirection { get; set; }
|
|
|
|
/// <summary>
|
|
/// 현재 상태
|
|
/// </summary>
|
|
AGVState CurrentState { get; set; }
|
|
|
|
/// <summary>
|
|
/// 현재 속도
|
|
/// </summary>
|
|
float CurrentSpeed { get; }
|
|
|
|
/// <summary>
|
|
/// 배터리 레벨 (0-100%)
|
|
/// </summary>
|
|
float BatteryLevel { get; set; }
|
|
|
|
/// <summary>
|
|
/// 현재 경로
|
|
/// </summary>
|
|
AGVPathResult CurrentPath { get; }
|
|
|
|
/// <summary>
|
|
/// 현재 노드 ID
|
|
/// </summary>
|
|
MapNode CurrentNode { get; }
|
|
|
|
/// <summary>
|
|
/// 목표 위치
|
|
/// </summary>
|
|
Point? PrevPosition { get; }
|
|
|
|
/// <summary>
|
|
/// 목표 노드 ID
|
|
/// </summary>
|
|
MapNode PrevNode { get; }
|
|
|
|
/// <summary>
|
|
/// 도킹 방향
|
|
/// </summary>
|
|
DockingDirection DockingDirection { get; }
|
|
|
|
#endregion
|
|
|
|
#region Sensor Input Methods (실제 AGV에서 호출)
|
|
|
|
/// <summary>
|
|
/// 현재 위치 설정 (실제 위치 센서에서)
|
|
/// </summary>
|
|
void SetCurrentPosition(Point position);
|
|
|
|
/// <summary>
|
|
/// 감지된 RFID 설정 (실제 RFID 센서에서)
|
|
/// </summary>
|
|
void SetDetectedRfid(string rfidId);
|
|
|
|
/// <summary>
|
|
/// 모터 방향 설정 (모터 컨트롤러에서)
|
|
/// </summary>
|
|
void SetMotorDirection(AgvDirection direction);
|
|
|
|
/// <summary>
|
|
/// 배터리 레벨 설정 (BMS에서)
|
|
/// </summary>
|
|
void SetBatteryLevel(float percentage);
|
|
|
|
#endregion
|
|
|
|
#region State Query Methods
|
|
|
|
/// <summary>
|
|
/// 현재 위치 조회
|
|
/// </summary>
|
|
Point GetCurrentPosition();
|
|
|
|
/// <summary>
|
|
/// 현재 상태 조회
|
|
/// </summary>
|
|
AGVState GetCurrentState();
|
|
|
|
/// <summary>
|
|
/// 현재 노드 ID 조회
|
|
/// </summary>
|
|
MapNode GetCurrentNode();
|
|
|
|
/// <summary>
|
|
/// AGV 상태 정보 문자열 조회
|
|
/// </summary>
|
|
string GetStatus();
|
|
|
|
#endregion
|
|
|
|
#region Path Execution Methods
|
|
|
|
/// <summary>
|
|
/// 경로 정지
|
|
/// </summary>
|
|
void StopPath();
|
|
|
|
/// <summary>
|
|
/// 긴급 정지
|
|
/// </summary>
|
|
void EmergencyStop();
|
|
|
|
#endregion
|
|
|
|
#region Update Method
|
|
|
|
/// <summary>
|
|
/// 프레임 업데이트 (외부에서 주기적으로 호출)
|
|
/// 이 방식으로 타이머에 의존하지 않고 외부에서 제어 가능
|
|
/// </summary>
|
|
/// <param name="deltaTimeMs">마지막 업데이트 이후 경과 시간 (밀리초)</param>
|
|
void Update(float deltaTimeMs);
|
|
|
|
#endregion
|
|
|
|
#region Manual Control Methods (테스트용)
|
|
|
|
/// <summary>
|
|
/// 수동 이동
|
|
/// </summary>
|
|
void MoveTo(Point targetPosition);
|
|
|
|
/// <summary>
|
|
/// 수동 회전
|
|
/// </summary>
|
|
void Rotate(AgvDirection direction);
|
|
|
|
/// <summary>
|
|
/// 충전 시작
|
|
/// </summary>
|
|
void StartCharging();
|
|
|
|
/// <summary>
|
|
/// 충전 종료
|
|
/// </summary>
|
|
void StopCharging();
|
|
|
|
#endregion
|
|
|
|
#region Cleanup
|
|
|
|
/// <summary>
|
|
/// 리소스 정리
|
|
/// </summary>
|
|
void Dispose();
|
|
|
|
#endregion
|
|
}
|
|
}
|