Skip to main content
Anthony Cavin
Co-founder & CEO - Data, ML & Robotics Systems

Co-founder and CEO working on data pipelines, machine learning, and robotics systems. Focused on real-time data processing and turning complex data into production-ready intelligence.

View all authors

Unsupervised anomaly detection with Anomalib in Python

· 10 min read
Anthony Cavin
Co-founder & CEO - Data, ML & Robotics Systems

Anomaly detection pipeline: a camera feeds Anomalib, which scores each frame, and ReductStore keeps every frame with its anomaly labels

Anomalib makes it relatively easy to train an anomaly detection model on your own images. But once you want to use it in production, you also need to handle inference, evaluate predictions, and keep track of the images that triggered them.

In this tutorial, we'll use anomalib to train and run an anomaly detection model in Python. Then we'll look at how to store images alongside their anomaly scores, so you can review detections and use them for future training.

Record ROS 1 Topics in ReductStore with Reduct Bridge

· 8 min read
Anthony Cavin
Co-founder & CEO - Data, ML & Robotics Systems

A ROS 1 master publishes camera and IMU topics to the Reduct Bridge ros input, which writes them to two ReductStore entries on one shared time axis

ROS 1 Noetic reached end of life in May 2025, but a lot of robots still run on it. Recording data from them usually means rosbag files, or a custom recording node that you have to maintain yourself.

Reduct Bridge is another way to do it. It subscribes to topics on a ROS 1 master and stores each message it receives in ReductStore as a record, so you can query by time and by label later. It can also use the timestamp from the message header instead of the time the message arrived.

In this tutorial we'll record a camera topic and an IMU topic, set a retention limit, and read the data back with the ReductStore CLI and the Python SDK.

How to Store Images in ROS2

· 12 min read
Anthony Cavin
Co-founder & CEO - Data, ML & Robotics Systems

 

ROS2 is widely used for building robotic systems with sensors like cameras, LiDAR, and IMUs. While it's great for communication (e.g., publishing and subscribing to topics), it lacks a built-in solution for storing large amounts of unstructured data, such as images.

Bag files are commonly used to store data in ROS2, but they aren't a good fit for long-term storage or real-time streaming. They're mainly meant for recording and replaying mission data or episodes, not for managing large volumes of unstructured data.

Addressing this challenge, this blog post will guide you through setting up ROS2 with ReductStore a high-performance storage and streaming solution optimized for unstructured, time-series data.

We will focus specifically on image data, but if you are interested in a more general overview you can read How to Store and Manage Robotic Data which covers the challenges and strategies for storing and managing robotic data in general.

For the full code example, we will be using the reduct-ros-example repository, which provides a complete implementation of the concepts discussed in this article.