feat: Add AGV Map Editor and Simulator tools

- Add AGVMapEditor: Visual map editing with drag-and-drop node placement
  * RFID mapping separation (physical ID ↔ logical node mapping)
  * A* pathfinding algorithm with AGV directional constraints
  * JSON map data persistence with structured format
  * Interactive map canvas with zoom/pan functionality

- Add AGVSimulator: Real-time AGV movement simulation
  * Virtual AGV with state machine (Idle, Moving, Rotating, Docking, Charging, Error)
  * Path execution and visualization from calculated routes
  * Real-time position tracking and battery simulation
  * Integration with map editor data format

- Update solution structure and build configuration
- Add comprehensive documentation in CLAUDE.md
- Implement AGV-specific constraints (forward/backward docking, rotation limits)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ChiKyun Kim
2025-09-10 17:39:23 +09:00
parent 27dcc6befa
commit 7567602479
33 changed files with 6304 additions and 2 deletions

217
Cs_HMI/TODO.md Normal file
View File

@@ -0,0 +1,217 @@
# AGV 이동 시스템 개발 TODO
## 프로젝트 개요
AGV 이동 시스템 설계 및 개발 - RFID 기반 네비게이션 시스템
---
## 1. 요구사항 분석 및 시스템 구성 요소
### 📍 AGV 기본 사양
- **이동 기능**: 전진, 후진, 좌회전, 우회전, 마크스탑, 정지
- **방향성**: 전면(모니터), 후면(리프트)
- **주요 기능**: 카트 이동 및 장비 도킹
### 🏭 장비 구성 (총 10대)
```
도킹 장비 (8대):
├── 1번 로더 (후진 도킹)
├── 2번 클리너 (후진 도킹)
├── 3번 오프로더 (후진 도킹)
└── 4번 버퍼 (후진 도킹)
├── 4-1 ~ 4-5 (5대)
충전 장비 (2대):
├── 충전기 1 (전진 도킹)
└── 충전기 2 (전진 도킹)
```
### 🗺️ 네비게이션 시스템
- **위치 인식**: RFID 기반
- **경로 계산**: 다이나믹 라우팅
- **방향 제어**: 도킹 방향별 접근 전략
---
## 2. 시스템 아키텍처 설계
### 📊 핵심 컴포넌트 구조
```
AGV Navigation System
├── Map Management
│ ├── RFID Node Manager
│ ├── Path Calculator
│ └── Route Optimizer
├── Movement Control
│ ├── Motion Controller
│ ├── Direction Manager
│ └── Docking Controller
├── Position Tracking
│ ├── RFID Reader Interface
│ ├── Position Monitor
│ └── Route Validator
└── Station Management
├── Equipment Interface
├── Charging Controller
└── Operation Scheduler
```
---
## 3. RFID 기반 맵 시스템 설계
### 🏷️ RFID 관리 방식 (실용적 접근)
```csharp
// RFID ID는 순수한 식별자로만 사용 (의미 없는 값)
// 예시 RFID 값들:
"1234567890", "9876543210", "5555666677" // 임의의 고유값
// 실제 의미는 별도 매핑 데이터에서 관리
// RFID Writer 작업 최소화 - 물리적 교체/추가만 수행
```
### 🗺️ 맵 데이터 구조 (RFID 매핑 분리)
```csharp
// RFID-맵노드 매핑 테이블
public class RfidMapping
{
public string RfidId { get; set; } // 물리적 RFID 값 (의미 없음)
public string LogicalNodeId { get; set; } // 논리적 노드 ID
public DateTime CreatedDate { get; set; }
public string Description { get; set; } // 설치 위치 설명
}
// 맵 노드 정보 (논리적)
public class MapNode
{
public string NodeId { get; set; } // 논리적 ID (N001, N002...)
public string Name { get; set; } // 노드 이름 (로더1, 충전기1...)
public Point Position { get; set; }
public NodeType Type { get; set; }
public DockingDirection? DockDirection { get; set; }
public List<string> ConnectedNodes { get; set; }
public bool CanRotate { get; set; }
public string StationId { get; set; } // 장비 ID (LOADER1, CHARGER1...)
}
// RFID 리더에서 읽은 값을 논리적 노드로 변환
public class NodeResolver
{
public MapNode GetNodeByRfid(string rfidValue)
{
var mapping = GetRfidMapping(rfidValue);
return GetNodeById(mapping?.LogicalNodeId);
}
}
public enum NodeType { Normal, Rotation, Docking, Charging }
public enum DockingDirection { Forward, Backward }
public enum AgvDirection { Forward, Backward, Left, Right }
```
---
## 4. 개발 순서 및 단계별 계획
### 🎯 Phase 1: 기반 시스템 개발
1. **맵 에디터 도구** (.NET Framework 4.8 WinForms)
- [ ] RFID 노드 배치 및 편집
- [ ] 연결선 설정 및 시각화
- [ ] 도킹 방향 설정 인터페이스
2. **경로 계산 엔진**
- [ ] A* 알고리즘 기반 최단 경로
- [ ] 방향성 고려 라우팅
- [ ] 동적 경로 재계산
### 🎯 Phase 2: 이동 제어 시스템
3. **AGV 모션 컨트롤러**
- [ ] 기존 AGV 컨트롤러 인터페이스
- [ ] 방향 전환 로직
- [ ] 도킹 시퀀스 제어
4. **위치 추적 시스템**
- [ ] RFID 리더 인터페이스
- [ ] 실시간 위치 모니터링
- [ ] 경로 이탈 감지 및 보정
### 🎯 Phase 3: 통합 및 테스트
5. **시뮬레이션 테스트 도구**
- [ ] 가상 AGV 시뮬레이터
- [ ] 경로 시각화 및 디버깅
- [ ] 시나리오 기반 테스트
---
## 5. 테스트 프로그램 우선 개발
### 🧪 AGV Navigation Test Suite (.NET Framework 4.8)
```
TestProgram Solution
├── AGVNavigationCore // 핵심 라이브러리
├── MapEditorTool // 맵 편집 도구
├── SimulatorApp // AGV 시뮬레이터
└── UnitTestProjects // 단위 테스트
```
### 📋 첫 번째 구현 목표 (우선순위)
1. **맵 에디터**: RFID 노드 배치 및 연결선 설정
2. **경로 계산기**: A* 알고리즘 구현 및 테스트
3. **시뮬레이터**: 가상 AGV로 경로 추적 테스트
4. **RFID 매니저**: 노드 정보 관리 및 검색
---
## 🚀 다음 단계
**현재 권장사항**: 맵 에디터 테스트 프로그램부터 시작
### 맵 에디터 우선 개발 이유:
1. **시각적 확인**: RFID 노드와 경로를 시각적으로 배치하고 확인 가능
2. **기초 검증**: 경로 계산 알고리즘을 테스트할 수 있는 기반 제공
3. **점진적 개발**: 복잡한 AGV 제어 없이 핵심 로직부터 검증
### 첫 번째 단계:
```
AGV MapEditor Test Program (.NET Framework 4.8)
├── 그래픽 맵 편집기 (WinForms)
├── RFID 노드 관리 시스템
├── 경로 계산 엔진 (A*)
└── 맵 데이터 저장/로드 (JSON/XML)
```
---
## 📝 상세 기능 요구사항
### AGV 동작 특성
- **전진**: 모니터 방향으로 이동
- **후진**: 리프트(모니터 반대) 방향으로 이동
- **도킹**: 장비별 지정된 방향으로 접근 필요
- 로더/클리너/오프로더/버퍼: 후진 도킹
- 충전기: 전진 도킹
- **회전**: 180도 회전, 마크센서 감지시 정지
### 경로 관리 요구사항
- **동적 경로 계산**: 현재 위치에서 목적지까지
- **경로 보정**: RFID 감지시 경로 유효성 검증 및 재계산
- **방향 최적화**: 목적지 도킹 방향 고려한 접근 경로
- **회전 지점**: 특정 RFID에서만 180도 회전 가능
### RFID 시스템 요구사항 (매핑 분리 방식)
- **물리적 RFID**: 의미 없는 고유값, Writer 작업 최소화
- **논리적 매핑**: 소프트웨어에서 RFID ↔ 노드정보 매핑 관리
- **유지보수성**:
- RFID 손상시 → 새 RFID 설치 후 매핑만 변경
- 장비 추가시 → 논리적 노드 추가, RFID 매핑 연결
- **편집 용이성**: 맵 에디터에서 의미있는 이름으로 작업
- **현장 작업 최소화**: RFID Writer 사용 빈도 대폭 감소
### 💡 실무 장점
```
기존 방식 (RFID에 의미 부여):
RFID 손상 → Writer 들고가서 → 의미있는 값 재작성 → 테스트
새 방식 (매핑 분리):
RFID 손상 → 임의 RFID 설치 → 소프트웨어에서 매핑만 변경 → 완료
```