Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
jazzy

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
kilted

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
lyrical

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
rolling

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

data_tamer_v2 package from data_tamer repo

data_tamer_v2 data_tamer_msgs

ROS Distro
humble

Package Summary

Version 2.0.0
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/data_tamer.git
VCS Type git
VCS Version main
Last Updated 2026-10-19
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Logs C++ variables of real-time programs as periodic snapshots (allocation-free, lock-free) to MCAP files, a RAM flight recorder or ROS 2 topics. Version 2 of data_tamer_cpp; installs side by side with it.

Additional Links

Maintainers

  • Davide Faconti
  • Henry Moore
  • Nathan Brooks

Authors

  • Davide Faconti
README
No README found. See repository README.
CHANGELOG

Changelog for package data_tamer

Unreleased

First release of the 2.x series, relative to 1.0.4. It breaks source and binary compatibility: rebuild every binary that links data_tamer, and read docs/MIGRATION.md, which gives the replacement for each removed API and lists the behaviour changes that compile without a warning. Readers need the 2.0 parser for files recorded by 2.0; it still reads 1.x files.

Breaking changes

  • The namespace is DataTamer2 (was DataTamer), the headers are in data_tamer_v2/ (were data_tamer/) and the standalone parser is data_tamer_v2/data_tamer_parser.hpp (was data_tamer_parser/data_tamer_parser.hpp). SerializeMe and DataTamerParser keep their names, inside an inline namespace v2.
  • DataSinkBase is replaced by DataSink, whose protected callbacks are onSchema(), onSnapshot(const SnapshotRef&) and the optional onStop() and onStart() (throw to report a failure), owned by a SinkWorker that runs the delivery thread. addChannel(), pushSnapshot(), storeSnapshot(), stopThread(), stopAcceptingSnapshots(), processQueuedSnapshots() and startAcceptingSnapshots() are gone: use SinkWorker::stop(), drain() and start(). To write data_tamer MCAP files from your own data, use sinks/mcap_encoding.hpp.
  • Sinks are created with MCAPSink::create(), ROS2PublisherSink::create(), DummySink::create() or SinkWorker::create<T>(), which return a std::shared_ptr<SinkWorkerOf<T>>: a SinkWorker whose sink() is the T (static cast, no dynamic_cast), converting to the std::shared_ptr<SinkWorker> that addDataSink() and addDefaultSink() take. worker->as<T>() reaches the sink through a plain SinkWorker (std::bad_cast for the wrong type). Passing std::make_shared<MCAPSink>(path), as in 1.x, to addDataSink(), removeDataSink() or addDefaultSink() fails with a static_assert that names MCAPSink::create() and SinkWorker::create<T>(). LogChannel::addDataSink() takes the worker and returns bool (false if it was attached already). MCAPSink::finishQueueAndStop() is removed (worker->stop()), restartRecording() no longer resumes a stopped worker, and DummySink has accessors (latestSnapshot(), schema(hash), ...) instead of public members.
  • Snapshot has no channel_name (use Schema::channel_name, matched by schema_hash), and schema_hash is uint64_t. DataSnapshot is removed.
  • takeSnapshot() returns a SnapshotResult instead of bool (accepted(result) replaces the bool). getActiveFlags() is removed: isEnabled(id) in the application, Snapshot::active_mask in a sink.
  • LogChannel::writeMutex() and the Mutex alias are removed: another thread writes registered variables inside scopedWrite().
  • LoggedValue: scalars are atomic and use set() and get() only. Structs and vectors keep getMutablePtr() and getConstPtr(), whose guards are not movable and have no operator bool and no mutex(). getLockedPtr() and the auto_enable parameter of set() are removed. A LoggedValue can't be moved or default-constructed.
  • RegistrationID is opaque: no first_index, fields_count or operator+=.
  • CustomSerializerT(std::string) is explicit, CustomTypeName<T>::get() is not constexpr, Schema::custom_types and custom_schemas are std::map (were std::unordered_map), and long double is a compile error. Removed: getPointerType(), SerializeMe::enable_if_same_t and the library's AddFieldToHash(), replaced by SchemaTextHash() and ComputeSchemaHash() (the parser keeps its own, for version 4 texts).
  • Parser: ParseSnapshot() loses its unused callback_custom parameter and is [[nodiscard]]; ParseSnapshotRecursive moves to DataTamerParser::detail and NullCustomCallback is removed; SnapshotView::schema_hash is uint64_t; BuilSchemaFromText() is a deprecated alias of BuildSchemaFromText(). The header needs a little-endian host and no longer includes <iostream>.
  • sinks/ros2_publisher_sink.hpp no longer includes the data_tamer_msgs headers.

Behaviour changes

  • MCAPSink continues in a new numbered file at every reset (600 s by default) instead of truncating its file, so disk use is unbounded; setCreateNewFileOnReset(false) truncates as before. Rollover files are named run_1.mcap (1.x: run.mcap_1) and skip names that exist; the path passed to create() is still overwritten.
  • SinkWorker::stop() delivers what is queued, then finishes the sink: MCAPSink closes its file, and start() continues in the next numbered file. Destroying a running worker stops it.
  • A channel's snapshot pool bounds the memory of its sinks: by default as many slots as fit in 8 MiB, from 64 to 1024, per channel. A sink that falls behind loses snapshots (pool_exhausted) instead of growing a queue.
  • ROS2PublisherSink: the data topic is reliable KeepLast(100) (was KeepAll; ROS2PublisherOptions::data_qos), and the schemas topic is transient-local KeepLast(1), published by startLogging().
  • LoggedValue::set() never re-enables a disabled value. set() and get() of a struct or vector lock the channel's write mutex, so they wait for a snapshot in progress.
  • An id kept across unregister() and a new registration of the same

File truncated at 100 lines see the full file

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged data_tamer_v2 at Robotics Stack Exchange