Files
ENIG/Cs_HMI/AGVLogic/CLAUDE.md
backuppc dbaf647d4e refactor: Move AGV development projects to separate AGVLogic folder
- Reorganized AGVMapEditor, AGVNavigationCore, AGVSimulator into AGVLogic folder
- Removed deleted project files from root folder tracking
- Updated CLAUDE.md with AGVLogic-specific development guidelines
- Clean separation of independent project development from main codebase
- Projects now ready for independent development and future integration

🤖 Generated with Claude Code

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

8.8 KiB

CLAUDE.md (AGVLogic 폴더)

이 파일은 AGVLogic 폴더에서 개발 중인 AGV 관련 프로젝트들을 위한 개발 가이드입니다.

현재 폴더 위치: C:\Data\Source\(5613#) ENIG AGV\Source\Cs_HMI\AGVLogic\ 맵데이터: ../Data/NewMap.agvmap 파일을 기준으로 사용


프로젝트 개요

현재 AGVLogic 폴더에서 다음 3개의 독립 프로젝트를 개발 중입니다:

1. AGVMapEditor (맵 에디터)

위치: ./AGVMapEditor/ 실행파일: ./AGVMapEditor/bin/Debug/AGVMapEditor.exe

핵심 기능

  • 맵 노드 관리: 논리적 노드 생성, 연결, 속성 설정
  • RFID 매핑: 물리적 RFID ID ↔ 논리적 노드 ID 매핑
  • 시각적 편집: 드래그앤드롭으로 노드 배치 및 연결
  • JSON 저장: 맵 데이터를 JSON 형식으로 저장/로드
  • 노드 연결 관리: 연결 목록 표시 및 직접 삭제 기능

핵심 클래스

  • MapNode: 논리적 맵 노드 (NodeId, 위치, 타입, 연결 정보)
  • RfidMapping: RFID 물리적 ID ↔ 논리적 노드 ID 매핑
  • NodeResolver: RFID ID를 통한 노드 해석기
  • MapCanvas: 시각적 맵 편집 컨트롤

2. AGVNavigationCore (경로 탐색 라이브러리)

위치: ./AGVNavigationCore/

핵심 기능

  • A 경로 탐색*: 최적 경로 계산 알고리즘
  • 방향 제어: 전진/후진 모터 방향 결정
  • 도킹 검증: 충전기/장비 도킹 방향 검증
  • 리프트 계산: AGV 리프트 각도 계산
  • 경로 최적화: 회전 구간 회피 등 고급 옵션

핵심 클래스

  • PathFinding/Core/AStarPathfinder.cs: A* 알고리즘 구현
  • PathFinding/Planning/AGVPathfinder.cs: 경로 탐색 메인 클래스
  • PathFinding/Planning/DirectionChangePlanner.cs: 방향 변경 계획
  • Utils/LiftCalculator.cs: 리프트 각도 계산
  • Utils/DockingValidator.cs: 도킹 유효성 검증
  • Controls/UnifiedAGVCanvas.cs: 맵 및 AGV 시각화

3. AGVSimulator (AGV 시뮬레이터)

위치: ./AGVSimulator/ 실행파일: ./AGVSimulator/bin/Debug/AGVSimulator.exe

핵심 기능

  • 가상 AGV 시뮬레이션: 실시간 AGV 움직임 및 상태 관리
  • 맵 시각화: 맵 에디터에서 생성한 맵 파일 로드 및 표시
  • 경로 실행: 계산된 경로를 따라 AGV 시뮬레이션
  • 상태 모니터링: AGV 상태, 위치, 배터리 등 실시간 표시

핵심 클래스

  • VirtualAGV: 가상 AGV 동작 시뮬레이션 (이동, 회전, 도킹, 충전)
  • SimulatorCanvas: AGV 및 맵 시각화 캔버스
  • SimulatorForm: 시뮬레이터 메인 인터페이스
  • SimulationState: 시뮬레이션 상태 관리

AGV 상태

  • Idle: 대기
  • Moving: 이동 중
  • Rotating: 회전 중
  • Docking: 도킹 중
  • Charging: 충전 중
  • Error: 오류

AGV 방향 제어 및 도킹 시스템

AGV 하드웨어 레이아웃

LIFT --- AGV --- MONITOR
  ↑       ↑        ↑
후진시   AGV본체   전진시
도달위치          도달위치

모터 방향과 이동 방향

  • 전진 모터 (Forward): AGV가 모니터 방향으로 이동 (→)
  • 후진 모터 (Backward): AGV가 리프트 방향으로 이동 (←)

도킹 방향 규칙

  • 충전기 (Charging): 전진 도킹 (Forward) - 모니터가 충전기 면
  • 장비 (Docking): 후진 도킹 (Backward) - 리프트가 장비 면

핵심 계산 파일들

  1. LiftCalculator.cs - 리프트 방향 계산

    • CalculateLiftAngleRadians(Point currentPos, Point targetPos, AgvDirection motorDirection)
  2. DirectionChangePlanner.cs - 도킹 방향 결정

    • GetRequiredDockingDirection(string targetNodeId) - 노드타입별 도킹 방향 반환
  3. VirtualAGV.cs - AGV 위치/방향 관리

    • SetPosition(Point newPosition) - AGV 위치 및 방향 설정

AGVNavigationCore 프로젝트 구조

📁 폴더 구조

AGVNavigationCore/
├── Controls/
│   ├── UnifiedAGVCanvas.cs          # AGV 및 맵 시각화 메인 캔버스
│   ├── UnifiedAGVCanvas.Events.cs   # 그리기 및 이벤트 처리
│   ├── UnifiedAGVCanvas.Mouse.cs    # 마우스 인터랙션
│   ├── AGVState.cs                  # AGV 상태 정의
│   └── IAGV.cs                      # AGV 인터페이스
│
├── Models/
│   ├── MapNode.cs                   # 맵 노드 데이터 모델
│   ├── MapLoader.cs                 # JSON 맵 파일 로더
│   └── Enums.cs                     # 열거형 정의 (NodeType, AgvDirection 등)
│
├── Utils/
│   ├── LiftCalculator.cs            # 리프트 각도 계산
│   └── DockingValidator.cs          # 도킹 유효성 검증
│
└── PathFinding/
    ├── Analysis/
    │   └── JunctionAnalyzer.cs      # 교차점 분석
    │
    ├── Core/
    │   ├── AStarPathfinder.cs        # A* 알고리즘
    │   ├── PathNode.cs              # 경로 노드
    │   └── AGVPathResult.cs          # 경로 계산 결과
    │
    ├── Planning/
    │   ├── AGVPathfinder.cs          # 경로 탐색 메인 클래스
    │   ├── AdvancedAGVPathfinder.cs  # 고급 경로 탐색
    │   ├── DirectionChangePlanner.cs # 방향 변경 계획
    │   ├── NodeMotorInfo.cs          # 노드별 모터 정보
    │   └── PathfindingOptions.cs     # 경로 탐색 옵션
    │
    └── Validation/
        ├── DockingValidationResult.cs # 도킹 검증 결과
        └── PathValidationResult.cs    # 경로 검증 결과

🎯 클래스 배치 원칙

PathFinding/Validation/

  • 검증 결과 클래스: *ValidationResult.cs 패턴 사용
  • 패턴: 정적 팩토리 메서드 (CreateValid, CreateInvalid, CreateNotRequired)
  • 속성: IsValid, ValidationError, 관련 상세 정보

PathFinding/Planning/

  • 경로 계획 클래스: 실제 경로 탐색 및 계획 로직
  • 방향 변경 로직: DirectionChangePlanner.cs
  • 경로 최적화: 경로 생성과 관련된 전략

PathFinding/Core/

  • 핵심 알고리즘: A* 알고리즘 등 기본 경로 탐색
  • 기본 경로 탐색: 단순한 점-to-점 경로 계산

PathFinding/Analysis/

  • 경로 분석: 생성된 경로의 품질 및 특성 분석
  • 성능 분석: 경로 효율성 및 최적화 분석

개발 워크플로우

권장 개발 순서

  1. 맵 데이터 준비: AGVMapEditor로 맵 노드 배치 및 RFID 매핑 설정
  2. 경로 탐색 구현: AGVNavigationCore에서 경로 계산 알고리즘 개발
  3. 시뮬레이션 테스트: AGVSimulator로 AGV 동작 검증
  4. 메인 프로젝트 통합: 개발 완료 후 부모 폴더(Cs_HMI)에 병합

중요한 개발 패턴

  • 이벤트 기반 아키텍처: UI 업데이트는 이벤트를 통해 자동화
  • 상태 관리: _hasChanges 플래그로 변경사항 추적
  • 에러 처리: 사용자 확인 다이얼로그와 상태바 메시지 활용
  • 코드 재사용: UnifiedAGVCanvas를 맵에디터와 시뮬레이터에서 공통 사용

주의사항

  • PathFinding 로직 변경시: 반드시 시뮬레이터에서 테스트 후 적용
  • 노드 연결 관리: 물리적 RFID와 논리적 노드 ID 분리 원칙 유지
  • JSON 파일 형식: 맵 데이터는 MapNodes, RfidMappings 두 섹션으로 구성
  • 좌표 시스템: 줌/팬 상태에서 좌표 변환 정확성 지속 모니터링

최근 구현 완료 기능

회전 구간 회피 기능 (PathFinding)

  • 목적: AGV 회전 오류를 피하기 위한 선택적 회전 구간 회피
  • 파일: PathFinding/PathfindingOptions.cs
  • UI: AGVSimulator에 "회전 구간 회피" 체크박스

맵 에디터 마우스 좌표 오차 수정

  • 문제: 줌 인/아웃 시 노드 선택 히트 영역이 너무 작음
  • 해결: 최소 화면 히트 영역(20픽셀) 보장
  • 파일: AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs

노드 연결 관리 시스템

  • 기능: 노드 연결 목록 표시 및 삭제
  • 파일들:
    • AGVMapEditor/Forms/MainForm.cs - UI 및 이벤트 처리
    • UnifiedAGVCanvas.cs - 편집 모드 및 이벤트 정의
    • UnifiedAGVCanvas.Mouse.cs - 마우스 연결 삭제 기능

향후 개발 우선순위

  1. 방향 전환 기능: AGV 현재 방향과 목표 방향 불일치 시 회전 노드 경유 로직
  2. 맵 검증 기능: 연결 무결성, 고립된 노드, 순환 경로 등 검증
  3. 성능 최적화: 대형 맵에서 경로 계산 및 연결 목록 표시 성능 개선
  4. 실시간 동기화: 맵 에디터와 시뮬레이터 간 실시간 맵 동기화

최종 업데이트: 2025-10-23 - AGVLogic 폴더 기준으로 정리