-
Notifications
You must be signed in to change notification settings - Fork 114
Description
Summary
I am using Isaac ROS NVBlox as part of the Isaac Manipulator stack (pick-and-place workflow). Since in there it was not working i tried testing nvblox alone to verify the issue and I found out that TSDF integration works perfectly, the live depth map is correctly converted into a TSDF voxel layer and visualized in RViz, however ESDF is never populated. Calling EsdfAndGradients always returns only -1000 (unknown/unobserved) even if:
- I query directly around a clicked point that clearly lies inside TSDF geometry
- I query the entire workspace bounding box
- update_esdf_rate_hz > 0, publish_esdf_distance_slice = true
- I enable debug logging
The ESDF slice topic does not appear, even with the relevant params set to true, TSDF visualisation and workspace bounds visualisation both look correct. This suggests that ESDF integration in 3D mode is not running at all, even though TSDF is updating normally.
System configuration
Isaac ROS version: Isaac ROS 4.0
NVBlox version: from Isaac ROS distribution
ROS 2 version: Jazzy inside Isaac ROS container
Platform: Ubuntu 24.04
Hardware:
RealSense D435i mounted on UR10e wrist
Depth → TSDF works perfectly
Running mode: 3D ESDF via manipulator configs
Workspace configuration
/**:
ros__parameters:
static_mapper:
# All voxels that are fully or partially contained in the bounding box
# defined by the min / max corners are part of the workspace.
# The corners are defined in the nvblox `global_frame` (set in ../nvblox_manipulator_base.yaml).
workspace_bounds_type: "bounding_box" # ["unbounded", "height_bounds", "bounding_box"]
workspace_bounds_min_corner_x_m: -0.45
workspace_bounds_min_corner_y_m: -0.59
workspace_bounds_min_height_m: -1.11
workspace_bounds_max_corner_x_m: 0.53
workspace_bounds_max_corner_y_m: 1.1
workspace_bounds_max_height_m: 2.0
global_frame = "base_link".
Camera configuration
/**:
ros__parameters:
camera_name: ''
device_type: ''
serial_no: ''
usb_port_id: ''
rgb_camera:
color_profile: '640x480x6'
profile: '640x480x6' # For backwards compatibility
color_info_qos: "DEFAULT"
color_qos: "DEFAULT"
depth_module:
depth_profile: '640x480x6'
infra_profile: '640x480x6'
profile: '640x480x6' # For backwards compatibility
emitter_enabled: 1
emitter_on_off: false
depth_qos: "DEFAULT"
depth_info_qos: "DEFAULT"
infra_qos: "DEFAULT"
enable_accel: false
enable_color: true
enable_depth: true
enable_gyro: false
enable_infra1: false
enable_infra2: false
pointcloud:
enable: false
pointcloud_texture_index: 0
pointcloud_texture_stream: RS2_STREAM_ANY
enable_sync: false
align_depth:
enable: true
RealSense depth is correctly integrated and the topics are published under:
- /camera_1/aligned_depth_to_color/image_raw
- /camera_1/color/image_raw
NVBlox remappings are correct and verified.
NVBlox params
Here I provide the files related to the configuration I'm using:
nvblox_base.yaml
nvblox_manipulator_base.yaml
nvblox_manipulator_realsense.yaml
And by checking via ros2 param get /nvblox_node ...: all of these are correctly applied at runtime.
Reproduction steps
- Launch the Realsense camera
- Launch NVBlox with this launch file:
isaac_ros_nvblox_custom.launch.py - Confirm TSDF works
In RViz I see a correct TSDF layer corresponding to what the camera is viewing. - Confirm workspace bounding box and slice planes
The red bounding box and ESDF slice planes appear correctly relative to base_link.
- Call ESDF service around a visible TSDF point:
- ros2 run tf2_ros tf2_echo base_link camera_color_optical_frame -> TF OK
- Click in RViz to get a point ON the TSDF geometry
- ros2 topic echo /clicked_point (Example: (x≈0.12, y≈-0.05, z≈0.30))
ros2 service call /nvblox_node/get_esdf_and_gradient \
nvblox_msgs/srv/EsdfAndGradients \
"{frame_id: 'base_link',
aabb_min_m: {x: 0.02, y: -0.15, z: 0.20},
aabb_size_m: {x: 0.20, y: 0.20, z: 0.20},
use_aabb: true,
update_esdf: true,
visualize_esdf: false}"
-
Actual result
Every ESDF voxel returns -1000.0, meaning unknown:
For small AABBs
For AABBs covering the entire workspace
For points definitely within observed TSDF geometry -
Debug logging
Debug logging for nvblox_node shows no error when ESDF integration is called.
What I’ve already verified
- TSDF is correct
- TF is correct
- Workspace bounds correct
- Params are applied at runtime
- Both small and large AABBs tested
- Depth and TSDF messages verified at correct rates
Reproduced both in: - standalone NVBlox launch
- full Isaac Manipulator workflow
Could you please help me confirm whether: ESDF 3D mode has a regression in the current Isaac ROS NVBlox version? Additional steps are needed to activate 3D ESDF integration? There are known issues for RealSense-wrist-mounted setups or manipulator workflows?
I can provide anything else useful for reproducing
Thank you!