Noisy output of ESS StereoDNN Disparity

Hi there,

I’m trying to take a side-by-side 30fps 720p stereo video feed, run through ESS Disparity and VSLAM nodes, and then feed the outputs into NVblox to get a 3D reconstruction in realtime.

I’ve noticed that the output of the ESS Disparity node can be very noisy / intermittent. Some frames of the Disparity output are crisp, and accurate, while others have much artifacting and a “flashing” behavior. This is especially the case during motion, as shown: Notice the several frames where there is a freezing behaviour, and there are many blotches in the disparitymap.

ESS Model on 720p video stream, running disparity graph:
720p_flashing_disparity

Using the light ESS model and 360p video input works a bit better:

Light ESS model on 360p video stream, when running the Disparity graph only:
disparity-288p-shelf-disparityonly

But running Nvblox slows the pipeline down, and increases the noise seen in the disparity map . I’m trying this pipeline on a Jetson AGX Orin 64GB Dev kit on MAXN mode, but am seeing similar issues on my x86 machine as well. The cameras are correctly calibrated, rectified, and hardware synchronized.

Light ESS model on 360p video stream, when running the entire pipeline (ESS, VSLAM, Nvblox): more noise and freezing than above
disparity-288p-shelf-withnvblox

Same as above, later on in the video: running Nvblox pipeline slows down disparity’ nodes output.
disparity-288p-shelf-withnvblox_later

How can we reduce this flashing / noise issue in the Disparity map? Additionally, do you have any suggestions on how to filter this Disparity map for input to Nvblox?

My launch file:

"""Launch a Node with parameters and remappings."""

from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node, ComposableNodeContainer
from launch_ros.descriptions import ComposableNode

NETWORK_WIDTH = 480
NETWORK_HEIGHT = 288

