새소식

Navigation

SplatNav : 코드 아키텍쳐 분석

  • -

Filetree

splatnav/
├─ .git/
├─ .gitignore
├─ LICENSE
├─ README.md
├─ SFC/
│  ├─ __pycache__/
│  ├─ astar_utils.py
│  ├─ corridor_utils.py
│  ├─ helper_utils.py
│  └─ viz_utils.py
├─ SplatNav Data/  
│  ├─ old_union_sfc-1.json
│  └─ old_union_sfc-2.json
├─ assets/ 
├─ blender/
│  ├─ viz_dataset.py
│  ├─ viz_statistical_traj.py
│  └─ viz_utils.py
├─ data/
│  ├─ exp_room/
│  ├─ flight/
│  └─ old_union2/
├─ ellipsoids/
│  ├─ __pycache__/
│  ├─ covariance_utils.py
│  ├─ intersection_utils.py
│  ├─ mesh_utils.py
│  └─ sphere_utils.py
├─ imgs/
│  └─ logo.svg
├─ initialization/
│  ├─ __pycache__/
│  ├─ astar_utils.py
│  └─ grid_utils.py
├─ nerfnav/
│  ├─ nav/   
│  └─ nerf/ 
├─ ns_utils/
│  ├─ __pycache__/
│  └─ nerfstudio_utils.py
├─ outputs/
│  ├─ colmap/
│  ├─ exp_room/
│  ├─ flight/
│  ├─ myscene/
│  ├─ old_union2/
│  ├─ registered/
│  ├─ splatnav11212024/
│  └─ statues/
├─ plotting/
│  ├─ make_gif.py
│  └─ plot_utils.py
├─ polytopes/
│  ├─ __pycache__/
│  ├─ collision_set.py
│  ├─ connectivity_utils.py
│  ├─ decomposition.py
│  └─ polytopes_utils.py
├─ pose_estimator/
│  ├─ pose_estimator.py
│  └─ utils.py
├─ results/
│  ├─ ellipsoids/
│  ├─ ns_utils/
│  ├─ old_union/
│  │  └─ old_union.obj 
│  ├─ plot_results.py
│  ├─ plot_sfc_ablations.py
│  ├─ process_data_corridors.py
│  ├─ process_data_corridors2.py
│  ├─ sfc_ablations.pdf
│  ├─ simulation_stats.pdf
│  └─ splat/
│     ├─ __pycache__/
│     └─ splat_utils.py
├─ run_nerfnav.py
├─ run_rrt.py
├─ run_splatloc.py
├─ run_splatplan.py
├─ splat/
│  ├─ __pycache__/
│  └─ splat_utils.py
├─ splatplan/
│  ├─ __pycache__/
│  ├─ splatplan.py
│  └─ spline_utils.py
├─ trajs/
│  ├─ exp_room/
│  ├─ flight/
│  └─ old_union2/
├─ visualize.py
└─ visualize_map.py

splatplan/splatplan.py

  • __init__
    • GSplat 객체: 3D Gaussian으로 표현된 환경 정보
    • 로봇 설정: 반경(radius), 최대 속도(vmax), 최대 가속도(amax)
    • 충돌 감지: GSplatCollisionSet으로 가우시안과의 충돌 체크
    • 복셀 그리드: GSplatVoxel로 환경을 이산화하여 A* 경로 탐색에 사용
    • 스플라인 플래너: 최종 경로를 부드럽게 최적화
  • generate_path
    • A 경로 탐색*
      • 복셀 그리드에서 시작점(x0)부터 목표점(xf)까지 초기 경로 생성
    • 충돌 집합 계산
      • 각 선분(segment)마다 충돌 가능성이 있는 가우시안들 식별
      • collision_set.compute_set_one_step()으로 해당 구간의 장애물 정보 추출
    • Polytope 생성
      • 각 선분에 대해 안전 영역을 표현하는 polytope(다면체) 계산
      • 이전 polytope 안에 포함되면 재사용, 아니면 새로 생성
      • get_polytope_from_outputs()로 halfspace 표현 (Ax ≤ b) 생성
    • B-spline 최적화
      • 생성된 polytope들을 제약 조건으로 사용
      • 부드러운 Bezier 스플라인 궤적 최적화
      • 실행 불가능한 경우 직선 경로 반환
  • Polytope 계산 (get_polytope_from_outputs)
    • 타원체-선분 교차 계산
      • 가우시안 장애물과 경로의 교차점 찾기
    • 반복적 halfspace 생성
      • 가장 가까운 교차점부터 처리
      • halfplane 생성 후 로봇 반경만큼 팽창
      • 분리된 가우시안 제거 후 반복
    • 경계 박스와 결합
      • 환경 경계와 장애물 회피 제약 통합

 

Contents

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

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