Major improvements to AGV navigation system: • Consolidated RFID management into MapNode, removing duplicate RfidMapping class • Enhanced MapNode with RFID metadata fields (RfidStatus, RfidDescription) • Added automatic bidirectional connection generation in pathfinding algorithms • Updated all components to use unified MapNode-based RFID system • Added command line argument support for AGVMapEditor auto-loading files • Fixed pathfinding failures by ensuring proper node connectivity Technical changes: - Removed RfidMapping class and dependencies across all projects - Updated AStarPathfinder with EnsureBidirectionalConnections() method - Modified MapLoader to use AssignAutoRfidIds() for RFID automation - Enhanced UnifiedAGVCanvas, SimulatorForm, and MainForm for MapNode integration - Improved data consistency and reduced memory footprint 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
142 lines
6.2 KiB
Markdown
142 lines
6.2 KiB
Markdown
# CLAUDE.md
|
|
|
|
이 파일은 이 저장소의 코드로 작업할 때 Claude Code (claude.ai/code)를 위한 지침을 제공합니다.
|
|
맵데이터는 C:\Data\Source\(5613#) ENIG AGV\Source\Cs_HMI\Data\NewMap.agvmap 파일을 기준으로 사용
|
|
|
|
## 빌드 및 개발 명령어
|
|
|
|
### 프로젝트 빌드 및 실행
|
|
- **메인 빌드**: build.bat 파일 참고
|
|
- **빌드후 이벤트 예제) rem xcopy "$(TargetDir)*.exe" "\\192.168.1.80\Amkor\AGV2" /Y
|
|
|
|
### 프로젝트 구조 및 빌드 설정
|
|
- **메인 애플리케이션**: `Project/AGV4.csproj` - "Amkor"라는 실행 파일명으로 컴파일
|
|
- **타겟 플랫폼**: .NET Framework 4.8, x86/x64 아키텍처
|
|
- **출력 경로**:
|
|
- Debug: `..\..\..\..\..\Amkor\AGV4\`
|
|
- Release: `..\..\..\ManualMapEditor\`
|
|
|
|
## 고수준 코드 아키텍처
|
|
|
|
### 솔루션 구조
|
|
이 프로젝트는 ENIG AGV (자동 유도 차량) 시스템을 위한 C# HMI (Human-Machine Interface) 애플리케이션입니다.
|
|
|
|
```
|
|
AGVCSharp.sln (메인 솔루션)
|
|
├── Project/AGV4.csproj (메인 HMI 애플리케이션)
|
|
├── StateMachine/ (상태 머신 라이브러리)
|
|
├── AGVMapEditor/ (맵 에디터 - 2024.09 추가)
|
|
├── AGVSimulator/ (AGV 시뮬레이터 - 2024.09 추가)
|
|
└── SubProject/ (서브 프로젝트 모듈들)
|
|
├── AGVControl/ (AGV 제어)
|
|
├── BMS/ (배터리 관리 시스템)
|
|
├── NARUMI/ (AGV 하드웨어)
|
|
├── CommData/ (통신 데이터)
|
|
├── ENIGProtocol/ (ENIG 프로토콜)
|
|
└── 기타 모듈들
|
|
```
|
|
|
|
### 메인 애플리케이션 아키텍처 (Project/)
|
|
|
|
#### 핵심 폼 구조
|
|
- **fMain.cs**: 메인 UI 폼 - AGV 시스템의 중앙 제어판
|
|
- **fSetup.cs**: 설정 화면 - 시스템 파라미터 및 구성
|
|
- **ViewForm/**: 각종 모니터링 화면들
|
|
- `fAuto.cs` - 자동 모드 화면
|
|
- `fManual.cs` - 수동 모드 화면
|
|
- `fAgv.cs` - AGV 상태 화면
|
|
- `fBms.cs` - 배터리 상태 화면
|
|
- `fIO.cs` - I/O 상태 화면
|
|
|
|
#### 상태 머신 시스템 (StateMachine/)
|
|
AGV의 동작을 제어하는 상태 기반 시스템:
|
|
- **_Loop.cs**: 메인 상태 머신 루프
|
|
- **_AGV.cs**: AGV 제어 로직
|
|
- **_BMS.cs**: 배터리 관리 상태
|
|
- **_SPS.cs**: SPS(Stored Program Sequencer) 제어
|
|
- **Step/**: 각 상태별 구현 클래스들
|
|
- `_SM_RUN_*.cs` - 실행 상태들 (INIT, READY, GOTO, CHARGE 등)
|
|
|
|
#### 핵심 클래스들
|
|
- **PUB.cs**: 전역 변수 및 공통 함수
|
|
- **CSetting.cs**: 설정 데이터 관리
|
|
- **Manager/DataBaseManager.cs**: 데이터베이스 관리
|
|
- **Device/**: 하드웨어 인터페이스 클래스들
|
|
|
|
### 통신 및 프로토콜
|
|
- **XBee 무선 통신**: call button 및 충전기 통신
|
|
- **ENIG Protocol**: 자체 정의 프로토콜
|
|
- **Socket 통신**: 네트워크 기반 데이터 교환
|
|
- **Database**: 운영 데이터 저장 및 관리
|
|
|
|
### 의존성 및 라이브러리
|
|
- **arCommUtil**: AR 통신 유틸리티
|
|
- **arControl.Net4**: AR 제어 라이브러리
|
|
- **Newtonsoft.Json**: JSON 데이터 처리
|
|
- **Microsoft.Speech**: 음성 처리
|
|
- **System.Management**: 시스템 관리
|
|
|
|
### 빌드 후 처리
|
|
프로젝트는 빌드 후 네트워크 위치로 파일을 자동 복사하는 설정이 있습니다 (현재 주석 처리됨).
|
|
|
|
### Git 업데이트
|
|
SubProject 내의 GitUpdate.bat을 사용하여 모든 하위 프로젝트를 일괄 업데이트할 수 있습니다.
|
|
|
|
## 새로 추가된 AGV 개발 도구 (2024.09)
|
|
|
|
### AGVMapEditor (맵 에디터)
|
|
**위치**: `AGVMapEditor/AGVMapEditor.csproj`
|
|
**실행파일**: `AGVMapEditor/bin/Debug/AGVMapEditor.exe`
|
|
|
|
#### 핵심 기능
|
|
- **맵 노드 관리**: 논리적 노드 생성, 연결, 속성 설정
|
|
- **RFID 매핑 분리**: 물리적 RFID ID ↔ 논리적 노드 ID 매핑 관리
|
|
- **시각적 맵 편집**: 드래그앤드롭으로 노드 배치 및 연결
|
|
- **JSON 파일 저장**: 맵 데이터를 JSON 형식으로 저장/로드
|
|
|
|
#### 핵심 클래스
|
|
- **MapNode**: 논리적 맵 노드 (NodeId, 위치, 타입, 연결 정보)
|
|
- **RfidMapping**: RFID 물리적 ID ↔ 논리적 노드 매핑
|
|
- **NodeResolver**: RFID ID를 통한 노드 해석기
|
|
- **PathCalculator**: A* 알고리즘 기반 AGV 경로 계산
|
|
- **MapCanvas**: 시각적 맵 편집 컨트롤
|
|
|
|
#### AGV 특화 제약사항
|
|
- **방향성 제약**: 전진/후진, 회전은 마크센서 위치에서만 가능
|
|
- **도킹 제약**: 충전기(전진 도킹), 장비(후진 도킹)
|
|
- **RFID 기반 네비게이션**: 물리적 RFID와 논리적 의미 분리
|
|
|
|
### AGVSimulator (AGV 시뮬레이터)
|
|
**위치**: `AGVSimulator/AGVSimulator.csproj`
|
|
**실행파일**: `AGVSimulator/bin/Debug/AGVSimulator.exe`
|
|
|
|
#### 핵심 기능
|
|
- **가상 AGV 시뮬레이션**: 실시간 AGV 움직임 및 상태 관리
|
|
- **맵 시각화**: 맵 에디터에서 생성한 맵 파일 로드 및 표시
|
|
- **경로 실행**: 계산된 경로를 따라 AGV 시뮬레이션
|
|
- **상태 모니터링**: AGV 상태, 위치, 배터리 등 실시간 모니터링
|
|
|
|
#### 핵심 클래스
|
|
- **VirtualAGV**: 가상 AGV 동작 시뮬레이션 (이동, 회전, 도킹, 충전)
|
|
- **SimulatorCanvas**: AGV 및 맵 시각화 캔버스
|
|
- **SimulatorForm**: 시뮬레이터 메인 인터페이스
|
|
- **SimulationState**: 시뮬레이션 상태 관리
|
|
|
|
#### AGV 상태
|
|
- **Idle**: 대기, **Moving**: 이동 중, **Rotating**: 회전 중
|
|
- **Docking**: 도킹 중, **Charging**: 충전 중, **Error**: 오류
|
|
|
|
### 개발 워크플로우
|
|
1. **맵 생성**: AGVMapEditor로 맵 노드 배치 및 RFID 매핑 설정
|
|
2. **경로 테스트**: AGVSimulator로 AGV 동작 시뮬레이션 및 검증
|
|
3. **실제 적용**: 검증된 맵 데이터를 실제 AGV 시스템에 적용
|
|
|
|
### RFID 매핑 아키텍처 원칙
|
|
**중요**: 물리적 RFID ID는 의미없는 고유값으로 관리하고, 논리적 노드 ID와 별도 매핑 테이블로 분리하여 현장 유지보수성 향상
|
|
|
|
## 개발시 주의사항
|
|
- 메인 애플리케이션은 Windows Forms 기반의 터치 인터페이스로 설계됨
|
|
- 실시간 AGV 제어 시스템이므로 상태 머신 로직 수정시 신중히 접근
|
|
- 통신 관련 코드 변경시 하드웨어 호환성 고려 필요
|
|
- **맵 에디터/시뮬레이터**: AGVMapEditor 프로젝트에 의존성이 있으므로 먼저 빌드 필요
|
|
- **JSON 파일 형식**: 맵 데이터는 MapNodes, RfidMappings 두 섹션으로 구성 |