새소식

Navigation/url_navigation_pkg

url_navigation_pkg (2) : Code structure

  • -

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/
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.