-
 

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status Continuous Integration : 0 / 0
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

No version for distro ardent. Known supported distros are highlighted in the buttons above.
No version for distro bouncy. Known supported distros are highlighted in the buttons above.
No version for distro crystal. Known supported distros are highlighted in the buttons above.

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

No version for distro jade. Known supported distros are highlighted in the buttons above.

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

No version for distro hydro. Known supported distros are highlighted in the buttons above.

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange

rc_genicam_api package from rc_genicam_api repo

rc_genicam_api

Package Summary

Tags No category tags.
Version 2.7.0
License BSD
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/roboception/rc_genicam_api.git
VCS Type git
VCS Version master
Last Updated 2024-12-02
Dev Status DEVELOPED
CI status Continuous Integration : 0 / 0
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

GenICam/GigE Vision Convenience Layer. This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images. Although the tools are meant to be useful when working in a shell or in a script, their main purpose is to serve as example on how to use the API for reading and setting parameters, streaming and synchronizing images. See LICENSE.md for licensing terms of the different parts.

Additional Links

Maintainers

  • Felix Ruess
  • Heiko Hirschmueller

Authors

  • Heiko Hirschmueller

Roboception GenICam Convenience Layer

This package combines the Roboception convenience layer for images with the GenICam reference implementation and a GigE Vision transport layer. It is a self contained package that permits configuration and image streaming of GenICam / GigE Vision 2.0 compatible cameras like the Roboception rc_visard. The API is based on C++ 11 and can be compiled under Linux and Windows.

This package also provides some tools that can be called from the command line for discovering cameras, changing their configuration and streaming images.

Prebuilt binaries can be downloaded on the releases page.

Contents

Minimum Requirements

  • Linux x64 / i86: gcc >= 4.8
  • ARMhf: gcc >= 4.9.4
  • Linux AArch64: gcc >= 5.4
  • Windows 10: Visual Studio >= VC140

Compiling and Installing

Linux

Building follows the standard cmake build flow. Please make sure to set the install path before compiling. Otherwise it can happen that the transport layer is not found when calling the tools.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<install-directory> ..
make
make install

Bash completion

To install bash completion, configure cmake with -DINSTALL_COMPLETION=ON

Debian package

A Debian package can be built with e.g.

cd <main-directory>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make package

Windows

The main directory contains the script build_win.bat. Execute this script in the Visual Studio Developer Command Prompt for building the package. Alternatively, you can use cmake manually to generate a build project for compilation with your favorite compiler.

NOTE: For using the libraries in own projects, define the symbol GENICAM_NO_AUTO_IMPLIB in your project file to avoid linker problems with the GenICam libraries.

Description of Tools

The tools do not offer a graphical user interface. They are meant to be called from a shell (e.g. Power Shell under Windows) or script and controlled by command line parameters. Calling the tools without any parameters prints a help text on the standard output.

NOTE: If any tool returns the error No transport layers found in path ..., then read the section ‘Transport Layer’ below.

gc_info

Lists all available systems (i.e. transport layers), interfaces and devices with some information. If a device ID is given on the command line, then the complete GenICam nodemap with all parameters and their current values are listed.

gc_info -h | -l | ([-o <xml-output-file>] [<interface-id>:]<device-id>[?<node>] [<key>=<value>] ...)

Provides information about GenICam transport layers, interfaces and devices.

Options:
-h   Prints help information and exits
-l   List all all available devices on all interfaces
-o   Filename to store XML description from specified device

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
<node>         Optional name of category or parameter to be reported
<key>=<value>  Optional GenICam parameters to be changed in the given order before reporting

gc_config

Can be used to list network specific information of GenICam compatible GigE Vision 2 cameras. The network settings as well as all other parameters provided via GenICam can be changed.

gc_config -h | -l | ([<interface-id>:]<device-id> <options> ...)

Configuration of a GigE Vision device via GenICam.

-h             Prints help information and exits
-l             Lists all available GigE Vision devices

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

