Booil Jung

nvblox_nav2에 대한 심층 고찰

자율 이동 로봇(AMR)의 핵심 기술인 내비게이션은 지난 수십 년간 2D LiDAR(Light Detection and Ranging) 센서에 크게 의존해왔다. 2D LiDAR는 수평면상의 장애물 정보를 정확하고 빠르게 제공하여 2차원 평면에서의 경로 계획과 장애물 회피에 효과적이었다. 그러나 현실 세계는 3차원이며, 테이블 모서리, 선반, 계단, 경사로와 같이 2D 평면 스캔만으로는 감지하기 어려운 복잡한 구조물로 가득 차 있다. 이러한 3차원적 장애물은 2D LiDAR 기반 로봇에게 심각한 항해 실패나 충돌의 원인이 될 수 있다. 이와 같은 한계를 극복하기 위해 깊이 카메라(Depth Camera)나 3D LiDAR와 같은 센서를 활용하여 환경을 3차원으로 인식하고, 이를 기반으로 내비게이션을 수행하려는 연구가 활발히 진행되어 왔다.1

3차원 환경 인식은 데이터의 양과 처리의 복잡성 때문에 막대한 계산 자원을 요구한다. 전통적인 CPU 기반 시스템으로는 실시간으로 고밀도의 3D 맵을 생성하고 경로를 계획하는 데 명백한 한계가 존재했다.2 바로 이 지점에서 GPU(Graphics Processing Unit) 기술의 발전이 로봇 공학, 특히 인식(perception) 및 맵핑(mapping) 분야에 혁신적인 변화를 가져왔다. 대규모 병렬 처리에 특화된 GPU는 방대한 양의 3D 센서 데이터를 실시간으로 처리하여, 과거에는 불가능했던 복잡한 환경에서의 강건하고 안전한 자율 주행을 가능하게 하는 핵심 동력이 되었다.3

이러한 기술적 흐름의 중심에 NVIDIA가 있다. NVIDIA는 자사의 강력한 GPU 하드웨어와 CUDA 병렬 컴퓨팅 플랫폼을 기반으로 로봇 개발을 가속화하기 위한 포괄적인 소프트웨어 개발 키트인 Isaac ROS(Robot Operating System)를 구축했다.5 Isaac ROS는 고성능, 저지연의 ROS 2 패키지 및 AI 모델의 집합체로서, 로봇 개발자들이 복잡한 AI 기반 인식 알고리즘을 보다 쉽게 자신의 로봇에 통합할 수 있도록 지원한다.6

Isaac ROS 생태계 내에서 nvblox는 실시간 3D 장면 재구성 및 동적 장애물 회피를 위한 핵심 구성요소, 즉 ‘GEM(Isaac ROS Hardware-Accelerated Package)’으로서 중요한 위치를 차지한다.5

nvblox는 깊이 센서로부터 입력받은 데이터를 GPU 가속을 통해 실시간으로 3D 맵으로 재구성하고, 이를 로봇 내비게이션 스택인 Nav2와 연동하여 동적인 환경에서도 안전하게 경로를 계획하고 주행할 수 있도록 지원한다.

nvblox와 이를 Nav2에 통합하는 nvblox_nav2 패키지에 대한 정보는 공식 문서, 학술 논문, 개발자 포럼, 소스 코드 등 다양한 곳에 흩어져 있다. 이로 인해 개발자나 연구자가 전체 시스템을 체계적으로 이해하고 실제 프로젝트에 적용하는 데 어려움을 겪는 경우가 많다.

따라서 본 보고서는 이러한 단편적인 정보들을 종합하고, 기술적 원리부터 실제 적용까지의 전 과정을 심층적으로 분석하여 하나의 통일되고 포괄적인 기술 문서를 제공하는 것을 목표로 한다. 본 보고서를 통해 독자는 nvblox_nav2의 아키텍처, 핵심 알고리즘인 TSDF(Truncated Signed Distance Field)와 ESDF(Euclidean Signed Distance Field)의 원리, 시스템 구축 방법, 하드웨어별 성능 특성, 그리고 OctoMap과 같은 다른 기술과의 비교 분석을 통해 명확하고 실용적인 이해를 얻게 될 것이다.

nvblox는 근본적으로 로봇 애플리케이션, 특히 경로 계획을 위해 설계된 실시간 3D 재구성 및 맵핑 라이브러리이다.3 이 라이브러리의 핵심 기능은 깊이 카메라나 3D LiDAR로부터 들어오는 센서 데이터 스트림과 로봇의 위치 추정값(pose)을 입력받아, 주변 환경을 복셀(voxel) 기반의 3D 맵으로 구축하는 것이다.8

