[Frontend] hydra code - src/frontend/frontend_module.cpp (updateFrontiers)

About_work·2024년 10월 17일
0

lifelong scene graph

목록 보기
32/56
void FrontendModule::updateFrontiers(const ReconstructionOutput& input) {
  if (!frontier_places_) {
    return;
  }

  frontier_places_->updateRecentBlocks(input.world_t_body, input.map().blockSize());

  {  // start graph critical section
    std::unique_lock<std::mutex> graph_lock(dsg_->mutex);

    {  // start timing scope
      ScopedTimer timer("frontend/frontiers", input.timestamp_ns, true, 1, false);
      NodeIdSet active_nodes = freespace_places_->getActiveNodes();

      const auto& places = dsg_->graph->getLayer(DsgLayers::PLACES);
      places_nn_finder_.reset(new NearestNodeFinder(places, active_nodes));

      frontier_places_->detectFrontiers(input, *dsg_->graph, *places_nn_finder_);
      frontier_places_->addFrontiers(
          input.timestamp_ns, *dsg_->graph, *places_nn_finder_);
    }  // end timing scope
  }    // end graph update critical section
}

0. 핵심 정리! - 이것만 보면돼!

  • 프론티어 노드를 감지하고 DSG 그래프에 반영하는 것
  • 프론티어는 알려진 영역과 미지의 영역 경계에 해당

0.1. 로직

frontier_places_.updateRecentBlocks

  • 로봇의 현재 위치와 가까운 블록들만 남겨두고 나머지는 정리

freespace_places_.getActiveNodes

  • places: 3번째 계층
  • places 중 활성화된 node를 가져온다.

frontier_places_.detectFrontiers

  • frontier voxel: places(장애물과 먼 공간) 근처에 있는 voxel 중, 많이 가보지 못한 voxel들 중, 주변이 장애물이 없는 공간이 존재하는 voxel
  • frontier voxel들을 아래 2가지 중 하나의 방식으로 관리
    • Dense Frontiers
      • 경계 점을 개별적인 점 클라우드로 관리.
    • Sparse Frontiers
      • 탐지된 경계를 군집(cluster)으로 묶어 관리.

frontier_places_.addFrontiers

  1. 이전에 탐색된 Frontiers 노드들을 DSG 그래프의 place node에서 제거해.

  2. 새롭게 탐지된 경계 추가

    • 새롭게 탐지된 활성 경계점들을 그래프에 Place 노드로 추가
      • 경계점의 위치, 크기, 방향, 복셀 개수 등의 정보가 포함된 노드를 생성
      • 이 노드가 실제 장소(Place)가 아닌, 탐사 경계임을 표시
    • 해당 경계 노드를 기존의 Place 노드와 연결하여 그래프에 엣지를 추가
    • 추가된 경계 노드의 ID를 nodes_to_remove_ 목록에 저장해, 다음 탐색에서 정리될 수 있도록 준비해.
  3. 아카이브된 경계 추가

    • 아카이브된 경계도 마찬가지로 그래프에 Place 노드로 추가해.
      • 경계점의 위치와 기타 속성들을 설정함.
      • 이 노드가 아카이브된 경계임을 표시함.
    • 역시 해당 경계 노드를 Place 노드와 연결하고 그래프에 엣지를 추가해.

참고

  • Freespace(자유 공간):
    • DSG의 계층 3 (place node)를 의미
    • 로봇이 자유롭게 이동할 수 있는 공간
    • 활성화된 Freespace 노드들은 이 공간 내의 중요한 탐색 지점으로 연결됨
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글