camera_aravis package from camera_aravis repo


Package Summary

Tags No category tags.
Version 4.0.2
License LGPL v2
Build type CATKIN

Repository Summary

Checkout URI
VCS Type git
VCS Version noetic-devel
Last Updated 2022-05-04
CI status No Continuous Integration
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

camera_aravis: A complete and comfortable GenICam (USB3Vision and GigEVision) based camera driver for ROS (ethernet and usb).

Additional Links


  • Dominik Kleiser, Fraunhofer IOSB


  • Dominik Kleiser, Fraunhofer IOSB
  • Dominik A. Klein, Fraunhofer FKIE
  • Steve Safarik, Straw Lab
  • Andrew Straw, Straw Lab
  • Floris van Breugel, van Breugel Lab


Actively maintained repository for the ROS1 camara_aravis driver. It is open source under the LGPL (like Aravis itself).

The Aravis library is a glib/gobject based library for video acquisition using Genicam cameras. It currently implements the gigabit ethernet and USB3 protocols used by industrial cameras.

The camera_aravis driver has long history of multiple forks and now abandoned GitHub repositories. This repository is based on, which in turn was forked from a deleted github repo (, which was itself forked from

Tested with Aravis version 0.6.X. Since Ubuntu 20.04 the library can be installed from the official Ubuntu package repository. Install with:

sudo apt install libaravis-dev

The basic command to run camera_aravis:

$ rosrun camera_aravis camnode

To run it in a given namespace, which is the better way to do it:

$ ROS_NAMESPACE=cam1 rosrun camera_aravis camnode

Continuous Integration

service Noetic Master
GitHub - CI
Build Farm Noetic -


This ROS node publishes messages image_raw and camera_info for a specified camera. It supports a variety of camera features via the ROS reconfigure_gui, including the following: * ExposureAuto (string: Off, Once, Continuous) * GainAuto (string: Off, Once, Continuous) * ExposureTimeAbs (float) * Gain (float) * AcquisitionMode (string: Continuous, SingleFrame, MultiFrame) * AcquisitionFrameRate (float) * TriggerMode (string: Off, On) * TriggerSource (string: Software, Line1, Line2) * softwaretriggerrate (float) * frame_id (string) * FocusPos (integer) * mtu (integer)

Note that the above are also the ROS parameter names of their respective feature. You may set initial values for the camera by setting ROS parameters in the camera's namespace.

In addition to the above features, this driver now supports (almost) every feature of every camera, you just have to know how the feature is specified; each GenICam-based camera contains an XML file onboard, and by viewing this file you can determine which ROS parameters to set for camera_aravis to write to the camera. You can use arv-tool-0.2 to see the feature list and the XML file (e.g. "arv-tool-0.2 --name=Basler-21285878 features")

Note that for this special feature access, the ROS parameter type must match the feature type. For example, a Basler ac640 has a boolean feature called "GammaEnable", an integer feature called "BlackLevelRaw", and a string enum feature called "PixelFormat" that takes values (Mono8, Mono12, Mono12Packed, YUV422Packed, etc). The ROS params that you set for these must be, respectively, a bool, an integer and a string. Also note that boolean features must be specified as ROS params false/true, not as integer 0/1.

$ rosparam set cam1/GammaEnable false
$ rosparam set cam1/BlackLevelRaw 5
$ rosparam set cam1/PixelFormat Mono12
$ ROS_NAMESPACE=cam1 rosrun camera_aravis camnode

camera_aravis supports multiple cameras, each of which may be specified on the command-line, or via parameter. Runs one camera per node.

To specify which camera to open, via the command-line:

$ ROS_NAMESPACE=cam1 rosrun camera_aravis camnode Basler-21237813

To specify which camera to open, via a parameter:

$ rosparam set cam1/guid Basler-21237813
$ ROS_NAMESPACE=cam1 rosrun camera_aravis camnode

It supports the dynamic_reconfigure protocol, and once the node is running, you may adjust its parameters by running the following and then manipulating the GUI:

$ rosrun dynamic_reconfigure reconfigure_gui

There is an additional nice feature related to timestamps that unifies ROS time with camera time. We want a stable timestamp on the images that the camera delivers, giving a nice smooth time delta from frame to frame. If we were to use the ROS clock on the PC, by the time we get the image packets from the camera a variable amount of time has passed on the PC's clock due to variable network and system delays. The camera's onboard clock is stable but it doesn't match with the ROS clock on the PC, and furthermore since it comes from a different piece of hardware, the two clock's rates are slightly different.

The solution is to start with a base of ROS time, and to accumulate the dt's from the camera clock. To accomodate the difference in clock rates, a PID controller gently pulls the result toward ROS time.


Changelog for package camera_aravis

4.0.2 (2022-05-04)

  • Add optional ExtendedCameraInfo message to publish additional camera acquisition parameters
  • Fix: Set reasonable height and width when not given in the CameraInfo
  • Contributors: Peter Mortimer

4.0.1 (2022-03-25)

  • Add ROS getter/setter services for camera features
  • Add support for multistream encoding conversion
  • Fix: Pass on the correct encoding for the additional streams of multisource cameras
  • Fix: Continuously check the spawning_ flag
  • Fix: Check spawning_ flag only once during spawnStream
  • Contributors: Peter Mortimer, Thomas Emter, Dominik Kleiser

4.0.0 (2021-10-27)

  • Major refactoring
  • Add support for ROS Noetic and aravis-0.6
  • Fix several bugs (see git history)
  • Add new features:
    • Support for multisource cameras
    • Zero-copy transport with ROS nodelets
    • Camera time synchronization
    • Example launch files
  • Update package author and maintainer
  • Contributors: Dominik Klein, Floris van Breugel, Ga

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Launch files

  • launch/multisource_camera_aravis.launch
      • load_manager [default: true]
      • manager_name [default: camera_manager]
      • manager_threads [default: 4]
      • sensor_name [default: aravis_cam]
      • serial_no [default: ]
      • camera_info_url [default: file://$(find camera_aravis)/launch/calib_vis.yaml,file://$(find camera_aravis)/launch/calib_nir.yaml]
      • channel_names [default: vis,nir]
      • pixel_format [default: BayerRG8,Mono8]
      • width [default: 2048]
      • height [default: 1536]
      • fps [default: 10]
  • launch/camera_aravis.launch
      • load_manager [default: true]
      • manager_name [default: camera_manager]
      • manager_threads [default: 4]
      • sensor_name [default: aravis_cam]
      • serial_no [default: ]
      • camera_info_url [default: ]
      • pixel_format [default: BGR8]
      • width [default: 640]
      • height [default: 480]
      • fps [default: 25]


Recent questions tagged camera_aravis at