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>
7.5 KiB
7.5 KiB
AGVNavigationCore 프로젝트 기능 설명
📋 개요
AGVNavigationCore는 AGV(Automated Guided Vehicle) 시스템을 위한 전문적인 경로 계산 및 네비게이션 라이브러리입니다. 실제 AGV의 물리적 제약사항과 운영 요구사항을 고려한 지능형 경로 탐색 기능을 제공합니다.
🏗️ 핵심 구조
Models 패키지
- MapNode: 맵의 논리적 노드 정보 (위치, 타입, 연결 정보, RFID 매핑)
- RfidMapping: RFID와 논리적 노드 ID 간의 매핑 정보
- Enums: 노드 타입, AGV 방향, 도킹 방향, 장비 타입 등 열거형 정의
PathFinding 패키지
경로 계산의 핵심 엔진들이 포함된 패키지
🎯 주요 기능
1. 기본 경로 탐색 (A 알고리즘)*
AStarPathfinder 클래스:
- 표준 A* 알고리즘 구현으로 최적 경로 탐색
- 유클리드 거리 기반 휴리스틱 사용
- 설정 가능한 파라미터:
HeuristicWeight: 휴리스틱 가중치 (기본 1.0)MaxSearchNodes: 최대 탐색 노드 수 (기본 1000개)
제공 기능:
// 단일 경로 탐색
PathResult FindPath(string startNodeId, string endNodeId)
// 다중 목표 중 최단 경로 탐색
PathResult FindNearestPath(string startNodeId, List<string> targetNodeIds)
// 노드 연결 상태 확인
bool AreNodesConnected(string nodeId1, string nodeId2)
2. AGV 전용 지능형 경로 계산
AGVPathfinder 클래스: AGV의 실제 움직임 제약사항을 고려한 전문 경로 계산기
AGV 제약사항 고려:
- 방향성 제약: 전진/후진만 가능, 좌우 이동 불가
- 회전 제약: 특정 노드(회전 가능 지점)에서만 180도 회전 가능
- 도킹 방향:
- 충전기: 전진 도킹만 가능
- 장비 (로더, 클리너 등): 후진 도킹만 가능
전용 기능:
// AGV 경로 계산 (방향성 고려)
AGVPathResult FindAGVPath(string startNodeId, string endNodeId, AgvDirection? targetDirection)
// 가장 가까운 충전소 경로
AGVPathResult FindPathToChargingStation(string startNodeId)
// 특정 장비 타입 도킹 스테이션 경로
AGVPathResult FindPathToDockingStation(string startNodeId, StationType stationType)
3. RFID 기반 경로 계산 (실제 운영용)
RfidBasedPathfinder 클래스: 실제 AGV가 RFID를 읽어서 위치를 파악하는 현장 운영 방식에 최적화
RFID 기반 제약사항:
- 물리적 RFID: 의미 없는 고유 식별자 (현장 유지보수 편의성)
- 논리적 매핑: RFID ↔ NodeId 분리로 맵 변경 시 유연성 확보
- 실시간 변환: RFID 입력을 내부적으로 NodeId로 변환하여 처리
RFID 전용 기능:
// RFID 기반 AGV 경로 계산
RfidPathResult FindAGVPath(string startRfidId, string endRfidId, AgvDirection? targetDirection)
// RFID 기반 충전소 경로
RfidPathResult FindPathToChargingStation(string startRfidId)
// RFID 기반 도킹 스테이션 경로
RfidPathResult FindPathToDockingStation(string startRfidId, StationType stationType)
// RFID 매핑 관리
RfidMapping GetRfidMapping(string rfidId)
string GetNodeIdByRfid(string rfidId)
string GetRfidByNodeId(string nodeId)
4. 상세한 결과 분석
PathResult (기본 결과):
- 성공/실패 여부
- 노드 ID 시퀀스
- 총 거리 및 계산 시간
- 탐색한 노드 수
AGVPathResult (AGV 전용 결과):
- 실행 가능한 명령어 시퀀스:
[전진, 전진, 우회전, 후진, 정지] - 상세 메트릭:
- 회전 횟수 계산
- 예상 소요 시간 (이동 + 회전 시간)
- 명령어 요약 (
전진×3 → 우회전×1 → 후진×2)
RfidPathResult (RFID 기반 결과):
- RFID 경로 시퀀스:
[RFID001, RFID045, RFID067, RFID123] - AGV 명령어: NodeId 기반 결과와 동일한 명령어 시퀀스
- 현장 친화적 정보:
- RFID 경로 요약 (
RFID001 → ... (2개 경유) → RFID123) - 실행 정보 (
[실행준비] → [명령어] → [예상시간]) - 운영자용 상세 정보
- RFID 경로 요약 (
5. 실시간 검증 및 최적화
경로 검증:
// 경로 유효성 실시간 검증
bool ValidatePath(List<string> path)
// 네비게이션 가능 노드 필터링 (라벨/이미지 노드 제외)
List<string> GetNavigationNodes()
성능 최적화:
- 메모리 효율적인 노드 관리
- 조기 종료 조건으로 불필요한 탐색 방지
- 캐시된 거리 계산
🔧 설정 가능한 파라미터
AGV 동작 파라미터:
CurrentDirection: AGV 현재 방향RotationCostWeight: 회전 비용 가중치 (기본 50.0)DockingApproachDistance: 도킹 접근 거리 (기본 100픽셀)
알고리즘 파라미터:
HeuristicWeight: A* 휴리스틱 강도MaxSearchNodes: 탐색 제한으로 무한루프 방지
RFID 매핑 파라미터:
RfidMappings: RFID ↔ NodeId 매핑 테이블IsActive: 매핑 활성화 상태Status: RFID 상태 (정상, 손상, 교체예정)
🎯 실제 활용 시나리오
시나리오 1: 일반 이동 (NodeId 기반)
현재위치(N001) → 목적지(N010)
결과: [N001, N003, N007, N010] + [전진, 전진, 전진]
시나리오 2: 일반 이동 (RFID 기반)
현재위치(RFID123) → 목적지(RFID789)
결과: [RFID123, RFID456, RFID789] + [전진, 우회전, 전진]
AGV는 RFID를 읽으면서 실제 위치 확인 후 이동
시나리오 3: 충전 필요
배터리 부족 → 가장 가까운 충전소 자동 탐색
결과: 충전소까지 최단경로 + 전진 도킹 명령어
시나리오 4: 화물 적재
로더 스테이션 접근 → 후진 도킹 필수
결과: 로더까지 경로 + 후진 도킹 시퀀스
🌟 차별화 포인트
- 실제 AGV 제약사항 반영: 이론적 경로가 아닌 실행 가능한 경로 제공
- 명령어 레벨 출력: 경로뿐만 아니라 실제 AGV 제어 명령어 생성
- RFID 기반 현장 운영: 물리적 RFID와 논리적 노드 분리로 현장 유지보수성 향상
- 다양한 장비 지원: 충전기, 로더, 클리너, 버퍼 등 각각의 도킹 요구사항 처리
- 이중 API 제공: NodeId 기반(개발용) + RFID 기반(운영용) 동시 지원
- 확장성: 새로운 AGV 타입이나 제약사항 쉽게 추가 가능
- 성능 최적화: 실시간 운영에 적합한 빠른 응답속도
🚀 사용 방법
기본 사용법
// 1. 경로 탐색기 초기화
var pathfinder = new AGVPathfinder();
pathfinder.SetMapNodes(mapNodes);
// 2. AGV 경로 계산
var result = pathfinder.FindAGVPath("N001", "N010");
// 3. 결과 확인
if (result.Success)
{
Console.WriteLine($"경로: {string.Join(" → ", result.Path)}");
Console.WriteLine($"명령어: {result.GetCommandSummary()}");
Console.WriteLine($"예상시간: {result.EstimatedTimeSeconds}초");
}
충전소 경로 탐색
var chargingResult = pathfinder.FindPathToChargingStation("N001");
if (chargingResult.Success)
{
// 충전소까지 자동 이동
ExecuteAGVCommands(chargingResult.Commands);
}
📦 의존성
- .NET Framework 4.8
- Newtonsoft.Json 13.0.3
- System.Drawing
🔗 통합 프로젝트
이 라이브러리는 다음 프로젝트에서 사용됩니다:
- AGVMapEditor: 맵 편집 및 경로 시뮬레이션
- AGV4: 메인 AGV 제어 시스템
- AGVSimulator: AGV 동작 시뮬레이터
AGVNavigationCore는 ENIG AGV 시스템의 핵심 네비게이션 엔진입니다.