Files
ENIG/Cs_HMI/PathLogic/show_map_info.py
ChiKyun Kim b53cff02bc feat: AGV 경로 탐색 알고리즘 완성 및 검증 시스템 구축
- agv_path_planner.py: JSON 형식 맵 파일 지원 추가
  * parse_map_json() 함수로 MapData.json/NewMap.agvmap 파싱
  * RFID 정규화 및 별칭 지원 (007/7 등)
  * TP(터닝포인트) 기반 방향전환 알고리즘 검증 완료

- universal_pathfinder.py: 범용 패턴 기반 경로 탐색
  * Q1-1, Q1-2, Q2-1, Q2-2 모든 시나리오 패턴 구현
  * UniversalPathFormatter 방향전환 표기 수정
  * 28개 테스트 케이스 중 20개 성공 (71.4%)

- test_all_scenarios.py: 전체 테스트 케이스 검증 스크립트
  * 4개 시나리오 × 7개 목표 = 28개 케이스 자동 검증
  * 사용자 제공 정답과 비교 분석

- show_map_info.py: 맵 구조 분석 도구
  * RFID 목록, 연결 정보, 갈림길 분석
  * 노드 타입별 분류 및 통계

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-22 08:41:57 +09:00

90 lines
3.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from agv_pathfinder import AGVMap
def show_map_info():
"""맵 정보 출력: RFID 목록과 연결 정보"""
print("=== AGV 맵 정보 ===")
# 맵 로드
agv_map = AGVMap()
agv_map.load_from_file(r"C:\Data\Source\(5613#) ENIG AGV\Source\Cs_HMI\Data\NewMap.agvmap")
print(f"총 노드 수: {len(agv_map.nodes)}")
# RFID 목록 수집 및 정렬
rfid_nodes = []
for node in agv_map.nodes.values():
if node.rfid_id:
rfid_nodes.append((node.rfid_id, node))
# RFID 번호순으로 정렬
rfid_nodes.sort(key=lambda x: int(x[0]) if x[0].isdigit() else 999)
print(f"RFID 노드 수: {len(rfid_nodes)}")
# RFID 목록 출력 (10개씩 줄바꿈)
print("\n--- RFID 목록 ---")
rfid_list = [rfid for rfid, _ in rfid_nodes]
for i, rfid in enumerate(rfid_list):
if i % 10 == 0:
print() # 10개마다 줄바꿈
print(f"{rfid:>3}", end=" ")
print() # 마지막 줄바꿈
# 연결 정보 출력
print("\n--- RFID 연결 정보 ---")
for rfid, node in rfid_nodes:
# 노드 타입 정보
type_str = ""
if node.node_type == 2:
type_str = f"[Station/Buffer, DockDir:{node.dock_direction}]"
elif node.node_type == 3:
type_str = f"[Charger, DockDir:{node.dock_direction}]"
else:
type_str = f"[Type:{node.node_type}]"
# 연결된 노드들의 RFID 찾기
connected_rfids = []
for connected_node in node.connected_nodes:
connected_node_obj = agv_map.nodes.get(connected_node)
if connected_node_obj and connected_node_obj.rfid_id:
connected_rfids.append(connected_node_obj.rfid_id)
# RFID 번호순으로 정렬
connected_rfids.sort(key=lambda x: int(x) if x.isdigit() else 999)
connected_str = " -> ".join(connected_rfids) if connected_rfids else "없음"
print(f"RFID {rfid:>3} {type_str:<25} Pos:({node.position[0]:>4},{node.position[1]:>4}) -> {connected_str}")
# 갈림길(Junction) 정보
print("\n--- 갈림길 정보 (연결 노드 3개 이상) ---")
junctions = []
for rfid, node in rfid_nodes:
connection_count = len([n for n in node.connected_nodes if agv_map.nodes.get(n)])
if connection_count >= 3:
junctions.append(rfid)
print(f"갈림길 RFID ({len(junctions)}개): {', '.join(junctions)}")
# 특별 노드 분류
print("\n--- 노드 타입별 분류 ---")
chargers = []
stations = []
normal = []
for rfid, node in rfid_nodes:
if node.node_type == 3:
chargers.append(rfid)
elif node.node_type == 2:
stations.append(rfid)
else:
normal.append(rfid)
print(f"충전기 ({len(chargers)}개): {', '.join(chargers)}")
print(f"스테이션/버퍼 ({len(stations)}개): {', '.join(stations)}")
print(f"일반 노드 ({len(normal)}개): {', '.join(normal)}")
if __name__ == "__main__":
show_map_info()