def generate_launch_description():

    gstreamer_node = Node(
        package='gscam2',
        executable='gscam_main',
        output='screen',
        name='gscam_publisher',
        parameters=[
            {
                "camera_info_url": "",  # Camera calibration information
                # Laptop pipeline
                # "gscam_config": "rtpbin name=rtpbin udpsrc caps=\"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264\" port=5005 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! decodebin ! videoconvert ! video/x-raw, format=RGB",
                # Jetson pipeline
                "gscam_config": "rtpbin name=rtpbin udpsrc caps=\"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264\" port=5005 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! nvv4l2decoder disable-dpb=true enable-max-performance=true ! queue ! nvvidconv ! video/x-raw,format=YUY2",
                "preroll": False,
                "use_gst_timestamps": False,
                "frame_id": "stereocamera_left_optical_frame",
                "image_encoding": "yuv422_yuy2", # On Jetson
                "sync_sink": False
            },
        ],
        remappings=[
            ('/camera_info', '/dummy/camera_info') # Don't want to use original camera_info message
        ]
    )
    
    splitter_node = Node(
        package='custom_pkg',
        executable='stereo_splitter',
        parameters=[
            {'left_camera_file': '/workspaces_2/isaac_ros-dev/src/custom_pkg/config/stereo_360p_left.yaml',
             'right_camera_file': '/workspaces_2/isaac_ros-dev/src/custom_pkg/config/stereo_360p_right.yaml'}
        ]
    )
    rviz_node = Node(
        package='rviz2',
        executable='rviz2', 
        arguments=['-d', "/workspaces_2/isaac_ros-dev/src/custom_pkg/config/nvblox.rviz"]
    )

    disparity_visualizer_node = Node(
        package='custom_pkg',
        executable='disparity_visualizer',
    )
   
    left_rectify_node = ComposableNode(
        name='left_rectify_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::RectifyNode',
        parameters=[{
            'output_width': 640,
            'output_height': 360,
        }],
        remappings=[
            ('image_raw', '/left/image_raw'),
            ('camera_info', '/left/camera_info'),
            ('image_rect', '/left/image_rect'),
            ('camera_info_rect', '/left/camera_info_rect')
        ]
    )
    right_rectify_node = ComposableNode(
        name='right_rectify_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::RectifyNode',
        parameters=[{
            'output_width': 640,
            'output_height': 360,
        }],
        remappings=[
            ('image_raw', '/right/image_raw'),
            ('camera_info', '/right/camera_info'),
            ('image_rect', '/right/image_rect'),
            ('camera_info_rect', '/right/camera_info_rect')
        ]
    )

    left_rectify_image_proc_node = ComposableNode(
        name='left_rectify_image_proc_node',
        package='image_proc',
        plugin='image_proc::RectifyNode',
        remappings=[
            ('image', '/left/image_raw'),
            ('camera_info', '/left/camera_info'),
            ('image_rect', '/left/image_rect'),
        ]
    )
    right_rectify_image_proc_node = ComposableNode(
        name='right_rectify_image_proc_node',
        package='image_proc',
        plugin='image_proc::RectifyNode',
        remappings=[
            ('image', '/right/image_raw'),
            ('camera_info', '/right/camera_info'),
            ('image_rect', '/right/image_rect'),
        ]
    )

    left_image_resize_node = ComposableNode(
        name='left_image_resize_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ResizeNode',
        parameters=[{
                'output_width': NETWORK_WIDTH,
                'output_height': NETWORK_HEIGHT,
                'keep_aspect_ratio': False # Do not add black borders to image
        }],
        remappings=[
            ('camera_info', '/left/camera_info'),
            ('image', '/left/image_rect'),
            ('resize/camera_info', '/left/camera_info_rect_resize'),
            ('resize/image', '/left/image_rect_resize')]
    )

    right_image_resize_node = ComposableNode(
        name='right_image_resize_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ResizeNode',
        parameters=[{
                'output_width': NETWORK_WIDTH,
                'output_height': NETWORK_HEIGHT,
                'keep_aspect_ratio': False # Do not add black borders to image
        }],
        remappings=[
            ('camera_info', '/right/camera_info'),
            ('image', '/right/image_rect'),
            ('resize/camera_info', '/right/camera_info_rect_resize'),
            ('resize/image', '/right/image_rect_resize')]
    )

    disparity_node = ComposableNode(
        name='disparity',
        package='isaac_ros_ess',
        plugin='nvidia::isaac_ros::dnn_stereo_depth::ESSDisparityNode',
        parameters=[{
            'engine_file_path': "/workspaces_2/isaac_ros-dev/src/isaac_ros_dnn_stereo_depth/resources/light_ess.engine",
            "threshold": 0.0,
            "image_type": "BGR_U8",
            }],
        remappings=[
            ('left/camera_info', '/left/camera_info_rect_resize'),
            ('left/image_rect', '/left/image_rect_resize'),
            ('right/camera_info', '/right/camera_info_rect_resize'),
            ('right/image_rect', '/right/image_rect_resize')
        ]
    )

    disparity_to_depth_node = ComposableNode(
        name='disparity_to_depth_node',
        package='isaac_ros_stereo_image_proc',
        plugin='nvidia::isaac_ros::stereo_image_proc::DisparityToDepthNode',
    )

    left_grayscale_node = ComposableNode(
        name='left_grayscale_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ImageFormatConverterNode',
        parameters=[{
            'encoding_desired': "mono8",
        }],
        remappings=[
            ('image_raw', '/left/image_raw'),
            ('camera_info', '/left/camera_info'),
            ('image', '/left/image_raw_grayscale'),
        ]
    )

    right_grayscale_node = ComposableNode(
        name='right_grayscale_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ImageFormatConverterNode',
        parameters=[{
            'encoding_desired': "mono8",
        }],
        remappings=[
            ('image_raw', '/right/image_raw'),
            ('camera_info', '/right/camera_info'),
            ('image', '/right/image_raw_grayscale'),
        ]
    )

    visual_slam_node = ComposableNode(
        name='visual_slam_node',
        package='isaac_ros_visual_slam',
        plugin='nvidia::isaac_ros::visual_slam::VisualSlamNode',
        remappings=[('stereo_camera/left/image', '/left/image_raw_grayscale'), # need grayscale images
                    ('stereo_camera/left/camera_info', '/left/camera_info'),
                    ('stereo_camera/right/image', '/right/image_raw_grayscale'),
                    ('stereo_camera/right/camera_info', '/right/camera_info')],
        parameters=[{
                    'enable_rectified_pose': True,
                    'denoise_input_images': False,
                    'rectified_images': False,
                    'img_jitter_threshold_ms': 110.00,
                    'enable_slam_visualization': True,
                    'enable_observations_view': True,
                    'enable_landmarks_view': True,
                    "enable_localization_n_mapping": True,
                    'map_frame': 'map',
                    'odom_frame': 'odom',
                    'base_frame': 'base_link', # robot center
                    "input_left_camera_frame": "stereocamera_left_frame", # Not the optical frame
                    }],
    )

    # Nvblox node
    nvblox_node = ComposableNode(
        name='nvblox_node',
        package='nvblox_ros',
        plugin='nvblox::NvbloxNode',
        parameters = ["/workspaces_2/isaac_ros-dev/src/custom_pkg/config/nvblox_params.yaml"],
        remappings=[
            ('color/image', '/left/image_rect_resize'),
            ('color/camera_info', '/left/camera_info_rect_resize'),
            ('depth/camera_info', '/left/camera_info_rect_resize'),
            ('depth/image', '/depth'),
        ]
    )
    
    nitros_container = ComposableNodeContainer(
        name='nitros_container',
        package='rclcpp_components',
        namespace='',
        executable='component_container_mt',
        composable_node_descriptions=[
            # left_rectify_node, right_rectify_node, # Isaac ROS version
            left_rectify_image_proc_node, right_rectify_image_proc_node, # Original ROS image_proc version
            left_image_resize_node, right_image_resize_node,
            disparity_node, 
            disparity_to_depth_node,
            left_grayscale_node, right_grayscale_node,
            visual_slam_node,
            nvblox_node
        ],
        output='screen'
    )

    return LaunchDescription([
                            gstreamer_node,
                            splitter_node,
                            nitros_container,
                            rviz_node,
                            disparity_visualizer_node,
                            ])

