Skip to content
Closed
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
*.gif filter=lfs diff=lfs merge=lfs -text
nvblox/tests/data/lidarply/**/*.ply filter=lfs diff=lfs merge=lfs -text
docs/images/* filter=lfs diff=lfs merge=lfs -text
nvblox_torch/nvblox_torch/tests/data/**/*.png filter=lfs diff=lfs merge=lfs -text

# Sphinx-built site images: NOT LFS, but protect from line ending issues
docs/_images/*.gif -filter -diff -merge binary
89 changes: 89 additions & 0 deletions .github/actions/build-and-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: 'Build and Test'
description: 'Build nvblox Docker image and run tests'
inputs:
platform:
description: 'Platform to build for'
required: true
cuda-version:
description: 'CUDA version'
required: true
ubuntu-version:
description: 'Ubuntu version'
required: true
gcc-sanitizer:
description: 'Build in debug mode with gcc sanitizers enabled'
required: false
default: 0
ngc-api-key:
description: 'NGC API Key for authentication'
required: true
run-cpp-tests:
description: 'Run C++ unit tests'
required: false
default: 'true'
run-python-tests:
description: 'Run Python unit tests'
required: false
default: 'true'
run-cuda-sanitizer:
description: 'Run CUDA sanitizer tests'
required: false
default: 'true'
run-realsense-tests:
description: 'Run Realsense example tests'
required: false
default: 'true'
runs:
using: 'composite'
steps:
- name: NGC Login
uses: ./.github/actions/ngc-login
with:
ngc-api-key: ${{ inputs.ngc-api-key }}
- name: Set COMMON_NVBLOX_CI_ARGS env
shell: bash
run: |
# Store arguments used for all jobs in an environment variable.
echo "COMMON_NVBLOX_CI_ARGS=--platform ${{ inputs.platform }} --cuda-version ${{ inputs.cuda-version }} --ubuntu-version ${{ inputs.ubuntu-version }} --gcc-sanitizer ${{ inputs.gcc-sanitizer }}" >> $GITHUB_ENV
# Note that the two build-image steps could be omitted since the build-and-test steps also build necessary images.
# However, we separate the steps to get cleaner logs and better timing granularity.
- name: Build dependency image
shell: bash
run: |
echo "::group::BUILD DEPENDENCY IMAGE"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-image deps
echo "::endgroup::"
- name: Build build image
shell: bash
run: |
echo "::group::BUILD BINARIES IMAGE"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-image build
echo "::endgroup::"
- name: Run CPP unit tests
if: inputs.run-cpp-tests == 'true'
shell: bash
run: |
echo "::group::RUN CPP UNIT TESTS"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-and-test cpp
echo "::endgroup::"
- name: Run Python unit tests
if: inputs.run-python-tests == 'true'
shell: bash
run: |
echo "::group::RUN PYTHON UNIT TESTS"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-and-test python
echo "::endgroup::"
- name: Run CUDA Sanitizer
if: inputs.run-cuda-sanitizer == 'true'
shell: bash
run: |
echo "::group::RUN CUDA SANITIZER"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-and-test cuda-sanitizer
echo "::endgroup::"
- name: Run Realsense example test
if: inputs.run-realsense-tests == 'true'
shell: bash
run: |
echo "::group::RUN REALSENSE EXAMPLE TEST"
time python3 ci/nvblox_ci.py $COMMON_NVBLOX_CI_ARGS --build-and-test realsense
echo "::endgroup::"
21 changes: 21 additions & 0 deletions .github/actions/ngc-login/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: 'NGC Login'
description: 'Login to NVIDIA NGC Container Registry'
inputs:
ngc-api-key:
description: 'NGC API Key for authentication'
required: false
runs:
using: 'composite'
steps:
- name: NGC Login
shell: bash
run: |
# Only attempt NGC login if API key is available
if [ -n "${{ inputs.ngc-api-key }}" ]; then
echo "Logging into NGC registry..."
docker login -u \$oauthtoken -p ${{ inputs.ngc-api-key }} nvcr.io
echo "✅ Successfully logged into NGC registry"
else
echo "⚠️ NGC_API_KEY not available - skipping NGC login"
echo "This is normal for PRs from forks or when secrets are not configured"
fi
35 changes: 35 additions & 0 deletions .github/workflows/gh-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: GitHub Pages
on:
push:
branches: ["public"]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
checks: write
issues: read
jobs:
deploy_docs:
name: Deploy the docs
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
clean: true
fetch-depth: 0
fetch-tags: true
- name: Build docs
run: |
cd docs
pip3 install -r requirements.txt
make SPHINXOPTS=-W multi-docs
touch ./_build/.nojekyll
- name: Deploy to gh-pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_build
129 changes: 129 additions & 0 deletions .github/workflows/premerge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
name: nvblox premerge
on:
pull_request:
jobs:
## ------------------------------------------
## Linting and formatting
## ------------------------------------------
lint_precommit:
name: pre-commit
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: false
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install pre-commit
run: |
python -m pip install --upgrade pip
pip install pre-commit clang-format==14.0.6
- name: Run pre-commit
run: pre-commit run --all-files --show-diff-on-failure
## ------------------------------------------
## Build and test x86/CU11/U22
## ------------------------------------------
premerge_x86_cu11_u22:
name: Build&Test x86-CU11-U22
needs: [lint_precommit]
runs-on: [self-hosted, gpu] # GPU jobs will run on AWS
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: true
- name: premerge_x86_cu11_u22 - Unit tests
uses: ./.github/actions/build-and-test
with:
platform: x86_64
cuda-version: '11'
ubuntu-version: '22'
ngc-api-key: ${{ secrets.NGC_API_KEY }}
## ------------------------------------------
## Build and test x86/CU12/U22
## ------------------------------------------
premerge_x86_cu12_u22:
name: Build&Test x86-CU12-U22
needs: [lint_precommit]
runs-on: [self-hosted, gpu] # GPU jobs will run on AWS
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: true
- name: premerge_x86_cu12_u22 - Unit tests
uses: ./.github/actions/build-and-test
with:
platform: x86_64
cuda-version: '12'
ubuntu-version: '22'
ngc-api-key: ${{ secrets.NGC_API_KEY }}
## ------------------------------------------
## Build and test x86/CU13/U24
## ------------------------------------------
premerge_x86_cu13_u24:
name: Build&Test x86-CU13-U24
needs: [lint_precommit]
runs-on: [self-hosted, gpu] # GPU jobs will run on AWS
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: true
- name: premerge_x86_cu13_u24 - Unit tests
uses: ./.github/actions/build-and-test
with:
platform: x86_64
cuda-version: '13'
ubuntu-version: '24'
ngc-api-key: ${{ secrets.NGC_API_KEY }}
run-realsense-tests: false # TODO(dtingahl) make realsense docker build for cuda13
## --------------------------------------------------------
## Build and test x86/CU12/U22/gcc-sanitizer
## --------------------------------------------------------
premerge_x86_cu12_u22_debug:
name: Build&Test x86-gcc-sanitizer
needs: [lint_precommit]
runs-on: [self-hosted, gpu] # GPU jobs will run on AWS
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: true
- name: premerge_x86_cu12_u22_debug - Unit tests
uses: ./.github/actions/build-and-test
with:
platform: x86_64
cuda-version: '12'
ubuntu-version: '22'
gcc-sanitizer: 1
ngc-api-key: ${{ secrets.NGC_API_KEY }}
run-python-tests: false # TODO(dtingdahl) Enable these tests
run-realsense-tests: false #
run-cuda-sanitizer: false #
## --------------------------------------------------------
## Build docs
## --------------------------------------------------------
build_docs:
name: Build docs
needs: [lint_precommit]
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Build docs
working-directory: ./docs
run: |
pip3 install -r requirements.txt
make multi-docs
touch ./_build/.nojekyll
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ TAGS
# Test artifacts
nvblox/tests/*.png
nvblox/tests/*.nvblx
nvblox/tests/data/test_output_data/

# Built py distribution
nvblox_torch/dist
Expand Down
3 changes: 1 addition & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ repos:
- repo: https://github.com/doublify/pre-commit-clang-format
rev: 62302476d0da01515660132d76902359bed0f782
hooks:
- id: clang-format
entry: clang-format-14 -i
- id: clang-format # See premerge.yml for the clang-format version used.
files: \.(c|cc|cpp|cxx|cu|cuh|h|hh|hpp|hxx|inl|proto|pb\.h|pb\.cc)$
- repo: https://github.com/pylint-dev/pylint
rev: v3.0.3
Expand Down
2 changes: 1 addition & 1 deletion .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ inlinevar-rgx=^[a-z][a-z0-9_]*$
class-rgx=^_?[A-Z][a-zA-Z0-9]*$

# Regular expression matching correct module names
module-rgx=^(_?[a-z][a-z0-9_]*|__init__|__about__)$
module-rgx=[a-z_][a-z0-9_]{2,40}$

# Regular expression matching correct method names
method-rgx=(?x)^(?:(?P<exempt>_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P<camel_case>_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P<snake_case>_{0,2}[a-z][a-z0-9_]*))$
Expand Down
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ All releases of the nvblox library will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## Unreleased (public branch)
## [v.0.0.9] - Date: 2026-01-27

- Support for LiDAR pointcloud as native input to integrateDepth.
- Support for LiDAR motion compensation.
- Refactor and optimization of blocks-to-update tracker.
- Option for initializing freespace voxels to free.
- Camera sensor extended with support for distortion (radial and tangential).
Expand Down
16 changes: 2 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ endif()
# CMAKE_CUDA_ARCHITECTURES to a default (potentially non-native) value
project(
nvblox
VERSION 0.0.8
VERSION 0.0.9
LANGUAGES CXX C CUDA)

# ##############################################################################
Expand All @@ -41,19 +41,7 @@ endif()
# Include file that defines functions for adding nvblox binary targets
include(cmake/cuda/setup_compute_capability.cmake)
include(cmake/nvblox_targets.cmake)

# This option avoids any implementations using std::string in their signature in
# header files Useful for Nvblox PyTorch wrapper, which requires the old
# Pre-CXX11 ABI on x86
if(BUILD_PYTORCH_WRAPPER AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64"
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
option(PRE_CXX11_ABI_LINKABLE "Better support pre-C++11 ABI library users" ON)
message(STATUS "Building with pre-C++11 ABI support")
else()
option(PRE_CXX11_ABI_LINKABLE "Better support pre-C++11 ABI library users"
OFF)
message(STATUS "Building without pre-C++11 ABI support")
endif()
include(cmake/setup_pytorch_cpp11_abi.cmake)

if(BUILD_PYTORCH_WRAPPER)
add_subdirectory(nvblox_torch/cpp)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ either
[C++](https://nvidia-isaac.github.io/nvblox/), or
[ROS2](https://nvidia-isaac-ros.github.io/concepts/scene_reconstruction/nvblox/index.html).

To get started with `nvblox`, see our [documentation site](https://nvidia-isaac.github.io/nvblox/)
To get started with `nvblox`, see our [documentation site](https://nvidia-isaac.github.io/nvblox/v0.0.9/index.html)

<p align="center">
<img src="docs/images/3dmatch.gif" alt="3D reconstruction" width="400"/>
Expand Down
Loading
Loading