Options:
-n <id>        Set user defined id
-d 1|0         Switch DHCP on or off
-p 1|0         Switch persistent IP on or off
-t 1|0         Switch precision time protocol (ptp) on or off
-i <ip>        Set persistent IP address
-s <ip>        Set subnet mask for persistent IP address
-g <ip>        Set default gateway for persistent IP address
--iponly       Show current IP of device instead of full summary
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_stream

This tool shows how to configure and stream images from a camera. GenICam features can be configured directly from the command line. Images will be stored in PGM or PPM format, depending on the image format.

Streams of the Roboception rc_visard can be enabled or disabled directly on the command line by setting the appropriate GenICam parameters. The following command enables intensity images, disables disparity images and stores 10 images:

gc_stream <ID> ComponentSelector=Intensity ComponentEnable=1 ComponentSelector=Disparity ComponentEnable=0 n=10

NOTE: Many image viewers can display PGM and PPM format. The sv tool of cvkit can also be used.

gc_stream -h | [-f <fmt>] [-t] [<interface-id>:]<device-id> [n=<n>] [<key>=<value>] ...

Stores images from the specified device after applying the given optional GenICam parameters.

Options:
-h         Prints help information and exits
-t         Testmode, which does not store images and provides extended statistics
-f pnm|png Format for storing images. Default is pnm

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device
n=<n>          Optional number of images to be received (default is 1)
<key>=<value>  Optional GenICam parameters to be changed in the given order

gc_pointcloud

This tool streams the left image, disparity, confidence and error from a Roboception rc_visard sensor. It takes the first set of time synchronous images, computes a colored point cloud and stores it in PLY ASCII format. This tool demonstrates how to synchronize different images according to their timestamps.

NOTE: PLY is a standard format for scanned 3D data that can be read by many programs. The plyv tool of cvkit can also be used for visualization.

gc_pointcloud -h | [-o <output-filename>] [<interface-id>:]<device-id>

Gets the first synchronized image set of the Roboception rc_visard, consisting
of left, disparity, confidence and error image, creates a point cloud and
stores it in ply ascii format.

Options:
-h        Prints help information and exits
-o <file> Set name of output file (default is 'rc_visard_<timestamp>.ply')

Parameters:
<interface-id> Optional GenICam ID of interface for connecting to the device
<device-id>    GenICam device ID, serial number or user defined name of device

gc_file

This tool can be used to upload and download a file into the persistent user space of an industrial camera.

tools/gc_file -h | [<interface-id>:]<device-id> -f | (<device-file> [-w|-r <file>])

Downloading or uploading a file via GenICam.

-h            Prints help information and exits
-f            Lists names of files on the device
-w <file>     Writes the given local file into the selected file on the device
-r <file>     Reads the selected file on the device and stores it as local file

The selected file is printed on std out if none of -f, -w and -r are given.

Definition of Device ID

There are multiple ways of specifying an ID to identify a device.

  1. The serial number of the device serves as ID. Example: 02911931

  2. The given ID can also be a user defined name. The user defined name is set to rc_visard by default and can be changed with:

    gc_config <ID> -n <user-defined-name>
    

    This way of identifying a device can fail if there is more than one device with the same name. No device is returned in this case.

    If the user defined name contains one or more colons, it must be preceded by a colon (e.g. :my:name) or an interface ID (see below).

  3. The device ID of the GenTL producer (see Transport Layer section below) may also be used. This ID is unique, but not persistent as it depends on the implementation of the GenTL producer. Thus, it can change after software updates. It often encodes the MAC address of the sensor in some way.

    Example: 00_14_2d_2c_6e_bb

All three options can be seen in the output of gc_config -l.

Optional Interface ID prefix

If the given ID contains a colon (i.e. :), the part before the (first) colon is interpreted as interface ID and the part after the first colon is treated as device ID. This is the format that gc_config -l shows. A device with the given ID is only sought on the specified interface. This can be useful if there are several ways to reach a device from a host computer, e.g. via wireless and wired network connection, but a certain connection type (e.g. wired) is preferred due to higher bandwidth and lower latency.