Hi @HiddenNetwork ,

I think this post and Performance Issue of ESS Disparity Graph on RTX4090 are related.

First, I suggest checking if your camera output is without flickering and if there is no flickering after your splitter_node.
If everything is without flickering, record in a rosbag and test the Isaac ROS Stereo DNN disparity node.

I’m also wondering if your Python script is causing a short delay and the images are not syncing anymore.

Let me know,
Raffaello

Hi @Raffaello,

I have verified that my camera’s output is without flickering, and there is also no flickering after the splitter_node.

I recorded a rosbag of the output of splitter_node, but am still seeing the same issues as described above.

In regards to the Python script for splitter_node, I am attaching the same timestamp to all left/right topics, so I expect that the ESS node should be able to correctly sync them based on this documentation

    def stereo_img_recvd_callback(self, image_msg):
        split_images = self.split_stereo_image(self._bridge.imgmsg_to_cv2(image_msg, desired_encoding=self.encoding))
        
        #Convert cv2 image to ros2 image message
        left_msg = self._bridge.cv2_to_imgmsg(np.array(split_images[0]), self.encoding)
        right_msg = self._bridge.cv2_to_imgmsg(np.array(split_images[1]), self.encoding)

        #Synchronize timestamps across all published topics
        current_timestamp = self.get_clock().now().to_msg()
        left_msg.header.stamp = current_timestamp
        right_msg.header.stamp = current_timestamp
        self.left_camera_info.header.stamp = current_timestamp
        self.right_camera_info.header.stamp = current_timestamp
        left_msg.header.frame_id = "stereocamera_left_optical_frame"
        right_msg.header.frame_id = "stereocamera_right_optical_frame"
        self.left_camera_info.header.frame_id = "stereocamera_left_optical_frame"
        self.right_camera_info.header.frame_id = "stereocamera_right_optical_frame"

        #Publish left/right images and left/right camera infos
        self._img_left_pub.publish(left_msg)
        self._camera_left_pub.publish(self.left_camera_info)
        self._img_right_pub.publish(right_msg)
        self._camera_right_pub.publish(self.right_camera_info)

