Introduction

The SceneScan stereo vision sensor by Nerian Vision Technologies is a stand-alone processing system for performing stereo matching in real time. It is connected to two industrial USB cameras that provide input image data. SceneScan correlates the images of both cameras and produces a disparity map, which is transmitted through gigabit ethernet. The disparity map describes a mapping of image points from the left camera image to corresponding image points in the right camera image. With this information it is possible to reconstruct the 3D location of the corresponding scene points.

Please note: since version 3.0.0 this node is no longer compatible to SP1 – the predecessor of SceneScan. Please use an older version with SP1 or the now discontinued nerian_sp1 node

Installation

On Ubuntu Linux, please use the following commands to install the official package for your current ROS version.

Should there not be an appropriate package for your system and ROS version, please checkout the git repository and compile the code using catkin.

ROS Node

The data delivered by SceneScan can be received using the available open source API. Using the API directly is recommended for high performance applications. Alternatively the nerian_stereo ROS node can be used for publishing the received data as ROS messages.

Published Topics

The node can publish the received data through three different topics:

A point cloud, which is obtained by reconstructing the 3D location of each pixel in the disparity map. Optionally, the point cloud can include an intensity channel, which contains intensity data from the left rectified camera image.

The stereo disparity map that is computed by SceneScan. The disparity map is transmitted as an image message with mono16 encoding. Please note that the disparity map has a 4-bit subpixel resolution. This means that its values have to be divided by 16 in order to receive the true pixel disparity. Optionally, the disparity map can be color coded for visualization. In this case the encoding will be bgr8.

The rectified image of the left camera with mono8 or mono12 encoding, if SceneScan is configured in stereo matching or rectify mode. If the device is configured in pass-through mode the unrectified left camera image will be published through this topic.

Parameters

The behaviour of the node can be configured through various parameters. An example parameterization can be found in the included launch file nerian_stereo.launch. The following parameters are supported:

~point_cloud_intensity_channel (string, default: "mono8")

Specifies if and how the intensity channel is encoded in the published point cloud. Available options are: none, mono8, rgb8, rgb32f.

~ros_coordinate_system (bool, default: "true")

If enabled, the typical ROS coordinate system is used, with the x-axis pointing forward, the y-axis pointing left and the z-axis pointing upwards. If disabled, SceneScan's default coordinate system is used, with the x-axis pointing right, the y-axis pointing downwards, and the z-axis pointing forward.

~color_code_disparity_map (string, default: "none")

Selects the color scale for color coding of the disparity map. Possible values are "none", "rainbow" and "red_blue".

~color_code_legend (bool, default: "true")

If enabled, a legend will be added to the color coded disparity map.

~frame (string, default: "world")

ID of the frame that will be set for all transmitted messages.

~remote_host (string, default: "0.0.0.0")

Host name or IP address of SceneScan, which is used for network communication.

~remote_port (string, default: "7681")

Remote port number or service name that is used for network communicating with SceneScan.

~use_tcp (bool, default: "false")

If enabled, TCP is used rather than UDP as underlying network protocol.

~calibration_file (string, default: "")

Location of a YAML-file containing camera calibration data. This file can be obtained from the SceneScan webinterface. An example calibration file is provided in the repository. If this parameter is omitted, the published camera calibration information only contains the q-Matrix.

~delay_execution (double, default: 0)

Allows the configuration of an initial delay in seconds when launching the node. This option can be used to delay the node launch while the calibration information is downloaded.

~max_depth (double, default: -1)

If set to a positive value, all points in the point cloud with a higher depth will be set to invalid.

Testing

The topics published by the nerian_stereo node can be viewed with rviz. The disparity map can also be visualized with the image_view node. In this case color coding should be activated such that the disparity map can be displayed on a screen. In order to do so, please launch the image_view node as follows:

rosrun image_view image_view image:=/nerian_stereo/disparity_map

For displaying the left camera image, please run the image_view node with the following command line:

rosrun image_view image_view image:=/nerian_stereo/left_image

ROS 2 Support

A version for ROS 2 is available in the ros2 branch of the official git repository and can be compiled using the new ROS 2 build tool ament. Binary packages will be made available once ROS 2 has reached a more final state.

At the time of writing, ROS 2 does not yet support parameter initialization. The Node therefore provides the functionality to parse parameters from the command line. Please see the provided example script (run_nerian_stereo.sh) for details on how to specify parameters.