[Documentation] [TitleIndex] [WordIndex

  Show EOL distros: 

Package Summary

A ROS nodelet and node that wraps the driver API for UEye cameras by IDS Imaging Development Systems GMBH.

Package Summary

A ROS nodelet and node that wraps the driver API for UEye cameras by IDS Imaging Development Systems GMBH.

  • Maintainer status: developed
  • Maintainer: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • Author: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • License: BSD
  • Source: git https://github.com/anqixu/ueye_cam.git (branch: master)

Package Summary

A ROS nodelet and node that wraps the driver API for UEye cameras by IDS Imaging Development Systems GMBH.

  • Maintainer status: maintained
  • Maintainer: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • Author: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • License: BSD
  • Source: git https://github.com/anqixu/ueye_cam.git (branch: master)

Package Summary

A ROS nodelet and node that wraps the driver API for UEye cameras by IDS Imaging Development Systems GMBH.

  • Maintainer status: maintained
  • Maintainer: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • Author: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • License: BSD
  • Source: git https://github.com/anqixu/ueye_cam.git (branch: master)

Package Summary

A ROS nodelet and node that wraps the driver API for UEye cameras by IDS Imaging Development Systems GMBH.

  • Maintainer status: maintained
  • Maintainer: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • Author: Anqi Xu <anqixu AT cim.mcgill DOT ca>
  • License: BSD
  • Source: git https://github.com/anqixu/ueye_cam.git (branch: master)

Fuerte (or older ROS release) checkout: git clone https://github.com/anqixu/ueye_cam.git --branch fuerte

Overview

This package provides a ROS interface for the UEye digital cameras from IDS Imaging Development Systems GMBH. This ROS interface exposes many of the features of the underlying Linux camera API from IDS, and is compatible with image_pipeline, camera_calibration, and image_geometry.

This package has been tested with the Software Package for USB and GigE uEye Cameras Version 4.20 64 Bit for Linux, on Ubuntu 12.04 x64 & Ubuntu 13.04 x64, operating with UEye UI122xLE-C USB 2.0 cameras.

(side-note: it is technically possible to run ueye_cam on ARM devices; see video caption for outline of instructions)

This implementation makes use of certain C++11 features (such as std::thread, std::to_string, etc), although the CMakeLists.txt is configured for GCC >= 4.6 (and hence uses the -std=c++0x flag).

Features

Screenshot-Reconfigure.png

Clock Rate

The IDS camera API allows users to have fine-grain control over the camera on-board processor's clock rate, which determines the range of values for frame rates, exposures, and other camera settings. This can be adjusted at runtime alongside other parameters, via dynamic_reconfigure. It is however not recommended to operate the camera at a fast clock rate for extended periods of time, as the onboard processor may get excessively hot. Thus, ideally one should adjust the clock rate to match a target frame rate and exposure setting.

Bayer Decoding

You may choose to use the underlying IDS camera API to perform bayer decoding and publish images as 'rgb8' or 'mono8', or alternatively choose to publish images as 'bayer_rggb8' and rely on the standard ROS image_pipeline package for decoding. Currently, this ROS interface does not expose fine-grain control over the bayer decoding engine from the underlying IDS camera API.

Reduced Area of Interest (AOI) vs. Down-sampled Images

A common mistake is to interpret the 'image_width' and 'image_height' ROS parameters as the width and height of the resulting ROS image. Unfortunately, these names were chosen to be consistent with official camera interfaces provided by IDS, and they refer to the width and height of the camera sensor's Area of Interest (AOI). Therefore, values for 'image_width' and 'image_height' that are smaller than your camera's maximum values will result in cropped field of view (a.k.a. reduced AOI).

For typical use cases, one should modify values for 'sensor_scaling' / 'binning' / 'subsampling' parameters, in order to down-sample the resulting ROS image to the desired dimensions without reducing the field of view.

Note that all parameters (both rosparam, roslaunch, and dynamic reconfigure) will be automatically capped to valid ranges / values for your camera's model, upon change. You can also run the 'ueyedemo' official camera interface to obtain bounds and current values for the camera's onboard parameters (which ueye_cam tries faithfully to replicate in ROS).

Build Instructions

1. Install the IDS Software Suite 4.xx for Linux from here

2. create catkin workspace mkdir -p <your_ueye_cam_ws>/src.

3. initialize and download source code

4. Run catkin_make under <your_ueye_cam_ws>.

ROS API

ueye_cam

ROS interface node for UEye digital cameras from IDS Imaging Development Systems. No longer available from ROS Groovy onwards; use nodelet + launch files directly.

Published Topics

<camera_name>/<camera_topic> (sensor_msgs/Image) <camera_name>/camera_info (sensor_msgs/CameraInfo)

Services

<~camera_name>/set_camera_info (sensor_msgs/SetCameraInfo)

Parameters

Load-time Parameters
Static parameters loaded during initialization of the interface. Please refer to launch/rgb8.launch for an example. ~camera_name (string, default: camera) ~camera_topic (string, default: image_raw) ~camera_id (int, default: 0) ~camera_parameters_file (string, default: <ueye_cam_path>/camera_conf/<~camera_name>.ini) ~camera_intrinsics_file (string, default: <ueye_cam_path>/camera_info/<~camera_name>.yaml)
Dynamically Reconfigurable Parameters
See the dynamic_reconfigure package for details on dynamically reconfigurable parameters. ~image_width (int, default: 640) ~image_height (int, default: 480) ~image_left (int, default: -1) ~image_top (int, default: -1) ~color_mode (str, default: mono8) ~subsampling (int, default: 1) ~binning (int, default: 1) ~sensor_scaling (double, default: 1.0) ~auto_gain (bool, default: False) ~master_gain (int, default: 0) ~red_gain (int, default: 0) ~green_gain (int, default: 0) ~blue_gain (int, default: 0) ~gain_boost (bool, default: False) ~auto_exposure (bool, default: False) ~exposure (double, default: 33.0) ~auto_white_balance (bool, default: False) ~white_balance_red_offset (int, default: 0) ~white_balance_blue_offset (int, default: 0) ~flash_delay (int, default: 0) ~flash_duration (int, default: 1000) ~ext_trigger_mode (bool, default: False) ~auto_frame_rate (bool, default: False) ~frame_rate (double, default: 10.0) ~pixel_clock (int, default: 25)

ueye_cam_nodelet

This is a fully compatible nodelet version of ueye_cam. In fact, ueye_cam is implemented as a standalone nodelet manager running this nodelet.

Sample Launch Files

All launch files are commented to facilitate modifications. Ideally, you should have a quick look at each launch file before execution.

launch/rgb8.launch

Most straight-forward use case -- uses the UEye drivers to convert to RGB (3*8-bit) images, and publishes on /camera/image_raw.

launch/bayer_rggb_image_proc.launch

Returns raw Bayer-encoded (RGGB encoding) images from the UEye camera, and uses image_proc to convert to RGB images. Also publishes on /camera/image_raw.

launch/debug.launch

Same as rgb8.launch, but spawns the nodelet (manager) in gdb on a separate screen. Not recommended for typical use.

launch/master_slaves_rgb8.launch

Sample launch file to demonstrate external triggering mode for synchronizing multiple UEye cameras. You will need to add additional physical modifications to the cameras for this to work; see 'Camera Synchronization' section for more details.

Do not use this launch file to operate a single UEye camera! Also, any camera with the ROS parameter external_trigger_mode set to True, and does not have a valid triggering signal, will not return valid images and will behave unpredictably.

Camera Calibration

The ueye_cam wrapper fully supports camera_calibration. You can refer to camera_calibration for info on calibrating your own UEye cameras.

All calibration files are stored by default under: ~/.ros/camera_info/<camera_name>.yaml

Camera Synchronization

You can enable (falling-edge) external trigger mode via dynamic_reconfigure. You will also need to connect a corresponding trigger signal to the digital input pin on your cameras. If you would like one camera in free-run mode to trigger other camera(s) in external trigger mode, you can connect the digital output pin (flash) of the master camera to the digital input pin(s) of the slave(s). Note that currently, you will also need to either logically negate the active-high flash output in hardware, or change the code slightly so that the flash output emits active-low.

We have connected multiple cameras in hardware to an Arduino-compatible device (a TinyLily), which allows any camera to act as master and any number of other cameras to act as slaves, and achieve synchronization seamlessly with unified hardware add-on required. Please see here for further documentation and instructions. A video demonstration of UEye camera synchronization can be seen here.

Please contact us if you would like further instructions on synchronizing cameras.

Footnote: Relationship to other ROS wrappers for UEye cameras

Historically speaking, ueye_cam was based on an earlier ROS package for interfacing with PointGrey cameras. Given that the initial work on ueye_cam was done prior to the release of other similar ROS wrappers like ueye and ueyecamera, the original intention was to keep this code internal so as to avoid contention. Nevertheless, this code has since been released as result of a number of recent requests, with the sole hope that it may benefit the ROS community. Please check out the other packages to see which one will best suite your needs.


2019-11-09 13:22