This repository holds code of a ROS package for image acquisition with Black Fly camera. It is basically a ROS wrapper of the low-level API provided by Ponit Grey, the manufacturer of the camera. The ROS node can be configured to act as a server or as publisher at a given rate.
The package has been tested with the following dependencies:
- Ubuntu 16.04
- CMake + gcc
- ROS Kinetic
- OpenCV v3.1 or 3.2 (shipped with ROS Kinetic)
- Forked version of ROS common_msg metapackage. Clone it at your ROS workspace.
- FlyCapture2 (propietary SDK from the manufacturer)
To install the FlyCapture2 SDK dependency:
- Download the SDK from the Point Grey's website
- Install it by following the instructions in the README file included in the download.
Download to your ROS workspace /src, with the command:
$ git clone https://github.com/beta-robots/ptgrey_bfly_camera.git
and from your ROS workspace, build it with:
$ catkin_make --only-pkg-with-deps ptgrey_bfly_camera
Edit the .yaml file at config/ folder with the wished parameters. Specially set the run_mode, indicating if you want the camera to run as a SERVER (image as a service), or as a PUBLISHER (image streaming).
Run the node (by default an rviz window will appear)
$ roslaunch ptgrey_bfly_camera ptgrey_bfly_camera.launch
If the camera runs as a PUBLISHER, this node fulfills with the conventions specified here, about topics and service naming.
If the camera operates as a SERVER, please request the image service from another terminal, with the exposure parameter (0 means auto). This service will respond with a concatenation of two ROS sensor messages: Image and CameraInfo
$ rosservice call /ptgrey_bfly_camera/image_server "exposure: 0"
The node will look for a yaml file, with the intrinsics calibration parameters, at folder /calibration. The camera_info topic will publish the parameters read from this file. If there is no file available, the node will run anyway, but the camera_info topic will publish invalid data. In case you need a calibrated camera, execute a procedure such as this one. At the end of such procedure, tha calibration node will call a service implemented in the camera node, requesting to store the calibration data, so a calibration file will be created and the camera_info topic will publish the new calibration parameters found.
The tool flycap, installed with camera's manufacturer SDK, has a set of options to configure the camera, like setting the device IP among others.
$ flycap