Giter VIP home page Giter VIP logo

pylon-ros-camera's Introduction

ROS2-Driver for Basler Cameras

The official pylon ROS2 driver for Basler GigE Vision, Basler USB3 Vision and Basler blaze 3D cameras (Humble Hawksbill)

This driver provides many functionalities available through the Basler pylon Camera Software Suite C++ API.

Please Note: This project is offered with no technical support by Basler AG. You are welcome to post any questions or issues on GitHub

Installation

Prerequisites

  • From Ubuntu 22.04 Jammy Jellyfish
  • From ROS2 Humble Hawksbill. Your ROS2 environment must be configured, your workspace created, and colcon, used to build the packages, installed.
  • rosdep. rosdep must be installed as a debian package (sudo apt update && sudo apt install python3-rosdep2 && sudo rosdep init && rosdep update).
  • From pylon Camera Software Suite version 7.2 or newer. The latest APi libraries must be installed manually. Download and install the latest pylon Camera Software Suite Linux Debian Installer Package for your architecture. You may be experiencing some problems with the codemeter debian package installation. Just drop it for now and install only the pylon debian package in this case.
  • From pylon Supplementary Package for blaze version 1.3 or newer (compatibility with the installed pylon Camera Software Suite needs to be ensured, please refer to the documentation). The latest APi libraries must be installed manually. Download and install the latest pylon Supplementary Package for blaze Linux Debian Installer Package for your architecture.
  • Git. Git must be installed as a debian package (sudo apt update && sudo apt install git).
  • xterm. The xterm terminal emulator must be installed (refer to the Know Issues section below) as a debian package (sudo apt update && sudo apt install xterm).

Install and build the packages

This repository including the pylon ROS2 packages must be cloned in your workspace (e.g., dev_ws for instance):
cd ~/dev_ws/src && git clone -b humble https://github.com/basler/pylon-ros-camera pylon_ros2_camera
Due to a known issue with ROS2 (see the dedicated section below), the latest version of the image_common package must be installed from sources:
cd ~/dev_ws/src/pylon_ros2_camera && git clone https://github.com/ros-perception/image_common.git -b humble

Install the ROS2 dependencies required by the pylon ROS2 packages:
cd ~/dev_ws && rosdep install --from-paths src --ignore-src -r -y
You may experience some problems with the diagnostic_updater and pcl_ros dependencies. In this case, install them by executing the following commands:
sudo apt install ros-humble-diagnostic-updater
sudo apt install ros-humble-pcl-ros

Compile the workspace using colcon:
cd ~/dev_ws && colcon build

Note: The --symlink-install flag can be added to the colcon build command. This allows the installed files to be changed by changing the files in the source space (e.g., Python files or other not compiled resourced) for faster iteration (refer to the ROS2 documentation).

Note: The packages are built in Release by default. The build type can be modfied by using the --cmake-args flag (for instance colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Debug).

Source the environment:
cd ~/dev_ws && . install/setup.bash

Note: This step can be skipped if the setup.bash file is sourced in your .bashrc.

Start the driver:
ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py or
ros2 launch pylon_ros2_camera_wrapper my_blaze.launch.py to start the acquisition through the blaze.

Usage in a nutshell

Starting the pylon_ros2_camera_node starts the acquisition from a given Basler camera. The nodes allow as well to access many camera parameters and parameters related to the grabbing process itself.

The pylon_ros2_camera_node can be started thanks to a dedicated launch file thanks to the command:
ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py or
ros2 launch pylon_ros2_camera_wrapper my_blaze.launch.py for the blaze
Several parameters can be set through the launch file and the user parameter file loaded through it (the pylon_ros2_camera_wrapper/config/default.yaml user parameter file is loaded by default, pylon_ros2_camera_wrapper/config/my_blaze.yaml for the blaze).

Acquisition from a specific camera is possible by setting the device_user_id parameter. If no specific camera is specified, the first available camera is connected automatically.

The pylon node defines the different interface names according to the following convention:
[Camera name (= my_camera or my_blaze by default)]/[Node name (= pylon_ros2_camera_node)]/[Interface name]
The camera and the node names can be set thanks respectively to the camera_name and node_name parameters.

Acquisition images are published through the [Camera name]/[Node name]/[image_raw] topic, only if a subscriber to this topic has been registered.
To visualize the images, rqt can be used. Add an image viewer plugin through thanks to the contextual menu (Plugin -> Visualization -> Image View) and select the [Camera name]/[Node name]/[image_raw] topic to display the acquired and published images.
The 3d point clouds acquired by the blaze can be visualized thanks to rviz2.

For camera models other than the blaze, specific user set can be specified thanks to the startup_user_set parameter.
ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py --ros-args -p startup_user_set:=Default or ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py --ros-args -p startup_user_set:=UserSet1 or ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py --ros-args -p startup_user_set:=UserSet2 or ros2 launch pylon_ros2_camera_wrapper pylon_ros2_camera.launch.py --ros-args -p startup_user_set:=UserSet3

The default trigger mode is set to software trigger. This means that the image acquisition is triggered with a certain frame rate, which may be lower than the maximum camera frame rate. The maximum camera frame rate can be reached when running a camera in a free-run or a hardware trigger mode.

Beware that some parameters implemented by the driver, like for instance the parameter startup_user_set, can be set through both the ROS2 parameter server and the driver launch file pylon_ros2_camera.launch.py, and that the latter has the priority over the ROS2 parameter server. For instance, if startup_user_set is set to Default in the pylon_ros2_camera_wrapper/config/default.yaml user parameter file and if it is set to CurrentSetting in the driver launch file (and if the driver is started thanks to it), then startup_user_set will be set to CurrentSetting.

Image pixel encoding (not for the blaze)

The pylon ROS2 driver support currently the following ROS2 image pixel formats :

* mono8	        (Basler Format : Mono8)
* mono16	(Basler Format : Mono16, Mono12)        (Notes 1&2)
* bgr8 		(Basler Format : BGR8)
* rgb8 		(Basler Format : RGB8)
* bayer_bggr8 	(Basler Format : BayerBG8)
* bayer_gbrg8 	(Basler Format : BayerGB8)
* bayer_rggb8 	(Basler Format : BayerRG8)
* bayer_grbg8 	(Basler Format : BayerRG8)
* bayer_rggb16	(Basler Format : BayerRG16, BayerRG12)  (Notes 1&2)
* bayer_bggr16 	(Basler Format : BayerBG16, BayerBG12)  (Notes 1&2)
* bayer_gbrg16 	(Basler Format : BayerGB16, BayerGB12)  (Notes 1&2)
* bayer_grbg16 	(Basler Format : BayerGR16, BayerGR12)  (Notes 1&2)

NOTES:

1 : 12-bits image will be remapped to 16-bits using bit shifting to make it work with the ROS2 16-bits sensor standard message.

2 : When the user calls the set_image_encoding service to use 16-bits encoding, the driver will check first for the availability of the requested 16-bits encoding to set it, when the requested 16-bits image encoding is not available, then the driver will check the availability of the equivalent 12-bits encoding to set it. When both 16-bits and 12-bits image encoding are not available then an error message will be returned.

Intrinsic calibration and rectified images (not for the blaze)

