1. github note 업데이트(2024년 6월 26일): 최신 버전의 Hydra를 출시했습니다. 이번 릴리스에는 다음 기능들이 포함됩니다: 최근 논문에서 소개한 방 카테고리 분류 네트워크(논문은 여기에서 확인 가능) Python 바인딩과 Hydra 및 ha
이 코드는 Hydra 시스템의 FrontendModule 구현을 다룹니다. FrontendModule주로 메쉬(mesh), 포즈 그래프(pose graph), 그리고 물체, 장소, 전방위 경계(frontier)를 처리하는 역할코드는 크게 구성 초기화, 콜백 처리, 스레
DSG는 환경의 의미적 표현을 위한 그래프, Mesh Delta는 메쉬의 변화된 부분을 추적하는 데이터 구조, Factor Graph는 확률적 추론을 위한 그래프, Deformation Graph는 3D 메쉬 변형을 모델링하는 그래프Dynamic Scene Graph
1. src/backend/backend_module.cpp 1. BackendModule 클래스 개요 BackendModule은 KimeraPgmoInterface를 상속받아 동작하며, DSG 그래프를 관리하고, 메쉬 변형을 처리하며, 주기적으로 데이터를 업데이트하고
deformation graph팩터 그래프(Factor Graph)의 특정 응용디포메이션 그래프는 3D 형상의 자연스럽고 직관적인 변형을 가능하게 하는 수학적 프레임워크공간 변형(space deformation)에 기반하여, 다양한 형태 표현과 편집 시나리오에서 직접적
ProjectiveIntegrator 클래스는 3D 맵을 업데이트하는 데 사용센서로부터 받은 데이터를 기반으로, 특정 시야 내에서 블록을 선택하고 TSDF 및 의미론적 데이터를 반영하여 맵을 갱신interpolator\_(config::create<Projecti
먼저 세멘틱 라벨이 어떻게 처리되는지 살펴볼 수 있습니다. TSDF 업데이트 시, 해당 복셀이 표면 근처에 있을 때만 세멘틱 라벨을 통합하는데, 그 과정이 computeLabel 함수에서 처리됩니다.is_surface: 현재 볼셀이 표면 근처에 있는지 확인하는 조건입니
이 코드는 로봇의 발자국(freespace footprint)을 3D 볼류메트릭 맵(Volumetric Map)에서 처리하는 RobotFootprintIntegrator 클래스 주요 목적은 로봇의 위치를 기반으로 로봇이 이동한 공간(자유 공간)을 3D 맵에서 TSDF(
이 코드는 Hydra 시스템의 ReconstructionOutput 클래스와 관련된 구현을 다루고 있습니다. ReconstructionOutput은 로봇이 이동하는 동안 수집한 데이터를 바탕으로 3D 볼륨 맵(Volumetric Map)을 구성하고 업데이트하는 기능을
생성자와 generateMesh 메서드가 중요이 클래스는 TSDF (Truncated Signed Distance Field) 데이터를 기반으로 3D 메쉬를 생성하는 데 사용이 과정은 Marching Cubes 알고리즘을 사용하여 voxel 데이터로부터 표면을 추출하는
TsdfBlock은 TSDF 데이터를 저장하고, 블록 단위로 업데이트 상태를 추적하는 중요한 구조체ESDF, 메쉬, 트래킹과 같은 다양한 처리 작업에 대한 상태를 각각 관리하여, 각 작업에서 이 블록이 어떤 상태인지 쉽게 확인할 수 있습니다.TSDF 데이터와 관련된
이 코드는 C++ 에서 정의된 HydraPythonPipeline 클래스의 헤더 파일. 이 클래스는 HydraPipeline이라는 기본 클래스를 상속받고 있으며,Python 바인딩을 추가해 Python 코드에서 이 파이프라인을 사용할 수 있게 해. 또한 이 클래스는
ㅅㄷㄴㅅ
업데이트(2024년 6월 26일): 최신 버전의 Hydra를 출시했습니다. 이번 릴리스에는 다음 기능들이 포함됩니다:최근 논문에서 소개한 방 카테고리 분류 네트워크(논문은 여기( - Python 바인딩과 Hydra 및 habitat 시뮬레이터와 함께 실행할 수 있는
test
이 함수는 아카이브된 블록을 제외한 활성 블록들만 추출하여 새로운 메쉬 레이어로 반환하는 역할새로운 메쉬 레이어(active_mesh)를 생성합니다. 이 레이어는 주어진 mesh_layer와 같은 블록 크기(blockSize)를 사용std::make_shared<
이 코드는 Hydra 프로젝트에서 사용하는 메쉬 인터페이스로, PgmoMeshLayerInterface와 PgmoMeshInterface 클래스를 정의이 두 클래스는 Kimera-PGMO에서 메쉬 데이터를 처리하기 위한 인터페이스를 구현 - 이 인터페이스는 메
이 함수는 메쉬 데이터를 관리하고 최신 상태로 유지하는 역할불필요한 메쉬 블록을 삭제 + 압축된 메쉬 데이터를 생성메쉬 데이터가 그래프에 제대로 반영되도록 함, object와 mesh간 변경된 연결(엣지)을 처리하여 일관성을 유지마지막으로, 후속 콜백 함수들을 실행하여
1. updateNodeInGraph updateNodeInGraph 함수와 관련된 여러 함수를 통해 * 새로 검지된 mesh를 target node의 mesh 연결 정보에 병합하고, 물체의 기하학적 속성(중심점, 경계 상자 등)을 업데이트*하는 것 전체적인 흐름 updateNodeInGraph: 노드의 업데이트 시간과 활성 상태를 갱신하고, ...
detect, updateGraph 위주로 보기MeshSegmenter는 3D 메쉬 데이터를 기반으로 특정 라벨에 대한 객체 클러스터를 탐지하고, 이를 동적 씬 그래프(DSG)에 반영하는 모듈기존 객체는 업데이트하고, 새로운 객체는 DSG에 추가하며, 동일 객체는 병합
이 코드는 2D 공간에서 장소(places)를 감지하고 그래프에 추가하는 과정을 다룹니다. 여러 단계에 걸쳐 장소를 감지하고, 특정 기준에 따라 장소를 분할하며, 최종적으로 유효한 장소들을 그래프에 반영하는 구조detect 함수는 활성화된 메시 인덱스를 기반으로 2D
이 로직은 환경의 변형을 반영한 그래프를 갱신하는 작업을 수행로봇이 탐색하는 동안 3D 메쉬 데이터의 시간 축적 변형을 기록하고, 이를 그래프 형태로 효율적으로 관리 및 압축하는 것이 핵심시간 기반 데이터 관리 과거 데이터를 주기적으로 삭제하여 성능을 최적화하고, 최
Kimera-PGMO는 로봇 위치 추정과 그래프 최적화에 유용한 라이브러리야.이 라이브러리를 프로젝트에 사용하려면:GitHub에서 클론하고 빌드하거나, CMake의 ExternalProject 기능으로 자동으로 포함할 수 있어.프로젝트 코드에서는 \*\*\`Kimer
Mesh Compression의 목적은 3D 메쉬 데이터의 중복을 제거하고 효율적으로 압축하여 저장하는 것입니다. 이를 통해 메모리 사용을 줄이고 계산 성능을 최적화하면서도 중요한 공간 정보를 유지합니다. 로봇의 SLAM(동시적 지도 작성 및 위치 추정) 작업 등에서,
그래프의 구성:그래프는 정점(Vertex)과 간선(Edge)의 집합입니다. 이 구현은 메쉬의 구조나 변형 그래프를 관리하는 데 중점을 둡니다. 각 정점은 특정 위치를 나타내며, 간선은 정점 간의 연결 관계를 정의합니다. 그래프의 활용:이 그래프는 메쉬 데이터의 압축 및
이 코드는 로봇의 위치와 경로를 관리하는 Pose Graph(포즈 그래프)를 업데이트하고 추적하는 시스템의 일부입니다. PoseGraphTracker는 실시간으로 포즈 그래프를 관리하며, 여러 그래프 요소와 외부 정보(외부 최적화 값 등)를 통합합니다. 이 구조는 로봇
에이전트의 실시간 위치와 경로를 추적하여 Pose Graph(포즈 그래프) 를 업데이트하고, 에이전트 노드를 그래프에 추가로봇의 실시간 위치와 상태를 변형 그래프와 연계이 과정에서 추가적으로 장소 노드와 에이전트 간의 연결 추가, 루프 클로저 탐지 지원과 같은 작업 수
detect()와 updateGraph() 파악을 위함
2D 및 3D 공간 내에서 유효한 장소(places)를 업데이트하고 관리활성 장소(active places)를 감지하고, 현재 활성 상태가 아닌 이전 장소들을 아카이빙(비활성화)이 작업은 DSG에 기반한 그래프의 갱신과 관련장소 간의 관계를 유지하며 에이전트(agent
이 코드는 TSDF를 기반으로 GVD(Generalized Voronoi Diagram)를 생성하고 업데이트하는 핵심적인 로직을 구현이 로직은 장애물과 자유 공간 사이의 경계를 명확히 정의하고, 로봇이 탐색할 수 있는 경로를 관리하는 데 사용돼.TSDF 블록 선택과 필
이 함수는 프론티어(Frontier) 노드를 탐지하고 그래프에 업데이트하는 역할프론티어는 알려진 영역과 미지의 영역 경계에 해당하며, 로봇의 탐색 시 중요한 위치로 간주된다. 이 함수의 목적은 로봇이 미지의 공간을 효율적으로 탐색할 수 있도록 프론티어를 감지하고 그래프
이 코드는 로봇이 탐사해야 할 경계(프론티어)를 추출하는 작업을 수행이를 바탕으로 로봇의 탐험 경로를 업데이트TSDF(Truncated Signed Distance Field) 블록을 기반으로, 이미 탐사된 공간의 블록과 그 주변 경계를 탐색processBlock()
동적 장면 그래프(Dynamic Scene Graph)의 장소(Place) 노드와 메쉬(Mesh) 포인트를 연결하는 역할을 수행이를 통해 장소와 메쉬 사이의 일관성 있는 매핑을 유지하고, 변형 정보와 레이블을 각 노드에 할당활성화된 장소(Place) 노드와 가까운 메쉬
장소(Place) 노드와 메쉬 데이터 간의 연결을 유지하고, 일치하지 않는 부분을 수정최근 메쉬 업데이트 정보와 기존의 메쉬-블록 매핑을 바탕으로 메쉬와 장소의 연속성을 유지일치하지 않는 메쉬 정보가 있는 경우 이를 탐지하고 경고 메시지를 남깁니다.PlaceMeshCo
코드에서 semantic object는 객체 레이어로 관리되며, 이를 갱신하는 역할은 UpdateObjectsFunctor가 수행합니다. 이 Functor는 아래와 같이 기본적으로 설정됩니다.이 UpdateObjectsFunctor는 callUpdateFunctions
이 함수는 메쉬(graph)와 로봇의 위치 정보(pose graph)를 동기화하고 연결하는 역할을 한다. 이 과정은 로봇이 움직이면서 수집한 메쉬 정보(3D 환경)를 로봇의 이동 경로와 통합하는데, 로봇이 환경을 정확하게 탐색하고 시각화하는 데 중요한 역할을 한다.이
로봇의 경로와 메쉬를 최신 상태로 업데이트(팩터 그래프 업데이트)하고, 루프 클로저를 감지해 경로 오류를 수정외부 정보 반영: 외부에서 받은 데이터로 그래프를 보강.증분 메쉬 그래프 처리 메쉬를 업데이트해. 새로운 데이터를 반영해 로봇의 pose와 mesh 간의 관
새로운 메쉬 노드와 엣지를 그래프에 추가메쉬 노드 간의 관계(엣지)를 정의누락된 노드나 데이터가 있으면 처리코드에서는 입력으로 주어진 메쉬 노드와 그 좌표(위치)를 그래프에 추가각 노드는 고유한 키(예: gtsam::Symbol)를 가지며, 이 키를 통해 노드의 위치와
희소 프레임(Sparse Keyframe)은 로봇의 경로나 그래프에서 모든 포즈 정보가 아닌, 중요한 위치나 상태만을 선택적으로 저장하는 개념이는 경로 최적화와 메쉬 연결을 효율적으로 수행하는 데 필수적이며, 메모리 절감과 계산 성능 향상을 동시에 달성필요한 정보만 저
sparse_frames\_는 중요한 장면만 찍는 앨범의 핵심 사진들과 같습니다.로봇의 경로에서 중요한 포즈(Keyframe)들만 선택적으로 저장하는 데이터 구조unconnected_nodes는 아직 앨범에 붙이지 못한 사진의 리스트입니다.아직 메쉬(mesh)와 연결되
증분 메쉬 그래프 처리 새로운 mesh 데이터를 반영해 로봇의 pose와 mesh 간의 관계를 유지로봇의 경로(포즈) 그래프 처리 (포즈)를 나타내는 그래프를 업데이트해. 만약 경로에서 루프 클로저(중복된 경로)가 탐지되면, 이를 인식해 기록하고, 경로 오류를 수
루프 클로저란 무엇인가?(2. 함수 개요(3. updateFromLcdQueue 함수 상세 설명( - 3.1 함수의 목적( - 3.2 루프 처리 로직( - 3.3 루프 클로저 데이터 처리(4. addLoopClosure 함수 상세 설명( - 4.1 함수의
이 글에서는 Hydra Backend 모듈 내의 copyMeshDelta 함수에 대해 자세히 알아보겠습니다. 이 함수는 들어오는 frontend 모듈의 출력값(특히 메쉬 업데이트)를 기반으로 메쉬 데이터 구조를 갱신하는 중요한 역할copyMeshDelta가 어떻게 동작
mergeGraph 함수는 현재의 DynamicSceneGraph 객체에 다른 DynamicSceneGraph 객체(other)를 병합하는 역할을 합니다.이 과정에서 두 그래프의 노드(Node), 엣지(Edge), 레이어(Layer)를 통합하여 전체적인 장면 그래프(S
이 코드는 백엔드 모듈(BackendModule)에서 프라이빗 DSG(private Dynamic Scene Graph)를 업데이트하는 과정을 다루고 있습니다. 프론트엔드에서 전달된 최신 그래프 정보를 백엔드의 내부 그래프에 안전하게 병합업데이트 최적화: force_u
BackendModule::optimize 메서드는 백엔드 모듈에서 메쉬 변형과 그래프 최적화를 통해 시스템의 정확도와 일관성을 유지이 메서드는 루프 클로저가 감지되었을 때 호출되며, 다음과 같은 주요 작업을 수행합니다: 변형 그래프에 장소 노드 추가변형 그래프 최적화
BackendModule 클래스의 optimize 메서드는 로봇 시스템에서 메쉬 변형(Mesh Deformation)과 그래프 최적화(Graph Optimization)를 수행하는 핵심 함수입니다. 이 함수는 루프 클로저(Loop Closure)가 감지되었을 때 호출되
Deformation Graph(변형 그래프)는 3D 메쉬 또는 포인트 클라우드의 변형을 효율적으로 표현하고 계산하기 위한 그래프 구조입니다. 이 그래프는 Control Points(제어점)와 이들 간의 연결로 구성되며, 메쉬 변형을 위한 공간적 제약과 변형 전파를 용
spinOnceImpl 메서드를 중점적으로 보면 됨src/loop_closure/detector.cpp 도 참고해야함LoopClosureModule::spinOnceImpl 메서드는 Hydra 시스템에서 루프 클로저 검출을 수행하는 핵심 구성 요소입니다. 그 주요 로직
최적화 여부 결정: 루프 클로저가 감지되고 최적화를 위한 설정이 활성화되어 있으면 최적화를 수행합니다. optimize 메서드 실행addPlacesToDeformationGraph그래프 최적화updateDsgMeshDSG에 mesh 업데이트callUpdateFuncti
정의: shared_dsg는 시스템 내 여러 모듈(예: 프론트엔드, 루프 클로저 모듈 등)이 공유하는 동적 장면 그래프(Dynamic Scene Graph, DSG)입니다.역할:데이터 공유 및 동기화: 여러 모듈 간 환경 정보의 공유와 최신 상태 유지를 위해 사용됩니다
Hydra에서 기본적으로 지원하는 데이터셋은 uHumans2 하나뿐입니다. Hydra를 테스트하려면, 간단히 하나의 장면(사람 없는 사무실 장면을 권장)을 다운로드하면 되며, 해당 링크는 여기에 있습니다.rosbag 파일을 실행하기 전에 반드시 압축 해제(rosbag
https://github.com/MIT-SPARK/Hydra/blob/main/python/README.md 1. 설치 방법 Hydra가 catkin을 통해 정상적으로 빌드되는지 확인합니다. https://velog.io/@jk01019/hydra-build 가상 환경을 만듭니다 (venv 또는 원하는 도구를 사용할 수 있습니다): virtualenv...
이 명령어는 catkin_ws라는 작업 공간(workspace)을 만들고, 그 안에 src라는 소스 코드 폴더를 만듦catkin_ws는 ROS에서 프로젝트 파일을 관리하는 기본 폴더 catkin init 명령어는 catkin_ws 작업 공간을 초기화하는 과정ROS는 c
이번 글에서는 Hydra의 Scene Graph Backend가 어떻게 작동하는지, 특히 루프 클로저(loop closure)가 발생한 후 장면 그래프를 어떻게 최적화하는지에 대해 알아보겠습니다. 루프 클로저와 Scene Graph Backend의 역할Embedded