Examples: eth0:00_14_2d_2c_6e_bb, eth1:02911931 or wlan0:rc_visard

A colon at the beginning of the ID effectively defines an empty interface ID which triggers looking on all interfaces.

If the given ID does not contain a colon, the ID is interpreted as the device ID itself and is sought throughout all interfaces as well.

Finding the Transport Layer

The communication to the device is done through a so called transport layer (i.e. GenTL producer version 1.5 or higher). This package provides and installs a default transport layer that implements the GigE Vision protocol for connecting to the Roboception rc_visard. According to the GenICam specification, the transport layer has the suffix ‘.cti’. The environment variable GENICAM_GENTL32_PATH (for 32 bit applications) or GENICAM_GENTL64_PATH (for 64 bit applications) must contain a list of paths that contain transport layers. All transport layers are provided as systems to the application.

For convenience, if the environment variable is not defined or empty, it is internally defined with the install path of the provided transport layer (as known at compile time!). If the package is not installed, the install path is changed after compilation or the package is moved to another location after installation, then the transport layer may not be found. In this case, the tools shows an error like e.g.:

'No transport layers found in path /usr/lib/rc_genicam_api'

In this case, the corresponding environment variable (see above) must be set to the directory in which the transport layer (i.e. file with suffix ‘.cti’) resides.

Under Windows, as second fall back additionally to the install path, the directory of the executable is also added to the environment variable. Thus, the install directory can be moved, as long as the cti file stays in the same directory as the executable.

Network Optimization under Linux

When images are received at a lower rate than set/exepected the most likely problem is that this (user space) library cannot read the many UDP packets fast enough resulting in incomplete image buffers.

Test Script

The net_perf_check.sh script performs some simple checks and should be run while or after streaming images via GigE Vision.

./net_perf_check.sh --help

Jumbo Frames

First of all increasing the UDP packet size (using jubo frames) is strongly recommended! Increase the MTU of your network interface to 9000, e.g.

sudo ifconfig eth0 mtu 9000

Also make sure that all network devices/switches between your host and the sensor support this.

sysctl settings

There are several Linux sysctl options that can be modified to increase performance for the GigE Vision usecase.

These values can be changed during runtime with sysctl or written to /etc/sysctl.conf for persistence across reboots.

rmem_max

If the number of UDP receive buffer errors increases while streaming, increasing the socket receive buffer size usually fixes the problem.

Check the errors with net_perf_check.sh or

netstat -us | grep errors

Increase max receive buffer size:

sudo sysctl -w net.core.rmem_max=33554432

softirq

Changing these values is usually not necessary, but can help if the kernel is already dropping packets.

Check with net_perf_check.sh and increase the values if needed:

sudo sysctl -w net.core.netdev_max_backlog=2000
sudo sysctl -w net.core.netdev_budget=600
CHANGELOG

2.7.0 (2024-12-02)

  • Added possibility to receive module events for a device
  • gc_info: Added interface to test receiving module events
  • Improved exception message when opening device is failing
  • Fixed crashing when stream and device is closed after loosing connection

2.6.8 (2024-10-16)

  • gc_stream:
    • split RawCombined like IntensityCombined
    • apply writable chunk parameters every time after attaching the buffer
  • gc_file:
    • Fixed possible problem when reading file via gc_file

2.6.7 (2024-08-23)

  • Added functions and parameters to command line tools for loading and storing streamable parameters
  • Throw an exception if an image buffer does not contain any data
  • Added methods and function with timeout parameters for device discovery

2.6.6 (2024-06-04)

  • Added armhf jobs for jammy

2.6.5 (2024-03-12)

  • Added method to get remote port of device to directly read and write register
  • Added functions to read and write GenICam register parameters
  • Fixed write error message of gc_file tool
  • fix for gcc 13: use global stdint

2.6.4 (2023-11-09)

  • Fixed loading nodemap from file system
  • Return device display name, if device user defined name returns an error

