[Announcement] Gazebo Event Camera Plugin for ROS 2 Jazzy + Gazebo Harmonic

Hi everyone,

We are happy to share a new event camera simulation plugin for Gazebo Harmonic and ROS 2 Jazzy.

The goal of this project is to provide a practical way to simulate an event camera directly in Gazebo and generate asynchronous brightness-change events from a simulated camera stream.

The plugin currently implements an ESIM-style event generation model, including:

- Log-intensity based event generation

- Positive and negative contrast thresholds

- Multiple threshold crossings between frames

- Sub-frame event timestamp interpolation

- Per-pixel reference intensity

- Refractory-period handling

- Optional contrast-threshold variation

- ROS 2 custom “Event” and “EventArray” messages

- Gazebo Transport protobuf messages

- Configurable camera and event parameters

The current example uses a 128 × 128 camera at 500 Hz and publishes events to:

/event_cam/events

The plugin has been tested with ROS 2 Jazzy and Gazebo Harmonic, and the generated event stream can be directly consumed by ROS 2 nodes for event-based vision and robotics applications.

GitHub

The complete source code, example world, launch files, configuration, custom messages, and documentation are available here:

:link: GitHub:

Demo

We also recorded a short demonstration of the plugin running in Gazebo:

:movie_camera: Video:

I would really appreciate feedback from the Gazebo / ROS community, especially regarding the event-camera model, sensor effects, performance, and possible integration with existing event-based vision workflows.

Future improvements I am considering include additional sensor non-idealities, noise models, bandwidth limitations, and support for more realistic event-camera characteristics.

Hope this is useful for anyone working on event-based vision, visual odometry, SLAM, perception, or robotics simulation.

Thanks!

This work is equally contribution done by Aachal Sharma and Rahul Gupta

2 Likes

Looks great! What performance (RTF) is achievable?

1 Like

Thanks! The current 128×128 @ 500 Hz configuration runs in real time, but I haven’t yet conducted a systematic RTF benchmark. I’m planning to evaluate RTF across different resolutions and event rates and will share the results.

1 Like

Wow, I wouldn’t bet gz rendering can be this fast with small resolutions!

1 Like

Thank you ..once again

Hi! This looks really cool! Out of curiosity, do you have a process for visualizing event data? I’m wondering if this is something we should explore at Foxglove.

1 Like

Hi! Yes, definitely. Currently, our plugin publishes the generated events directly as a custom ROS 2 EventArray message on /event_cam/events.

We’re interested in exploring a dedicated visualization workflow for these event streams in Foxglove as well. Thanks for the suggestion! :raising_hands: