|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged data_tamer_v2 at Robotics Stack Exchange
|
data_tamer_v2 package from data_tamer repodata_tamer_v2 data_tamer_msgs |
ROS Distro
|
Package Summary
| Version | 2.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| 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
Additional Links
Maintainers
- Davide Faconti
- Henry Moore
- Nathan Brooks
Authors
- Davide Faconti
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(wasDataTamer), the headers are indata_tamer_v2/(weredata_tamer/) and the standalone parser isdata_tamer_v2/data_tamer_parser.hpp(wasdata_tamer_parser/data_tamer_parser.hpp).SerializeMeandDataTamerParserkeep their names, inside an inline namespacev2. -
DataSinkBaseis replaced byDataSink, whose protected callbacks areonSchema(),onSnapshot(const SnapshotRef&)and the optionalonStop()andonStart()(throw to report a failure), owned by aSinkWorkerthat runs the delivery thread.addChannel(),pushSnapshot(),storeSnapshot(),stopThread(),stopAcceptingSnapshots(),processQueuedSnapshots()andstartAcceptingSnapshots()are gone: useSinkWorker::stop(),drain()andstart(). To write data_tamer MCAP files from your own data, usesinks/mcap_encoding.hpp. - Sinks are created with
MCAPSink::create(),ROS2PublisherSink::create(),DummySink::create()orSinkWorker::create<T>(), which return astd::shared_ptr<SinkWorkerOf<T>>: aSinkWorkerwhosesink()is theT(static cast, nodynamic_cast), converting to thestd::shared_ptr<SinkWorker>thataddDataSink()andaddDefaultSink()take.worker->as<T>()reaches the sink through a plainSinkWorker(std::bad_castfor the wrong type). Passingstd::make_shared<MCAPSink>(path), as in 1.x, toaddDataSink(),removeDataSink()oraddDefaultSink()fails with astatic_assertthat namesMCAPSink::create()andSinkWorker::create<T>().LogChannel::addDataSink()takes the worker and returnsbool(falseif it was attached already).MCAPSink::finishQueueAndStop()is removed (worker->stop()),restartRecording()no longer resumes a stopped worker, andDummySinkhas accessors (latestSnapshot(),schema(hash), ...) instead of public members. -
Snapshothas nochannel_name(useSchema::channel_name, matched byschema_hash), andschema_hashisuint64_t.DataSnapshotis removed. -
takeSnapshot()returns aSnapshotResultinstead ofbool(accepted(result)replaces thebool).getActiveFlags()is removed:isEnabled(id)in the application,Snapshot::active_maskin a sink. -
LogChannel::writeMutex()and theMutexalias are removed: another thread writes registered variables insidescopedWrite(). -
LoggedValue: scalars are atomic and useset()andget()only. Structs and vectors keepgetMutablePtr()andgetConstPtr(), whose guards are not movable and have nooperator booland nomutex().getLockedPtr()and theauto_enableparameter ofset()are removed. ALoggedValuecan't be moved or default-constructed. -
RegistrationIDis opaque: nofirst_index,fields_countoroperator+=. -
CustomSerializerT(std::string)isexplicit,CustomTypeName<T>::get()is notconstexpr,Schema::custom_typesandcustom_schemasarestd::map(werestd::unordered_map), andlong doubleis a compile error. Removed:getPointerType(),SerializeMe::enable_if_same_tand the library'sAddFieldToHash(), replaced bySchemaTextHash()andComputeSchemaHash()(the parser keeps its own, for version 4 texts). - Parser:
ParseSnapshot()loses its unusedcallback_customparameter and is[[nodiscard]];ParseSnapshotRecursivemoves toDataTamerParser::detailandNullCustomCallbackis removed;SnapshotView::schema_hashisuint64_t;BuilSchemaFromText()is a deprecated alias ofBuildSchemaFromText(). The header needs a little-endian host and no longer includes<iostream>. -
sinks/ros2_publisher_sink.hppno longer includes thedata_tamer_msgsheaders.
Behaviour changes
-
MCAPSinkcontinues 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 namedrun_1.mcap(1.x:run.mcap_1) and skip names that exist; the path passed tocreate()is still overwritten. -
SinkWorker::stop()delivers what is queued, then finishes the sink:MCAPSinkcloses its file, andstart()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 reliableKeepLast(100)(wasKeepAll;ROS2PublisherOptions::data_qos), and theschemastopic is transient-localKeepLast(1), published bystartLogging(). -
LoggedValue::set()never re-enables a disabled value.set()andget()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
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| gtest_vendor | |
| rclcpp | |
| rclcpp_lifecycle | |
| mcap_vendor | |
| data_tamer_msgs |