Nodes and Components

This package includes a number of ROS 2 components that can be assembled into stereo image processing pipelines. See the tutorial Launching stereo_image_proc Components.

Alternatively, each component can be run as a standalone node.

stereo_image_proc::DisparityNode

Performs block matching on a pair of rectified stereo images, producing a disparity image. Also available as a standalone node with the name disparity_node.

Subscribed Topics

  • left/camera_info (sensor_msgs/CameraInfo): Left camera metadata.

  • left/image_rect (sensor_msgs/Image): Left monochrome rectified image stream.

  • right/camera_info (sensor_msgs/CameraInfo): Right camera metadata.

  • right/image_rect (sensor_msgs/Image): Right monochrome rectified image stream.

Published Topics

  • disparity (sensor_msgs/DisparityImage): Floating point disparity image with metadata.

Parameters

Disparity algorithm variant
  • sgbm_mode (int, default: 0): Stereo matching algorithm variation:

    • SGBM (0)

    • HH (1)

    • SGBM_3WAY (2)

    • HH4 (3)

Disparity pre-filtering

  • prefilter_size (int, default: 9): Normalization window size, pixels.

  • prefilter_cap (int, default: 31): Bound on normalized pixel values.

Disparity correlation

  • correlation_window_size (int, default: 15): Edge size (pixels) of the correlation window for matching. Values must be odd, in the range 5 to 255 (but with an extra performance hit for values larger than 21). Larger values have smoother disparity results, but smear out small features and depth discontinuities.

  • min_disparity (int, default: 0): Minimum disparity, or the offset to the disparity search window. By setting to a positive value, the cameras become more “cross-eyed” and will find objects closer to the cameras. If the cameras are “verged” (inclined toward each other), it may be appropriate to set min_disparity to a negative value. When min_disparity is greater than 0, objects at large distances will not be found.

  • disparity_range (int, default: 64): The size of the disparity search window (pixels). Together with min_disparity, this defines the “horopter,” the 3D volume that is visible to the stereo algorithm.

Disparity post-filtering

  • uniqueness_ratio (double, default: 15.0): Filters disparity readings based on a comparison to the next-best correlation along the epipolar line. Matches where uniqueness_ratio > (best_match - next_match) / next_match are filtered out.

  • texture_threshold (int, default: 10): Filters disparity readings based on the amount of texture in the correlation window.

  • speckle_size (int, default: 100): Filters disparity regions that are less than this number of pixels. For example, a value of 100 means that all regions with fewer than 100 pixels will be rejected.

  • speckle_range (int, default: 4): Groups disparity regions based on their connectedness. Disparities are grouped together in the same region if they are within this distance in pixels.

Synchronization

  • approximate_sync (bool, default: false): Whether to use approximate synchronization. Set to true if the left and right cameras do not produce exactly synced timestamps.

  • approximate_sync_tolerance_seconds (double, default: 0.0): Tolerance when using approximate sync.

  • image_transport (string, default: raw): Image transport to use for left image subscriber.

  • queue size (int, default: 5): Size of message queue for each synchronized topic. You may need to raise this if images take significantly longer to travel over the network than camera info and/or the delay from disparity processing is too long.

Common
  • use_image_transport_camera_info (bool, default: true): To control whether DisparityNode uses image_transport::getCameraInfoTopic for deriving camera_info topics. To set false, the node directly uses the camera_info topics specified via remapping (e.g., left/camera_info and right/camera_info), bypassing image_transport’s derivation logic.

stereo_image_proc::PointCloudNode

Combines a rectified color image and disparity image to produce a sensor_msgs::PointCloud2 point cloud. Also available as a standalone node point_cloud_node.

Note: ROS 1 had both a point_cloud and point_cloud2 version to handle the now deprecated and removed sensor_msgs::PointCloud and stereo_msgs::PointCloud2. This node corresponds to the point_cloud2 version although we have dropped the 2.

Subscribed Topics

  • disparity (stereo_msgs/DisparityImage): Floating point disparity image with metadata.

  • left/camera_info (sensor_msgs/CameraInfo): Left camera metadata.

  • left/image_rect_color (sensor_msgs/Image): Rectified image.

  • right/camera_info (sensor_msgs/CameraInfo): Right camera metada.

Published Topics

  • points2 (sensor_msgs/PointCloud2): Stereo point cloud with RGB color.

Parameters

  • approximate_sync (bool, default: false): Whether to use approximate synchronization. Set to true if the left and right cameras do not produce exactly synced timestamps.

  • avoid_point_cloud_padding (bool, default: false): Avoid using alignment padding in the generated point cloud. This reduces bandwidth requirements, as the point cloud size is halved. Using point clouds without alignment padding might degrade performance for some algorithms.

  • image_transport (string, default: raw): Image transport to use for left image subscriber.

  • queue size (int, default: 5): Size of message queue for each synchronized topic. You may need to raise this if images take significantly longer to travel over the network than camera info and/or the delay from disparity processing is too long.

  • use_color (oool, default: true): If false, point cloud will be XYZ only.