Design Philosophy
- 의존성 규칙 준수 : 도메인이 ROS에 의존하지 않음
- 알고리즘 순수성 : 각 알고리즘은 상태를 갖지 않고 순수 함수처럼 동작
- state machine 분리: 상태 관리는 application layer에서 담당
- 조립 : 런타임에 Config로 컴포넌트 조합
Software Engineering
도메인 (Domain)
└─ Navigation (로봇 이동 문제 영역)
├─ Entity (핵심 개념들)
│ ├─ Pose (위치)
│ ├─ Path (경로)
│ ├─ Velocity (속도)
│ └─ Obstacle (장애물)
│
└─ 비즈니스 로직 (Business Logic)
├─ 목표 도달 판단
├─ 충돌 검사
├─ 경로 유효성 검증
└─ 속도 제한
Code Structure
Filetree
url_navigation_pkg/
│
├── configs/ # 설정 파일
│ ├── base.yaml
│ ├── robots/
│ │ ├── go1.yaml
│ │ ├── h1.yaml
│ │ └── turtlebot.yaml
│ ├── environments/
│ │ ├── isaac_sim.yaml
│ │ ├── gazebo.yaml
│ │ └── real.yaml
│ └── algorithms/
│ ├── gpp/
│ │ ├── astar.yaml
│ │ ├── rrt.yaml
│ │ └── dijkstra.yaml
│ └── lpp/
│ ├── dwa.yaml
│ ├── teb.yaml
│ └── mpc.yaml
│
├── url_navigation/
│ │
│ ├── core/ # ✅ 핵심 로직 (ROS 독립적)
│ │ ├── __init__.py
│ │ │
│ │ ├── types/ # ✅ 데이터 타입 정의
│ │ │ ├── __init__.py
│ │ │ ├── pose.py # 위치/자세
│ │ │ ├── path.py # 경로 (waypoint list)
│ │ │ ├── velocity.py # cmd_vel
│ │ │ ├── map.py # 지형 맵
│ │ │ └── obstacle.py # 장애물
│ │ │
│ │ └── algorithms/ # ✅ 알고리즘 구현
│ │ ├── __init__.py
│ │ ├── gpp/ # Global Path Planning
│ │ │ ├── __init__.py
│ │ │ ├── base.py # 공통 인터페이스
│ │ │ ├── astar.py
│ │ │ ├── rrt.py
│ │ │ ├── rrt_star.py
│ │ │ └── dijkstra.py
│ │ │
│ │ ├── lpp/ # Local Path Planning
│ │ │ ├── __init__.py
│ │ │ ├── base.py # 공통 인터페이스
│ │ │ ├── dwa.py
│ │ │ ├── teb.py
│ │ │ ├── mpc.py
│ │ │ └── pure_pursuit.py
│ │ │
│ │ └── utils/ # 알고리즘 유틸
│ │ ├── __init__.py
│ │ ├── path_smoother.py
│ │ ├── collision_checker.py
│ │ └── distance_calculator.py
│ │
│ ├── planners/ # ✅ 플래너 (Use Case 역할)
│ │ ├── __init__.py
│ │ ├── global_planner.py # GPP 로직 조율
│ │ └── local_planner.py # LPP 로직 조율
│ │
│ ├── ros_interface/ # ✅ ROS 연결 (옵션)
│ │ ├── __init__.py
│ │ ├── ros1/
│ │ │ ├── __init__.py
│ │ │ ├── gpp_node.py
│ │ │ ├── lpp_node.py
│ │ │ └── converters.py
│ │ └── ros2/
│ │ ├── __init__.py
│ │ ├── gpp_node.py
│ │ ├── lpp_node.py
│ │ └── converters.py
│ │
│ ├── python_api/ # ✅ Python API (ROS 없이 사용)
│ │ ├── __init__.py
│ │ ├── gpp_api.py
│ │ └── lpp_api.py
│ │
│ ├── config/ # ✅ 설정 관리
│ │ ├── __init__.py
│ │ ├── loader.py # YAML 로더
│ │ └── factory.py # 알고리즘 팩토리
│ │
│ ├── utils/ # ✅ 유틸리티
│ │ ├── __init__.py
│ │ ├── logger.py
│ │ ├── visualizer.py
│ │ └── metrics.py
│ │
│ └── scripts/ # ✅ 실행 스크립트
│ ├── __init__.py
│ ├── run_gpp.py
│ ├── run_lpp.py
│ ├── benchmark_gpp.py
│ └── benchmark_lpp.py
│
└── tests/
├── test_core/
│ ├── test_types/
│ └── test_algorithms/
├── test_planners/
└── benchmarks/