On our Isaac ROS Stereom Image proc package we provide a node DisparityNode that publish the disparity between the two cameras. This node can be helpful to test your system.

You can also run our Isaac ROS benchmark to check if the disparity node

In this case, you can run:
https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_benchmark/isaac_ros_benchmark/index.html#quickstart

follow all steps from points 1 to 4

5: Install

sudo apt-get install -y ros-humble-isaac-ros-stereo-image-proc

6: Run these tests

launch_test src/isaac_ros_benchmark/scripts/isaac_ros_disparity_graph.py
launch_test src/isaac_ros_benchmark/scripts/isaac_ros_disparity_node.py

7: Read output

Check the output from the terminal.

Hi @Raffaello,

r2b Rosbags
I have tried running the StereoDNN Disparity Graph with the r2b_lounge rosbag from the r2b dataset..

I am seeing similar stuttering / noise issues:
Peek 2023-12-18 16-51

This was on the Jetson AGX Orin Dev kit, but I see similar performance issues (less severe) on my x86 machine (RTX4090).

My launch file for this:

from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch.actions import TimerAction
from launch_ros.actions import Node, ComposableNodeContainer
from launch_ros.descriptions import ComposableNode

# Full ESS Model Resolution
NETWORK_WIDTH = 960
NETWORK_HEIGHT = 576

