edgeimpulse_ros is an open source ROS 2 package that runs an Edge Impulse Linux .eim model inside a ROS 2 node. The node subscribes to an image topic and publishes the model’s results as vision_msgs messages that the rest of your robot can use.

Edge Impulse vision models running on ROS 2 robots
vision_msgs messages come out:
sensor_msgs/Image topic, so it fits into an existing pipeline. It supports QoS settings, image_transport, namespaces, and multi-camera setups.
Features
- Any camera. Subscribes to any image topic with configurable QoS, and optionally to
CompressedImage. - Common encodings. Decodes
bgr8,rgb8,mono8,mono16,bgra8,rgba8,yuyv,uyvy,nv12, andnv21. - Source timestamps. Copies the input image’s stamp and
frame_idto every output, so TF and sensor fusion keep working. - All image model types. Object detection, image classification, FOMO, and visual anomaly detection (FOMO-AD).
- Original image coordinates. Maps detections from the model’s input size back to the original image, taking the crop, pad, or squash resize into account.
- Standard messages. Publishes
vision_msgs/Detection2DArrayandClassification, plus latchedVisionInfoandLabelInfo. - Diagnostics. Optionally publishes an annotated debug image and a
diagnostic_msgs/DiagnosticArraywith FPS, latency, and model health.
Prerequisites
- A ROS 2 Jazzy or Rolling workspace. Both ship
vision_msgs4.x. Humble isn’t tested in CI yet. - The Edge Impulse Linux Python SDK, OpenCV, and NumPy, installed in the same Python interpreter as ROS. The SDK imports
pyaudioeven for image models, so you also needportaudio19-dev. - A Linux
.eimbinary of your model for your device’s architecture.
- Ubuntu
- Qualcomm Linux
Ubuntu 24.04 pairs with ROS 2 Jazzy. Its system Python is externally managed (PEP 668), so install the SDK into your user site with Use the x86-64
--break-system-packages:.eim build, or the aarch64 build on Arm machines.Run the webcam demo
Build the package in your ROS 2 workspace, then launch the demo with a USB camera. The demo needsros-$ROS_DISTRO-v4l2-camera.
Use your existing camera node
To use a camera node you already run, launch only the detector and point it at your image topic:NV12 and Qualcomm QRB cameras
The Qualcommqrb_ros_camera driver publishes NV12 frames. edgeimpulse_ros converts NV12 to BGR inside the node, so you can subscribe to the camera topic without a color conversion node:
Visual anomaly detection
FOMO-AD models suit quality control and other tasks that flag unusual scenes. For these models, the node publishes the anomaly grid as boxes on~/detections, publishes the peak anomaly score on ~/anomaly, and draws the flagged regions on the debug image.
Learn more
- Robotics: end-to-end tutorials that use this package.
- Run Edge Impulse object detection with ROS 2: the
edgeimpulse_rosdetector reference for the other robotics tutorials. - Run Edge Impulse vision on a JetBot with Rubik Pi: perception on a JetBot-class mobile robot.
- Build a mobile inspection system with Edge Impulse and ROS 2: a rover inspection architecture.
- Run Edge Impulse pick and place with UNO Q Braccio: robotic arm sorting triggered by detections.
- Run Edge Impulse object detection with ROS 2: the
- edgeimpulse-ros on GitHub: setup steps, launch files, examples, and configuration.
- Deploy as a Linux
.eimbinary.
edgeimpulse_ros is open source under the BSD-3-Clause-Clear license.