Files
ENIG/Cs_HMI/AGVLogic/AGVNavigationCore
backuppc fcf5a469c7 fix: Correct mouse-centered wheel zoom functionality
- Fix ScreenToWorld coordinate transformation bug in wheel event
- Implement proper mouse cursor-centered zoom calculation
- Calculate world coordinates before zoom and maintain them after zoom
- Adjust pan offset to keep mouse cursor pointing at same world position
- Remove matrix-based transformation that was causing coordinate issues

Fixes: Wheel zoom now correctly centers on mouse cursor position and no longer causes erratic panning

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 10:08:59 +09:00
..

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의 다중 책임 분리 필요

🚀 사용 방법

기본 맵 로딩

var mapLoader = new MapLoader();
var mapNodes = mapLoader.LoadMap("path/to/map.json");

경로 계산

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");
}

캔버스 사용

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월 업데이트