def generate_launch_description():

    tf_base_link_to_stereocamera = Node(
        # Setting fixed transform between Robot base frame and stereocamera body frame
        # Arbitrary position offset
        package = "tf2_ros",
        executable = "static_transform_publisher",
        arguments = ["0.1", "0", "0.1", "0", "0", "0", "base_link", "stereocamera_left_frame"]
    )

    tf_stereocamera_left_to_right = Node(
        # Setting approximate static coord b/w left and right pair of stereocamera, for testing/visualization
        # Translation is from calibration _pose.yaml file
        package = "tf2_ros",
        executable = "static_transform_publisher",
        arguments = ["0", "-0.144", "0", "0", "0", "0", "stereocamera_left_frame", "stereocamera_right_frame"]
    )

    tf_stereocamera_body_to_optical_left = Node(
        # Setting fixed transform between stereocamera body frame and stereocamera camera/optical frame (left)
        package = "tf2_ros",
        executable = "static_transform_publisher",
        arguments = ["0", "0", "0", "-1.57079632679", "0", "-1.57079632679", "stereocamera_left_frame", "HAWK_0:left_rgb"]
    )

    tf_stereocamera_body_to_optical_right = Node(
        # Setting fixed transform between stereocamera body frame and stereocamera camera/optical frame (right)
        package = "tf2_ros",
        executable = "static_transform_publisher",
        arguments = ["0", "0", "0", "-1.57079632679", "0", "-1.57079632679", "stereocamera_right_frame", "HAWK_0:right_rgb"]
    )

    disparity_visualizer_node = Node(
        package='my_package',
        executable='dt_disparity_visualizer',
        parameters=[
            {'colorspace': 'rgb8'}
        ]
    )
   
    left_rectify_node = ComposableNode(
        name='left_rectify_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::RectifyNode',
        parameters=[{
            'output_width': 1920,
            'output_height': 1200,
        }],
        remappings=[
            ('image_raw', '/left/image_raw'),
            ('camera_info', '/left/camera_info'),
            ('image_rect', '/left/image_rect'),
            ('camera_info_rect', '/left/camera_info_rect')
        ]
    )

    right_rectify_node = ComposableNode(
        name='right_rectify_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::RectifyNode',
        parameters=[{
            'output_width': 1920,
            'output_height': 1200,
        }],
        remappings=[
            ('image_raw', '/right/image_raw'),
            ('camera_info', '/right/camera_info'),
            ('image_rect', '/right/image_rect'),
            ('camera_info_rect', '/right/camera_info_rect')
        ]
    )
    
    left_image_resize_node = ComposableNode(
        name='left_image_resize_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ResizeNode',
        parameters=[{
                'output_width': NETWORK_WIDTH,
                'output_height': NETWORK_HEIGHT,
                'keep_aspect_ratio': False # Do not add black borders to image
        }],
        remappings=[
            ('camera_info', '/left/camera_info_rect'),
            ('image', '/left/image_rect'),
            ('resize/camera_info', '/left/camera_info_rect_resize'),
            ('resize/image', '/left/image_rect_resize')]
    )

    right_image_resize_node = ComposableNode(
        name='right_image_resize_node',
        package='isaac_ros_image_proc',
        plugin='nvidia::isaac_ros::image_proc::ResizeNode',
        parameters=[{
                'output_width': NETWORK_WIDTH,
                'output_height': NETWORK_HEIGHT,
                'keep_aspect_ratio': False # Do not add black borders to image
        }],
        remappings=[
            ('camera_info', '/right/camera_info_rect'),
            ('image', '/right/image_rect'),
            ('resize/camera_info', '/right/camera_info_rect_resize'),
            ('resize/image', '/right/image_rect_resize')]
    )

    disparity_node = ComposableNode(
        name='disparity',
        package='isaac_ros_ess',
        plugin='nvidia::isaac_ros::dnn_stereo_depth::ESSDisparityNode',
        parameters=[{
            'engine_file_path': "/workspaces_2/isaac_ros-dev/src/isaac_ros_dnn_stereo_depth/resources/ess.engine",
            "threshold": 0.0,
            "image_type": "RGB_U8",
            }],
        remappings=[
            ('left/camera_info', '/left/camera_info_rect_resize'),
            ('left/image_rect', '/left/image_rect_resize'),
            ('right/camera_info', '/right/camera_info_rect_resize'),
            ('right/image_rect', '/right/image_rect_resize')
        ]
    )

    nitros_container = ComposableNodeContainer(
        name='nitros_container',
        package='rclcpp_components',
        namespace='',
        executable='component_container_mt',
        composable_node_descriptions=[
            left_rectify_node, right_rectify_node,
            left_image_resize_node, right_image_resize_node,
            disparity_node, 
        ],
        output='screen'
    )

    rosbag_playback = ExecuteProcess(
        cmd=['ros2', 'bag', 'play', '/workspaces_2/isaac_ros-dev/src/my_package/resource/rosbags/r2b_dataset/r2b_lounge',
             '--remap',
             'hawk_0_left_rgb_image:=/left/image_raw', 'hawk_0_left_rgb_camera_info:=/left/camera_info',
              'hawk_0_right_rgb_image:=/right/image_raw', 'hawk_0_right_rgb_camera_info:=/right/camera_info' ],
        output='screen'
    )

    rosbag_action = TimerAction(period=2.0,
            actions=[rosbag_playback])

    return LaunchDescription([
                            tf_base_link_to_stereocamera,
                            tf_stereocamera_left_to_right,
                            tf_stereocamera_body_to_optical_left,
                            tf_stereocamera_body_to_optical_right,
                            nitros_container,
                            disparity_visualizer_node,
                            rosbag_action,
                            ])

Benchmarks
Also , I have previously ran the benchmarks on the Jetson AGX Orin and RTX4090 for the ESS Disparity Graph.
For the Jetson, the output matches the results published here. The RTX4090 benchmark output is shown below.