nvblox는 단순히 3D 모델을 만드는 것을 넘어, 두 가지 중요한 결과물을 실시간으로 출력한다. 첫째는 RViz와 같은 시각화 도구에서 확인할 수 있는 3D 메시(mesh)이고, 둘째는 로봇의 경로 계획기가 장애물 회피에 직접 사용할 수 있는 2D 코스트맵(cost map)이다.10

nvblox의 가장 큰 특징은 이 모든 복잡한 연산 과정을 NVIDIA GPU 상에서 CUDA를 활용하여 병렬로 처리한다는 점이다. 이를 통해 고성능 데스크톱 GPU뿐만 아니라 NVIDIA Jetson과 같은 임베디드 시스템에서도 실시간 성능을 보장하며, 이는 자율 이동 로봇에 탑재되어 현장에서 동작해야 하는 실제적인 요구사항을 충족시킨다.2

nvblox의 아키텍처는 의도적으로 모듈화되어 있어 유연성과 확장성을 극대화한다. 시스템은 크게 두 부분으로 구성된다.4

  1. nvblox 코어 라이브러리: 순수한 C++로 작성된 프레임워크 독립적인 라이브러리이다. 여기에는 TSDF/ESDF 맵핑, 메시 생성 등 핵심 알고리즘이 모두 구현되어 있다. ROS에 대한 의존성이 없기 때문에, 개발자는 이 코어 라이브러리만 가져와 ROS가 아닌 다른 로봇 프레임워크나 독자적인 시스템에 통합할 수 있다.3
  2. isaac_ros_nvblox ROS 2 래퍼: nvblox 코어 라이브러리를 ROS 2 환경에서 쉽게 사용할 수 있도록 감싼 메타패키지이다. 이 패키지는 ROS의 표준 통신 방식인 토픽(topic)과 서비스(service)를 통해 nvblox의 기능을 노출시킨다. isaac_ros_nvblox는 다시 여러 개의 하위 패키지로 나뉜다 11:
    • nvblox_ros: 코어 라이브러리를 ROS 2 노드(nvblox_node, nvblox_human_node)로 만드는 핵심 래퍼.
    • nvblox_nav2: nvblox가 생성한 맵을 Nav2 내비게이션 스택의 코스트맵 레이어로 통합하는 플러그인.
    • nvblox_msgs: DistanceMapSlice, Meshnvblox에서 사용하는 커스텀 ROS 메시지를 정의.
    • nvblox_rviz_plugin: RViz에서 nvblox의 메시와 맵 슬라이스를 효율적으로 시각화하기 위한 플러그인.

이러한 다층적 구조는 각 구성요소의 역할을 명확히 분리하여 유연성을 확보하려는 설계 철학을 반영한다. 사용자는 필요에 따라 전체 스택을 사용하거나, 특정 부분만 선택하여 자신의 시스템에 맞게 수정 및 확장할 수 있다.

nvblox가 동작하는 전체 데이터 처리 파이프라인은 다음과 같은 단계로 이루어진다.

nvblox를 이용한 일반적인 내비게이션 시스템은 여러 ROS 노드들이 유기적으로 연동하여 구성된다.

이처럼 nvblox_nav2는 단일 패키지가 아닌, 센서 드라이버, SLAM, 맵핑, 경로 계획 등 여러 모듈이 긴밀하게 연결된 복잡한 시스템의 일부로 동작한다. 각 구성 요소 간의 데이터 흐름과 의존 관계를 명확히 이해하는 것이 시스템 구축과 문제 해결의 핵심이다.

Table 1: Nvblox 주요 ROS 노드 및 토픽/서비스

구분 (Category) 이름 (Name) 메시지/서비스 타입 (Type) 설명 (Description) 출처 (Source)
구독 토픽 depth/image sensor_msgs/Image 통합할 깊이 이미지. 픽셀 값은 미터 단위의 부동소수점 또는 밀리미터 단위의 uint16 형식 지원. 14
  depth/camera_info sensor_msgs/CameraInfo 깊이 카메라의 내부 파라미터. depth/image와 쌍으로 필요. 14
  color/image sensor_msgs/Image (선택) 메쉬에 색상을 입히기 위한 컬러 이미지. 14
  color/camera_info sensor_msgs/CameraInfo (선택) 컬러 카메라의 내부 파라미터. 14
  pointcloud sensor_msgs/PointCloud2 3D LiDAR 포인트 클라우드 입력. 내부적으로 깊이 이미지로 변환됨. 14
  pose geometry_msgs/PoseStamped 로봇의 오도메트리 정보. use_tf_transforms가 false일 때 사용. 14
