libcaer_driver repository

Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer_driver.git
VCS Type git
VCS Version master
Last Updated 2023-11-28
Dev Status DEVELOPED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
libcaer_driver 1.0.0

README

libcaer_driver

A ROS2 driver for event based cameras using Inilab's Libcaer. This driver is not written or supported by Inilabs.

banner image

In contrast to the well established ROS1 driver from the University of Zuerich, this driver publishes messages using the more efficient event_camera_msgs format.

The events can be decoded and displayed using the following ROS/ROS2 packages:

Supported platforms

Tested on the following platforms:

  • ROS2 Humble on Ubuntu 22.04 LTS

Tested on the following hardware:

How to build

Prerequisites:

Install vcs (ubuntu package python3-vcstool).

Make sure you have your ROS2 environment sourced such that the ROS_VERSION environment variable is set.

Create a workspace (libcaer_driver_ws), clone this repo, and use vcs to pull in the remaining dependencies:

pkg=libcaer_driver
mkdir -p ~/${pkg}_ws/src
cd ~/${pkg}_ws
git clone https://github.com/ros-event-camera/${pkg}.git src/${pkg}
cd src
vcs import < ${pkg}/${pkg}.repos
cd ..

Now build (the cmake flag to export compile commands is optional):

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
. install/setup.bash

This driver provides its own version of libcaer, but you still need to copy the udev file into place and modify the group permissions:

sudo cp src/libcaer/lib/udev/rules.d/65-inivation.rules /etc/udev/rules.d/
sudo usermod -aG video ${USER}
sudo usermod -aG plugdev ${USER}
sudo udevadm trigger
sudo service udev restart

Now you need to log out and back in to the host in order for the updated group permissions to take hold.

Driver Features

Parameters:

  • serial: specifies serial number of camera to open (useful if you have multiple cameras connected). You can learn the serial number via lsusb -v -d 152a: | grep iSerial, or just start the driver with the serial number left blank, and look at the console log.
  • event_message_time_threshold: (in seconds) minimum time span of events to be aggregated in one ROS event message before message is sent. Defaults to 1ms.
  • event_message_size_threshold: (in bytes) minimum size of events (in bytes) to be aggregated in one ROS event message before message is sent. Defaults to 1MB.
  • statistics_print_interval: time in seconds between statistics printouts.
  • send_queue_size: outgoing ROS message send queue size (defaults to 1000 messages).
  • frame_id: the frame id to use in the ROS message header

  • save_biases: write out current bias settings to bias file. For this to work the bias_file parameter must be set to a non-empty value.

How to use (ROS2):

For efficient recording of the events you need to run the driver and the recorder in the same address space as ROS2 composable nodes. For this you will need to install the composable recorder into your workspace as well (see below).

ros2 launch libcaer_driver driver_node.launch.py        # (run as node)
ros2 launch libcaer_driver driver_composition.launch.py # (run as composable node)

To use the combined driver/recorder and start the recording:

ros2 launch libcaer_driver recording_driver.launch.py
ros2 run rosbag2_composable_recorder start_recording.py

To stop the recording you have to kill (Ctrl-C) the recording driver.

To visualize the events, run a renderer node from the event_camera_renderer package:

ros2 launch event_camera_renderer renderer.launch.py

The renderer node publishes an image that can be visualized with e.g. rqt_image_view

CPU load

Here are some approximate performance numbers on a 16 thread (8-core) AMD Ryzen 7480h laptop with max clock speed of 2.9GHz. The below numbers were obtained with a Davis 240C.

THESE NUMBERS ARE PLACEHOLDERS, IGNORE FOR NOW!

settings CPU load note
driver no subscriber 22% topic not published
driver with subscriber 35% does interprocess communication
driver + rosbag record node 80% cpu load for combined driver + record
driver + rosbag record composable 58% single process no ipc but disk/io

About ROS time stamps

A ROS message potentially aggregates multiple libcaer packets. The ROS message header stamp is the host arrival time of the first libcaer packet contained in the ROS message.

License