[INFO] [1700079127.429810168] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.429974565] [r2b.Controller.Looping]: |                         Isaac ROS ESS Stereo Image Graph Benchmark                         |
[INFO] [1700079127.430097525] [r2b.Controller.Looping]: |                                        Final Report                                        |
[INFO] [1700079127.430219917] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.430337948] [r2b.Controller.Looping]: | Delta between First & Last Received Frames (ms) : 4992.231                                 |
[INFO] [1700079127.430450467] [r2b.Controller.Looping]: | Mean Playback Frame Rate (fps) : 349.880                                                   |
[INFO] [1700079127.430562736] [r2b.Controller.Looping]: | Mean Frame Rate (fps) : 350.011                                                            |
[INFO] [1700079127.430675304] [r2b.Controller.Looping]: | # of Missed Frames : 0.333                                                                 |
[INFO] [1700079127.430782716] [r2b.Controller.Looping]: | # of Frames Sent : 1748.000                                                                |
[INFO] [1700079127.430893636] [r2b.Controller.Looping]: | First Sent to First Received Latency (ms) : 15.956                                         |
[INFO] [1700079127.431005491] [r2b.Controller.Looping]: | Last Sent to Last Received Latency (ms) : 12.371                                           |
[INFO] [1700079127.431115873] [r2b.Controller.Looping]: | Max. Frame-to-Frame Jitter (ms) : 7.531                                                    |
[INFO] [1700079127.431227163] [r2b.Controller.Looping]: | Min. Frame-to-Frame Jitter (ms) : 0.001                                                    |
[INFO] [1700079127.431339987] [r2b.Controller.Looping]: | Mean Frame-to-Frame Jitter (ms) : 1.873                                                    |
[INFO] [1700079127.431451932] [r2b.Controller.Looping]: | Frame-to-Frame Jitter Std. Deviation (ms) : 1.285                                          |
[INFO] [1700079127.431564254] [r2b.Controller.Looping]: | Max. CPU Util. (%) : 11.425                                                                |
[INFO] [1700079127.431675427] [r2b.Controller.Looping]: | Min. CPU Util. (%) : 0.312                                                                 |
[INFO] [1700079127.431793299] [r2b.Controller.Looping]: | Mean CPU Util. (%) : 7.813                                                                 |
[INFO] [1700079127.431904325] [r2b.Controller.Looping]: | Std. Deviation CPU Util. (%) : 4.298                                                       |
[INFO] [1700079127.432016636] [r2b.Controller.Looping]: | Baseline CPU Util. (%) : 10.805                                                            |
[INFO] [1700079127.432129166] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.432241629] [r2b.Controller.Looping]: | [10.0fps] Delta between First & Last Received Frames (ms) : 4898.321                       |
[INFO] [1700079127.432351737] [r2b.Controller.Looping]: | [10.0fps] Mean Playback Frame Rate (fps) : 10.204                                          |
[INFO] [1700079127.432465604] [r2b.Controller.Looping]: | [10.0fps] Mean Frame Rate (fps) : 10.208                                                   |
[INFO] [1700079127.432599265] [r2b.Controller.Looping]: | [10.0fps] # of Missed Frames : 0                                                           |
[INFO] [1700079127.432764859] [r2b.Controller.Looping]: | [10.0fps] # of Frames Sent : 50                                                            |
[INFO] [1700079127.432886670] [r2b.Controller.Looping]: | [10.0fps] First Sent to First Received Latency (ms) : 15.700                               |
[INFO] [1700079127.433008496] [r2b.Controller.Looping]: | [10.0fps] Last Sent to Last Received Latency (ms) : 14.005                                 |
[INFO] [1700079127.433121320] [r2b.Controller.Looping]: | [10.0fps] Max. Frame-to-Frame Jitter (ms) : 4.814                                          |
[INFO] [1700079127.433234231] [r2b.Controller.Looping]: | [10.0fps] Min. Frame-to-Frame Jitter (ms) : 0.056                                          |
[INFO] [1700079127.433352138] [r2b.Controller.Looping]: | [10.0fps] Mean Frame-to-Frame Jitter (ms) : 1.712                                          |
[INFO] [1700079127.433463129] [r2b.Controller.Looping]: | [10.0fps] Frame-to-Frame Jitter Std. Deviation (ms) : 1.262                                |
[INFO] [1700079127.433574858] [r2b.Controller.Looping]: | [10.0fps] Max. CPU Util. (%) : 1.434                                                       |
[INFO] [1700079127.433689057] [r2b.Controller.Looping]: | [10.0fps] Min. CPU Util. (%) : 0.750                                                       |
[INFO] [1700079127.433805043] [r2b.Controller.Looping]: | [10.0fps] Mean CPU Util. (%) : 1.061                                                       |
[INFO] [1700079127.433917424] [r2b.Controller.Looping]: | [10.0fps] Std. Deviation CPU Util. (%) : 0.245                                             |
[INFO] [1700079127.434028501] [r2b.Controller.Looping]: | [10.0fps] Baseline CPU Util. (%) : 1.434                                                   |
[INFO] [1700079127.434138983] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.434249284] [r2b.Controller.Looping]: | [60.0fps] Delta between First & Last Received Frames (ms) : 4979.545                       |
[INFO] [1700079127.434360796] [r2b.Controller.Looping]: | [60.0fps] Mean Playback Frame Rate (fps) : 60.201                                          |
[INFO] [1700079127.434471255] [r2b.Controller.Looping]: | [60.0fps] Mean Frame Rate (fps) : 60.246                                                   |
[INFO] [1700079127.434584782] [r2b.Controller.Looping]: | [60.0fps] # of Missed Frames : 0                                                           |
[INFO] [1700079127.434698307] [r2b.Controller.Looping]: | [60.0fps] # of Frames Sent : 300                                                           |
[INFO] [1700079127.434811445] [r2b.Controller.Looping]: | [60.0fps] First Sent to First Received Latency (ms) : 14.864                               |
[INFO] [1700079127.434922770] [r2b.Controller.Looping]: | [60.0fps] Last Sent to Last Received Latency (ms) : 11.116                                 |
[INFO] [1700079127.435035109] [r2b.Controller.Looping]: | [60.0fps] Max. Frame-to-Frame Jitter (ms) : 6.670                                          |
[INFO] [1700079127.435147520] [r2b.Controller.Looping]: | [60.0fps] Min. Frame-to-Frame Jitter (ms) : 0.000                                          |
[INFO] [1700079127.435261458] [r2b.Controller.Looping]: | [60.0fps] Mean Frame-to-Frame Jitter (ms) : 1.690                                          |
[INFO] [1700079127.435372766] [r2b.Controller.Looping]: | [60.0fps] Frame-to-Frame Jitter Std. Deviation (ms) : 1.321                                |
[INFO] [1700079127.435485121] [r2b.Controller.Looping]: | [60.0fps] Max. CPU Util. (%) : 3.044                                                       |
[INFO] [1700079127.435595983] [r2b.Controller.Looping]: | [60.0fps] Min. CPU Util. (%) : 2.163                                                       |
[INFO] [1700079127.435709391] [r2b.Controller.Looping]: | [60.0fps] Mean CPU Util. (%) : 2.646                                                       |
[INFO] [1700079127.435824918] [r2b.Controller.Looping]: | [60.0fps] Std. Deviation CPU Util. (%) : 0.284                                             |
[INFO] [1700079127.435936954] [r2b.Controller.Looping]: | [60.0fps] Baseline CPU Util. (%) : 3.044                                                   |
[INFO] [1700079127.436048390] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.436159937] [r2b.Controller.Looping]: | [30.0fps] Delta between First & Last Received Frames (ms) : 4966.465                       |
[INFO] [1700079127.436270711] [r2b.Controller.Looping]: | [30.0fps] Mean Playback Frame Rate (fps) : 30.201                                          |
[INFO] [1700079127.436383566] [r2b.Controller.Looping]: | [30.0fps] Mean Frame Rate (fps) : 30.203                                                   |
[INFO] [1700079127.436497996] [r2b.Controller.Looping]: | [30.0fps] # of Missed Frames : 0                                                           |
[INFO] [1700079127.436609547] [r2b.Controller.Looping]: | [30.0fps] # of Frames Sent : 150                                                           |
[INFO] [1700079127.436718202] [r2b.Controller.Looping]: | [30.0fps] First Sent to First Received Latency (ms) : 12.999                               |
[INFO] [1700079127.436830065] [r2b.Controller.Looping]: | [30.0fps] Last Sent to Last Received Latency (ms) : 12.755                                 |
[INFO] [1700079127.436941802] [r2b.Controller.Looping]: | [30.0fps] Max. Frame-to-Frame Jitter (ms) : 8.984                                          |
[INFO] [1700079127.437052080] [r2b.Controller.Looping]: | [30.0fps] Min. Frame-to-Frame Jitter (ms) : 0.053                                          |
[INFO] [1700079127.437165156] [r2b.Controller.Looping]: | [30.0fps] Mean Frame-to-Frame Jitter (ms) : 1.638                                          |
[INFO] [1700079127.437276179] [r2b.Controller.Looping]: | [30.0fps] Frame-to-Frame Jitter Std. Deviation (ms) : 1.367                                |
[INFO] [1700079127.437387448] [r2b.Controller.Looping]: | [30.0fps] Max. CPU Util. (%) : 2.100                                                       |
[INFO] [1700079127.437497071] [r2b.Controller.Looping]: | [30.0fps] Min. CPU Util. (%) : 0.406                                                       |
[INFO] [1700079127.437606881] [r2b.Controller.Looping]: | [30.0fps] Mean CPU Util. (%) : 1.470                                                       |
[INFO] [1700079127.437718793] [r2b.Controller.Looping]: | [30.0fps] Std. Deviation CPU Util. (%) : 0.522                                             |
[INFO] [1700079127.437829335] [r2b.Controller.Looping]: | [30.0fps] Baseline CPU Util. (%) : 1.784                                                   |
[INFO] [1700079127.437941343] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.438052503] [r2b.Controller.Looping]: | [metadata] Test Name : Isaac ROS ESS Stereo Image Graph Benchmark                          |
[INFO] [1700079127.438164119] [r2b.Controller.Looping]: | [metadata] Test File Path : /workspaces_2/isaac_ros-dev/src/isaac_ros_benchmark/scripts/isaac_ros_ess_graph.py |
[INFO] [1700079127.438274537] [r2b.Controller.Looping]: | [metadata] Test Datetime : 2023-11-15T20:09:44Z                                            |
[INFO] [1700079127.438384035] [r2b.Controller.Looping]: | [metadata] Device Hostname : MyUbuntu22                                               |
[INFO] [1700079127.438494878] [r2b.Controller.Looping]: | [metadata] Device Architecture : x86_64                                                    |
[INFO] [1700079127.438608035] [r2b.Controller.Looping]: | [metadata] Device OS : Linux 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct  9 15:34:04 UTC 2 |
[INFO] [1700079127.438719706] [r2b.Controller.Looping]: | [metadata] Idle System CPU Util. (%) : 0.375                                               |
[INFO] [1700079127.438825908] [r2b.Controller.Looping]: | [metadata] Benchmark Mode : 1                                                              |
[INFO] [1700079127.438939656] [r2b.Controller.Looping]: | [metadata] Peak Throughput Prediction (Hz) : 349.688                                       |
[INFO] [1700079127.439050335] [r2b.Controller.Looping]: | [metadata] Input Data Path : /workspaces/isaac_ros-dev/src/ros2_benchmark/assets/datasets/r2b_dataset/r2b_hideaway |
[INFO] [1700079127.439160871] [r2b.Controller.Looping]: | [metadata] Input Data Size (bytes) : 1913946112                                            |
[INFO] [1700079127.439271425] [r2b.Controller.Looping]: | [metadata] Input Data Hash : 96a3c2b8007173f9da57e848b4fcee8c                              |
[INFO] [1700079127.439384599] [r2b.Controller.Looping]: +--------------------------------------------------------------------------------------------+
[INFO] [1700079127.439836946] [r2b.Controller.Looping]: Exported benchmark report to /tmp/r2b-log-20231115-200944.json

Hi @HiddenNetwork

I forwarded your message to NVIDIA Engineering; I will reply as soon as possible.

Raffaello

Hi @HiddenNetwork

We have checked your code and based on the output from the benchmarks, it appears that the Isaac ROS packages are functioning properly.

The delay you notice from your demo is coming probably from your launch script. Your launch file has different Nodes to build a simple URDF with all TF required. These nodes introduce a delay between your left and right camera and introduce noise on the StereoDNN disparity image.
You can look at the delay between your left and right image directly by watching the image attached to your post.

I suggest instead of running separate static_transform_publisher use a URDF where the publication of all TF are synchronized and at the same time.