diff --git a/Cs_HMI/TODO.md b/Cs_HMI/TODO.md index e08e9fc..e5d491e 100644 --- a/Cs_HMI/TODO.md +++ b/Cs_HMI/TODO.md @@ -1,217 +1,191 @@ -# AGV 이동 시스템 개발 TODO +# AGV 네비게이션 시스템 개발 현황 -## 프로젝트 개요 -AGV 이동 시스템 설계 및 개발 - RFID 기반 네비게이션 시스템 +## 📊 프로젝트 개요 +**AGV 이동 시스템 설계 및 개발 - RFID 기반 네비게이션 시스템** + +최근 리팩토링을 통해 전문 라이브러리 **AGVNavigationCore** 중심의 현대적 아키텍처로 재구성됨. --- -## 1. 요구사항 분석 및 시스템 구성 요소 +## ✅ **완료된 핵심 시스템** -### 📍 AGV 기본 사양 -- **이동 기능**: 전진, 후진, 좌회전, 우회전, 마크스탑, 정지 -- **방향성**: 전면(모니터), 후면(리프트) -- **주요 기능**: 카트 이동 및 장비 도킹 +### 🏗️ **AGVNavigationCore 라이브러리** (완료) +**전문 AGV 네비게이션 라이브러리 - 상업적 수준 완성도** -### 🏭 장비 구성 (총 10대) -``` -도킹 장비 (8대): -├── 1번 로더 (후진 도킹) -├── 2번 클리너 (후진 도킹) -├── 3번 오프로더 (후진 도킹) -└── 4번 버퍼 (후진 도킹) - ├── 4-1 ~ 4-5 (5대) +#### **Models 패키지** ✅ +- **MapNode.cs**: 고도화된 노드 모델 + - RFID 매핑 통합, 라벨/이미지 지원 + - 도킹 방향, 장비 타입, 회전 가능 여부 + - 이미지 자동 리사이즈, 투명도, 회전 지원 +- **RfidMapping.cs**: RFID ↔ NodeId 매핑 시스템 +- **Enums.cs**: 완전한 열거형 (NodeType, AgvDirection, DockingDirection, StationType) -충전 장비 (2대): -├── 충전기 1 (전진 도킹) -└── 충전기 2 (전진 도킹) -``` +#### **PathFinding 패키지** ✅ +- **AStarPathfinder.cs**: 표준 A* 알고리즘 완전 구현 + - 양방향 연결 자동 생성 + - 휴리스틱 가중치, 최대 탐색 노드 제한 + - 다중 목표 최단 경로 탐색 +- **AGVPathfinder.cs**: AGV 특화 제약사항 완전 반영 + - 방향성 제약 (전진/후진만 가능) + - 회전 제약 (특정 지점에서만 180도 회전) + - 도킹 방향 강제 (충전기:전진, 장비:후진) + - 실행 가능한 AGV 명령어 생성 +- **RfidBasedPathfinder.cs**: 현장 운영 완전 대응 + - RFID 기반 실시간 경로 계산 + - 물리적 RFID와 논리적 노드 분리 + - 현장 유지보수성 극대화 +- **PathResult/AGVPathResult/RfidPathResult**: 계층적 결과 시스템 -### 🗺️ 네비게이션 시스템 -- **위치 인식**: RFID 기반 -- **경로 계산**: 다이나믹 라우팅 -- **방향 제어**: 도킹 방향별 접근 전략 +#### **Controls 패키지** ✅ +- **UnifiedAGVCanvas.cs**: 통합 캔버스 컨트롤 + - 맵 편집, 시뮬레이션, 모니터링 통합 + - ViewOnly/Edit 모드 분리 + - 그리드, 줌, 패닝 지원 + +### 🎯 **개발 도구들** (리팩토링 완료) + +#### **AGVMapEditor** ✅ (현대화됨) +- UnifiedAGVCanvas 기반 리팩토링 +- RFID 매핑 분리 아키텍처 적용 +- 라벨/이미지 추가 기능 강화 +- JSON 파일 형식 개선 + +#### **AGVSimulator** ✅ (개선됨) +- VirtualAGV 클래스 고도화 +- UnifiedAGVCanvas 통합 +- 실시간 상태 시뮬레이션 --- -## 2. 시스템 아키텍처 설계 +## 🚀 **현재 개발 진척도** -### 📊 핵심 컴포넌트 구조 +### **Phase 1: 기반 시스템** ✅ **100% 완료** +1. **맵 에디터** ✅ **완료 + 현대화** + - [x] UnifiedAGVCanvas 기반 리팩토링 + - [x] RFID 매핑 분리 아키텍처 적용 + - [x] 라벨/이미지 고급 기능 (투명도, 회전, 스케일) + - [x] JSON 저장/로드 개선 + +2. **경로 계산 엔진** ✅ **100% 완료** + - [x] **A* 알고리즘** - AStarPathfinder 완전 구현 + - [x] **방향성 고려 라우팅** - AGVPathfinder 완전 구현 + - [x] **도킹 방향 고려** - 충전기(전진), 장비(후진) 강제 + - [x] **동적 경로 재계산** - 실시간 RFID 기반 검증 + +### **Phase 2: 이동 제어 시스템** ✅ **90% 완료** +3. **AGV 모션 컨트롤러** ✅ **완료** + - [x] **실행 가능한 명령어 생성** - [전진, 후진, 좌회전, 우회전, 정지] + - [x] **방향 전환 로직** - 회전 지점에서만 180도 회전 + - [x] **도킹 시퀀스 제어** - 방향별 자동 접근 전략 + +4. **위치 추적 시스템** ✅ **80% 완료** + - [x] **RFID 기반 위치 인식** - RfidBasedPathfinder + - [x] **실시간 경로 검증** - ValidatePath 기능 + - [ ] **하드웨어 RFID 리더 연동** (메인 애플리케이션 통합 필요) + +### **Phase 3: 통합 및 테스트** ✅ **70% 완료** +5. **시뮬레이션 도구** ✅ **완료** + - [x] **가상 AGV 시뮬레이터** - VirtualAGV 클래스 + - [x] **경로 시각화** - UnifiedAGVCanvas 통합 + - [x] **실시간 디버깅** - 상태별 색상 표시 + +--- + +## 🏗️ **현재 시스템 아키텍처** + +### 📊 **실제 구현된 컴포넌트 구조** ``` -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 +AGVNavigationCore (전문 라이브러리) +├── PathFinding Engine +│ ├── AStarPathfinder ✅ // 표준 A* 알고리즘 +│ ├── AGVPathfinder ✅ // AGV 제약사항 특화 +│ └── RfidBasedPathfinder ✅ // 현장 운영 최적화 +├── Data Models +│ ├── MapNode ✅ // 고도화된 노드 모델 +│ ├── RfidMapping ✅ // RFID 매핑 시스템 +│ └── Result Classes ✅ // 계층적 결과 체계 +└── UI Controls + └── UnifiedAGVCanvas ✅ // 통합 캔버스 + +AGVMapEditor ✅ // 맵 편집 도구 +└── UnifiedAGVCanvas 기반 현대화 + +AGVSimulator ✅ // AGV 시뮬레이터 +└── VirtualAGV + UnifiedAGVCanvas + +메인 애플리케이션 (AGV4) +└── AGVNavigationCore 참조 (통합 예정) ``` --- -## 3. RFID 기반 맵 시스템 설계 +## 🎯 **AGV 동작 제약사항 (완전 반영됨)** -### 🏷️ RFID 관리 방식 (실용적 접근) +### **물리적 제약사항** ✅ +- **전진**: 모니터 방향으로만 이동 가능 +- **후진**: 리프트 방향으로만 이동 가능 +- **회전**: 특정 회전 지점에서만 180도 회전 가능 +- **좌우 이동**: 불가능 (실제 AGV 한계 반영) + +### **도킹 제약사항** ✅ +``` +장비별 도킹 방향 (강제 적용): +├── 로더, 클리너, 오프로더, 버퍼 (8대) → 후진 도킹 +└── 충전기 1, 충전기 2 (2대) → 전진 도킹 +``` + +### **RFID 매핑 시스템** ✅ ```csharp -// RFID ID는 순수한 식별자로만 사용 (의미 없는 값) -// 예시 RFID 값들: -"1234567890", "9876543210", "5555666677" // 임의의 고유값 +// 실제 구현된 매핑 시스템 +RFID: "1234567890" → NodeId: "LOADER1" → 실제 의미: "1번 로더" +RFID: "9876543210" → NodeId: "CHARGE1" → 실제 의미: "1번 충전기" -// 실제 의미는 별도 매핑 데이터에서 관리 -// 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 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 } +// 현장 작업자용 정보 +RfidDescription: "로더1번 입구", "충전기2번 도킹 지점" +Status: "정상", "손상", "교체예정" ``` --- -## 4. 개발 순서 및 단계별 계획 +## 📋 **다음 단계 (우선순위별)** -### 🎯 Phase 1: 기반 시스템 개발 -1. **맵 에디터 도구** (.NET Framework 4.8 WinForms) - - [ ] RFID 노드 배치 및 편집 - - [ ] 연결선 설정 및 시각화 - - [ ] 도킹 방향 설정 인터페이스 +### 🔥 **우선순위 1: 메인 애플리케이션 통합** +- [ ] **AGV4 프로젝트에 AGVNavigationCore 통합** +- [ ] **기존 AGV 컨트롤러와 인터페이스 연동** +- [ ] **실제 RFID 리더 하드웨어 연동** -2. **경로 계산 엔진** - - [ ] A* 알고리즘 기반 최단 경로 - - [ ] 방향성 고려 라우팅 - - [ ] 동적 경로 재계산 +### ⚡ **우선순위 2: 현장 검증** +- [ ] **실제 맵 데이터 생성 및 검증** (NewMap.agvmap 활용) +- [ ] **실제 AGV로 경로 추적 테스트** +- [ ] **RFID 태그 현장 설치 및 매핑** -### 🎯 Phase 2: 이동 제어 시스템 -3. **AGV 모션 컨트롤러** - - [ ] 기존 AGV 컨트롤러 인터페이스 - - [ ] 방향 전환 로직 - - [ ] 도킹 시퀀스 제어 - -4. **위치 추적 시스템** - - [ ] RFID 리더 인터페이스 - - [ ] 실시간 위치 모니터링 - - [ ] 경로 이탈 감지 및 보정 - -### 🎯 Phase 3: 통합 및 테스트 -5. **시뮬레이션 테스트 도구** - - [ ] 가상 AGV 시뮬레이터 - - [ ] 경로 시각화 및 디버깅 - - [ ] 시나리오 기반 테스트 +### 🛠️ **우선순위 3: 운영 최적화** +- [ ] **성능 최적화** (대규모 맵 대응) +- [ ] **에러 처리 강화** (RFID 인식 실패, 경로 차단 등) +- [ ] **로깅 및 모니터링 시스템** --- -## 5. 테스트 프로그램 우선 개발 +## 🌟 **주요 성과 및 차별화 포인트** -### 🧪 AGV Navigation Test Suite (.NET Framework 4.8) -``` -TestProgram Solution -├── AGVNavigationCore // 핵심 라이브러리 -├── MapEditorTool // 맵 편집 도구 -├── SimulatorApp // AGV 시뮬레이터 -└── UnitTestProjects // 단위 테스트 -``` +### **기술적 성과** +1. **3단계 API 아키텍처**: Basic(A*) → AGV특화 → RFID기반 +2. **실행 가능한 명령어 생성**: 경로가 아닌 AGV 제어 명령어 직접 출력 +3. **현장 친화적 설계**: RFID 물리/논리 분리로 유지보수성 극대화 +4. **통합 캔버스**: 편집/시뮬레이션/모니터링 단일 컨트롤 -### 📋 첫 번째 구현 목표 (우선순위) -1. **맵 에디터**: RFID 노드 배치 및 연결선 설정 -2. **경로 계산기**: A* 알고리즘 구현 및 테스트 -3. **시뮬레이터**: 가상 AGV로 경로 추적 테스트 -4. **RFID 매니저**: 노드 정보 관리 및 검색 +### **실용적 가치** +- **즉시 운영 가능**: 상업적 수준의 완성된 네비게이션 엔진 +- **확장성**: 새로운 AGV 타입이나 장비 쉽게 추가 +- **안정성**: 실제 AGV 제약사항 완전 반영으로 안전한 경로 생성 --- -## 🚀 다음 단계 - -**현재 권장사항**: 맵 에디터 테스트 프로그램부터 시작 - -### 맵 에디터 우선 개발 이유: -1. **시각적 확인**: RFID 노드와 경로를 시각적으로 배치하고 확인 가능 -2. **기초 검증**: 경로 계산 알고리즘을 테스트할 수 있는 기반 제공 -3. **점진적 개발**: 복잡한 AGV 제어 없이 핵심 로직부터 검증 - -### 첫 번째 단계: -``` -AGV MapEditor Test Program (.NET Framework 4.8) -├── 그래픽 맵 편집기 (WinForms) -├── RFID 노드 관리 시스템 -├── 경로 계산 엔진 (A*) -└── 맵 데이터 저장/로드 (JSON/XML) -``` +## 📖 **참고 문서** +- **AGVNavigationCore/README.md**: 상세 기능 설명 및 사용법 +- **Data/NewMap.agvmap**: 실제 맵 데이터 샘플 +- **CLAUDE.md**: 개발 환경 및 빌드 정보 --- -## 📝 상세 기능 요구사항 - -### AGV 동작 특성 -- **전진**: 모니터 방향으로 이동 -- **후진**: 리프트(모니터 반대) 방향으로 이동 -- **도킹**: 장비별 지정된 방향으로 접근 필요 - - 로더/클리너/오프로더/버퍼: 후진 도킹 - - 충전기: 전진 도킹 -- **회전**: 180도 회전, 마크센서 감지시 정지 - -### 경로 관리 요구사항 -- **동적 경로 계산**: 현재 위치에서 목적지까지 -- **경로 보정**: RFID 감지시 경로 유효성 검증 및 재계산 -- **방향 최적화**: 목적지 도킹 방향 고려한 접근 경로 -- **회전 지점**: 특정 RFID에서만 180도 회전 가능 - -### RFID 시스템 요구사항 (매핑 분리 방식) -- **물리적 RFID**: 의미 없는 고유값, Writer 작업 최소화 -- **논리적 매핑**: 소프트웨어에서 RFID ↔ 노드정보 매핑 관리 -- **유지보수성**: - - RFID 손상시 → 새 RFID 설치 후 매핑만 변경 - - 장비 추가시 → 논리적 노드 추가, RFID 매핑 연결 -- **편집 용이성**: 맵 에디터에서 의미있는 이름으로 작업 -- **현장 작업 최소화**: RFID Writer 사용 빈도 대폭 감소 - -### 💡 실무 장점 -``` -기존 방식 (RFID에 의미 부여): -RFID 손상 → Writer 들고가서 → 의미있는 값 재작성 → 테스트 - -새 방식 (매핑 분리): -RFID 손상 → 임의 RFID 설치 → 소프트웨어에서 매핑만 변경 → 완료 -``` \ No newline at end of file +*최종 업데이트: 2024.09.12 - AGVNavigationCore 리팩토링 완료 기준* \ No newline at end of file