This software is issued under the Apache License Version 2.0.

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).


Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer_driver.git
VCS Type git
VCS Version master
Last Updated 2023-11-28
Dev Status DEVELOPED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
libcaer_driver 1.0.0

README

libcaer_driver

A ROS2 driver for event based cameras using Inilab's Libcaer. This driver is not written or supported by Inilabs.

banner image

In contrast to the well established ROS1 driver from the University of Zuerich, this driver publishes messages using the more efficient event_camera_msgs format.

The events can be decoded and displayed using the following ROS/ROS2 packages:

Supported platforms

Tested on the following platforms:

  • ROS2 Humble on Ubuntu 22.04 LTS

Tested on the following hardware:

How to build

Prerequisites:

Install vcs (ubuntu package python3-vcstool).

Make sure you have your ROS2 environment sourced such that the ROS_VERSION environment variable is set.

Create a workspace (libcaer_driver_ws), clone this repo, and use vcs to pull in the remaining dependencies:

pkg=libcaer_driver
mkdir -p ~/${pkg}_ws/src
cd ~/${pkg}_ws
git clone https://github.com/ros-event-camera/${pkg}.git src/${pkg}
cd src
vcs import < ${pkg}/${pkg}.repos
cd ..

Now build (the cmake flag to export compile commands is optional):

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
. install/setup.bash

This driver provides its own version of libcaer, but you still need to copy the udev file into place and modify the group permissions:

sudo cp src/libcaer/lib/udev/rules.d/65-inivation.rules /etc/udev/rules.d/
sudo usermod -aG video ${USER}
sudo usermod -aG plugdev ${USER}
sudo udevadm trigger
sudo service udev restart

Now you need to log out and back in to the host in order for the updated group permissions to take hold.

Driver Features

Parameters:

  • serial: specifies serial number of camera to open (useful if you have multiple cameras connected). You can learn the serial number via lsusb -v -d 152a: | grep iSerial, or just start the driver with the serial number left blank, and look at the console log.
  • event_message_time_threshold: (in seconds) minimum time span of events to be aggregated in one ROS event message before message is sent. Defaults to 1ms.
  • event_message_size_threshold: (in bytes) minimum size of events (in bytes) to be aggregated in one ROS event message before message is sent. Defaults to 1MB.
  • statistics_print_interval: time in seconds between statistics printouts.
  • send_queue_size: outgoing ROS message send queue size (defaults to 1000 messages).
  • frame_id: the frame id to use in the ROS message header

  • save_biases: write out current bias settings to bias file. For this to work the bias_file parameter must be set to a non-empty value.

How to use (ROS2):

For efficient recording of the events you need to run the driver and the recorder in the same address space as ROS2 composable nodes. For this you will need to install the composable recorder into your workspace as well (see below).

ros2 launch libcaer_driver driver_node.launch.py        # (run as node)
ros2 launch libcaer_driver driver_composition.launch.py # (run as composable node)

To use the combined driver/recorder and start the recording:

ros2 launch libcaer_driver recording_driver.launch.py
ros2 run rosbag2_composable_recorder start_recording.py

To stop the recording you have to kill (Ctrl-C) the recording driver.

To visualize the events, run a renderer node from the event_camera_renderer package:

ros2 launch event_camera_renderer renderer.launch.py

The renderer node publishes an image that can be visualized with e.g. rqt_image_view

CPU load

Here are some approximate performance numbers on a 16 thread (8-core) AMD Ryzen 7480h laptop with max clock speed of 2.9GHz. The below numbers were obtained with a Davis 240C.

THESE NUMBERS ARE PLACEHOLDERS, IGNORE FOR NOW!

settings CPU load note
driver no subscriber 22% topic not published
driver with subscriber 35% does interprocess communication
driver + rosbag record node 80% cpu load for combined driver + record
driver + rosbag record composable 58% single process no ipc but disk/io

About ROS time stamps

A ROS message potentially aggregates multiple libcaer packets. The ROS message header stamp is the host arrival time of the first libcaer packet contained in the ROS message.

License

