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:
GitHub:
Demo
We also recorded a short demonstration of the plugin running in Gazebo:
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