# AGVNavigationCore ENIG AGV 시스템을 위한 핵심 네비게이션 및 경로 탐색 라이브러리 ## 📋 개요 AGVNavigationCore는 자동 유도 차량(AGV) 시스템의 경로 계획, 맵 편집, 시뮬레이션, 실시간 모니터링 기능을 제공하는 .NET Framework 4.8 라이브러리입니다. ## 🏗️ 프로젝트 구조 ### 📁 Controls/ **AGV 관련 사용자 인터페이스 컨트롤 및 AGV 추상화 계층** - **AGVState.cs** - AGV 상태 열거형 (Idle, Moving, Rotating, Docking, Charging, Error) - **IAGV.cs** - AGV 인터페이스 정의 (가상/실제 AGV 통합) - **UnifiedAGVCanvas.cs** - 통합 AGV 캔버스 컨트롤 메인 클래스 - **UnifiedAGVCanvas.Events.cs** - 그리기 및 렌더링 로직 (AGV, 노드, 경로 시각화) - **UnifiedAGVCanvas.Mouse.cs** - 마우스 이벤트 처리 (클릭, 드래그, 줌, 팬) ### 📁 Models/ **데이터 모델 및 핵심 비즈니스 엔티티 정의** - **Enums.cs** - 핵심 열거형 정의 (NodeType, DockingDirection, AgvDirection, StationType) - **MapNode.cs** - 맵 노드 엔티티 클래스 (논리적 노드 ID, 위치, 타입, 연결 정보, RFID 정보) - **MapLoader.cs** - 맵 파일 로딩/저장 유틸리티 (JSON 직렬화, 데이터 마이그레이션, 검증) ### 📁 PathFinding/ **AGV 경로 탐색 및 계산 알고리즘** #### 🟢 활발히 사용되는 클래스 - **AGVPathfinder.cs** - 메인 AGV 경로 계획기 (물리적 제약사항 고려) - **AGVPathResult.cs** - 경로 계산 결과 데이터 클래스 - **DockingValidationResult.cs** - 도킹 검증 결과 데이터 클래스 #### 🟡 내부 구현 클래스 - **AStarPathfinder.cs** - A* 알고리즘 기반 기본 경로 탐색 - **DirectionChangePlanner.cs** - AGV 방향 전환 경로 계획 시스템 - **JunctionAnalyzer.cs** - 교차점 분석 및 마그넷 센서 방향 계산 - **NodeMotorInfo.cs** - 노드별 모터방향 정보 (방향 전환 지원 포함) - **PathNode.cs** - A* 알고리즘용 경로 노드 ### 📁 Utils/ **유틸리티 및 계산 헬퍼 클래스** - **DockingValidator.cs** - AGV 도킹 방향 검증 유틸리티 - **LiftCalculator.cs** - AGV 리프트 방향 계산 유틸리티 ### 📁 Properties/ - **AssemblyInfo.cs** - 어셈블리 정보 및 버전 관리 ## 🎯 주요 기능 ### 🗺️ 맵 관리 - **논리적 노드 시스템**: 물리적 RFID와 분리된 논리적 노드 ID 관리 - **노드 타입**: Normal, Rotation, Docking, Charging 등 다양한 노드 타입 지원 - **연결 관리**: 노드 간 방향성 연결 관리 - **JSON 저장/로드**: 표준 JSON 형식으로 맵 데이터 관리 ### 🧭 경로 탐색 - **A* 알고리즘**: 효율적인 최단 경로 탐색 - **AGV 물리적 제약**: 전진/후진 모터 방향, 회전 제약 고려 - **방향 전환 계획**: 마그넷 센서 위치에서의 방향 전환 최적화 - **도킹 검증**: 목적지 타입에 따른 도킹 방향 검증 ### 🎮 시각화 및 편집 - **통합 캔버스**: 맵 편집, 시뮬레이션, 모니터링 모드 지원 - **실시간 렌더링**: AGV 위치, 경로, 상태 실시간 표시 - **인터랙티브 편집**: 드래그앤드롭 노드 편집, 연결 관리 - **줌/팬**: 대형 맵 탐색을 위한 줌/팬 기능 ## 🔧 아키텍처 특징 ### ✅ 장점 - **계층화 아키텍처**: Models → Utils → PathFinding → Controls 의존성 구조 - **관심사 분리**: 각 폴더별 명확한 책임 분담 - **인터페이스 기반**: IAGV 인터페이스로 가상/실제 AGV 통합 - **확장성**: 새로운 알고리즘, AGV 타입 추가 용이 ### ⚠️ 개선 영역 - **코드 크기**: 일부 클래스가 과도하게 큼 (UnifiedAGVCanvas.Events.cs: 1,699행) - **복잡도**: DirectionChangePlanner 등 복잡한 로직 포함 - **분할 필요**: UnifiedAGVCanvas의 다중 책임 분리 필요 ## 🚀 사용 방법 ### 기본 맵 로딩 ```csharp var mapLoader = new MapLoader(); var mapNodes = mapLoader.LoadMap("path/to/map.json"); ``` ### 경로 계산 ```csharp var pathfinder = new AGVPathfinder(); pathfinder.SetMapNodes(mapNodes); var result = pathfinder.FindPath("START_NODE", "TARGET_NODE", AgvDirection.Forward); if (result.Success) { Console.WriteLine($"경로: {string.Join(" -> ", result.Path)}"); Console.WriteLine($"거리: {result.TotalDistance:F1}px"); } ``` ### 캔버스 사용 ```csharp var canvas = new UnifiedAGVCanvas(); canvas.Nodes = mapNodes; canvas.CurrentPath = result; canvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Select; ``` ## 📈 최근 업데이트 (2024.12) ### ✅ 완료된 개선사항 - **중복 코드 정리**: PathResult, RfidPathResult 등 중복 클래스 제거 - **아키텍처 통합**: AdvancedAGVPathfinder → AGVPathfinder 통합 - **좌표 정확성**: 줌/팬 시 노드 선택 정확도 개선 - **미사용 코드 제거**: PathfindingOptions 등 미사용 클래스 삭제 ### 🔄 진행 중인 개선사항 - **방향 계산 최적화**: 리프트 방향 계산 로직 개선 - **도킹 검증**: 도킹 방향 검증 시스템 강화 - **성능 최적화**: 대형 맵 처리 성능 개선 ## 🏃‍♂️ 향후 계획 ### 우선순위 1 (즉시) - UnifiedAGVCanvas 분할 (Rendering, Editing, Simulation 분리) - [완료] PathFinding 폴더 세분화 (Core, Validation, Planning, Analysis) ### 우선순위 2 (중기) - 인터페이스 표준화 (I접두사 통일) - Utils 폴더 확장 (Calculations, Validators, Converters) ### 우선순위 3 (장기) - 의존성 주입 도입 - 성능 모니터링 시스템 - 단위 테스트 확충 ## 📦 의존성 - .NET Framework 4.8 - Newtonsoft.Json 13.0.3 - System.Drawing - System.Windows.Forms ## 🔗 관련 프로젝트 - **AGVMapEditor**: 맵 편집 전용 애플리케이션 - **AGVSimulator**: AGV 시뮬레이션 애플리케이션 - **AGVCSharp**: 메인 AGV 제어 시스템 ## 📞 연락처 ENIG AGV 개발팀 - 2024년 12월 업데이트