fix: RFID duplicate validation and correct magnet direction calculation

- Add real-time RFID duplicate validation in map editor with automatic rollback
- Remove RFID auto-assignment to maintain data consistency between editor and simulator
- Fix magnet direction calculation to use actual forward direction angles instead of arbitrary assignment
- Add node names to simulator combo boxes for better identification
- Improve UI layout by drawing connection lines before text for better visibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ChiKyun Kim
2025-09-15 16:31:40 +09:00
parent 1add9ed59a
commit 7f48253770
41 changed files with 4827 additions and 3649 deletions

View File

@@ -139,4 +139,65 @@ SubProject 내의 GitUpdate.bat을 사용하여 모든 하위 프로젝트를
- 실시간 AGV 제어 시스템이므로 상태 머신 로직 수정시 신중히 접근
- 통신 관련 코드 변경시 하드웨어 호환성 고려 필요
- **맵 에디터/시뮬레이터**: AGVMapEditor 프로젝트에 의존성이 있으므로 먼저 빌드 필요
- **JSON 파일 형식**: 맵 데이터는 MapNodes, RfidMappings 두 섹션으로 구성
- **JSON 파일 형식**: 맵 데이터는 MapNodes, RfidMappings 두 섹션으로 구성
## 최근 구현 완료 기능 및 중요사항 (2024.12.09)
### ✅ 회전 구간 회피 기능 (PathFinding)
**파일**: `AGVNavigationCore/PathFinding/PathfindingOptions.cs` (신규)
- **목적**: AGV 회전 오류를 피하기 위한 선택적 회전 구간 회피
- **구현**: PathfindingOptions 클래스로 회전 회피 설정 관리
- **UI**: AGVSimulator에 "회전 구간 회피" 체크박스 추가
- **알고리즘**: A* 경로탐색에서 회전 노드 가중치 증가 또는 필터링
### ✅ 맵 에디터 마우스 좌표 오차 수정
**파일**: `AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs`
- **문제**: 줌 인/아웃 시 노드 선택 히트 영역이 너무 작아짐
- **해결**: 최소 화면 히트 영역(20픽셀) 보장으로 정확한 노드 선택 가능
- **적용**: 원형, 5각형, 삼각형 모든 노드 타입 히트 감지 개선
### ✅ 노드 연결 관리 시스템 (신규 구현)
**파일들**:
- `AGVMapEditor/Forms/MainForm.cs` - UI 및 이벤트 처리
- `AGVNavigationCore/Controls/UnifiedAGVCanvas.cs` - 편집 모드 및 이벤트 정의
- `AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs` - 마우스 연결 삭제 기능
#### 주요 기능:
1. **노드 연결 목록 표시**: `lstNodeConnection` 리스트박스에 모든 연결 정보 표시
2. **버튼 연결 삭제**: `btNodeRemove` 버튼으로 선택된 연결 삭제
3. **더블클릭 연결 삭제**: 목록에서 더블클릭으로 빠른 삭제
4. **마우스 직접 삭제**: 맵에서 연결선 클릭으로 직접 삭제
#### 핵심 클래스:
- **NodeConnectionInfo**: 연결 정보 표현 클래스 (From/To 노드, 연결 타입)
- **EditMode.DeleteConnection**: 새로운 편집 모드 추가
- **ConnectionDeleted 이벤트**: 연결 삭제 시 발생하는 이벤트
### 🔧 빌드 환경 이슈
- **Visual Studio 2022**: MSBuild 경로 문제로 빌드 실패
- **권장**: Visual Studio Community/Professional 2022 설치 필요
- **대안**: 기존 빌드된 실행파일로 테스트 가능
### 📋 개발 우선순위 및 권장사항
#### 꼭 지켜야 할 사항:
1. **PathFinding 로직 변경시**: 반드시 시뮬레이터에서 테스트 후 적용
2. **노드 연결 관리**: 물리적 RFID와 논리적 노드 ID 분리 원칙 유지
3. **UI 편집 모드**: 동시에 여러 편집 모드 활성화하지 않도록 주의
4. **이벤트 처리**: MapChanged, NodeAdded/Deleted, ConnectionDeleted 이벤트 체인 확인
#### 다음 개발 우선순위:
1. **방향 전환 기능**: AGV 현재 방향과 목표 방향 불일치 시 회전 노드 경유 로직
2. **맵 검증 기능**: 연결 무결성, 고립된 노드, 순환 경로 등 검증
3. **성능 최적화**: 대형 맵에서 경로 계산 및 연결 목록 표시 성능 개선
4. **실시간 동기화**: 맵 에디터와 시뮬레이터 간 실시간 맵 동기화
#### 중요 개발 패턴:
- **이벤트 기반 아키텍처**: UI 업데이트는 이벤트를 통해 자동화
- **상태 관리**: _hasChanges 플래그로 변경사항 추적
- **에러 처리**: 사용자 확인 다이얼로그와 상태바 메시지 활용
- **코드 재사용**: UnifiedAGVCanvas를 맵에디터와 시뮬레이터에서 공통 사용
### 🚨 알려진 이슈
- **빌드 환경**: MSBuild 2022가 설치되지 않은 환경에서 빌드 불가
- **좌표 시스템**: 줌/팬 상태에서 좌표 변환 정확성 지속 모니터링 필요