발행 토픽 ~/map_slice nvblox_msgs/DistanceMapSlice 정적 ESDF의 2D 슬라이스. nvblox_nav2 플러그인이 Nav2 코스트맵 생성을 위해 소비. 15
  ~/human_map_slice nvblox_msgs/DistanceMapSlice (nvblox_human_node 전용) 사람 ESDF의 2D 슬라이스. 15
  ~/combined_map_slice nvblox_msgs/DistanceMapSlice (nvblox_human_node 전용) 정적 맵과 사람 맵을 결합한 2D 슬라이스. 15
  ~/mesh nvblox_msgs/Mesh 시각화를 위한 3D 메시. 실시간으로 업데이트되는 부분만 스트리밍. 11
  ~/static_occupancy sensor_msgs/PointCloud2 정적 점유 격자 맵을 포인트 클라우드 형태로 발행. 18
제공 서비스 ~/save_ply nvblox_msgs/srv/FilePath 현재 재구성된 메시를 PLY 파일 형식으로 저장. 15
  ~/save_map nvblox_msgs/srv/FilePath nvblox의 내부 맵 레이어(TSDF, ESDF 등)를 파일로 직렬화하여 저장. 15
  ~/load_map nvblox_msgs/srv/FilePath 저장된 맵 파일을 불러와 현재 맵 상태를 복원. 15

nvblox의 성능과 기능은 두 가지 핵심적인 3D 공간 표현 방식, 즉 Truncated Signed Distance Field (TSDF)와 Euclidean Signed Distance Field (ESDF)에 기반한다. 이 두 알고리즘의 원리를 이해하는 것은 nvblox를 깊이 있게 파악하는 데 필수적이다.

SDF는 특정 표면을 기준으로 공간상의 모든 점의 위치 관계를 표현하는 수학적 함수이다. 공간상의 한 점 $x$에서 어떤 집합 $\Omega$(예: 3D 객체)의 경계 $\partial\Omega$까지의 부호 있는 최단 거리를 값으로 갖는다.19

일반적으로 사용되는 관례에 따르면, 점 $x$가 객체 내부($\Omega$)에 있으면 양수, 외부에 있으면 음수, 그리고 경계면에 정확히 위치하면 0의 값을 가진다.19 (반대의 부호 관례를 사용하기도 한다.) 이를 수학적으로 표현하면 다음과 같다. \(f(x) = \begin{cases} d(x, \partial\Omega) & \text{if } x \in \Omega \\ 0 & \text{if } x \in \partial\Omega \\ -d(x, \partial\Omega) & \text{if } x \notin \Omega \end{cases}\) 여기서 $d(x, \partial\Omega)$는 점 $x$에서 경계 $\partial\Omega$까지의 최단 유클리드 거리를 의미한다. SDF는 표면의 위치뿐만 아니라 표면으로부터의 거리와 내/외부 정보를 모두 포함하므로, 단순한 점유/비점유 정보만 갖는 점유 격자(occupancy grid)보다 훨씬 풍부한 정보를 제공한다.

TSDF는 SDF의 개념을 실제 센서 데이터 기반의 3D 재구성에 적용하기 위해 실용적으로 변형한 것이다.

TSDF가 환경의 ‘표면’을 정밀하게 표현하는 데 중점을 둔다면, ESDF는 그 표면을 기반으로 ‘안전한 공간’을 탐색하는 데 최적화된 표현 방식이다.

이처럼 TSDF와 ESDF는 ‘표면 재구성’과 ‘경로 계획’이라는 상호 보완적인 두 가지 목적을 위해 설계된 이중적 표현(dual representation) 전략이다. TSDF가 센서 데이터를 융합하여 ‘무엇이 어디에 있는가’에 대한 가장 정확한 모델을 만드는 데 최적화되어 있다면, ESDF는 이 모델을 기반으로 ‘어떻게 안전하게 움직일 것인가’에 대한 탐색 정보를 가공하는 역할을 한다. nvblox는 이 2단계 프로세스 전체를 GPU로 가속하여 실시간으로 만들었다는 점에서 기술적 혁신을 이루었다.

nvblox_nav2를 성공적으로 구동하기 위해서는 올바른 하드웨어 및 소프트웨어 환경을 구축하고, 애플리케이션에 맞게 주요 파라미터를 설정하는 과정이 필수적이다.

nvblox는 특정 버전의 소프트웨어 스택과 고성능 하드웨어에 강하게 의존한다.

nvblox를 설치하는 방법은 크게 두 가지가 있으며, NVIDIA는 Docker 기반 설치를 강력히 권장한다.

