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.
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:
- event_camera_codecs has C++ routines to decode event_camera_msgs.
- event_camera_py module for fast event decoding in python.
- event_camera_renderer a node / nodelet that renders and publishes ROS image messages.
- event_camera_tools a set of tools to echo, monitor performance and convert event_camera_msgs to legacy formats and into "RAW" format.
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 vialsusb -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 headersave_biases
: write out current bias settings to bias file. For this to work thebias_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.
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:
- event_camera_codecs has C++ routines to decode event_camera_msgs.
- event_camera_py module for fast event decoding in python.
- event_camera_renderer a node / nodelet that renders and publishes ROS image messages.
- event_camera_tools a set of tools to echo, monitor performance and convert event_camera_msgs to legacy formats and into "RAW" format.
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 vialsusb -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 headersave_biases
: write out current bias settings to bias file. For this to work thebias_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.
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:
- event_camera_codecs has C++ routines to decode event_camera_msgs.
- event_camera_py module for fast event decoding in python.
- event_camera_renderer a node / nodelet that renders and publishes ROS image messages.
- event_camera_tools a set of tools to echo, monitor performance and convert event_camera_msgs to legacy formats and into "RAW" format.
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 vialsusb -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 headersave_biases
: write out current bias settings to bias file. For this to work thebias_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).