2.6.3 (2023-10-06)

  • gc_config: -Fixed calling data latch to properly show PTP status
  • gc_info:
    • Added choice to either use local or remote nodemap of device
    • Added extended output that includes printing the local nodemaps of system, interface and device as well

2.6.2 (2023-05-17)

  • If available, use user defined name of device as display name
  • Moving function for printing (part of) nodemap from tools to library
  • gc_info:
    • Added possibility to edit nodemap in curses gui
  • gc_stream:
    • Storing ChunkRcLineRatio in properties, if available
    • Added option to print chunk data
  • Fixed build_win.bat: Include cmake files and allow renaming of base directory
  • Fixed allocating too much memory in Image class

2.6.1 (2023-01-09)

  • Fixed resetting of systems so that setSystemsPath() can be called again
  • Report reason if loading of producer fails
  • Fixed compiling under Windows
  • Fixed reading registers with size that is less than the requested size
  • Added convenience functions for loading and storing data on the camera via GenICam file interface

2.6.0 (2022-11-09)

  • Upgraded GenAPI to version 3.4
  • Changed gc_file to read and write in blocks of 512 bytes and made FileSize parameter optional

2.5.17 (2022-10-13)

  • Added building for Jammy
  • Added possibility to specify GenICam parameters on the command line of gc_pointcloud tool
  • README: change grep for newer netstat versions

2.5.16 (2022-05-29)

  • Added CI build pipelines for ARM64
  • net_perf_check.sh use first default interface
  • Show enum options even if WriteOnly

2.5.14 (2022-02-02)

  • Install licenses of included binaries
  • Reporting interface id instead of display name in output of gc_info -s

2.5.13 (2022-01-31)

  • Added parameter '-s' to gc_info for getting a short list of discovered devices
  • Fixed Windows build script

2.5.12 (2021-10-23)

  • Imporved Windows build script for compiling with libpng
  • Fixed some issues when compiling under Windows

2.5.11 (2021-10-05)

  • Fixed getting buffers with chunk data from Basler ace2 USB cameras

2.5.10 (2021-10-01)

  • Make system, interface, device and stream ignore closing already closed objects

2.5.9 (2021-10-01)

  • Improved measuring of buffers per second in gc_stream
  • Do not show latency in gc_stream -t if PTP is turned off

2.5.8 (2021-09-09)

  • Added support for YUV422_8 and YCbCr422_8 pixel formats

2.5.7 (2021-09-01)

  • Added possibility to specify the internal number of buffers to allocate
  • gc_file tool: Exit with error if file cannot be loaded

2.5.6 (2021-08-02)

  • Changed ImageList::find with tolerance > 0 to return the closest within tolerance

2.5.5 (2021-07-28)

  • Fixed rounding when converting between color and monochrome images
  • Reduce minimum number of buffers
  • Do not attach chunk data handler to incomplete buffer

2.5.4 (2021-07-25)

  • Fixed reporting of operation status of gc_file tool

2.5.3 (2021-07-17)

  • Added build script for Visual Studio
  • Added methods for getting region id and data purpose id from buffer
  • On Windows, also try to find producers in sub directories of current library
  • Fixed some compiler warnings
  • Improved error message when writing on cport fails
  • Fixed conversion from YCbCr411 format to Mono8 in convertImage() function
  • Improved error message when setting invalid enum
  • Added support for RGB8 color format in getColor() function

2.5.2 (2021-07-06)

  • Added possibility for configuration of multiple Gev interfaces in gc_config
  • Fixed printing of Mac address in gc_info
  • Added method to stream object for checking the number of buffers available for grabbing
  • Treating missing parameters in Buffer as 0
  • Changed way how to define different path for locating producers
  • Added possibility to discover producers in non-default locations and ignoring a specific producer
  • Added possibility to store xml file with gc_info with original name

2.5.1 (2021-03-16)

  • Fixed compile problems under Windows
  • Fixed using wrong pointer in method Stream::getTLType()
  • Readme: Add link to release page
  • Removing redundent specification of namespace in some source files