nvblox의 동작은 ROS 파라미터를 통해 세밀하게 제어된다. 이 파라미터들은 주로 nvblox_examples_bringup/config/ 디렉토리 내의 YAML 파일(nvblox_base.yamlspecializations/*.yaml)을 통해 설정된다.37 주요 파라미터의 의미와 역할은 다음과 같다.

이 외에도 수십 개의 파라미터가 존재하며, 이를 통해 센서 모델, 통합 가중치, 동적 객체 처리 방식 등을 미세하게 조정할 수 있다. 성공적인 nvblox 적용을 위해서는 이러한 파라미터들의 의미를 정확히 이해하고, 자신의 로봇과 주행 환경에 맞게 튜닝하는 과정이 필수적이다.

Table 2: 주요 YAML 설정 파라미터 및 역할

파라미터 이름 (Parameter Name) 타입 (Type) 기본값 (Default) 역할 및 튜닝 가이드 (Role & Tuning Guidance) 출처 (Source)
voxel_size float 0.05 맵의 해상도(m). 작을수록 정밀하지만 메모리/연산량 증가. 환경의 복잡도와 시스템 성능 간의 트레이드오프를 통해 결정. 37
global_frame string "odom" 맵의 기준이 되는 TF 프레임. 전역 SLAM과 연동 시 "map"으로 변경. 37
use_tf_transforms bool true true이면 TF 트리에서 포즈를 조회하고, false이면 토픽으로 포즈를 구독. 37
esdf_mode int 1 ESDF 계산 모드. 0은 3D, 1은 2D. Nav2 연동 시 1로 설정. 39
esdf_slice_height float 0.0 2D ESDF 슬라이스를 추출할 높이(m). 로봇의 주행 평면에 맞게 설정. -
max_depth_update_hz float 10.0 깊이 이미지를 통합하는 최대 주기(Hz). 0은 제한 없음. 시스템 부하를 줄이려면 낮춤. 37
update_esdf_rate_hz float - ESDF 맵을 업데이트하는 주기(Hz). 동적 장애물 반응성을 높이려면 값을 높임. 40
map_clearing_radius_m float -1.0 로봇 주변 일정 반경(m) 밖의 맵을 삭제. 양수 값으로 활성화. 로컬 맵핑에 유용. 37
map_clearing_frame_id string "base_link" 맵 클리어링의 중심이 되는 TF 프레임. 37
use_static_occupancy_layer bool false true로 설정 시 TSDF 대신 점유 격자(Occupancy) 맵을 사용. 37
projective_integrator.max_integration_distance_m float 7.0 센서로부터 이 거리(m)를 초과하는 측정값은 무시. 센서의 유효 거리에 맞춰 조정. -
projective_integrator.truncation_distance_vox float 4.0 TSDF 절단 거리를 복셀 단위로 지정. 값이 크면 더 두꺼운 표면이 생성되나 노이즈에 취약해질 수 있음. -

nvblox의 가장 큰 가치는 그 성능에 있으며, 이는 NVIDIA GPU의 병렬 처리 능력을 극대화한 결과이다. 이 섹션에서는 nvblox의 성능을 정량적으로 분석하고, 다양한 환경과 요구사항에 맞춰 성능을 최적화하는 전략을 논한다.

nvblox는 스위스 취리히 연방 공과대학교(ETH Zurich)에서 개발한 CPU 기반의 선구적인 실시간 3D 맵핑 라이브러리인 voxblox의 알고리즘적 유산을 계승한다.2

voxblox는 TSDF와 ESDF를 점진적으로 구축하는 효율적인 방법을 제시했지만, 모든 연산을 CPU에서 순차적으로 처리했기 때문에 맵의 해상도나 업데이트 주기에 명백한 한계가 있었다.2

nvbloxvoxblox의 핵심 아이디어를 가져와 모든 계산 파이프라인을 GPU에서 병렬로 실행하도록 재설계했다.3 그 결과는 극적인 성능 향상으로 나타났다. 학술 논문[2311.00626]에 발표된 벤치마크 결과에 따르면,

nvblox는 CPU 기반의 최신 방법들과 비교했을 때, 표면 재구성(TSDF 통합)에서 최대 177배, 그리고 경로 계획에 필수적인 거리장 계산(ESDF 생성)에서 최대 31배의 속도 향상을 달성했다.2

이러한 압도적인 성능 향상은 단순한 속도 개선 이상의 의미를 가진다. 이는 CPU 기반 시스템에서는 실시간 처리가 불가능했던 높은 해상도(예: 5cm 이하)의 맵을 실시간으로 구축하고 업데이트하는 것을 가능하게 하여, 로봇이 더 정밀하게 환경을 인식하고 더 안전하게 항해할 수 있는 길을 열었다.2

nvblox의 성능은 사용되는 GPU의 사양에 직접적으로 비례한다. NVIDIA는 다양한 하드웨어 플랫폼에서의 성능 측정 결과를 제공하여, 개발자가 자신의 시스템에서 기대할 수 있는 성능 수준을 가늠할 수 있도록 돕는다.11

예를 들어, Replica 데이터셋과 5cm 복셀 크기를 기준으로 한 벤치마크에서 각 처리 단계별 소요 시간은 다음과 같이 측정되었다 11:

이 결과는 하이엔드 데스크톱 GPU와 임베디드 GPU 간의 명확한 성능 차이를 보여주며, 애플리케이션의 실시간 요구사항과 예산에 맞춰 적절한 하드웨어를 선택하는 것이 중요함을 시사한다.

또한, isaac_ros_nvblox 패키지에는 nvblox_performance_measurement라는 성능 측정 도구가 포함되어 있다. 이 도구를 사용하면 특정 ROS Bag 파일을 재생하면서 nvblox 노드의 처리율(Hz), 메시지 지연 시간, 그리고 CPU 및 GPU 점유율과 같은 핵심 성능 지표(KPI)를 직접 측정하고 분석할 수 있다.41

실제 환경에는 정적인 장애물뿐만 아니라 사람, 다른 로봇과 같은 동적 장애물이 존재한다. nvblox는 이러한 동적 환경에 대응하기 위해 여러 가지 작동 모드를 제공한다.

nvblox의 성능을 특정 애플리케이션에 맞게 최적화하기 위한 몇 가지 전략이 있다.

Table 3: 플랫폼별 Nvblox 성능 벤치마크 (Replica 데이터셋, 5cm 복셀 기준)

처리 단계 (Component) x86_64 w/ RTX 3090 (Desktop) x86_64 w/ RTX A3000 (Laptop) AGX Orin (Jetson) Orin Nano (Jetson)
TSDF 통합 0.5 ms 0.3 ms 0.8 ms 2.1 ms
컬러 통합 0.7 ms 0.7 ms 1.1 ms 3.6 ms
메시 생성 0.7 ms 1.3 ms 2.3 ms 13.0 ms
ESDF 생성 0.8 ms 1.2 ms 1.7 ms 6.2 ms
동적 객체 처리 1.7 ms 1.4 ms 2.0 ms N/A

주: 위 표는 NVIDIA에서 제공한 벤치마크 결과를 재구성한 것임.11 처리 시간은 평균값이며, 실제 성능은 장면에 따라 달라질 수 있음. Orin Nano는 동적 객체 처리 모드를 지원하지 않을 수 있음.

nvblox의 기술적 가치를 명확히 이해하기 위해서는 기존의 내비게이션 및 3D 맵핑 기술들과의 비교가 필수적이다. 이 섹션에서는 nvblox를 전통적인 2D 내비게이션, 널리 사용되는 3D 맵핑 라이브러리인 OctoMap, 그리고 nvblox와 함께 사용되는 SLAM 시스템과 비교 분석한다.

nvblox와 OctoMap은 3D 환경을 복셀 기반으로 표현한다는 공통점이 있지만, 그 철학과 구현 방식에는 근본적인 차이가 있다.

결론적으로, nvblox와 OctoMap의 비교는 단순히 두 라이브러리의 성능 비교를 넘어선다. 이는 로봇 맵핑에 대한 두 가지 다른 철학의 대립으로 볼 수 있다. OctoMap이 ‘센서 측정의 불확실성을 확률적으로 어떻게 모델링할 것인가’에 집중한다면, nvblox는 ‘압도적인 계산 능력을 바탕으로 경로 계획에 더 유용한 표현(거리장)을 어떻게 실시간으로 만들 것인가’에 집중한다. 이 선택은 로봇 시스템 전체의 아키텍처와 성능에 근본적인 영향을 미친다.

nvblox는 맵핑 라이브러리일 뿐, 스스로 로봇의 위치를 추정하지 않는다. 따라서 isaac_ros_visual_slam이나 ORB-SLAM3과 같은 외부 SLAM 시스템으로부터 정확한 포즈 정보를 실시간으로 공급받는 것이 필수적이다.

nvblox와 어떤 SLAM 시스템을 조합할 것인가는 애플리케이션의 요구사항에 따라 결정된다. 최고의 실시간 성능과 NVIDIA 생태계 내에서의 완벽한 통합을 원한다면 isaac_ros_visual_slam이, 장시간에 걸친 전역적 맵 정확성과 학술적 검증이 더 중요하다면 ORB-SLAM3이 더 적합한 선택이 될 수 있다.

Table 4: Nvblox vs. OctoMap 기술 비교

특징 (Feature) Nvblox OctoMap
데이터 표현 부호 있는 거리 필드 (Signed Distance Field) 점유 확률 (Occupancy Probability)
자료 구조 해시 기반 복셀 블록 (Hashed Voxel Blocks) 옥트리 (Octree)
주 처리 장치 GPU (NVIDIA) CPU
맵 품질 서브-복셀 정밀도의 연속적인 표면, 고품질 메시 생성 이산적인 복셀, 계단 현상 발생
경로 계획 적합성 ESDF를 통해 장애물까지의 거리/그래디언트 직접 제공, 최적화 기반 계획에 매우 유리 점유/비점유 정보만 제공, 거리 기반 계획에 부적합
동적 환경 처리 시맨틱 분할(사람) 또는 확률 소멸(decay) 방식 지원 확률적 업데이트를 통해 자연스럽게 처리
메모리 효율성 관측된 영역만 할당하여 효율적 넓은 빈 공간/점유 공간을 압축하는 데 유리
성능 GPU 가속으로 매우 빠른 실시간 맵 업데이트 가능 CPU 기반으로 상대적으로 느림

nvblox는 강력한 성능과 기능을 제공하지만, 실제 로봇에 성공적으로 적용하기 위해서는 몇 가지 시나리오와 기술적 과제, 그리고 내재적 한계를 이해해야 한다.

NVIDIA는 개발자들이 nvblox를 쉽게 시작하고 테스트할 수 있도록 다양한 예제와 튜토리얼을 제공한다.

nvblox를 실제 시스템에 통합하는 과정에서 개발자들은 몇 가지 공통적인 문제에 직면할 수 있다.

nvblox는 매우 강력한 도구이지만, 모든 문제를 해결하는 만능 솔루션은 아니며 몇 가지 명확한 한계를 가지고 있다.

nvblox와 이를 Nav2에 통합하는 nvblox_nav2 패키지는 현대 로봇 내비게이션이 직면한 핵심적인 도전 과제, 즉 복잡하고 동적인 3차원 환경에서의 실시간 인식 및 경로 계획에 대한 NVIDIA의 강력한 해답이다. 이 기술은 NVIDIA GPU의 압도적인 병렬 처리 능력을 활용하여, 기존의 CPU 기반 시스템으로는 불가능했던 수준의 성능과 정밀도를 달성했다.

nvblox_nav2의 핵심적인 기술적 기여는 두 가지로 요약할 수 있다. 첫째, 고품질의 3D 표면 재구성을 위한 TSDF와 경로 계획에 즉시 사용 가능한 ESDF를 실시간으로 동시에 생성함으로써, 로봇의 ‘인식(Perception)’과 ‘계획(Planning)’ 사이의 간극을 효과적으로 메웠다. 둘째, 시맨틱 분할과 확률 소멸 기법을 도입하여 정적인 환경뿐만 아니라 사람이 오가는 동적인 환경에서도 강건하게 동작할 수 있는 기반을 마련했다.

본 보고서에서 분석한 내용을 종합하면 nvblox_nav2의 장단점은 다음과 같다.

이러한 특성을 고려할 때, nvblox_nav2는 다음과 같은 분야에 가장 효과적으로 적용될 수 있다.

nvblox는 정체된 프로젝트가 아니며, NVIDIA의 로보틱스 전략의 핵심 축으로서 지속적으로 발전하고 있다.

결론적으로 nvblox_nav2는 로봇 내비게이션 기술의 패러다임을 2D에서 3D로, CPU에서 GPU로 전환시키는 중요한 이정표이며, NVIDIA의 지속적인 투자와 개발 로드맵을 통해 그 영향력은 앞으로 더욱 확대될 것으로 전망된다.

  1. Towards Next-Gen Autonomous Mobile Robotics: A Technical Deep Dive into Visual-Data-Driven AMRs Powered by Kudan Visual SLAM and NVIDIA Isaac Perceptor, 8월 9, 2025에 액세스, https://www.kudan.io/blog/a-technical-deep-dive-into-visual-data-driven-amrs-powered-by-kdvisual-and-nvidia-isaac-perceptor/
  2. nvblox: GPU-Accelerated Incremental Signed Distance Field Mapping - arXiv, 8월 9, 2025에 액세스, https://arxiv.org/html/2311.00626v2
  3. nvidia-isaac/nvblox: A GPU-accelerated TSDF and ESDF library for robots equipped with RGB-D cameras. - GitHub, 8월 9, 2025에 액세스, https://github.com/nvidia-isaac/nvblox
  4. AMR navigation using Isaac ROS VSLAM and Nvblox with Intel Realsense camera, 8월 9, 2025에 액세스, https://www.einfochips.com/amr-navigation-using-isaac-ros-vslam-and-nvblox-with-intel-realsense-camera/
  5. Isaac ROS (Robot Operating System) - NVIDIA Developer, 8월 9, 2025에 액세스, https://developer.nvidia.com/isaac/ros
  6. NVIDIA ROS 2 Projects - ROS 2 Documentation: Humble documentation, 8월 9, 2025에 액세스, https://ftp.udx.icscoe.jp/ros/ros_docs_mirror/en/humble/Related-Projects/Nvidia-ROS2-Projects.html
  7. NVIDIA ROS 2 Projects - ROS 2 Documentation: Humble documentation, 8월 9, 2025에 액세스, https://docs.ros.org/en/humble/Related-Projects/Nvidia-ROS2-Projects.html
  8. nvidia-isaac-ros.github.io, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/concepts/scene_reconstruction/nvblox/index.html#:~:text=Nvblox%20is%20a%20library%20for,for%20use%20in%20path%20planning.
  9. Nvblox - SoftwareOne Marketplace, 8월 9, 2025에 액세스, https://platform.softwareone.com/product/nvblox/PCP-2427-1474
  10. Nvblox - isaac_ros_docs documentation - NVIDIA Isaac ROS, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/concepts/scene_reconstruction/nvblox/index.html
  11. Isaac ROS Nvblox - isaac_ros_docs documentation, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/index.html
  12. [2311.00626] nvblox: GPU-Accelerated Incremental Signed Distance Field Mapping - arXiv, 8월 9, 2025에 액세스, https://arxiv.org/abs/2311.00626
  13. AMR Navigation Using Isaac ROS VSLAM and Nvblox with Intel …, 8월 9, 2025에 액세스, https://www.einfochips.com/blog/amr-navigation-using-isaac-ros-vslam-and-nvblox-with-intel-realsense-camera/
  14. NVIDIA-Isaac-ROS-Nvblox/docs/topics-and-services.md at main - GitHub, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox/blob/main/docs/topics-and-services.md
  15. Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox - GitHub, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox
  16. How to run nvblox sample with isaac_sim-2022.2.0? - Isaac ROS, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/how-to-run-nvblox-sample-with-isaac-sim-2022-2-0/237806
  17. Isaac ROS March update, vision based navigation - ROS Discourse - Open Robotics, 8월 9, 2025에 액세스, https://discourse.openrobotics.org/t/isaac-ros-march-update-vision-based-navigation/24816
  18. Repo for the modified NvBlox package for mapping in ROS 2. - GitHub, 8월 9, 2025에 액세스, https://github.com/arplaboratory/nvblox
  19. Signed distance function - Wikipedia, 8월 9, 2025에 액세스, https://en.wikipedia.org/wiki/Signed_distance_function
  20. Truncated Signed Distance Function by Simsangcheol Medium, 8월 9, 2025에 액세스, https://medium.com/@sim30217/truncated-signed-distance-function-f765a0f1d432
  21. Understanding Real Time 3D Reconstruction and KinectFusion - ITNEXT, 8월 9, 2025에 액세스, https://itnext.io/understanding-real-time-3d-reconstruction-and-kinectfusion-33d61d1cd402
  22. DFusion: Denoised TSDF Fusion of Multiple Depth Maps with Sensor Pose Noises - MDPI, 8월 9, 2025에 액세스, https://www.mdpi.com/1424-8220/22/4/1631
  23. Truncated Signed Distance Fields Applied To Robotics - DiVA portal, 8월 9, 2025에 액세스, https://www.diva-portal.org/smash/get/diva2:1136113/FULLTEXT01.pdf
  24. Voxblox: Incremental 3D Euclidean Signed Distance Fields for On-Board MAV Planning - Helen Oleynikova, 8월 9, 2025에 액세스, https://helenol.github.io/publications/iros_2017_voxblox.pdf
  25. When creating a TSDF from point cloud data, how do you determine the nearest “surface”?, 8월 9, 2025에 액세스, https://www.reddit.com/r/computervision/comments/1bcim0h/when_creating_a_tsdf_from_point_cloud_data_how_do/
  26. Technical Details - isaac_ros_docs documentation - NVIDIA Isaac ROS, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/concepts/scene_reconstruction/nvblox/technical_details.html
  27. Signed Distance Fields: A Natural … - Helen Oleynikova, 8월 9, 2025에 액세스, https://helenol.github.io/publications/rss_2016_workshop.pdf
  28. Signed Distance Fields: A Natural Representation for Both Mapping and Planning - Research Collection, 8월 9, 2025에 액세스, https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/128029/eth-50477-01.pdf
  29. How Does ESDF Generation Work? - voxblox documentation - Read the Docs, 8월 9, 2025에 액세스, https://voxblox.readthedocs.io/en/latest/pages/How-Does-ESDF-Generation-Work.html
  30. Use Nvblox with Nav2 Rolling - Isaac ROS - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/use-nvblox-with-nav2-rolling/271374
  31. Ros-humble-isaac-ros-nvblox and isaac-ros-nvblox packages have hard dependency on Nvidia driver 560? - Isaac ROS - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/ros-humble-isaac-ros-nvblox-and-isaac-ros-nvblox-packages-have-hard-dependency-on-nvidia-driver-560/340693
  32. README.md - nvidia-isaac/nvblox - GitHub, 8월 9, 2025에 액세스, https://github.com/nvidia-isaac/nvblox/blob/public/README.md
  33. Can not build ‘nvblox ros ‘issac ros nvblox - Isaac ROS - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/can-not-build-nvblox-ros-issac-ros-nvblox/300565
  34. Learning NVidia Isaac ROS2 - Part 1 - Dev Setup by RoboFoundry - Medium, 8월 9, 2025에 액세스, https://robofoundry.medium.com/learning-nvidia-isaac-ros2-part-1-dev-setup-0e54a3325082
  35. isaac_ros_nvblox - isaac_ros_docs documentation, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox/index.html
  36. Install the Isaac ROS Seeed Studio Wiki, 8월 9, 2025에 액세스, https://wiki.seeedstudio.com/install_isaacros/
  37. NVIDIA-Isaac-ROS-Nvblox/docs/parameters.md at main / Tinker …, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox/blob/main/docs/parameters.md
  38. Changing launch parameters for nvblox realsense example - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/changing-launch-parameters-for-nvblox-realsense-example/336623
  39. Nvidia Isaac ROS Nvblox, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/nvidia-isaac-ros-nvblox/311053
  40. Using vSLAM + NVBLOX + Robot Localization - Isaac ROS - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/using-vslam-nvblox-robot-localization/336509
  41. NVIDIA-Isaac-ROS-Nvblox/nvblox_performance_measurement/README.md at main, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox/blob/main/nvblox_performance_measurement/README.md
  42. Isaac ROS VSLAM and Nvblox - how to change internal parameters, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/isaac-ros-vslam-and-nvblox-how-to-change-internal-parameters/306635
  43. nvblox/release-notes.md at public - GitHub, 8월 9, 2025에 액세스, https://github.com/nvidia-isaac/nvblox/blob/public/release-notes.md
  44. What’s the realistic maximum size this can run on an Orin? / Issue #96 / NVIDIA-ISAAC-ROS/isaac_ros_nvblox - GitHub, 8월 9, 2025에 액세스, https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox/issues/96
  45. Octomap comparison. / Issue #28 / ethz-asl/voxgraph - GitHub, 8월 9, 2025에 액세스, https://github.com/ethz-asl/voxgraph/issues/28
  46. VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor Data - MDPI, 8월 9, 2025에 액세스, https://www.mdpi.com/1424-8220/22/3/1296
  47. Isaac ROS Visual SLAM - isaac_ros_docs documentation, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_visual_slam/index.html
  48. Difference between vslam launched using isaac_ros_examples v/s isaac_ros_visual_slam - Isaac ROS - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/difference-between-vslam-launched-using-isaac-ros-examples-v-s-isaac-ros-visual-slam/333663
  49. [2007.11898] ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM - arXiv, 8월 9, 2025에 액세스, https://arxiv.org/abs/2007.11898
  50. UZ-SLAMLab/ORB_SLAM3: ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM - GitHub, 8월 9, 2025에 액세스, https://github.com/UZ-SLAMLab/ORB_SLAM3
  51. Does ORB-Slam3 perform better than ORB-Slam2? : r/robotics - Reddit, 8월 9, 2025에 액세스, https://www.reddit.com/r/robotics/comments/18ne4f5/does_orbslam3_perform_better_than_orbslam2/
  52. NVIDIA-Isaac-ROS-Nvblox/docs/tutorial-realsense-record.md at main - GitHub, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox/blob/main/docs/tutorial-realsense-record.md
  53. Discussion - Nav2 Introduction (Making a Mobile Robot Pt 16), 8월 9, 2025에 액세스, https://discourse.articulatedrobotics.xyz/t/discussion-nav2-introduction-making-a-mobile-robot-pt-16/199
  54. NVIDIA-Isaac-ROS-Nvblox/docs/troubleshooting-nvblox-realsense.md at main - GitHub, 8월 9, 2025에 액세스, https://github.com/Tinker-Twins/NVIDIA-Isaac-ROS-Nvblox/blob/main/docs/troubleshooting-nvblox-realsense.md
  55. Isaac ROS release-3.1: Dependency Issues with nvblox After Restarting Docker Container, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/isaac-ros-release-3-1-dependency-issues-with-nvblox-after-restarting-docker-container/316644
  56. Isaac ROS VSLAM. NVBLOX usage with NAV2 - NVIDIA Developer Forums, 8월 9, 2025에 액세스, https://forums.developer.nvidia.com/t/isaac-ros-vslam-nvblox-usage-with-nav2/303717
  57. Tag: Isaac ROS NVIDIA Technical Blog, 8월 9, 2025에 액세스, https://developer.nvidia.com/blog/tag/isaac-ros/
  58. CES 2025 - Isaac ROS 3.2 and platform updates - General, 8월 9, 2025에 액세스, https://discourse.ros.org/t/ces-2025-isaac-ros-3-2-and-platform-updates/41444
  59. Blogs - isaac_ros_docs documentation - NVIDIA Isaac ROS, 8월 9, 2025에 액세스, https://nvidia-isaac-ros.github.io/blog/index.html