This software is issued under the Apache License Version 2.0.

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).


Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer_driver.git
VCS Type git
VCS Version master
Last Updated 2023-11-28
Dev Status DEVELOPED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
libcaer_driver 1.0.0

README

libcaer_driver

A ROS2 driver for event based cameras using Inilab's Libcaer. This driver is not written or supported by Inilabs.

banner image

In contrast to the well established ROS1 driver from the University of Zuerich, this driver publishes messages using the more efficient event_camera_msgs format.

The events can be decoded and displayed using the following ROS/ROS2 packages:

Supported platforms

Tested on the following platforms:

  • ROS2 Humble on Ubuntu 22.04 LTS

Tested on the following hardware:

How to build

Prerequisites:

Install vcs (ubuntu package python3-vcstool).

Make sure you have your ROS2 environment sourced such that the ROS_VERSION environment variable is set.

Create a workspace (libcaer_driver_ws), clone this repo, and use vcs to pull in the remaining dependencies:

pkg=libcaer_driver
mkdir -p ~/${pkg}_ws/src
cd ~/${pkg}_ws
git clone https://github.com/ros-event-camera/${pkg}.git src/${pkg}
cd src
vcs import < ${pkg}/${pkg}.repos
cd ..

Now build (the cmake flag to export compile commands is optional):

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
. install/setup.bash

This driver provides its own version of libcaer, but you still need to copy the udev file into place and modify the group permissions:

sudo cp src/libcaer/lib/udev/rules.d/65-inivation.rules /etc/udev/rules.d/
sudo usermod -aG video ${USER}
sudo usermod -aG plugdev ${USER}
sudo udevadm trigger
sudo service udev restart

Now you need to log out and back in to the host in order for the updated group permissions to take hold.

Driver Features

Parameters:

  • serial: specifies serial number of camera to open (useful if you have multiple cameras connected). You can learn the serial number via lsusb -v -d 152a: | grep iSerial, or just start the driver with the serial number left blank, and look at the console log.
  • event_message_time_threshold: (in seconds) minimum time span of events to be aggregated in one ROS event message before message is sent. Defaults to 1ms.
  • event_message_size_threshold: (in bytes) minimum size of events (in bytes) to be aggregated in one ROS event message before message is sent. Defaults to 1MB.
  • statistics_print_interval: time in seconds between statistics printouts.
  • send_queue_size: outgoing ROS message send queue size (defaults to 1000 messages).
  • frame_id: the frame id to use in the ROS message header

  • save_biases: write out current bias settings to bias file. For this to work the bias_file parameter must be set to a non-empty value.

How to use (ROS2):

For efficient recording of the events you need to run the driver and the recorder in the same address space as ROS2 composable nodes. For this you will need to install the composable recorder into your workspace as well (see below).

ros2 launch libcaer_driver driver_node.launch.py        # (run as node)
ros2 launch libcaer_driver driver_composition.launch.py # (run as composable node)

To use the combined driver/recorder and start the recording:

ros2 launch libcaer_driver recording_driver.launch.py
ros2 run rosbag2_composable_recorder start_recording.py

To stop the recording you have to kill (Ctrl-C) the recording driver.

To visualize the events, run a renderer node from the event_camera_renderer package:

ros2 launch event_camera_renderer renderer.launch.py

The renderer node publishes an image that can be visualized with e.g. rqt_image_view

CPU load

Here are some approximate performance numbers on a 16 thread (8-core) AMD Ryzen 7480h laptop with max clock speed of 2.9GHz. The below numbers were obtained with a Davis 240C.

THESE NUMBERS ARE PLACEHOLDERS, IGNORE FOR NOW!

settings CPU load note
driver no subscriber 22% topic not published
driver with subscriber 35% does interprocess communication
driver + rosbag record node 80% cpu load for combined driver + record
driver + rosbag record composable 58% single process no ipc but disk/io

About ROS time stamps

A ROS message potentially aggregates multiple libcaer packets. The ROS message header stamp is the host arrival time of the first libcaer packet contained in the ROS message.

License

This software is issued under the Apache License Version 2.0.

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).