2.5.0 (2021-02-26)

  • Upgrading GenICam reference implementation to version 3.3
  • Added support for storing images of format RGB8 and BayerXX8
  • Increasing discover timeout from 100 ms to 1 s, which is necessary for some cameras
  • Resetting chunk adapter in gc_stream if user explicitely disables chunk data
  • Added tool gc_file for reading / writing user data from / to a GenICam device
  • Integrated attaching buffers to nodemap into stream and buffer classes
  • Added support for handling payload type chunk data for supporting Basler ace cameras
  • Updated handling of PTP in gc_config tool using the new feature names
  • Correct exception message if png can't be stored
  • Rename adaptive_out1_reduction to out1_reduction in stored parameter file

2.4.4 (2020-10-23)

  • Trying to fix problem that interface handle becomes invalid

2.4.3 (2020-10-22)

  • Improved reporting of exceptions

2.4.2 (2020-10-22)

  • Added some optional Roboception specific information to the parameter files
  • Fixed crashing of gc_info if getting nodemap from device fails
  • Fixed getEnum crash if enum doesn't contain a value

2.4.1 (2020-07-31)

  • Enabled building for ROS focal on gitlab

2.4.0 (2020-07-27)

  • gc_stream now puts status of GPIO out and in lines in two separate bit fields in file name

2.3.7 (2020-07-27)

  • Improved finding devices, e.g. by IP if GenTL provider supports this

2.3.6 (2020-04-17)

  • Fixed compile bug under Windows

2.3.5 (2020-04-06)

  • ensure that downscale factor doesn't lead to division by zero
  • remove build_export_depend on catkin from package.xml

2.3.4 (2020-03-15)

  • Workaround for Baumer GenTL GEV interface enumeration bug

2.3.3 (2020-03-06)

  • fix version in package.xml
  • fix Dockerfile

2.3.2 (2020-03-06)

  • add libpng-dev dependency in package.xml

2.3.1 (2020-01-10)

  • Reporting full name of stored images, including suffix

2.3.0 (2019-12-20)

  • Tool gc_stream:
    • now also stores the exposure time and gain in parameter files
    • added storing 16 bit images
    • Added parameter '-f png' for storing images in PNG format
    • Reporting all stored images (IntensityRight was missing)
  • Tool gc_info:
    • print User defined name
  • Refactoring:
    • Moved functions to store images from gc_stream tool into core library
    • Moved function to store point cloud from tool to library
  • Fixed:
    • Do not return device if it can be found on different producers
    • reporting device name instead of test option when misspelling the device in 'gc_stream -t <device> ...' call
    • net_perf_check.sh: fix getting mtu

2.2.3 (2019-07-25)

  • Fixed Windows install issues
  • Fixing segfault in Buffer::getTLType()

2.2.2 (2019-06-25)

  • Set TLParamsLocked before requesting maximum buffer size
  • Only free as many buffers as allocated to avoid errors off GenTL producer
  • Request global buffer YPadding only for none multipart buffers to avoid errors of GenTL producer

2.2.1 (2019-06-11)

  • Automatically splitting the stereo images in rc_visards special combined format into Intenstiy and IntensityRight images
  • Using TLParamsLocked correctly in streaming class as some cameras require this
  • gc_stream now disables component Intensity if IntensityCombined is enabled
  • gc_stream now creates parameter file for each Intensity image as well
  • Increased timeout for updating the device list to 100 ms as 10 ms can be too less for some cameras / producers

2.2.0 (2019-05-02)

  • gc_info does not report not implemented parameters any more
  • gc_info can now also only print specified nodes (which can be a category) by appending the node name with '?' to the device id.
  • gc_stream can now measure frequency and latency of incomming buffers
  • Windows: look for transport layer in folder of rc_genicam_api.dll
  • support modern cmake
    • A "meta target" for all Genicam targets is defined, rc_genicam_api::genicam, on which rc_genicam_api::rc_genicam_api depends publicly.
    • Compile options and definitions of rc_genicam_api are set to private, only /DGENICAM_NO_AUTO_IMPLIB is public
    • Install paths are defined using GNUInstallDirs
  • update Baumer GenTL providers to 2.9.2.22969
    • Support for payload type Multi-part added
    • The GigE Producer now find devices connected to virtual interfaces for Linux

