Skip to content

Commit 2d0b62f

Browse files
Isaac ROS 4.0 (#152)
1 parent 3f3af8a commit 2d0b62f

File tree

66 files changed

+1269
-124
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1269
-124
lines changed

‎.gitmodules‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "nvblox_ros/nvblox_core"]
22
path = nvblox_ros/nvblox_core
33
url = https://github.com/nvidia-isaac/nvblox.git
4-
branch = v0.0.7
4+
branch = public

‎README.md‎

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
Nvblox ROS 2 integration for local 3D scene reconstruction and mapping.
44

5-
<div align="center"><a class="reference internal image-reference" href="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/main/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_sim_nvblox_humans.gif/"><img alt="image" src="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/main/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_sim_nvblox_humans.gif/" width="600px"/></a></div>
5+
<div align="center"><a class="reference internal image-reference" href="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.0/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_sim_nvblox_humans.gif/"><img alt="image" src="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.0/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_sim_nvblox_humans.gif/" width="600px"/></a></div>
66

77
## Overview
88

99
Isaac ROS Nvblox contains ROS 2 packages for 3D reconstruction and cost
1010
maps for navigation. `isaac_ros_nvblox` processes depth and pose to
1111
reconstruct a 3D scene in real-time and outputs a 2D costmap for
12-
[Nav2](https://github.com/ros-planning/navigation2). The costmap is
12+
[Nav2](https://github.com/ros-navigation/navigation2). The costmap is
1313
used in planning during navigation as a vision-based solution to avoid
1414
obstacles.
1515

@@ -18,15 +18,15 @@ The package uses GPU acceleration to compute a 3D reconstruction and 2D costmaps
1818
[nvblox](https://github.com/nvidia-isaac/nvblox), the underlying
1919
framework-independent C++ library.
2020

21-
<div align="center"><a class="reference internal image-reference" href="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/main/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox_nodegraph.png/"><img alt="image" src="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/main/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox_nodegraph.png/" width="750px"/></a></div>
21+
<div align="center"><a class="reference internal image-reference" href="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.0/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox_nodegraph.png/"><img alt="image" src="https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.0/resources/isaac_ros_docs/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox_nodegraph.png/" width="750px"/></a></div>
2222

2323
Above is a typical graph that uses `isaac_ros_nvblox`.
2424
Nvblox takes a depth image, a color image, and a pose as input, with
2525
which it computes a 3D scene reconstruction on the GPU. In this graph
2626
the pose is computed using `visual_slam`, or some other pose estimation
2727
node. The reconstruction
2828
is sliced into an output cost map which is provided through a cost map plugin
29-
into [Nav2](https://github.com/ros-planning/navigation2).
29+
into [Nav2](https://github.com/ros-navigation/navigation2).
3030
An optional colorized 3D reconstruction is delivered into `rviz`
3131
using the mesh visualization plugin. Nvblox streams mesh updates
3232
to RViz to update the reconstruction in real-time as it is built.
@@ -54,8 +54,10 @@ The following tables provides timings for various functions of
5454
<th class="head">Dataset</th>
5555
<th class="head">Voxel Size (m)</th>
5656
<th class="head">Component</th>
57-
<th class="head">x86_64 w/ 3090 (Desktop)</th>
58-
<th class="head">x86_64 w/ RTX A3000 (Laptop)</th>
57+
<th class="head">x86_64 + 5090 (Desktop)</th>
58+
<th class="head">x86_64 + 3090 (Desktop)</th>
59+
<th class="head">x86_64 + A3000 (Laptop)</th>
60+
<th class="head">AGX Thor</th>
5961
<th class="head">AGX Orin</th>
6062
<th class="head">Orin Nano</th>
6163
</tr>
@@ -64,74 +66,94 @@ The following tables provides timings for various functions of
6466
<tr class="row-even">
6567
<td rowspan="5">Replica</td>
6668
<td rowspan="5">0.05</td>
67-
<td>TSDF</td>
69+
<td>TSDF</td> <!-- tsdf/integrate -->
70+
<td>0.1 ms</td>
6871
<td>0.5 ms</td>
6972
<td>0.3 ms</td>
73+
<td>0.4 ms</td>
7074
<td>0.8 ms</td>
7175
<td>2.1 ms</td>
7276
</tr>
7377
<tr class="row-odd">
74-
<td>Color</td>
78+
<td>Color</td> <!-- color/integrate -->
79+
<td>0.3 ms</td>
7580
<td>0.7 ms</td>
7681
<td>0.7 ms</td>
82+
<td>0.8 ms</td>
7783
<td>1.1 ms</td>
7884
<td>3.6 ms</td>
7985
</tr>
8086
<tr class="row-even">
81-
<td>Meshing</td>
87+
<td>Meshing</td> <!-- mesh/integrate -->
88+
<td>0.3 ms</td>
8289
<td>0.7 ms</td>
8390
<td>1.3 ms</td>
91+
<td>1.4 ms</td>
8492
<td>2.3 ms</td>
8593
<td>13 ms</td>
8694
</tr>
8795
<tr class="row-odd">
88-
<td>ESDF</td>
96+
<td>ESDF</td> <!-- esdf/integrate -->
97+
<td>0.3 ms</td>
8998
<td>0.8 ms</td>
9099
<td>1.2 ms</td>
100+
<td>1.0 ms</td>
91101
<td>1.7 ms</td>
92102
<td>6.2 ms</td>
93103
</tr>
94104
<tr class="row-even">
95-
<td>Dynamics</td>
105+
<td>Dynamics</td> <!-- sum(multi_mapper/integrate_depth/dynamic_block) -->
106+
<td>0.7 ms</td>
96107
<td>1.7 ms</td>
97108
<td>1.4 ms</td>
109+
<td>1.4 ms</td>
98110
<td>2.0 ms</td>
99111
<td>N/A(\*)</td>
100112
</tr>
101113
<tr class="row-even">
102114
<td rowspan="5">Redwood</td>
103115
<td rowspan="5">0.05</td>
104116
<td>TSDF</td>
117+
<td>0.09 ms</td>
118+
<td>0.2 ms</td>
105119
<td>0.2 ms</td>
106120
<td>0.2 ms</td>
107121
<td>0.5 ms</td>
108122
<td>1.2 ms</td>
109123
</tr>
110124
<tr class="row-odd">
111125
<td>Color</td>
126+
<td>0.3 ms</td>
112127
<td>0.5 ms</td>
113128
<td>0.5 ms</td>
129+
<td>0.6 ms</td>
114130
<td>0.8 ms</td>
115131
<td>2.6 ms</td>
116132
</tr>
117133
<tr class="row-even">
118134
<td>Meshing</td>
135+
<td>0.2 ms</td>
119136
<td>0.3 ms</td>
120137
<td>0.5 ms</td>
138+
<td>0.8 ms</td>
121139
<td>0.9 ms</td>
122140
<td>4.2 ms</td>
123141
</tr>
124142
<tr class="row-odd">
125143
<td>ESDF</td>
144+
<td>0.3 ms</td>
126145
<td>0.8 ms</td>
127146
<td>1.0 ms</td>
147+
<td>1.0 ms</td>
128148
<td>1.5 ms</td>
129149
<td>5.1 ms</td>
130150
</tr>
131151
<tr class="row-even">
132152
<td>Dynamics</td>
153+
<td>0.4 ms</td>
133154
<td>1.0 ms</td>
134155
<td>0.7 ms</td>
156+
<td>0.8 ms</td>
135157
<td>1.2 ms</td>
136158
<td>N/A(\*)</td>
137159
</tr>
@@ -166,10 +188,8 @@ Please visit the [Isaac ROS Documentation](https://nvidia-isaac-ros.github.io/re
166188
* [ROS Communication Issues](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox/troubleshooting/troubleshooting_nvblox_ros_communication.html)
167189
* [`nvblox_examples_bringup`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_examples_bringup/index.html)
168190
* [`nvblox_image_padding`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_image_padding/index.html)
169-
* [`nvblox_isaac_sim`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_isaac_sim/index.html)
170191
* [`nvblox_msgs`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_msgs/index.html)
171192
* [`nvblox_nav2`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_nav2/index.html)
172-
* [`nvblox_performance_measurement`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_performance_measurement/index.html)
173193
* [`nvblox_ros`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_ros/index.html)
174194
* [`nvblox_ros_common`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_ros_common/index.html)
175195
* [`nvblox_rviz_plugin`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/nvblox_rviz_plugin/index.html)
@@ -178,4 +198,4 @@ Please visit the [Isaac ROS Documentation](https://nvidia-isaac-ros.github.io/re
178198

179199
## Latest
180200

181-
Update 2024-12-10: Optimized performance for always-on dynamic obstacle detection and 1 cm voxels
201+
Update 2025-10-24: Support for ROS 2 Jazzy

‎SECURITY.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Security
2+
3+
NVIDIA is dedicated to the security and trust of our software products and services, including all source code repositories managed through our organization.
4+
5+
If you need to report a security issue, please use the appropriate contact points outlined below. **Please do not report security vulnerabilities through GitHub.**
6+
7+
## Reporting Potential Security Vulnerability in an NVIDIA Product
8+
9+
To report a potential security vulnerability in any NVIDIA product:
10+
- Web: [Security Vulnerability Submission Form](https://www.nvidia.com/object/submit-security-vulnerability.html)
11+
- E-Mail: psirt@nvidia.com
12+
- We encourage you to use the following PGP key for secure email communication: [NVIDIA public PGP Key for communication](https://www.nvidia.com/en-us/security/pgp-key)
13+
- Please include the following information:
14+
- Product/Driver name and version/branch that contains the vulnerability
15+
- Type of vulnerability (code execution, denial of service, buffer overflow, etc.)
16+
- Instructions to reproduce the vulnerability
17+
- Proof-of-concept or exploit code
18+
- Potential impact of the vulnerability, including how an attacker could exploit the vulnerability
19+
20+
While NVIDIA currently does not have a bug bounty program, we do offer acknowledgement when an externally reported security issue is addressed under our coordinated vulnerability disclosure policy. Please visit our [Product Security Incident Response Team (PSIRT)](https://www.nvidia.com/en-us/security/psirt-policies/) policies page for more information.
21+
22+
## NVIDIA Product Security
23+
24+
For all security-related concerns, please visit NVIDIA's Product Security portal at https://www.nvidia.com/en-us/security

‎isaac_ros_nvblox/package.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
2222
<package format="3">
2323
<name>isaac_ros_nvblox</name>
24-
<version>3.2.5</version>
24+
<version>4.0.0</version>
2525
<description>Nvblox ROS 2 metapackage</description>
2626

2727
<maintainer email="isaac-ros-maintainers@nvidia.com">Isaac ROS Maintainers</maintainer>

‎nvblox_examples/nvblox_examples_bringup/config/sensors/realsense_emitter_flashing.yaml‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ serial_no: ''
2121
usb_port_id: ''
2222

2323
rgb_camera:
24-
profile: '640x480x15'
24+
color_profile: '640x480x15'
25+
profile: '640x480x15' # For backwards compatibility
2526
color_info_qos: "SENSOR_DATA"
2627
color_qos: "SENSOR_DATA"
2728

2829
depth_module:
29-
profile: '640x480x60'
30+
depth_profile: '640x480x60'
31+
infra_profile: '640x480x60'
32+
profile: '640x480x60' # For backwards compatibility
3033
emitter_enabled: 1
3134
emitter_on_off: true
3235
depth_qos: "SENSOR_DATA"
@@ -48,7 +51,8 @@ pointcloud_texture_index: 0
4851
pointcloud_texture_stream: RS2_STREAM_ANY
4952

5053
enable_sync: false
51-
align_depth: false
54+
align_depth:
55+
enable: false
5256

5357
gyro_fps: 200
5458
accel_fps: 200

‎nvblox_examples/nvblox_examples_bringup/config/sensors/realsense_emitter_on.yaml‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ serial_no: ''
2121
usb_port_id: ''
2222

2323
rgb_camera:
24-
profile: '640x480x15'
24+
color_profile: '640x480x15'
25+
profile: '640x480x15' # For backwards compatibility
2526
color_info_qos: "SENSOR_DATA"
2627
color_qos: "SENSOR_DATA"
2728

2829
depth_module:
29-
profile: '640x480x30'
30+
depth_profile: '640x480x30'
31+
infra_profile: '640x480x30'
32+
profile: '640x480x30' # For backwards compatibility
3033
emitter_enabled: 1
3134
emitter_on_off: false
3235
depth_qos: "SENSOR_DATA"
@@ -48,7 +51,8 @@ pointcloud_texture_index: 0
4851
pointcloud_texture_stream: RS2_STREAM_ANY
4952

5053
enable_sync: false
51-
align_depth: false
54+
align_depth:
55+
enable: false
5256

5357
gyro_fps: 200
5458
accel_fps: 200

‎nvblox_examples/nvblox_examples_bringup/launch/sensors/realsense.launch.py‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,42 @@
1717

1818
from typing import List, Optional
1919

20-
from isaac_ros_launch_utils.all_types import *
20+
from isaac_ros_launch_utils.all_types import (
21+
Action, ComposableNode, LaunchDescription, TimerAction, IfCondition)
2122
import isaac_ros_launch_utils as lu
22-
2323
from nvblox_ros_python_utils.nvblox_constants import NVBLOX_CONTAINER_NAME
2424

25-
26-
EMITTER_FLASHING_CONFIG_FILE_PATH = lu.get_path('nvblox_examples_bringup', 'config/sensors/realsense_emitter_flashing.yaml')
27-
EMITTER_ON_CONFIG_FILE_PATH = lu.get_path('nvblox_examples_bringup', 'config/sensors/realsense_emitter_on.yaml')
25+
EMITTER_FLASHING_CONFIG_FILE_PATH = lu.get_path(
26+
'nvblox_examples_bringup',
27+
'config/sensors/realsense_emitter_flashing.yaml')
28+
EMITTER_ON_CONFIG_FILE_PATH = lu.get_path(
29+
'nvblox_examples_bringup',
30+
'config/sensors/realsense_emitter_on.yaml')
2831

2932
# By default our behaviour is:
3033
# - Run the splitter on camera0,
3134
# - Don't run the splitter on the remaining cameras.
3235
# NOTE(alexmillane, 16.08.2024): At the moment this is the *only* behaviour we support.
36+
37+
3338
def get_default_run_splitter_list(num_cameras: int) -> List[bool]:
3439
run_splitter_list = [False] * num_cameras
3540
run_splitter_list[0] = True
3641
return run_splitter_list
3742

3843

39-
def get_camera_node(camera_name: str, config_file_path: str, serial_number: Optional[int] = None) -> ComposableNode:
44+
def get_camera_node(
45+
camera_name: str,
46+
config_file_path: str,
47+
serial_number: Optional[int] = None) -> ComposableNode:
4048
parameters = []
4149
parameters.append(config_file_path)
4250
parameters.append({'camera_name': camera_name})
4351
if serial_number:
4452
parameters.append({'serial_no': str(serial_number)})
4553
realsense_node = ComposableNode(
46-
namespace=camera_name,
54+
name=camera_name,
55+
namespace='',
4756
package='realsense2_camera',
4857
plugin='realsense2_camera::RealSenseNodeFactory',
4958
parameters=parameters)
@@ -101,19 +110,20 @@ def add_cameras(args: lu.ArgumentContainer) -> List[Action]:
101110
else:
102111
config_file_path = EMITTER_ON_CONFIG_FILE_PATH
103112
# Realsense
104-
log_message = lu.log_info(f'Starting realsense with name: {camera_name}, running splitter: {run_splitter}')
113+
log_message = lu.log_info(
114+
f'Starting realsense with name: {camera_name}, running splitter: {run_splitter}')
105115
nodes.append(
106116
get_camera_node(
107117
camera_name=camera_name,
108118
config_file_path=config_file_path,
109119
serial_number=camera_serial_number,
110-
))
120+
))
111121
# Splitter
112122
if run_splitter:
113123
nodes.append(
114124
get_splitter_node(
115125
camera_name=camera_name,
116-
))
126+
))
117127
# Note(xinjieyao: 2024/08/24): Multi-rs launch use RealSenseNodeFactory could be unstable
118128
# Camera node may fail to launch without any ERROR or app crashes
119129
# Adding delay for cameras after the first camera bringup (including splitter) as temp fix

‎nvblox_examples/nvblox_examples_bringup/package.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
2222
<package format="3">
2323
<name>nvblox_examples_bringup</name>
24-
<version>3.2.13</version>
24+
<version>4.0.0</version>
2525
<description>Launchfiles for nvblox examples</description>
2626

2727
<maintainer email="isaac-ros-maintainers@nvidia.com">Isaac ROS Maintainers</maintainer>

‎nvblox_examples/nvblox_examples_bringup/test/CMakeLists.txt‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818
# Get the path to a dummy bag for use in the tests.
1919
get_dummy_bag_path(DUMMY_BAG_PATH)
2020

21+
# NOTE(alexmillane): In these dry-run tests, the graphs sometimes terminates with a non-zero
22+
# exit code, which causes the test to fail (even though the graph *runs* correctly). This issue
23+
# is under investigation here: https://nvbugspro.nvidia.com/bug/4751762.
24+
# We're therefore disabling the exit-code checks for now.
25+
# Note that the test is still functional because it will still fail when the graph fails
26+
# to run for the timeout time.
27+
# TODO(alexmillane): Re-enable exit-code checks when we've sorted out the above bug.
28+
2129
add_graph_startup_test(realsense_dry_run
2230
launch/realsense_example.launch.py
2331
DONT_CHECK_EXIT_CODE

‎nvblox_examples/nvblox_image_padding/include/nvblox_image_padding/image_padding_cropping_node.hpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include <rclcpp/rclcpp.hpp>
2222
#include <sensor_msgs/msg/image.hpp>
2323

24-
#include <cv_bridge/cv_bridge.h>
24+
#include <cv_bridge/cv_bridge.hpp>
2525

2626
namespace nvblox
2727
{

0 commit comments

Comments
 (0)