event_camera_tools
package with ROS1 and ROS2 tools related to event_camera_msgs
README
event_camera_tools
This repository holds ROS tools for displaying and converting event_camera_msgs. These messages are produced by the metavision_driver and the libcaer_driver. For converting legacy dvs_msgs and prophesee_event_msgs messages, see the event_camera_legacy_tools repository.
Supported platforms
NOTE: ROS1 support has been discontinued but the code has been left in place and may still compile. ROS2 is supported for ROS2 Humble and later distros.
How to build
Set the following shell variables:
repo=event_camera_tools
url=https://github.com/ros-event-camera/${repo}.git
and follow the instructions here
Tools
Real-time monitoring tools
ros2 run event_camera_tools echo [-b <bag>] [-t (only triggers)] [-n (no header printed)] <topic>Displays messages in
event_camera_msgsformat, optionally from a bag file. Example output:
-------------------------------
res: 640 height: 480 enc: evt3
header stamp: 1664227781775114816
time base: 0
seqno: 129213
---
6851488000 edge: 1 id: 6
6851510000 390 223 1
6851520000 33 326 0
...
ros2 run event_camera_tools perf <topic>Sample output:
msgs: 219.48/s drp: 0 del: 13.72ms drft: 0.0033s ev: 0.0823 M/s %ON: 46 tr: 1758.38 1/s %UP: 50 msgs: 249.01/s drp: 0 del: 4.35ms drft: 0.0027s ev: 0.8497 M/s %ON: 52 tr: 1999.56 1/s %UP: 49
The meaning of the fields is as follows:
msgsmessage rate per secondsdrpnumber of drops per second (skip in sequence numbers)deldelay: average time difference between message header stamp and arrival time. This includes the delay due to the driver aggregating messages.drftaccumulated (from start of “perf”) drift between message header stamp and sensor-provided time.evevent rate in millions/sec%ONratio of ON events to total (ON + OFF) eventstrrate of trigger messages%UPratio of UP trigger edges to total (UP + DOWN)
ros2 run event_camera_tools sync_test <cam_0_event_topic> <cam_1_event_topic>The output gives the average sensor time difference and how many samples where counted:
avg sensor diff: 0.00846s, count: 360 avg sensor diff: 0.00377s, count: 466 ...
ros2 run event_camera_tools trigger_delay -t <camera_image_topic> [-d (use down trigger edge)] <event_topic>Use this tool to verify synchronization setup when the sync pulse from a frame based camera is connected to an event camera. The tool compares the time stamp of the trigger event with that of the image frame, and gives the time by which the trigger event is delayed with respect to the frame. This time is usually negative, meaning the trigger event occurs before the frame based camera driver puts a header stamp on the image. A typical output will look like this:
[INFO] [1763569527.811228122] [trigger_delay]: frame rate: 1.000 Hz, trigger rate: 1.000 Hz, trigger delay: -3.531 ms [INFO] [1763569528.811002310] [trigger_delay]: frame rate: 1.000 Hz, trigger rate: 1.000 Hz, trigger delay: -3.868 ms
ros2 run event_camera_tools event_rate [-b bag] [-r <rate_file>] [-t <trigger_file>] [-p period_ns] <ros_topic>Counts the number of events in a fixed interval of length
period(in nanoseconds), and writes it torate_file. The first column is the ROS time stamp, the second sensor time, then the number of OFF and ON events, and the number of UP and DOWN edge external trigger events. The external trigger events are also written to a separate file (trigger_file) with the exact time stamps and whether it’s an UP (1) or DOWN (0) edge. Can also operate on a rosbag if provided with the-boption.
Recorded data analysis tools
ros2 run event_camera_tools bag_to_raw -t <topic> -b <bag_name> -o <outout_raw_file> -c <camera_type>Converts bags with evt3 event_camera_msgs to raw file. The
camera_typeargument is necessary to produce a valid header for the raw file.ros2 run event_camera_tools raw_to_bag -t <topic> -b <bag_file> -i <input_raw_file> -w <sensor_width> -h <sensor_height> -p <packet_duration_ms>Converts raw file into bag with evt3 event_camera_msgs. The
packet_duration_msgives the time slice (in milliseconds) per ROS packet. The default is 10ms. Choose this parameter smaller to get lower processing latencies.ros2 run event_camera_tools movie_maker -f <fps> -b <bag_name> -t <topic>Produces sequence of frame images.
ros2 run event_camera_tools find_trigger_events -i input_bag -t <topic_with_trigger_events>This tool is useful when aligning reconstructed image frames for datasets that use a pulse-per-second synchronization scheme. The
find_trigger_eventstool finds the ROS time and sensor time of the first trigger pulse in a rosbag. Output example:first trigger ROS time: 1702577874035860000 first trigger sensor time: 24809136000 num triggers: 1712 avg time between triggers: ROS time: 0.0499567s sensor time: 0.0499567s processed 202 number of messages
The ROS and sensor times of the first trigger event serve as inputs for image reconstruction tools such as
bag_to_frames.ros2 run event_camera_tools plot_events -b name_of_bag -o name_of_plot_file -t <topic> [-z]Creates file with 5 columns (sensor time, ros time, x, y, polarity) for plotting. Also useful for clear text viewing of events in bag file.
ros2 run event_camera_tools event_statics -b name_of_bag -t <topic> [-s <scale_file>]Computes the per-pixel number of ON and OFF events in a bag and writes them to
scale_file.txt(default). The file has alternatingly the number of OFF and ON events in row major order, with line breaks after each row.
License
This software is issued under the Apache License Version 2.0.