2.1.2 (2019-03-13)

  • Remove global include_directories in cmake build files
  • Use full precision timestamp in name of images saved by gc_stream
  • Append out1 and out2 state to name of images saved by gc_stream

2.1.1 (2019-02-21)

  • Command line tools now exit with != 0 in case of an error
  • Improved cmake project files

2.1.0 (2019-01-25)

  • Made System, Interface, Device and Stream objects thread safe

2.0.4 (2019-01-24)

  • A buffer that is labelled to contain chunk data may also contain an image
  • Implemented fallback of open device access from readonly to control to exclusive

2.0.3 (2019-01-09)

  • Improved description of some device methods
  • Under Windows, do not check install path but only current directory as default location of GenTL producer

2.0.2 (2019-01-01)

  • Fixed bug in rcg::getEnum() function that may lead to a seg fault
  • Minor changes in cmake build files

2.0.1 (2018-12-21)

  • Added test mode to gc_stream tool (i.e. disables saving for only testing the connection)
  • Added printing of package size to gc_stream tool
  • Added statistic to gc_stream tool
  • Removed aborting gc_stream with 'Enter' from Linux version as it causes unwanted stops in some situations
  • Minor fixes in build files.

2.0.0 (2018-10-08)

NOTE: Including multipart support required minor changes of the existing API. See readme for more information. Attention: The provided GenTL layer does not yet support multipart!

  • Extended Buffer and Image classes as well as the examples for handling multi-part buffers as well (NOTE: The provided GenTL producer does not yet support multipart!)
  • gc_stream: Using component name for storing individual images and ensuring that files are not overwritten
  • gc_pointcloud: Using component name for identifying images and try enabling synchronization on device
  • Add libs of GenICam reference implementation to external cmake dependencies of shared genicam_api library
  • Upgrading GenICam reference implementation to v3.1
  • Add libs of GenICam reference implementation to external dependencies of shared genicam_api library

1.3.15 (2018-09-27)

  • Added parameter --iponly to gc_config tool

1.3.14 (2018-09-26)

  • Added possibility to interrupt streaming with gc_stream by pressing 'Enter' key.
  • Undefined min/max macros in gc_pointcloud.cc on Windows to avoid compile errors

1.3.13 (2018-08-23)

  • Changed output of gc_config -l to emphasize using interface and serial number as unique identifier
  • Added possibility to call a GenICam command from the command line with gc_info, gc_config and gc_stream
  • Additionally printing the internal name and display name of the GenTL producer in the gc_info tool
  • Update GEV GenTL provider from Baumer
  • Revision of readme

1.3.12 (2018-07-18)

  • Getting chunk data in gc_stream and storing disparity image with all parameters for reconstruction if possible
  • Error handling in gc_stream changed by first checking for incomplete buffer and then for image present

1.3.11 (2018-07-02)

  • don't install bash completion by default (doesn't work on ROS buildfarm)
  • make sure installed net_perf_check.sh script is executable

1.3.10 (2018-06-28)

  • Added possibility to set GenICam parameters in gc_info too
  • Only show network summary in gc_config if called without parameters or with network related parameters
  • Corrected spelling of visard in gc_pointcloud output file name

1.3.9 (2018-06-15)

  • Bash completion for UNIX and ROS
  • Relaxed synchronization in gc_pointcloud for special exposure alternate mode of rc_visard
  • Added method in image list class to request the oldest timestamp
  • Added triangulation to gc_pointcloud
  • Added parameter for output file name to gc_pointcloud
  • Fixed crashing of gc_info if enumeration does not have a value

1.3.8 (2018-04-18)

  • show actually searched path instead of env var in exception if no transport layer found
  • improved README

1.3.7 (2018-04-09)

  • Devices can now be discovered by serial number as well

1.3.6 (2018-02-25)

  • fix path to genicam arm64 libs

