December 20, 2023

DataTamer: an OSS library to improve debuggability and observability in ROS

by Davide Faconti, Staff Robotics Engineer
DataTamer: an OSS library to improve debuggability

At Picknik, we understand that debugging robotic applications can be challenging and, sometimes, frustrating. Robotic software is typically distributed, and analyzing the entire system requires considering how different components interact.

While tools like GDB are invaluable, our software often has real-time requirements, and interrupting control loops arbitrarily to inspect variable values is not always feasible.

To address this challenge, combining logging with data visualization proves to be the most effective approach for identifying software issues. If you’re a ROS developer, you likely already use this method with tools like rosbags in conjunction with RViz, PlotJuggler, and Foxglove.

Today, we introduce another tool we hope you’ll add to your toolkit: DataTamer

DataTamer is an open source C++ library designed to facilitate extensive data logging. Its purpose is to monitor the numerical values of a set of variables over time, allowing you to visualize these values later as time series in PlotJuggler.

With DataTamer, you can confidently save hundreds of variables, even at high frequencies such as 1 KHz, with minimal CPU overhead and latency. Moreover, the DataTamer core library is ROS-independent, enabling direct recording of data into a file without any inter-process communication, such as DDS.

At PickNik, we already leverage DataTamer in various projects, including debugging ros2_control drivers, our quadruped robot controller, and our real-time pose tracking algorithms running at 1 KHz. The ability to introspect hundreds of numerical values, in addition to those already published as ROS topics, significantly accelerates our code debugging process and enhances our ability to deliver results to our customers more rapidly.

DataTamer img

DataTamer features a versatile multi-sink architecture, enabling users to effortlessly integrate their custom ‘backend.’ A specialized sink may store the data in a timeseries database or publish it through alternative inter-process communication middleware, different from ROS/DDS.

To start visualizing the data recorded with DataTamer, download the latest PlotJuggler (version 3.8.3)

While DataTamer is still in beta, its API is mostly stable. Give it a try, and share your thoughts with us!