ROS2 includes a standardised camera intrinsic calibration process through the camera_calibration package. This calibration process generates a file, which can be processed by the pylon ROS2 driver by setting the camera_info_url parameter in the pylon_ros2_camera_wrapper/config/default.yaml file (it is the user parameter file loaded by default through the driver main launch file) to the correct URI (e.g., file:///home/user/data/calibrations/my_calibration.yaml).

If the calibration is valid, the rectified images are published through the [Camera name]/[Node name]/[image_rect] topic, only if a subscriber to this topic has been registered.

Setting device user id

It is easily possible to connect to a specific camera through its user id. This user id can be set through the parameter device_user_id listed in the .yaml user parameter file loaded at launch time (by default pylon_ros2_camera_wrapper/config/default.yaml). It is up to the user to create specific launch files, loading specific .yaml user parameter files, which would specify the user ids of the cameras that need to be connected. If no specific camera is specified, either because the device_user_id parameter is not set or no .yaml user parameter file is loaded, the first available camera is connected automatically.

In addition to being able to do so through the pylon Viewer provided by Basler, it is possible to set the device user id with the command: ros2 run pylon_ros2_camera_component set_device_user_id [-sn SERIAL_NB] your_device_user_id. If no serial number is specified thanks to the option -sn, the specified device user id your_device_user_id will be assigned to the first available camera. USB cameras must be disconnected and then reconnected after setting a new device user id. USB cameras keep their old user id otherwise.

Packages

  • pylon_ros2_camera_component: the driver itself. The package includes the main pylon_ros2_camera_node developed as a component.
  • pylon_ros2_camera_wrapper: wrapper creating the main component pylon_ros2_camera::PylonROS2CameraNode implemented in the pylon_ros2_camera_component package. The wrapper starts the driver in a single process.
  • pylon_ros2_camera_interfaces: package implementing pylon_ros2_camera_node interfaces (messages, services and actions).

Parameters

Common parameters

  • camera_frame
    The tf2 frame under which the images were published.
    ROS2 provides a library called tf2 (TransForm version 2) to manage the coordinate transformations between the different frames (coordinate systems) defined by the user and assigned to the components of a robotics system.

  • device_user_id
    The DeviceUserID of the camera. If empty, the first camera found in the device list will be used.

  • camera_info_url (not for the blaze)
    The CameraInfo URL (Uniform Resource Locator) where the optional intrinsic camera calibration parameters are stored. This URL string will be parsed from the CameraInfoManager.

  • image_encoding (not for the blaze)
    The encoding of the pixels -- channel meaning, ordering, size taken from the list of strings in include file sensor_msgs/image_encodings.h. The supported encodings are 'mono8', 'bgr8', 'rgb8', 'bayer_bggr8', 'bayer_gbrg8' and 'bayer_rggb8'. Default values are 'mono8' and 'rgb8'.

  • binning_x & binning_y (not for the blaze)
    Binning factor to get downsampled images. It refers here to any camera setting which combines rectangular neighborhoods of pixels into larger "super-pixels." It reduces the resolution of the output image to (width / binning_x) x (height / binning_y). The default values binning_x = binning_y = 0 are considered the same as binning_x = binning_y = 1 (no subsampling).

  • downsampling_factor_exposure_search (not for the blaze)
    To speed up the exposure search, the mean brightness is not calculated on the entire image, but on a subset instead. The image is downsampled until a desired window hight is reached. The window hight is calculated out of the image height divided by the downsampling_factor_exposure search.

  • frame_rate
    The desired publisher frame rate if listening to the topics. This parameter can only be set once at start-up. Calling the GrabImages-Action can result in a higher frame rate.

  • shutter_mode (not for the blaze)
    Set mode of camera's shutter if the value is not empty. The supported modes are 'rolling', 'global' and 'global_reset'. Default value is '' (empty)

  • white_balance_auto (not for the blaze)
    Camera white balance auto.

  • white_balance_ratio_red & white_balance_ratio_green & white_balance_ratio_blue (not for the blaze)
    Camera white balance ratio.

  • trigger_timeout (not for the blaze)
    Camera trigger timeout in ms.

  • grab_timeout
    Camera grab timeout in ms.

  • grab_strategy (not for the blaze)
    Camera grab strategy: 0 = GrabStrategy_OneByOne / 1 = GrabStrategy_LatestImageOnly / 2 = GrabStrategy_LatestImages

Image Intensity Settings

The following settings do NOT have to be set. Each camera has default values which provide an automatic image adjustment resulting in valid images.

  • exposure
    The exposure time in microseconds to be set after opening the camera.

  • gain (not for the blaze)
    The target gain in percent of the maximal value the camera supports. For USB cameras, the gain is in dB, for GigE cameras it is given in so called 'device specific units'.

  • gamma (not for the blaze)
    Gamma correction of pixel intensity. Adjusts the brightness of the pixel values output by the camera's sensor to account for a non-linearity in the human perception of brightness or of the display system (such as CRT).

  • brightness (not for the blaze)
    The average intensity value of the images. It depends the exposure time as well as the gain setting. If 'exposure' is provided, the interface will try to reach the desired brightness by only varying the gain. (What may often fail, because the range of possible exposure values is many times higher than the gain range). If 'gain' is provided, the interface will try to reach the desired brightness by only varying the exposure time. If 'gain' AND 'exposure' are given, it is not possible to reach the brightness, because both are assumed to be fix.

  • brightness_continuous (not for the blaze)
    Only relevant, if 'brightness' is set: The brightness_continuous flag controls the auto brightness function. If it is set to false, the brightness will only be reached once. Hence changing light conditions lead to changing brightness values. If it is set to true, the given brightness will be reached continuously, trying to adapt to changing light conditions. This is only possible for values in the possible auto range of the pylon API which is e.g., [50 - 205] for acA2500-14um and acA1920-40gm.

  • exposure_auto & gain_auto (not for the blaze)
    Only relevant, if 'brightness' is set: If the camera should try to reach and / or keep the brightness, hence adapting to changing light conditions, at least one of the following flags must be set. If both are set, the interface will use the profile that tries to keep the gain at minimum to reduce white noise. The exposure_auto flag indicates, that the desired brightness will be reached by adapting the exposure time. The gain_auto flag indicates, that the desired brightness will be reached by adapting the gain.

Optional and device specific parameter

  • exposure_search_timeout (not for the blaze)
    The timeout while searching the exposure which is connected to the desired brightness. For slow system this has to be increased.

  • auto_exposure_upper_limit (not for the blaze)
    The exposure search can be limited with an upper bound. This is to prevent very high exposure times and resulting timeouts. A typical value for this upper bound is ~2000000us. Beware that this upper limit is only set if startup_user_set is set to Default.

  • gige/mtu_size (not for the blaze)
    The MTU size. Only used for GigE cameras. To prevent lost frames configure the camera has to be configured with the MTU size the network card supports. A value greater 3000 should be good (1500 for single-board computer)

  • gige/inter_pkg_delay (not for the blaze)
    The inter-packet delay in ticks. Only used for GigE cameras. To prevent lost frames it should be greater than 0. For most of GigE cameras, a value of 1000 is reasonable. For GigE cameras used on single-board computer, this value should be set to 11772.

  • gige/frame_transmission_delay (not for the blaze)
    In most cases, this parameter should be set to 0. However, if your network hardware can't handle spikes in network traffic (e.g., if you are triggering multiple camera simultaneously), you can use the frame transmission delay parameter to stagger the start of image data transmissions from each camera.

  • auto_flash (not for the blaze)
    Flag that indicates if the camera has a flash connected, which should be on exposure. Only supported for GigE cameras. Default: false.

  • auto_flash_line_2 (not for the blaze)
    Flag that indicates if the camera has a flash connected on line 2, which should be on exposure. Only supported for GigE cameras. Default: true.

  • auto_flash_line_3 (not for the blaze)
    Flag that indicates if the camera has a flash connected on line 3, which should be on exposure. Only supported for GigE cameras. Default: true.

ROS2 pylon node specific parameter

  • startup_user_set (not for the blaze)
    Flag specifying if a given user set is used when starting the camera. Can be set to Default, UserSet1, UserSet2, UserSet3, and CurrentSetting.

  • enable_status_publisher
    Flag used to enable/disable the node status publisher.

  • enable_current_params_publisher
    Flag used to enable/disable the current camera publisher.

PTP synchronization (not for the blaze)

The Precision Time Protocol (PTP) camera feature allows you to synchronize multiple GigE cameras in the same network. It enables a camera to use the following features, if available:

  • Scheduled Action Commands & Action Commands
  • Synchronous Free Run (applies to ace 1 cameras)
  • Periodic Signal (applies to ace 2 cameras)

Refer to the documentation for more info about these features, with multiple code samples.

The pylon driver gives accordingly access through ROS2 services to the following parameters and commands:

ACE 1

PTP configuration & activation

  • GevIEEE1588 -> /my_camera/pylon_ros2_camera_node/enable_ptp [std_srvs/srv/SetBool]

Scheduled Action Commands & Action Commands

  • ActionDeviceKey -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • ActionGroupKey -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • ActionGroupMask -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • IssueScheduledActionCommand -> /my_camera/pylon_ros2_camera_node/issue_scheduled_action_command [pylon_ros2_camera_interfaces/srv/IssueScheduledActionCommand]
  • IssueActionCommand -> /my_camera/pylon_ros2_camera_node/issue_action_command [pylon_ros2_camera_interfaces/srv/IssueActionCommand]

Synchronous Free Run

  • SyncFreeRunTimerStartTimeLow -> /my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_start_time_low [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • SyncFreeRunTimerStartTimeHigh -> /my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_start_time_high [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • SyncFreeRunTimerTriggerRateAbs -> /my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_trigger_rate_abs [pylon_ros2_camera_interfaces/srv/SetFloatValue]
  • SyncFreeRunTimerUpdate -> /my_camera/pylon_ros2_camera_node/update_sync_free_run_timer [std_srvs/srv/Trigger]
  • SyncFreeRunTimerEnable -> //my_camera/pylon_ros2_camera_node/enable_sync_free_run_timer [std_srvs/srv/SetBool]

ACE 2

PTP configuration & activation

  • BslPtpPriority1 -> /my_camera/pylon_ros2_camera_node/set_ptp_priority [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • BslPtpProfile -> /my_camera/pylon_ros2_camera_node/set_ptp_profile [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • BslPtpNetworkMode -> /my_camera/pylon_ros2_camera_node/set_ptp_network_mode [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • BslPtpUcPortAddrIndex -> /my_camera/pylon_ros2_camera_node/set_ptp_uc_port_address_index [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • BslPtpUcPortAddr -> /my_camera/pylon_ros2_camera_node/set_ptp_uc_port_address [pylon_ros2_camera_interfaces/srv/SetIntegerValue]
  • BslPtpManagementEnable -> /my_camera/pylon_ros2_camera_node/enable_ptp_management_protocol [std_srvs/srv/SetBool]
  • BslTwoStep -> /my_camera/pylon_ros2_camera_node/enable_two_step_operation [std_srvs/srv/SetBool]
  • PtpEnable -> /my_camera/pylon_ros2_camera_node/enable_ptp [std_srvs/srv/SetBool]

Scheduled Action Commands & Action Commands

  • ActionDeviceKey -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • ActionGroupKey -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • ActionGroupMask -> /my_camera/pylon_ros2_camera_node/set_action_trigger_configuration [pylon_ros2_camera_interfaces/srv/SetActionTriggerConfiguration]
  • IssueScheduledActionCommand -> /my_camera/pylon_ros2_camera_node/issue_scheduled_action_command [pylon_ros2_camera_interfaces/srv/IssueScheduledActionCommand]
  • IssueActionCommand -> /my_camera/pylon_ros2_camera_node/issue_action_command [pylon_ros2_camera_interfaces/srv/IssueActionCommand]

Periodic Signal

  • BslPeriodicSignalDelay -> /my_camera/pylon_ros2_camera_node/set_periodic_signal_delay [pylon_ros2_camera_interfaces/srv/SetFloatValue]
  • BslPeriodicSignalPeriod -> /my_camera/pylon_ros2_camera_node/set_periodic_signal_period [pylon_ros2_camera_interfaces/srv/SetFloatValue]

Publishers

Name Notes
/my_camera/pylon_ros2_camera_node/camera_info sensor_msgs/msg/CameraInfo
/my_camera/pylon_ros2_camera_node/current_params current camera parameter
/my_camera/pylon_ros2_camera_node/image_raw acquired images
/my_camera/pylon_ros2_camera_node/image_rect rectified images if the camera is calibrated
/my_camera/pylon_ros2_camera_node/status camera status
/my_camera/pylon_ros2_camera_node/blaze_camera_info sensor_msgs/msg/CameraInfo
/my_camera/pylon_ros2_camera_node/blaze_cloud 3d point clouds from the blaze
/my_camera/pylon_ros2_camera_node/blaze_confidence confidence images from the blaze
/my_camera/pylon_ros2_camera_node/blaze_depth_map depth map images from the blaze
/my_camera/pylon_ros2_camera_node/blaze_depth_map_color depth map color images from the blaze
/my_camera/pylon_ros2_camera_node/blaze_intensity intensity images from the blaze

Service servers

Name Notes
/my_camera/pylon_ros2_camera_node/activate_autoflash_output_[index] data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/describe_parameters -
/my_camera/pylon_ros2_camera_node/enable_acquisition_frame_rate data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_ambiguity_filter data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_distortion_correction data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_fast_mode data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_hdr_mode data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_outlier_removal data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_ptp data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_ptp_management_protocol data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_spatial_filter data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_sync_free_run_timer data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_temporal_filter data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_thermal_drift_correction data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/enable_two_step_operation data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/execute_software_trigger -
/my_camera/pylon_ros2_camera_node/get_chunk_counter_value -
/my_camera/pylon_ros2_camera_node/get_chunk_enable -
/my_camera/pylon_ros2_camera_node/get_chunk_exposure_time -
/my_camera/pylon_ros2_camera_node/get_chunk_frame_counter -
/my_camera/pylon_ros2_camera_node/get_chunk_line_status_all -
/my_camera/pylon_ros2_camera_node/get_chunk_mode_active -
/my_camera/pylon_ros2_camera_node/get_chunk_selector -
/my_camera/pylon_ros2_camera_node/get_chunk_timestamp -
/my_camera/pylon_ros2_camera_node/get_max_num_buffer -
/my_camera/pylon_ros2_camera_node/get_parameter_types -
/my_camera/pylon_ros2_camera_node/get_parameters -
/my_camera/pylon_ros2_camera_node/get_statistic_buffer_underrun_count -
/my_camera/pylon_ros2_camera_node/get_statistic_failed_buffer_count -
/my_camera/pylon_ros2_camera_node/get_statistic_failed_packet_count -
/my_camera/pylon_ros2_camera_node/get_statistic_missed_frame_count -
/my_camera/pylon_ros2_camera_node/get_statistic_resend_request_count -
/my_camera/pylon_ros2_camera_node/get_statistic_resynchronization_count -
/my_camera/pylon_ros2_camera_node/get_statistic_total_buffer_count -
/my_camera/pylon_ros2_camera_node/issue_action_command -
/my_camera/pylon_ros2_camera_node/issue_scheduled_action_command -
/my_camera/pylon_ros2_camera_node/list_parameters -
/my_camera/pylon_ros2_camera_node/load_user_set -
/my_camera/pylon_ros2_camera_node/get_pfs -
/my_camera/pylon_ros2_camera_node/save_pfs value : '/path/to/your/output.pfs'
/my_camera/pylon_ros2_camera_node/load_pfs value : '/path/to/your/input.pfs'
/my_camera/pylon_ros2_camera_node/reset_device -
/my_camera/pylon_ros2_camera_node/save_user_set -
/my_camera/pylon_ros2_camera_node/set_PGI_mode data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_acquisition_frame_count value = new targeted frame count
/my_camera/pylon_ros2_camera_node/set_acquisition_frame_rate value = new targeted framerate
/my_camera/pylon_ros2_camera_node/set_action_trigger_configuration -
/my_camera/pylon_ros2_camera_node/set_ambiguity_filter_threshold value = new ambiguity filter threshold
/my_camera/pylon_ros2_camera_node/set_binning -
/my_camera/pylon_ros2_camera_node/set_black_level value = new targeted black level
/my_camera/pylon_ros2_camera_node/set_brightness -
/my_camera/pylon_ros2_camera_node/set_chunk_enable data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_chunk_exposure_time -
/my_camera/pylon_ros2_camera_node/set_chunk_mode_active data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_chunk_selector -
/my_camera/pylon_ros2_camera_node/set_confidence_threshold value = new confidence threshold
/my_camera/pylon_ros2_camera_node/set_demosaicing_mode value : 0 = Simple, 1 = Basler PGI
/my_camera/pylon_ros2_camera_node/set_depth_max value = new max depth threshold
/my_camera/pylon_ros2_camera_node/set_depth_min value = new min depth threshold
/my_camera/pylon_ros2_camera_node/set_device_link_throughput_limit value = new targeted throughput limit in Bytes/sec.
/my_camera/pylon_ros2_camera_node/set_device_link_throughput_limit_mode data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_exposure -
/my_camera/pylon_ros2_camera_node/set_exposure_time_selector value : 1 = Stage1, 2 = Stage2
/my_camera/pylon_ros2_camera_node/set_gain -
/my_camera/pylon_ros2_camera_node/set_gamma value: 0 = User, 1 = sRGB
/my_camera/pylon_ros2_camera_node/set_gamma_activation (For GigE Cameras)
/my_camera/pylon_ros2_camera_node/set_gamma_selector value : 0 = User, 1 = sRGB (For GigE Cameras)
/my_camera/pylon_ros2_camera_node/set_grab_timeout -
/my_camera/pylon_ros2_camera_node/set_grabbing_strategy -
/my_camera/pylon_ros2_camera_node/set_image_encoding value = mono8, mono16, bgr8, rgb8, bayer_bggr8, bayer_gbrg8, bayer_rggb8, bayer_grbg8, bayer_rggb16, bayer_bggr16, bayer_gbrg16, bayer_grbg16
/my_camera/pylon_ros2_camera_node/set_intensity_calculation value : 1 = Method1, 2 = Method2
/my_camera/pylon_ros2_camera_node/set_light_source_preset value : 0 = Off, 1 = Daylight5000K, 2 = Daylight6500K, 3 = Tungsten2800K
/my_camera/pylon_ros2_camera_node/set_line_debouncer_time value = delay in micro sec
/my_camera/pylon_ros2_camera_node/set_line_inverter data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_line_mode value : 0 = Input, 1 = Output
/my_camera/pylon_ros2_camera_node/set_line_selector value : 0 = Line1, 1 = Line2, 2 = Line3, 3 = Line4
/my_camera/pylon_ros2_camera_node/set_line_source value : 0 = Exposure Active, 1 = FrameTriggerWait, 2 = UserOutput1, 3 = Timer1Active, 4 = FlashWindow
/my_camera/pylon_ros2_camera_node/set_max_num_buffer -
/my_camera/pylon_ros2_camera_node/set_max_transfer_size maximum USB data transfer size in bytes
/my_camera/pylon_ros2_camera_node/set_multi_camera_channel value = new channel
/my_camera/pylon_ros2_camera_node/set_noise_reduction value = reduction value
/my_camera/pylon_ros2_camera_node/set_offset_x value = targeted offset in x-axis
/my_camera/pylon_ros2_camera_node/set_offset_y value = targeted offset in y-axis
/my_camera/pylon_ros2_camera_node/set_operating_mode value : 0 = Long range, 1 = Short range
/my_camera/pylon_ros2_camera_node/set_outlier_removal_threshold value = new outlier removal threshold
/my_camera/pylon_ros2_camera_node/set_outlier_removal_tolerance value = new outlier removal tolerance
/my_camera/pylon_ros2_camera_node/set_output_queue_size -
/my_camera/pylon_ros2_camera_node/set_parameters -
/my_camera/pylon_ros2_camera_node/set_parameters_atomically -
/my_camera/pylon_ros2_camera_node/set_periodic_signal_delay value : delay to be applied to the periodic signal in microseconds
/my_camera/pylon_ros2_camera_node/set_periodic_signal_period value : length of the periodic signal in microseconds
/my_camera/pylon_ros2_camera_node/set_ptp_network_mode value : 1 = Hybrid, 2 = Multicast, 3 = Unicast
/my_camera/pylon_ros2_camera_node/set_ptp_priority value = value indicating the priority of the device when determining the master clock
/my_camera/pylon_ros2_camera_node/set_ptp_profile value : 1 = Delay Request Response Default Profile, 2 = Peer to Peer Default Profile
/my_camera/pylon_ros2_camera_node/set_ptp_uc_port_address value = unicast port address
/my_camera/pylon_ros2_camera_node/set_ptp_uc_port_address_index value = unicast port address index
/my_camera/pylon_ros2_camera_node/set_reverse_x data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_reverse_y data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_roi -
/my_camera/pylon_ros2_camera_node/set_sensor_readout_mode value : 0 = Normal, 1 = Fast
/my_camera/pylon_ros2_camera_node/set_sharpness_enhancement value = sharpness value
/my_camera/pylon_ros2_camera_node/set_sleeping -
/my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_start_time_high value = high 32 bits of the synchronous free run trigger start time
/my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_start_time_low value = low 32 bits of the synchronous free run trigger start time
/my_camera/pylon_ros2_camera_node/set_sync_free_run_timer_trigger_rate_abs value = synchronous free run trigger rate
/my_camera/pylon_ros2_camera_node/set_temporal_filter_strength value = new temporal filter strength
/my_camera/pylon_ros2_camera_node/set_timer_duration value = duration of the currently selected timer in microseconds
/my_camera/pylon_ros2_camera_node/set_timer_selector value : 1 = Timer 1, 2 = Timer 2, 3 = Timer 3, 4 = Timer 4
/my_camera/pylon_ros2_camera_node/set_timer_trigger_source value = see valid values of TimerTriggerSourceEnums in documentation
/my_camera/pylon_ros2_camera_node/set_trigger_activation value : 0 = RigingEdge, 1 = FallingEdge
/my_camera/pylon_ros2_camera_node/set_trigger_delay value = delay in micro sec.
/my_camera/pylon_ros2_camera_node/set_trigger_mode data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_trigger_selector value : 0 = Frame start, 1 = Frame burst start (ace USB cameras) / Acquisition Start (ace GigE cameras)
/my_camera/pylon_ros2_camera_node/set_trigger_source value : 0 = Software, 1 = Line 1, 2 = Line 2, 3 = Line 3, 4 = Line 4, 5 = Action 1, 6 = Periodic Signal 1
/my_camera/pylon_ros2_camera_node/set_trigger_timeout -
/my_camera/pylon_ros2_camera_node/set_user_output_[index] data : false = deactivate, true = activate
/my_camera/pylon_ros2_camera_node/set_user_set_default_selector value : 0 = Default, 1 = UserSet1, 2 = UserSet2, 3 = UserSet3, 4 = HighGain, 5 = AutoFunctions, 6 = ColorRaw
/my_camera/pylon_ros2_camera_node/set_user_set_selector value : 0 = Default, 1 = UserSet1, 2 = UserSet2, 3 = UserSet3, 4 = HighGain, 5 = AutoFunctions, 6 = ColorRaw
/my_camera/pylon_ros2_camera_node/set_white_balance -
/my_camera/pylon_ros2_camera_node/set_white_balance_auto value : 0 = Off, 1 = Once, 2 = Continuous
/my_camera/pylon_ros2_camera_node/start_grabbing -
/my_camera/pylon_ros2_camera_node/stop_grabbing -
/my_camera/pylon_ros2_camera_node/update_sync_free_run_timer -
/my_camera/set_camera_info -

Action servers

Name Notes
/my_camera/pylon_ros2_camera_node/grab_blaze_data -
/my_camera/pylon_ros2_camera_node/grab_images_raw -

Depending on the camera model, it is possible to grab one or several images or 3d data sets (3d point cloud, intensity, confidence, depth map, depth color map) through the dedicated action with user-specified parameters (e.g., exposure time, brightness value, etc.). Refer to the action definitions to get more information.

For camera models other than the blaze, the camera-characteristic parameter such as height, width, projection matrix (by ROS2 convention, this matrix specifies the intrinsic (camera) matrix of the processed (rectified) image - see the CameraInfo message definition for detailed information) and camera_frame were published over the /camera_info topic. Furthermore, an action-based image grabbing with desired exposure time, gain, gamma and / or brightness is provided. Hence, one can grab a sequence of images with above target settings as well as a single image. Grabbing images through this action can result in a higher frame rate.

Tests

The folder pylon_ros2_camera_wrapper/test includes different test programs. testing specific functionalities implemented by the driver. These programs are for testing purposes and should be adapted according to one's needs.

  • test_get_chunk_data: test the access of specific chunk data
  • test_grab_blaze_data_action_client, test_grab_image_action_client, and test_grab_images_action_client: trigger the image or the 3d data set grabbing through the actions /my_camera/pylon_ros2_camera_node/grab_images_raw or /my_camera/pylon_ros2_camera_node/grab_blaze_data, depending on the camera model. Each grabbed image (only the intensity image for the blaze) is displayed in a dedicated popup window.

Known issues

Getting the number of subscribers from camera publisher

It is not possible to count correctly the number of subscribers to the image_raw and image_rect topics because of a known issue with the function CameraPublisher::getNumSubscribers. That is why this image_common package, fixing this issue, needs to be cloned and compiled together with the pylon_ros2_camera_node.

User input in terminal when starting node through launch files

The ros2 launch mechanism doesn't allow to access stdin through a terminal (see here and here). This is solved in this implementation by installing and using xterm to emulate a terminal with possible user interaction.

Service shutdown

In the ROS pylon implementation, the activate_autoflash_output and set_user_output service servers are shutdowned when the connection with a camera is lost. It is not possible for now to do so with ROS2 without shutting down the whole node (see here). There is no way to overcome this issue at the moment.

Troubleshooting

To increase performance and to minimize CPU usage when grabbing images, the following settings should be considered:

Camera hot-swapping

If you hot-swap the camera with a different camera with a non-compatible pixel encoding format (e.g., mono and color cameras), you need to restart the ROS system to replace the encoding value or replace the rosparam directly by setting the image_encoding parameter. e.g.,: rosparam set /pylon_camera_node/image_encoding "mono8"

Slow frame rate

If the camera image acquistion is triggered by sofware trigger (default setting), then it is not possible to get the maximum frame rate, because the image acquisition is sequentially triggered, which is not overlapping then. Several possible solutions are mentionned and tested in issue #21, #28, #29, #81, #116, #147, and #200. Please refer to them for more information.

GigE Devices

No connection with connected camera

To be sure to be able to connect to a specific camera, its network configuration must be manually set through Basler's pylon IP configurator. To do so, click on the camera in the list of connected devices, select the Static IP option, set an IP Address within the same range as the one of your computer, and set the same Subnet Mask as the one from your computer.

Maximum UDP Socket Buffer Size

The system's maximum UDP receive buffer size should be increased to ensure a stable image acquisition. A maximum size of 2 MB is recommended. This can be achieved by issuing the sudo sysctl net.core.rmem_max=2097152 command. To make this setting persistent, you can add the net.core.rmem_max setting to the /etc/sysctl.conf file.

Enable Jumbo Frames.

Many GigE network adapters support so-called jumbo frames, i.e., network packets larger than the usual 1500 bytes. To enable jumbo frames, the maximum transfer unit (MTU) size of the PC's network adapter must be set to a high value. We recommend using a value of 8192.

Increase the packet size.

If your network adapter supports jumbo frames, you set the adapter's MTU to 8192 as described above. In order to take advantage of the adapter's jumbo frame capability, you must also set the packet size used by the camera to 8192.

If you are working with the pylon Viewer application, you can set the packet size by first selecting a camera from the tree in the "Device" pane. In the "Features" pane, expand the features group that shows the camera's name, expand the "Transport Layer" parameters group, and set the "Packet Size" parameter to 8192. If you write your own application, use the camera API to set the PacketSize parameter to 8192.

It is possible to change the packet size by changing the default value of the mtu_size parameter in the pylon ROS2 wrapper launch file. When the camera is grabbing, it is not possible to modify this parameter.

Real-time Priority

The GigE Vision implementation of Basler pylon software uses a thread for receiving image data. Basler pylon tries to set the thread priority for the receive thread to real-time thread priority. This requires certain permissions. The 'Permissions for Real-time Thread Priorities' section of the pylon INSTALL document describes how to grant the required permissions.

U3V Devices

Increasing Packet Size

For faster USB transfers you should increase the packet size. You can do this by changing the "Stream Parameters" -> "Maximum Transfer Size" value from inside the pylon Viewer or by setting the corresponding value via the API. After increasing the package size you will likely run out of kernel space and see corresponding error messages on the console. The default value set by the kernel is 16 MB. To set the value (in this example to 1000 MB) you can execute as root: echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb This would assign a maximum of 1000 MB to the USB stack.

pylon-ros-camera's People

Contributors

alireza-moayyedi avatar bjoernrennfanz avatar ckurtz22 avatar csukuangfj avatar ethflo avatar flova avatar francoispicarddti avatar franekstark avatar g-gemignani avatar jonathanhechtbauer-bc avatar lalten avatar mehditlili avatar mgrrx avatar nachovizzo avatar nakai-omer avatar pablo-quilez avatar perrineaguiar avatar plieningerweb avatar saif-abdullah avatar thiesmoeller avatar tomcreutz avatar tonynajjar avatar uliklank avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pylon-ros-camera's Issues

Wrong check after auto-brightness

When calling the setBrightness service and having gamma enabled (and not set to 1), the ROS node reports Did not reach the desired brightness .... However, the auto brightness function is triggered correctly and the brightness adjusts as well. But the computation of the brightness in the ROS node is implemented differently as on the camera.
In particular the following function

float PylonCameraNode::calcCurrentBrightness()
{
boost::lock_guard<boost::recursive_mutex> lock(grab_mutex_);
if ( img_raw_msg_.data.empty() )
{
return 0.0;
}
float sum = 0.0;
if ( sensor_msgs::image_encodings::isMono(img_raw_msg_.encoding) )
{
// The mean brightness is calculated using a subset of all pixels
for ( const std::size_t& idx : sampling_indices_ )
{
sum += img_raw_msg_.data.at(idx);
}
if ( sum > 0.0 )
{
sum /= static_cast<float>(sampling_indices_.size());
}
}
else
{
// The mean brightness is calculated using all pixels and all channels
sum = std::accumulate(img_raw_msg_.data.begin(), img_raw_msg_.data.end(), 0);
if ( sum > 0.0 )
{
sum /= static_cast<float>(img_raw_msg_.data.size());
}
}
return sum;
}

takes the pixel values of the final image, after gamma correction has been applied.
On the camera, however, brightness is computed on raw pixel values before gamma correction.
To reproduce this, you can enable gamma correction and call the brightness service.

To fix this issue we believe (cc @neunertm) that for verifying the auto-corrected brightness the achieved value should be the average sum over the uncorrected pixels values, effectively inverting this formula from Basler doc.

The Basler documentation also reports that

The target value calculation does not include other image optimizations, e.g. Gamma. Depending on the image optimizations set, images output by the camera may have a significantly lower or higher average gray value than indicated by the target value.

pylon/PylonIncludes.h: No such file or directory

Hello!
I tried to install the package on a Jetson device (ARM) and during catkin_make, I get the following error:

fatal error: pylon/PylonIncludes.h: No such file or directory
 #include <pylon/PylonIncludes.h>

Pylon is installed at /opt/pylon5 as expected (and stated in the FindPylon.cmake).
Do you have any ideas, how I can get it working?

Unable to run the pylon_camera_node with basler blaze camera

Now, I'm following the manual here:
https://www.baslerweb.com/fp-1591878203/media/downloads/documents/application_notes/AW00149103000_Interfacing_Basler_Cameras_with_ROS~1.pdf

$ rosrun pylon_camera pylon_camera_node

returned the following error:

[ WARN] [1613029125.159595628]: Autoflash: 0, line2: 1 , line3: 1 
[ INFO] [1613029125.160155182]: No Device User ID set -> Will open the camera device found first
[ INFO] [1613029125.467144068]: Found camera with DeviceUserID : blaze-101-GEV
[ INFO] [1613029125.837165899]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono16'|'mono16'] 
[ WARN] [1613029125.837357976]: No image encoding provided. Will use 'mono8' or 'rgb8' as fallback!
[ERROR] [1613029125.837498203]: Couldn't find a fallback solution!
[ERROR] [1613029125.837626693]: Error while start grabbing

Then, I tried:
$ rosparam set /pylon_camera_node/image_encoding "mono16"

still returned the error:

$ rosrun pylon_camera pylon_camera_node 
[ WARN] [1613029547.989726418]: Autoflash: 0, line2: 1 , line3: 1 
[ INFO] [1613029547.990249293]: No Device User ID set -> Will open the camera device found first
[ INFO] [1613029548.299452267]: Found camera with DeviceUserID : blaze-101-GEV
[ INFO] [1613029548.663975655]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono16'|'mono16'] 
[ERROR] [1613029548.664156572]: Error while start grabbing

Error while catkin_make

An error occurs after catkin_make command:

[ 98%] Building CXX object pylon-ros-camera/pylon_camera/CMakeFiles/pylon_camera_node.dir/src/pylon_camera/main.cpp.o
[100%] Linking CXX executable /home/khs/桌面/baslerCamera/pylon_ros/devel/lib/pylon_camera/pylon_camera_node
/home/khs/桌面/baslerCamera/pylon_ros/devel/lib/libpylon_camera.so:对‘cv::Mat::Mat()’未定义的引用
collect2: error: ld returned 1 exit status
pylon-ros-camera/pylon_camera/CMakeFiles/pylon_camera_node.dir/build.make:170: recipe for target '/home/khs/桌面/baslerCamera/pylon_ros/devel/lib/pylon_camera/pylon_camera_node' failed
make[2]: *** [/home/khs/桌面/baslerCamera/pylon_ros/devel/lib/pylon_camera/pylon_camera_node] Error 1
CMakeFiles/Makefile2:4048: recipe for target 'pylon-ros-camera/pylon_camera/CMakeFiles/pylon_camera_node.dir/all' failed
make[1]: *** [pylon-ros-camera/pylon_camera/CMakeFiles/pylon_camera_node.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

before this step, everything goes right, how to solve this problem? thanks~

Not finding camera with UserDefinedID

I tried setting my camera device_user_id using write_device_user_id_to_camera, which seems to work fine. However, when trying to run pylon_camera with the specified device_user_id, it only finds cameras with user_ids "N/A".

My temporary solution was to replace every instance of "GetUserDefinedName" in pylon_camera with "GetDeviceGUID" and setting the device_user_id to be equal to the camera's GUID. This works great.

I don't know enough c++ to debug why the original approach is not working :(

version for ROS2-foxy

Hi,

is there a similar implementation for ros2 foxy or any other ros2 version?

BR Chris

ROS dependencies installation error

Hello,

when I am installing the ROS dependencies I got a following error. I have installed pylon 6.1.0 in /opt. Is there a way to solve it?

reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Hit https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/pylon_sdk.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Add distro "foxy"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/pilz/.ros/rosdep/sources.cache
/opt/pylon/bin/pylon-config
Could not find any pylon Installation with version 5 or greater
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
pylon_camera: Cannot locate rosdep definition for [dnb_msgs]

Influence parameter of frame rate

Hello together,

How does the trigger timeout and the grabbing timeout influence the frame rate/image acquisition, when i run my camera in the free run mode with the grabbing strategy latest image only?

I wolud appreciate any explanation of the realtion of these two parameters in the config-file. Because i want to understand the whole process behind the free run mode and the parameters

Thanks for any help!

Setting auto_exposure_upper_limit has no effect

Config .yaml file needs the following line for auto_exposure_upper_limit to take an effect:

startup_user_set: "Default"

I suggest adding that to the default.yaml file or clarifying the use of auto_exposure_upper_limit in any other way.

Waiting For Trigger Signal/Error: Grab was not successful

Hi all,

I'm trying to implement hardware triggering of two GigE cameras so that they capture a single frame each time there is a pulse on line 3. To do this, I'm using the default Pylon ROS camera config and then making a service call to set the trigger source to line 3 (int value 2).

Here's the method I implemented:

bool initializeCameras(ros::NodeHandle &n) {
    ros::ServiceClient trigger_source_client0 = n.serviceClient<camera_control_msgs::SetIntegerValue>("/cameranode0/set_trigger_source");
    ros::ServiceClient trigger_source_client1 = n.serviceClient<camera_control_msgs::SetIntegerValue>("/cameranode1/set_trigger_source");

    // set trigger source to line3
    camera_control_msgs::SetIntegerValue trigger_source_call;
    trigger_source_call.request.value = 2; // XXX this is from pylon_camera's pylon_camera_node.cpp, find a symbol
    if(!trigger_source_client0.call(trigger_source_call) || !trigger_source_client1.call(trigger_source_call)) {
        ROS_ERROR_STREAM("Couldn't set trigger source for cameras: " << trigger_source_call.response.message);
        return false;
    } else {
        ROS_INFO("Set trigger source for cameras successfully.");
    }
    return true;
}

It seems to work. I get a image_raw callback for each camera whenever line 3 gets a pulse. However, I'm seeing a lot of these errors in the logs:

[ERROR] [1616015132.304685759]: Waiting for Trigger signal
[ERROR] [1616015132.304724894]: Error: Grab was not successful
[ERROR] [1616015132.359765457]: Waiting for Trigger signal
[ERROR] [1616015132.359786272]: Error: Grab was not successful

I looked into the source, and found the following in pylon_camera_base.hpp:

template <typename CameraTrait>
bool PylonCameraImpl<CameraTrait>::grab(Pylon::CGrabResultPtr& grab_result)
{
    // XXX several lines omitted for brevity
    catch ( const GenICam::GenericException &e )
    {
        if ( cam_->IsCameraDeviceRemoved() )
        {
            ROS_ERROR("Lost connection to the camera . . .");
        }
        else
        {
            if ((! cam_->TriggerSource.GetValue() == TriggerSourceEnums::TriggerSource_Software) && (cam_->TriggerMode.GetValue() == TriggerModeEnums::TriggerMode_On))
            {
                ROS_ERROR_STREAM("Waiting for Trigger signal");
            }
            else
            {
            ROS_ERROR_STREAM("An image grabbing exception in pylon camera occurred: "
                    << e.GetDescription());
            }
        }
        return false;
    }
    // XXX several lines omitted for brevity

The caller of the method is what produces the "Error: Grab was not successful" message.

This leads me to my questions:

  1. The code in pylon_camera_base.hpp handles non-software triggers as an exceptional condition. Does this mean non-software triggering is not fully supported?
  2. What else do I need to configure on the camera, if anything? My assumption is that trigger mode should be "on", the trigger source should be line 3 (in my case), trigger selector should be "frame start".

Unable to receive data on more than 5 USB cameras

Hi, I got a vision system using 6 basler camera acA1920-40uc.
I am able to launch and record 5 of them a without issue.
When I connect the sixth one i receive no data on that topic
All cam have a unique device_user_id from cam0 to cam5

Here is the message i got when connecting the last one

[ERROR] [1570648293.510069443]: Couldn't find the camera that matches the given DeviceUserID: cam5! Either the ID is wrong or the cam is not yet connected
[ERROR] [1570648295.510965631]: Couldn't find the camera that matches the given DeviceUserID: cam5! Either the ID is wrong or the cam is not yet connected
[ INFO] [1570648297.509387785]: Found the desired camera with DeviceUserID cam5: acA1920-40uc
[ WARN] [1570648297.622168215]: No camera present. Keep waiting ...
[ WARN] [1570648299.265209747]: No User Set Is selected, Camera current setting will be used
[ INFO] [1570648299.267531490]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT']
[ INFO] [1570648299.355252985]: camera calibration URL: file:///home/sixmetrix/catkin_ws/src/pylon-ros-camera/pylon_camera/config/cam5_calib.yaml
[ WARN] [1570648299.362856675]: [cam5] does not match name narrow_stereo in file /home/sixmetrix/catkin_ws/src/pylon-ros-camera/pylon_camera/config/cam5_calib.yaml
[ INFO] [1570648299.377006538]: Setting gamma to 1, reached: 1
[ INFO] [1570648300.996723716]: Setting brightness to: 100, reached: 99
[ INFO] [1570648301.002561299]: Startup settings: encoding = 'bayer_rggb8', binning = [1, 1], exposure = 22285, gain = 0, gamma = 1, shutter mode = global
[ INFO] [1570648301.002960076]: Start image grabbing if node connects to topic with a frame_rate of: 5 Hz
[ INFO] [1570648301.003087051]: Camera is calibrated
[ WARN] [1570648301.003396208]: diagnostic_updater: No HW_ID was set. This is probably a bug. Please report it. For devices that do not have a HW_ID, set this value to 'none'. This warning only occurs once all diagnostics are OK so it is okay to wait until the device is open before calling setHardwareID.

Any idea how to solve the issue?

Node is not writable when call start_grabbing

camera: acA2440-75uc with USB3.0
OS/device: Ubuntu 16.04 with ROS(kinetic) in docker / Jetson AGX Xavier
Opened two terminal,
First called roslaunch pylon_camera pylon_camera_node.launch

PARAMETERS
 * /pylon_camera_node/camera_frame: pylon_camera
 * /pylon_camera_node/camera_info_url: 
 * /pylon_camera_node/device_user_id: 
 * /pylon_camera_node/enable_current_params_publisher: True
 * /pylon_camera_node/enable_status_publisher: True
 * /pylon_camera_node/frame_rate: 5.0
 * /pylon_camera_node/gige/mtu_size: 1500
 * /pylon_camera_node/startup_user_set: CurrentSetting
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    pylon_camera_node (pylon_camera/pylon_camera_node)

auto-starting new master
process[master]: started with pid [1183]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to afe8bf76-56ad-11ea-82b5-00044bcc10e6
process[rosout-1]: started with pid [1196]
started core service [/rosout]
process[pylon_camera_node-2]: started with pid [1208]
[ WARN] [1582511462.441443735]: Autoflash: 0, line2: 1 , line3: 1 
[ INFO] [1582511462.441945201]: No Device User ID set -> Will open the camera device found first
[ INFO] [1582511462.731535945]: Found camera with DeviceUserID N/A: acA2440-75uc
[ WARN] [1582511462.986045287]: No User Set Is selected, Camera current setting will be used
[ INFO] [1582511462.992758423]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] 
[ WARN] [1582511462.993106632]: No image encoding provided. Will use 'mono8' or 'rgb8' as fallback!
[ WARN] [1582511463.128782253]: [] name not valid for camera_info_manager
[ INFO] [1582511463.220310896]: CameraInfoURL needed for rectification! ROS-Param: '/pylon_camera_node/camera_info_url' = '' is invalid!
[ WARN] [1582511463.220583774]: Will only provide distorted /image_raw images!
[ INFO] [1582511463.226793332]: Startup settings: encoding = 'mono8', binning = [1, 1], exposure = 3000, gain = 0, gamma = 1, shutter mode = default_shutter_mode
[ INFO] [1582511463.228155000]: Start image grabbing if node connects to topic with a frame_rate of: 5 Hz
[ INFO] [1582511463.229123785]: Camera not calibrated
[ INFO] [1582511463.277962964]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] 
[ WARN] [1582511463.386160986]: [] name not valid for camera_info_manager
[ INFO] [1582511463.453152433]: CameraInfoURL needed for rectification! ROS-Param: '/pylon_camera_node/camera_info_url' = '' is invalid!
[ WARN] [1582511463.453369308]: Will only provide distorted /image_raw images!
[ INFO] [1582511463.461328139]: Startup settings: encoding = 'mono8', binning = [1, 1], exposure = 3000, gain = 0, gamma = 1, shutter mode = default_shutter_mode
[ INFO] [1582511749.218811729]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] 

Second call rosservice call /pylon_camera_node/start_grabbing

root@AGX:~/catkin_ws# rosservice call /pylon_camera_node/start_grabbing
success: False
message: "Error"

and I got msg in first terminal

[ INFO] [1582511749.218811729]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] 
[ERROR] [1582511749.223653481]: An exception while setting target image encoding to 'mono8' occurred: Node is not writable
[ERROR] [1582511749.225676099]: Error while start grabbing

Can you help me to solve this issue?

Feature Request: Auto Exposure and both Auto Function ROI's

Hi there,
In case someone would like to add some features, someone has brought to me an application needing the Auto Exposure and Auto Function ROI's (both for Brightness and White Balance). Unfortunately at the moment I don't have the resources to implement these myself. I'm not sure of the urgency, just that they would be needed at some point. (I also file the issue so that I won't forget one day when I am able to work on them :)).
Thanks and I hope everyone is healthy and doing well during these strange days!!
-Matt

Timestamp

Hi,

Is it possible to get timestamp of grabbed image directly from the camera ?

BR,
Boris

Install of driver

Hello,
do you know if the ros driver works with pylon view 6.2 because if I try to install the pylon SDK API with
'sudo rosdep install --from-paths . --ignore-src --rosdistro=$ROS_DISTRO -y' I become the failure that:
Could not find any pylon Installation with version 5 or greater
ERROR: the following rosdeps failed to install
source: Failed to detect successful installation of [source: https://raw.githubusercontent.com/magazino/pylon_camera/indigo-devel/rosdep/pylon_sdk.rdmanifest]
I hope you can help me

Rosdep install uses incorrect architecture

Hi there,

I'm trying to install pylon-ros-camera inside an i386 docker container. I'm building the container on an amd64 host.

Currently the rosdep install step fails because it tries to install _pylon_5.2.0.13457-deb0_amd64.deb_ (i.e. the amd64 version of pylon).

Tracing this back, it looks like the amd64 version is picked based on the output of uname -m - see here:
https://github.com/basler/pylon-ros-camera/blob/master/pylon_camera/rosdep/pylon_sdk.rdmanifest#L16

Running uname -m inside the container returns x86_64, reflecting the fact that the container is running on a 64 bit host, but I need the 32 bit deb to be installed in this case.

As far as I can tell, a more suitable way to get the architecture for the package install would be pkgarch=$(dpkg --print-architecture). I've confirmed that this returns i386 in my container, and amd64 on my host. I'm guessing that this approach would resolve my issue and allow you to get rid of the whole if/elif/else block here:
https://github.com/basler/pylon-ros-camera/blob/master/pylon_camera/rosdep/pylon_sdk.rdmanifest#L16-L27

I could put this together as a pull request, but I'm not able to test on those other architectures, and I'm not sure if I'm missing something in my reasoning.

Increasing bandwith ROS Topic Image_raw (USB)

Hello, i am a beginner with the ros pylon package and i want to ask how to solve the following problem:

I am trying to increase the bandwith and so on my publishing rate to the topic "image_raw".
I already changed the USB memory from Ubuntu as mentioned in the instuctions of the ros pylon package on github. I also tried to set the max usb transfer size to 150MB by rosservice commands but i didn't get any changes to my bandwith.

I am meassuring the bandwith by the ros call: "rostopic bw "..../image_raw" (for publishing rate: hz instead of bw).
At the moment i reach with one camera: publishing rate: ca. 6,2 Hz and bandwidth: ca 12MB/s

Could anybody help me with this issue?
In the end i want to work with several cameras at the same time so i should solve this problem....

Thanks for any help!

Any support for YUV colour format planned?

Hi :)

When we moved from USB to GigE we lost the ability to use PGI on-board demoasicing because the GigE Ace U cams only support YUV as a debayered format.
The stack here however does not support the YUV format.

Are there any plans to add those?

Thanks a lot :)

Unable to grab images from daA3840-45uc

roslaunch pylon_camera pylon_camera_node.launch returns the following error, bit works fine with a daA2500-14uc

Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://dev.local:39093/

SUMMARY
========

PARAMETERS
 * /pylon_camera_node/camera_frame: pylon_camera
 * /pylon_camera_node/camera_info_url: 
 * /pylon_camera_node/device_user_id: 
 * /pylon_camera_node/enable_current_params_publisher: True
 * /pylon_camera_node/enable_status_publisher: True
 * /pylon_camera_node/frame_rate: 5.0
 * /pylon_camera_node/gige/mtu_size: 1500
 * /pylon_camera_node/image_encoding: rgb8
 * /pylon_camera_node/startup_user_set: CurrentSetting
 * /rosdistro: melodic
 * /rosversion: 1.14.10

NODES
  /
    pylon_camera_node (pylon_camera/pylon_camera_node)

auto-starting new master
process[master]: started with pid [21582]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 3ebc001e-67d3-11eb-a847-00044bec1ccd
process[rosout-1]: started with pid [21593]
started core service [/rosout]
process[pylon_camera_node-2]: started with pid [21597]
[ WARN] [1612544257.249715311]: Autoflash: 0, line2: 1 , line3: 1 
[ INFO] [1612544257.251923600]: No Device User ID set -> Will open the camera device found first
[ INFO] [1612544257.525473588]: Found camera with DeviceUserID N/A: daA3840-45uc
[ WARN] [1612544257.934902505]: No User Set Is selected, Camera current setting will be used
[ INFO] [1612544257.948000936]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['Mono12'|'mono16'] ['Mono12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT'] 
[ERROR] [1612544259.000065048]: Waiting for Trigger signal
[ERROR] [1612544259.000201458]: PylonCamera not ready because the result of the initial grab is invalid
[ WARN] [1612544259.018461124]: [] name not valid for camera_info_manager
[ INFO] [1612544259.038553393]: CameraInfoURL needed for rectification! ROS-Param: '/pylon_camera_node/camera_info_url' = '' is invalid!
[ WARN] [1612544259.038646625]: Will only provide distorted /image_raw images!
[ INFO] [1612544259.040987678]: Startup settings: encoding = 'rgb8', binning = [1, 1], exposure = 14983, gain = 0, gamma = 1, shutter mode = default_shutter_mode
[ INFO] [1612544259.041788794]: Desired framerate 5.00 is higher than max possible. Will limit framerate to: 0.30 Hz
[ INFO] [1612544259.044071617]: Start image grabbing if node connects to topic with a frame_rate of: 0.297531 Hz
[ INFO] [1612544259.044281518]: Camera not calibrated
[ WARN] [1612544259.045840103]: Error in triggerDeviceReset(): pylon_camera_ is not ready!
[ WARN] [1612544262.406677254]: Error in triggerDeviceReset(): pylon_camera_ is not ready!
[ WARN] [1612544265.774585948]: Error in triggerDeviceReset(): pylon_camera_ is not ready!

PTP synchronization with multiple cameras

Hello,

the Basler documentation provide detailed information on how to synchronize multiple cameras using the PTP protocol, but the problem is that I cannot find the way to match does information for the Pylon ROS Driver.

I already have a network with a master clock and I enabled, through the Pylon Software Suite, the PTP clock synchronization for both cameras (as mentioned here).

What I am doing right now is running two different Pylon nodes specific to a singular camera and looking at the header of their topic in order to understand if the time stamp of the two cameras coincides.

Because this is not a professional way to check their synchronization and it doesn't give me the prove that they are really synchronized I would like:

  • to know if there is a way to understand if the cameras are really synchronized with the master clock
  • or to know how to synchronize them using the Pylon ROS driver.

All of this, if possible, only by using the Pylon ROS driver.

Thank you,
Alessandro

Triggering an new Image

Hey,

is it possible to trigger a new image, so that I can trigger two cameras simultaneously?

The /pylon_camera_node/execute_software_trigger service lead to to believe it, but after looking around the docs and code it doesn't seem like its possible with the current implementation?

No option to start grabbing with a different strategy

The current implementation of the camera driver uses the following function call to start grabbing

void Pylon::CInstantCamera::StartGrabbing(EGrabStrategy strategy = GrabStrategy_OneByOne, EGrabLoop grabLoopType = GrabLoop_ProvidedByUser)

with default parameters, i.e. calling

Pylon::CInstantCamera::StartGrabbing()

in diffeernt part of the code, see for example pylon_camera/include/pylon_camera/internal/impl/pylon_camera_base.hpp.

However this implies that, for real-time applications, if a frame is not grabbed (e.g. a trigger fails) a queue with past frames is formed, resulting in an synchronized grabbed sequence of images. This may be desirable in some applications, but the dirver/ROS node should provide a way to choose the best strategy, which are

enum Pylon::EGrabStrategy
Enum Description
GrabStrategy_OneByOne The images are processed in the order of their arrival. This is the default grab strategy.
GrabStrategy_LatestImageOnly Only the latest image is kept in the output queue, all other grabbed images are skipped. If no image is in the output queue when retrieving an image with CInstantCamera::RetrieveResult(), the processing waits for the upcoming image.
GrabStrategy_LatestImages This strategy can be used to grab images while keeping only the latest images. If the application does not retrieve all images in time, all other grabbed images are skipped. The CInstantCamera::OutputQueueSize parameter can be used to control how many images can be queued in the output queue. When setting the output queue size to 1, this strategy is equivalent to GrabStrategy_LatestImageOnly grab strategy. When setting the output queue size to CInstantCamera::MaxNumBuffer, this strategy is equivalent to GrabStrategy_OneByOne.
GrabStrategy_UpcomingImage The input buffer queue is kept empty. This prevents grabbing. However, when retrieving an image with a call to the CInstantCamera::RetrieveResult() method a buffer is queued into the input queue and then the call waits for the upcoming image. The buffer is removed from the queue on timeout. Hence after the call to the CInstantCamera::RetrieveResult() method the input buffer queue is empty again. The upcoming image grab strategy cannot be used together with USB camera devices.

A2440-75uc USB3 not present

Hi i try connect my camera. It can be opened in Pylon viewer but not in ros there the camera is not present. I opened ros in docker the workspace seems to be working. What could be answer. I hope you can help me.

Unable to run pylon_camera_node with BASLER scA1390-ABB camera

I'm using BASLER scA1390-ABB camera with pylon_camera package and ROS-kinetic.
I can't connect to the camera with automatic IP address, So I configured IPv4 Setting in Manual, Address: 169.254.1.1 and Netmask: 255.255.0.0 Finally the connection is established.
Then I tried the following command:

roslaunch pylon_camera pylon_camera_node.launch

And then it returned the following error:

[ WARN] [1614848016.079406596]: Autoflash: 0, line2: 1 , line3: 1 
[ INFO] [1614848016.079532262]: No Device User ID set -> Will open the camera device found first
[ERROR] [1614848016.386277604]: No camera present

I'm not sure can I use the camera with pylon_camera package.
What am I doing wrong?

"No camera present"after roslaunch pylon_camera pylon_camera_node.launch

Hi there,
I use pylon on a linux arm system, but when I run "roslaunch pylon_camera pylon_camera_node.launch", "No camera present" appears, as follows:
process[pylon_camera_node-1]: started with pid [10841]
[ WARN] [1591426727.887867753]: Autoflash: 0, line2: 1 , line3: 1
[ INFO] [1591426727.890951286]: No Device User ID set -> Will open the camera device found first
[ERROR] [1591426728.221549200]: No camera present
[ INFO] [1591426730.223653219]: using default calibration URL
[ INFO] [1591426730.224012859]: camera calibration URL: file:///home/nvidia/.ros/camera_info/camera.yaml
[ INFO] [1591426730.224407350]: Unable to open camera calibration file [/home/nvidia/.ros/camera_info/camera.yaml]
[ WARN] [1591426730.224656519]: Camera calibration file /home/nvidia/.ros/camera_info/camera.yaml not found.
[ WARN] [1591426744.554398780]: No camera present. Keep waiting ...

I can use the camera normally in the pylon viewer, but I cannot detect the camera in ros,what should i do?

Read Pylon Temperature

Hello Dev-Team,

is it possible to add the psobility to read out the temperature of the camera?
Pylon sdk does support to read the temperature.

best regards

Handle multiple USB cameras

Hello,
How could i handle multiple USB Basler cameras?
I could successfully get the image of single camera. I set each camera a different UserDevice ID ("camera_01", "camera_02", etc.) and reset them afterwards. I changed the parameters in the default.yaml file at catkin_ws/src/pylon-ros-camera/pylon_camera/config as mentioned in the READ_ME File in the package folders: device_user_id: "camera_01" but it only detect one camera with its user ID. It tried also to add both camera-IDs (i tried something like: device_user_id: "camera_01", "camera_02") to the parameter but i got an error. I couldn't find any information how this driver work with multiple USB cameras. Is it necessary to run one node for each camera? And how do adapt some settings of a specific camera with rosservice, how do i adress the camera?
I appreciate any help

Remove dependency on dragandbot_common

Hey!

Including a company-specific package just for two tiny definitions looks like an overkill. Wouldn't it be easier to add them to the camera_control_msgs?

Adding PTP and sync free run

I wanted to support PTP (#25 might be interested) and also synchronous free run. I have it working here: https://github.com/iron-ox/pylon-ros-camera/tree/petercheng/ptp_sync_free_run

However, the changes are somewhat messy. Sync free run require continuous capture mode and not software trigger mode, and the codebase seems to be built assuming software trigger mode. Do you have any suggestions for how the code could be made cleaner?

I was also considering making it a separate node for continuous capture / sync free run. Perhaps one node could manage multiple cameras to ensure they are all synced simultaneously. However, I couldn't find a good place to split between the node code and the camera code. Any thoughts or suggestions on that?

Thanks

rosdep install fails due to wrong checksum

executing command [rosdep-source install https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/pylon_sdk.rdmanifest]
ERROR: installation failed:
source: md5sum check on https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/empty.tar failed. Expected df41600634ca08cb5082877eb64220c9 got d41d8cd98f00b204e9800998ecf8427e
ERROR: the following rosdeps failed to install
source: command [rosdep-source install https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/pylon_sdk.rdmanifest] failed

Error connecting to Basler ACE 2 Pro

Hello,

I have issues running a basler ace 2 pro (a2A1920-51gcPRO) camera with the driver. I'm using ros noetic on 20.04.
The error log shows that the property ExposureTimeAbs cannot be queried from the camera.

SUMMARY

PARAMETERS

  • /pylon_camera_node/camera_frame: pylon_camera
  • /pylon_camera_node/camera_info_url:
  • /pylon_camera_node/device_user_id:
  • /pylon_camera_node/enable_current_params_publisher: True
  • /pylon_camera_node/enable_status_publisher: True
  • /pylon_camera_node/frame_rate: 5.0
  • /pylon_camera_node/gige/mtu_size: 1500
  • /pylon_camera_node/startup_user_set: CurrentSetting
  • /rosdistro: noetic
  • /rosversion: 1.15.9

NODES
/
pylon_camera_node (pylon_camera/pylon_camera_node)

auto-starting new master
process[master]: started with pid [50947]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 56dfbef4-574a-11eb-af70-df158f63f6b0
process[rosout-1]: started with pid [50957]
started core service [/rosout]
process[pylon_camera_node-2]: started with pid [50964]
[ WARN][/pylon_camera_node][WallTime: 1610726236.868098176]: Autoflash: 0, line2: 1 , line3: 1
[ INFO][/pylon_camera_node][WallTime: 1610726236.868819414]: No Device User ID set -> Will open the camera device found first
[ INFO][/pylon_camera_node][WallTime: 1610726237.124932171]: Found camera with DeviceUserID 0: a2A1920-51gcPRO
[ WARN][/pylon_camera_node][WallTime: 1610726237.346371877]: No User Set Is selected, Camera current setting will be used
[ INFO][/pylon_camera_node][WallTime: 1610726237.373381813]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['Mono12'|'mono16'] ['Mono12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT']
[ WARN][/pylon_camera_node][WallTime: 1610726237.373513115]: No image encoding provided. Will use 'mono8' or 'rgb8' as fallback!
[ INFO][/pylon_camera_node][WallTime: 1610726237.515286564]: CameraInfoURL needed for rectification! ROS-Param: '/pylon_camera_node/camera_info_url' = '' is invalid!
[ WARN][/pylon_camera_node][WallTime: 1610726237.515392230]: Will only provide distorted /image_raw images!
terminate called after throwing an instance of 'std::runtime_error'
what(): Error while accessing ExposureTimeAbs in PylonGigECamera

When I use the ./PylonViewerApp, I can access the camera and even view a video stream, so the cam in general seems to be working.
After I tried the ros driver, the camera seems to freeze internally and does not show any video stream in ./PylonViewerApp anymore (ros nodes were already terminated properly).

Do you have any suggestions how to trace the problem? What did I do wrong?

thanks in advance for your help,
Tobias

Driver for two cameras

Hi,

I currently have two cameras, and I want to start them synchronously. What should I do?

Thanks,
Tairan Chen

picture shows gray in RVIZ

I set rgb8 in default.yaml . I can get the color map when I run " rosrun image_view image_view image:=/pylon_camera_node/image_raw "

but when I run "rviz" , the pictures is gray

pylon_camera fps cannot exceed 75

Hello,
I am using pylon_camera for my Basler acA1300-200uc. However, as put the fps to be 100 or higher in the launch file, the rosout shows that it has launched the camera at that specific frame rate.
[ INFO] [1583442203.551151871]: Start image grabbing if node connects to topic with a frame_rate of: 100 Hz

However when I check the topic
rostopic hz /pylon_camera_node/image_raw

I only get 75fps.
min: 0.012s max: 0.015s std dev: 0.00029s window: 70
Is there a way to get higher fps. I have already tried with the basler application, which works fine and gives me a higher frame rate, so it is not an issue with the hardware or the connectors.

I looked into: magazino/pylon_camera#25 and related issue to it but it did not help.

rosdep update error: <urlopen error [Errno 111]>

When I run:

sudo sh -c 'echo "yaml https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/pylon_sdk.yaml" > /etc/ros/rosdep/sources.list.d/30-pylon_camera.list' && rosdep update && sudo rosdep install --from-paths . --ignore-src --rosdistro=$ROS_DISTRO -y

Erros like this arised:

ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml]:
<urlopen error [Errno 111] Connection refused> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml)

How to fix it? thank you!

Grab and Save images not working

Hello,
I publish the below goal to the action server:
~$ rostopic pub /pylon_camera_grab_and_save_as/grab_and_save_image_raw/goal camera_control_msgs/GrabAndSaveImageActionGoal "header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: ''
goal_id:
stamp:
secs: 0
nsecs: 0
id: ''
goal: {exposure_given: false, exposure_time: 3000.0, gain_given: false, gain_value: 0.0,
gamma_given: false, gamma_value: 1.0, brightness_given: false, brightness_value: 0.0,
exposure_auto: True, gain_auto: false, img_storage_path_and_name: '/home/manolis/image1.png'}"
publishing and latching message. Press ctrl-C to terminate

And I get the below error at the action server terminal:
[ERROR] [1615557594.524704]: Exception in your execute callback: list index out of range
Traceback (most recent call last):
File "/opt/ros/noetic/lib/python3/dist-packages/actionlib/simple_action_server.py", line 289, in executeLoop
self.execute_callback(goal)
File "/home/manolis/ws/src/pylon-ros-camera/pylon_camera/scripts/grab_and_save_image_action_server.py", line 80, in grab_and_save_img_raw_execute_cb
self.grab_and_save_img_execute_cb(grab_and_save_img_goal,
File "/home/manolis/ws/src/pylon-ros-camera/pylon_camera/scripts/grab_and_save_image_action_server.py", line 105, in grab_and_save_img_execute_cb
cv_img = CvBridge().imgmsg_to_cv2(grab_imgs_result.images[0],
IndexError: list index out of range

As I understand the grab_imgs_result.images is empty, but why? Am I right?
Any help would be very much appreciated. Thank you!

input delay / high latency - basler acA2440-35uc

On our system with Intel(R) Xeon(R) CPU E3-1505M v6 we have very heavy delays (several seconds, sometimes over 10 seconds) until the message arrives. We use a USB3 Basler acA2440-35uc camera for this. If we open PylonViewer directly on the same computer, it works fine. Via rqt_image_view (and no matter which topic we connect to) the message is delayed very long.
All settings are stored within a User-Settings, which is invoked while launching. The framerate is set to 20hz. No scaling is applied. The framerate of the received, but delayed message seems to be okay (movements are smooth). We do not face this problem on a desktop pc setup.
On the first look I think this issues #17 is fixed and does not relate to this problem anymore, or does ist?
Are there any approaches to solving this problem?
Is there a option for software scaling within the pylon-ros-camera node?

Hard coded timeouts in camera driver decrease maximum FPS

The following trigger- and grab-related timeouts are hard coded

//grab_timeout_ = exposureTime().GetMax() * 1.05;
grab_timeout_ = 500; // grab timeout = 500 ms

that results in the following code

try
{
int timeout = 5000; // ms
// WaitForFrameTriggerReady to prevent trigger signal to get lost
// this could happen, if 2xExecuteSoftwareTrigger() is only followed by 1xgrabResult()
// -> 2nd trigger might get lost
if ((cam_->TriggerMode.GetValue() == TriggerModeEnums::TriggerMode_On))
{
if ( cam_->WaitForFrameTriggerReady(timeout, Pylon::TimeoutHandling_ThrowException) )
{
cam_->ExecuteSoftwareTrigger();
}
else
{
ROS_ERROR("Error WaitForFrameTriggerReady() timed out, impossible to ExecuteSoftwareTrigger()");
return false;
}
}
cam_->RetrieveResult(grab_timeout_, grab_result, Pylon::TimeoutHandling_ThrowException);
}

to hang too much and, as a consequence, decrease the FPS of the camera.
Notice that this behavior, in conjunction with #28, provides a slow and delayed/unsynched stream of images, which is very undesirable when high frame-rate/real-time is desirable.
After some tests, setting grab_timeout_ = <framerate> and timeout = 2 * grab_timeout_ resulted in very stable performance with few image drops.

Huge image input delay when working with low frame rates

Setting frame_rate: 1.0 I get a huge delay of about 36 seconds from when the actual image is taken and received on ros. Comparing the timestamp of the image message and ros time of the moment the image message is published I get a difference of about 1 second which I can work with. The delay of 36 seconds I acquired by comparing the image content and the image message timestamp so the total delay is at about 37 seconds.
Using the same camera settings with PylonViewerApp does not result is a huge delay. So the fault must be with the ros driver.

ROS Installation problem

Based on manual installation on stage -
$ sudo sh -c 'echo "yaml https://raw.githubusercontent.com/basler/pylon_ros_camera/master/pylon_came ra/rosdep/pylon_sdk.yaml " > /etc/ros/rosdep/sources.list.d/30- plyon_camera.list'
$ rosdep update

The ERROR received:

ERROR: unable to process source [https://raw.githubusercontent.com/basler/pylon_ros_camera/master/pylon_came]:
HTTP Error 404: Not Found (https://raw.githubusercontent.com/basler/pylon_ros_camera/master/pylon_came)

Dart camera timeout when using ROS (or Pylon)

Camera: daA1600-60uc
Platform: Rock960A/B, ARM64
Pylon: 5.2.0

I'm sometimes unable to load the camera using ROS using the sample node - it doesn't open in Pylon either. It's not clear what the error is as the camera is detected:

[ WARN] [1583103522.287427099]: Autoflash: 0, line2: 1 , line3: 1
[ INFO] [1583103522.288132931]: No Device User ID set -> Will open the camera device found first
[ INFO] [1583103522.619771689]: Found camera with DeviceUserID N/A: daA1600-60uc
[ERROR] [1583103531.077220534]: Could not apply configuration. Pylon::GenericException caught in OnOpened method msg=Write operation failed on device '2676:ba03:3:1:2' at address: 0x10000038; length 4; Error: 'The requested operation timed out.' : TimeoutException thrown (file 'PylonUsb
[ERROR] [1583103531.078270532]: Error while trying to open the desired camera!

When I try to run a simple capture script:

linaro@linaro-alip:~/tests$ cat test_basler.py
from pypylon import pylon

camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
camera.Open()

# demonstrate some feature access
new_width = camera.Width.GetValue() - camera.Width.GetInc()
if new_width >= camera.Width.GetMin():
    camera.Width.SetValue(new_width)

numberOfImagesToGrab = 100

camera.StartGrabbingMax(numberOfImagesToGrab)

while camera.IsGrabbing():
    grabResult = camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException)

    if grabResult.GrabSucceeded():
        # Access the image data.
        print("SizeX: ", grabResult.Width)
        print("SizeY: ", grabResult.Height)
        img = grabResult.Array
        print("Gray value of first pixel: ", img[0, 0])

    grabResult.Release()

camera.Close()
linaro@linaro-alip:~/tests$ python test_basler.py
Traceback (most recent call last):
  File "test_basler.py", line 4, in <module>
    camera.Open()
  File "/home/linaro/.local/lib/python2.7/site-packages/pypylon/pylon.py", line 3417, in Open
    return _pylon.InstantCamera_Open(self)
_genicam.RuntimeException: Could not apply configuration. Pylon::GenericException caught in OnOpened method msg=Read operation on device '2676:ba03:3:1:2' failed: 'The requested operation timed out.' : TimeoutException thrown (file 'PylonUsbDevice.cpp', line 778) : RuntimeException thrown (file 'AcquireContinuousConfiguration.h', line 91)

This code definitely works, if I re-plug the camera (lens cap on, so zeros):

linaro@linaro-alip:~/tests$ python test_basler.py
('SizeX: ', 1588)
('SizeY: ', 1200)
('Gray value of first pixel: ', 0)
('SizeX: ', 1588)
('SizeY: ', 1200)
('Gray value of first pixel: ', 0)
('SizeX: ', 1588)
('SizeY: ', 1200)
('Gray value of first pixel: ', 0)
('SizeX: ', 1588)
('SizeY: ', 1200)
('Gray value of first pixel: ', 0)
('SizeX: ', 1588)
('SizeY: ', 1200)
('Gray value of first pixel: ', 0)

Any idea what's going wrong? It's a bit concerning that whatever is failing seems to be locking up the USB device completely. I can provide more info if it would be useful.

Low FPS in rgb8 mode

Am connecting an ac2440-35uc (2448 x 2048 colour, 35 fps) to a Jetson Nano.

I can get 35 fps in pylon viewer with colour images, 26 fps when subscribed to image_raw topic with greyscale images (mono8) but only 2.5 fps with RGB (rgb8).

Why would this be? Something to do with the software triggering?

Camera node dies as soon as camera matrix gets updated

Hello,
Why my camera node dies as soon as I update the camera matrix K? I do update it by calling the set_camera_info service:

$ rosservice call /pylon_camera_node/set_camera_info "camera_info:
header:
seq: 0
stamp: {secs: 0, nsecs: 0}
frame_id: ''
height: 0
width: 0
distortion_model: ''
D: [0]
K: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
R: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
P: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
binning_x: 0
binning_y: 0
roi: {x_offset: 0, y_offset: 0, height: 0, width: 0, do_rectify: false}"

When, I insert a value different that 0 in the K matrix, in the camera's node terminal says:
[ INFO] [1615941352.735544232]: Camera is calibrated
[pylon_camera_node-1] process has died [pid 27803, exit code -11, cmd /home/manolis/ws/devel/lib/pylon_camera/pylon_camera_node __name:=pylon_camera_node __log:=/home/manolis/.ros/log/fbd05ee6-86ac-11eb-a608-071dbd7be759/pylon_camera_node-1.log].
log file: /home/manolis/.ros/log/fbd05ee6-86ac-11eb-a608-071dbd7be759/pylon_camera_node-1*.log
all processes on machine have died, roslaunch will exit
shutting down processing monitor...
... shutting down processing monitor complete
done
But, whenever I insert a value different than 0 to any other argument of the 'set_camera_info' service, in the camera's node terminal says:
[ INFO] [1615941237.782840476]: writing calibration data to /home/manolis/.ros/camera_info/camera.yaml

and it is still running.

Any insight for the potential issue would be helpful. Thank you!

no device found, will try once more in 2 s

Hello !
Thanks for this great job and making it available to everyone.

I am using an Ethernet camera (GigE) and failing to get it connected. With lfconfig I can see the IP address of my camera, it is connected, but pylon_camera_ip_configuration.launch can't establish a connection with my camera returning 'no device found, will try once more in 2 s' . Consequently I am getting warning ' No camera present '. Any hints or suggestions ?

Error while start grabbing. ROS melodic, pylon 6, Basler Ace 2 Ethernet camera.

Hello,

I have a Basler ace 2 camera (a2A1920-51gcBAS) connected directly to my laptop with static IPs configured (169.254.1.10 laptop, 169.254.1.1 camera). The pylon viewer works as expected and I have also tried some of the samples of the SDK and they work as expected but I can not get the ROS node to work. It throws the error "Error while start grabbing". I installed everything following the readme but I had pylon 6 installed.

This is the output of roslaunch pylon_camera pylon_camera_node.launch with de configuration set to debug=true. Any idea on what might be the issue and how to solve it?

marc@pc2829pt:~/basler_catkin_ws$ roslaunch pylon_camera pylon_camera_node.launch
... logging to /home/marc/.ros/log/dd105d88-4130-11eb-8d7c-1065303dcaa8/roslaunch-pc2829pt-26288.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://pc2829pt:33101/

SUMMARY

PARAMETERS

  • /pylon_camera_node/camera_frame: pylon_camera
  • /pylon_camera_node/camera_info_url:
  • /pylon_camera_node/device_user_id:
  • /pylon_camera_node/enable_current_params_publisher: True
  • /pylon_camera_node/enable_status_publisher: True
  • /pylon_camera_node/frame_rate: 15.0
  • /pylon_camera_node/gige/inter_pkg_delay: 1000
  • /pylon_camera_node/gige/mtu_size: 1500
  • /pylon_camera_node/image_encoding: bayer_gbrg8
  • /pylon_camera_node/startup_user_set: CurrentSetting
  • /rosdistro: kinetic
  • /rosversion: 1.12.14

NODES
/
pylon_camera_node (pylon_camera/pylon_camera_node)

ROS_MASTER_URI=http://localhost:11311

process[pylon_camera_node-1]: started with pid [26306]
GNU gdb (Ubuntu 7.11.1-0ubuntu116.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
http://www.gnu.org/software/gdb/bugs/.
---Type to continue, or q to quit---
Find the GDB manual and other documentation resources online at:
http://www.gnu.org/software/gdb/documentation/.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Registered pretty printers for UE4 classes
Reading symbols from /home/idiada/Ensemble/basler_catkin_ws/devel/lib/pylon_camera/pylon_camera_node...(no debugging symbols found)...done.
Starting program: /home/marc/basler_catkin_ws/devel/lib/pylon_camera/pylon_camera_node __name:=pylon_camera_node __log:=/home/idiada/.ros/log/dd105d88-4130-11eb-8d7c-1065303dcaa8/pylon_camera_node-1.log
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[New Thread 0x7fffe67a4700 (LWP 26313)]
[New Thread 0x7fffe5fa3700 (LWP 26314)]
[New Thread 0x7fffe57a2700 (LWP 26315)]
[New Thread 0x7fffe4fa1700 (LWP 26320)]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[New Thread 0x7fffd6eaf700 (LWP 26410)]
[New Thread 0x7fffd66ae700 (LWP 26415)]
[ WARN] [1608296470.451341444]: Autoflash: 0, line2: 1 , line3: 1
[ INFO] [1608296470.451392814]: No Device User ID set -> Will open the camera device found first
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[New Thread 0x7fffce433700 (LWP 26453)]
[New Thread 0x7fffcdc32700 (LWP 26454)]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[ INFO] [1608296470.894443024]: Found camera with DeviceUserID camera_1: a2A1920-51gcBAS
[New Thread 0x7fffccc55700 (LWP 26455)]
[Thread 0x7fffccc55700 (LWP 26455) exited]
[New Thread 0x7fffccc55700 (LWP 26457)]
[New Thread 0x7fffc7fff700 (LWP 26458)]
[ WARN] [1608296471.128966931]: No User Set Is selected, Camera current setting will be used
[ INFO] [1608296471.156283167]: Cam supports the following [GenAPI|ROS] image encodings: ['Mono8'|'mono8'] ['Mono12'|'mono16'] ['Mono12p'|'NO_ROS_EQUIVALENT'] ['RGB8'|'rgb8'] ['BGR8'|'bgr8'] ['YCbCr422_8'|'NO_ROS_EQUIVALENT'] ['BayerRG8'|'bayer_rggb8'] ['BayerRG12'|'bayer_rggb16'] ['BayerRG12p'|'NO_ROS_EQUIVALENT']
[ERROR] [1608296471.156352385]: Error while start grabbing
[Thread 0x7fffe4fa1700 (LWP 26320) exited]
[Thread 0x7fffe67a4700 (LWP 26313) exited]
[Thread 0x7fffe5fa3700 (LWP 26314) exited]
[New Thread 0x7fffe5fa3700 (LWP 26524)]
[Thread 0x7fffd6eaf700 (LWP 26410) exited]
[Thread 0x7fffe5fa3700 (LWP 26524) exited]
[Thread 0x7fffccc55700 (LWP 26457) exited]
[Thread 0x7fffc7fff700 (LWP 26458) exited]
[Thread 0x7fffcdc32700 (LWP 26454) exited]
[Thread 0x7fffce433700 (LWP 26453) exited]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[Thread 0x7fffd66ae700 (LWP 26415) exited]
[Thread 0x7fffe57a2700 (LWP 26315) exited]
[Inferior 1 (process 26308) exited normally]
(gdb) [pylon_camera_node-1] killing on exit
Quit
(gdb) [pylon_camera_node-1] escalating to SIGTERM
Exception ignored in: <gdb.GdbOutputFile object at 0x7f79e3a0eeb8>
Traceback (most recent call last):
File "/usr/share/gdb/python/gdb/init.py", line 43, in flush
def flush(self):
KeyboardInterrupt
shutting down processing monitor...
... shutting down processing monitor complete
done
marc@pc2829pt:
/basler_catkin_ws$ ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:06:c0:89:f7
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

enp61s0 Link encap:Ethernet HWaddr 10:65:30:3d:ca:a8
inet addr:169.254.1.10 Bcast:169.254.255.255 Mask:255.255.0.0
inet6 addr: fe80::f354:5384:b003:6a4e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3304788 errors:0 dropped:0 overruns:0 frame:0
TX packets:19185 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4963976382 (4.9 GB) TX bytes:1196259 (1.1 MB)
Interrupt:16

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:54379 errors:0 dropped:0 overruns:0 frame:0
TX packets:54379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13961275 (13.9 MB) TX bytes:13961275 (13.9 MB)

wlp62s0 Link encap:Ethernet HWaddr 9c:b6:d0:6b:70:a3
inet addr:192.168.248.68 Bcast:192.168.255.255 Mask:255.255.248.0
inet6 addr: fe80::8180:fdc5:e184:2df5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:722113 errors:0 dropped:0 overruns:0 frame:0
TX packets:415795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:690722733 (690.7 MB) TX bytes:154309170 (154.3 MB)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.