1.3.5 (2018-02-25)

  • add libs for arm64

1.3.4 (2018-02-23)

  • fix catkin dependency in package.xml

1.3.3 (2018-02-23)

  • fix version in package.xml

1.3.2 (2018-02-23)

  • fix installation of exported targets
  • add package.xml for releaseing as ROS third-party package
  • update Baumer GigE vision driver to v2.8.15736
  • fix architecture detection (use compiler info instead of host kernel)

1.3.1 (2017-12-20)

  • Improved readme
  • Porting package to Windows 32 and 64. It can be compiled with Visual Studio.

1.3.0 (2017-12-05)

New tools / examples:

  • Added tool gc_pointcloud that demonstrates synchroneous streaming and 3D reconstruction

Improvements of convenience layer:

  • Accept true and false for boolean GenICam values additionally to 1 and 0
  • Added option to ignore cache when reading parameter
  • Added convenience function getColor()
  • Added convience function checkFeature()
  • Changing request for timestamp in gc_stream tool
  • Fixed finding devices by user defined name

Improvement of help texts and messages:

  • Improved help for command line tools
  • Improved exception description
  • Added printing components with enabled status in gc_stream tool
  • Removed output of user name in gc_info as this is not the name that can be defined via gc_config -n

Changes of access mode to permit parallel read access:

  • Open device in gc_info readonly so that it can be used in parallel to an open device
  • Open device in gc_config readonly if no parameter changes are requested
  • Opening device in gc_stream with access mode control
  • Changed getDevice() function so that exclusively opened devices are discovered as well

Configuration and optimization:

  • [baumer] increase NextResendWaitPackets to 200
  • add net_perf_check.sh script

Changes in build configuration:

  • Ensure that the install directory lib/rc_genicam_api is accessible for everybody
  • option to disable building of tools
  • option for building shared libs
  • generate version info
  • add option to disable doc target
  • Switched off vectorization and looking for CUDA as it is not necessary
  • add Baumer GenTL lib for armv7l

1.2.0 (2017-08-15)

  • rename rcgcapi to rc_genicam_api
  • getDevice() now accepts specification if interface as prefix
  • Added possibility to clean all resources before exit to avoid crashes of GenTL
  • add all GenICam files/libs instead of depending on external package
  • rename pfnc.h to pixel_formats.h
  • bundle GenTL lib from Baumer as fallback if GENICAM_GENTL64_PATH is not set

1.1.5 (2017-05-11)

  • Enforced using IPv4 format for setting persistent IPs and improved output of gc_config

1.1.4 (2017-04-13)

  • Check if device name is not empty before looking for the device
  • Fixed formating of MAC addresses as string

1.1.3 (2017-04-11)

  • Catching exceptions in destructors of Device and Stream
  • Added changing of GenICam parameters through gc_config

1.1.2 (2017-04-10)

  • Streaming with at least 8 buffers by default
  • Additionally show display name when listing devices with gc_config -l

1.1.1 (2017-03-06)

  • Fixed bug in YCbCr411 to RGB conversion

1.1.0 (2017-03-05)

  • Check in gc_stream if buffer is incomplete
  • Added optional storing of XML file via gc_info tool
  • Added switching PTP on and off via gc_config tool
  • Convertions GenApi exceptions to standard exceptions when requesting the node map
  • Added helper functions for conversion from YCbCr411 to RGB
  • Catching GenApi exception in gc_info tool
  • gc_stream tool chooses name of saved images according to pixel format
  • Added pfnc.h with custom image format Error8
  • Added image and image list helper classes for time synchronization of images
  • Open transport layer libraries with deep bind option to prefer local symbol resolution
  • Wrapping GenApi Exceptions in get/set feature value helper functions
  • Ensure that Buffer::getTimestampNS() always returns a valid value
  • Added helper functions for setting and getting features via GenICam
  • Fixed crash of gc_stream if device is unknown
  • Implemented image streaming and an example for streaming images to file

1.0.1 (2017-02-16)

  • Initial release

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rc_genicam_api at Robotics Stack Exchange