diff --git a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp index ae751bb1ac1bfb0ba8e51a4fc9fc11b28c0e3cf2..c9afa372dc20c08fc6e80ce2666214618d366286 100644 --- a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp +++ b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp @@ -96,7 +96,7 @@ namespace armarx::armem armem::EntityUpdate entityUpdate; entityUpdate.entityID = propEntityID; - entityUpdate.timeCreated = Time(Duration::MicroSeconds(_timestampUpdateFirstModifiedInUs)); // we take the oldest timestamp + entityUpdate.referencedTime = Time(Duration::MicroSeconds(_timestampUpdateFirstModifiedInUs)); // we take the oldest timestamp entityUpdate.instancesData = { @@ -128,7 +128,7 @@ namespace armarx::armem armem::EntityUpdate locUpdate; locUpdate.entityID = locEntityID; - locUpdate.timeCreated = Time(Duration::MicroSeconds(_timestampUpdateFirstModifiedInUs)); + locUpdate.referencedTime = Time(Duration::MicroSeconds(_timestampUpdateFirstModifiedInUs)); locUpdate.instancesData = { transform.toAron() @@ -282,7 +282,7 @@ namespace armarx::armem entityUpdate.entityID.entityName = "Armar3"; entityUpdate.instancesData = { desc.toAron() }; - entityUpdate.timeCreated = armem::Time::Now(); + entityUpdate.referencedTime = armem::Time::Now(); auto res = memoryWriter.commit(c); if (!res.allSuccess()) { diff --git a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp index c072f6fce5ef567fafb8c804e479747a895e80c6..cde81dc6801e7205867c6ff6cd679c69a1db9d92 100644 --- a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp +++ b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp @@ -218,9 +218,9 @@ namespace armarx // Prepare the update with some empty instances. armem::EntityUpdate update; update.entityID = entityID; - update.timeCreated = armem::Time::Now(); + update.referencedTime = armem::Time::Now(); - double diff = (update.timeCreated - runStarted).toMilliSecondsDouble() / 1000; + double diff = (update.referencedTime - runStarted).toMilliSecondsDouble() / 1000; auto dict1 = std::make_shared<aron::data::Dict>(); auto dict2 = std::make_shared<aron::data::Dict>(); @@ -265,7 +265,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = entityID; - update.timeCreated = armem::Time::Now() + armem::Duration::Seconds(i); + update.referencedTime = armem::Time::Now() + armem::Duration::Seconds(i); for (int j = 0; j < i; ++j) { update.instancesData.push_back(std::make_shared<aron::data::Dict>()); @@ -387,7 +387,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("default"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; toAron(data.memoryID, armem::MemoryID()); @@ -401,7 +401,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("the answer"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; data.the_bool = true; @@ -488,7 +488,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = linkedDataProviderID.withEntityName("yet_more_data"); - update.timeCreated = time; + update.referencedTime = time; armem::example::LinkedData data; data.yet_another_int = 42; @@ -545,7 +545,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("id to the_answer"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; armem::toAron(data.memoryID, theAnswerSnapshotID); @@ -556,7 +556,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("id to self"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; armem::toAron(data.memoryID, update.entityID.withTimestamp(time)); @@ -568,7 +568,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("id to previous snapshot"); - update.timeCreated = time - armem::Duration::Seconds(1); // 1 sec in the past + update.referencedTime = time - armem::Duration::Seconds(1); // 1 sec in the past armem::example::ExampleData data; armem::toAron(data.memoryID, armem::MemoryID()); // First entry - invalid link @@ -579,7 +579,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("id to previous snapshot"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; armem::toAron(data.memoryID, update.entityID.withTimestamp(time - armem::Duration::Seconds(1))); @@ -634,7 +634,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("link to yet_more_data"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; armem::toAron(data.memoryID, armem::MemoryID()); @@ -686,7 +686,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("some_new_fancy_entity_id"); - update.timeCreated = time; + update.referencedTime = time; auto currentFolder = std::filesystem::current_path(); auto opencv_img = cv::imread((currentFolder / "images" / (std::to_string(imageCounter + 1) + ".jpg")).string()); @@ -708,7 +708,7 @@ namespace armarx { armem::EntityUpdate& update = commit.add(); update.entityID = exampleDataProviderID.withEntityName("unexpected_data"); - update.timeCreated = time; + update.referencedTime = time; armem::example::ExampleData data; toAron(data.memoryID, armem::MemoryID()); // ////1/1 diff --git a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.cpp b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.cpp index fedf604b04009ee1b1b3ef18e36df93f7a57b6a4..23b426f37c9dc8942a621cde3b5746e6cdb52ae3 100644 --- a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.cpp +++ b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.cpp @@ -196,7 +196,7 @@ namespace armarx armem::EntityUpdate& update = commit.add(); update.entityID = provSegID.withEntityName(instance.id().str()); - update.timeCreated = instance.id().timestamp; + update.referencedTime = instance.id().timestamp; update.instancesData = { spatial.toAron() }; return true; diff --git a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/impl/ObjectInstanceToIndex.cpp b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/impl/ObjectInstanceToIndex.cpp index 4498d01cec8f60ba81e864438671dc254b2bf5e9..34901591b175f4b5e09dcef339868bbe488d5b50 100644 --- a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/impl/ObjectInstanceToIndex.cpp +++ b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/impl/ObjectInstanceToIndex.cpp @@ -75,7 +75,7 @@ namespace armarx::armem::objects armem::EntityUpdate& update = commit.add(); update.entityID = indexSpatialProviderSegmentID.withEntityName( objectInstanceID.getEntityID().str()); - update.timeCreated = objectPose.timestamp; + update.referencedTime = objectPose.timestamp; update.instancesData = {spatial.toAron()}; } @@ -114,7 +114,7 @@ namespace armarx::armem::objects armem::EntityUpdate& update = commit.add(); update.entityID = indexNamedProviderSegmentID.withEntityName( objectInstanceID.getEntityID().str()); - update.timeCreated = objectPose.timestamp; + update.referencedTime = objectPose.timestamp; update.instancesData = {named.toAron()}; } } diff --git a/source/RobotAPI/components/armem/client/RobotStatePredictionClientExample/RobotStatePredictionClient.cpp b/source/RobotAPI/components/armem/client/RobotStatePredictionClientExample/RobotStatePredictionClient.cpp index 3d98d0f2717747a91f7a56c3e0c547cbb0088fbd..492c2c14214d5b1a31a8c0998843a5b799ab495b 100644 --- a/source/RobotAPI/components/armem/client/RobotStatePredictionClientExample/RobotStatePredictionClient.cpp +++ b/source/RobotAPI/components/armem/client/RobotStatePredictionClientExample/RobotStatePredictionClient.cpp @@ -163,7 +163,7 @@ namespace armarx::armem::robot_state { armem::EntityUpdate update; update.entityID = entityID; - update.timeCreated = predictedTime; + update.referencedTime = predictedTime; update.instancesData = {result.prediction}; coreSegment->update(update); } diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp index 77135658d4a93d47e0b4474002b589cf569de67f..981489f8621918a733208a0dc7c6c20d274ecfe9 100644 --- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp +++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp @@ -197,7 +197,7 @@ namespace armarx .withProviderSegmentName(memoryID.providerSegmentName) .withEntityName(memoryID.entityName); update.entityID = newID; - update.timeCreated = armem::Time::Now(); + update.referencedTime = armem::Time::Now(); update.instancesData = { instance->data() }; armem::Commit newCommit; diff --git a/source/RobotAPI/interface/armem/commit.ice b/source/RobotAPI/interface/armem/commit.ice index 17260a2136d2cc4c24d1ecd06f5f77ecbcb7f8c0..4a7008293fbe1bd2080ebf808f1bd28621792303 100644 --- a/source/RobotAPI/interface/armem/commit.ice +++ b/source/RobotAPI/interface/armem/commit.ice @@ -34,7 +34,7 @@ module armarx { armem::data::MemoryID entityID; aron::data::dto::AronDictSeq instancesData; - armarx::core::time::dto::DateTime timeCreated; + armarx::core::time::dto::DateTime referencedTime; float confidence = 1.0; armarx::core::time::dto::DateTime timeSent; diff --git a/source/RobotAPI/interface/armem/memory.ice b/source/RobotAPI/interface/armem/memory.ice index 617f7043f76019a2c474f588127dbcbd9c4f3991..63801dd4da540ae46fef76e993a862e4979409c7 100644 --- a/source/RobotAPI/interface/armem/memory.ice +++ b/source/RobotAPI/interface/armem/memory.ice @@ -38,9 +38,11 @@ module armarx /// Ice Twin of `armarx::armem::EntityInstanceMetadata`. class EntityInstanceMetadata { - armarx::core::time::dto::DateTime timeCreated; - armarx::core::time::dto::DateTime timeSent; - armarx::core::time::dto::DateTime timeArrived; + armarx::core::time::dto::DateTime referencedTime; + armarx::core::time::dto::DateTime sentTime; + armarx::core::time::dto::DateTime arrivedTime; + armarx::core::time::dto::DateTime lastAccessedTime; + long accessed = 0; float confidence = 1.0; }; diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp index 76200b0ab1772d68cd30482e577ae870e711af10..7aa20ba28af1b49404118cfedb3abd006d784738 100644 --- a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp +++ b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp @@ -170,7 +170,7 @@ namespace armarx::armem armem::EntityUpdate update; update.entityID = entityID; update.instancesData = instances; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); diff --git a/source/RobotAPI/libraries/armem/client/Writer.cpp b/source/RobotAPI/libraries/armem/client/Writer.cpp index 3c4edce62f6cbc0b2d2dc908e673fbe06afe6f53..e9b06f66e1e297296a2f47c39cdf6474c0015795 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.cpp +++ b/source/RobotAPI/libraries/armem/client/Writer.cpp @@ -84,12 +84,12 @@ namespace armarx::armem::client EntityUpdateResult Writer::commit( const MemoryID& entityID, const std::vector<aron::data::DictPtr>& instancesData, - Time timeCreated) + Time referencedTime) { EntityUpdate update; update.entityID = entityID; update.instancesData = instancesData; - update.timeCreated = timeCreated; + update.referencedTime = referencedTime; return commit(update); } diff --git a/source/RobotAPI/libraries/armem/client/Writer.h b/source/RobotAPI/libraries/armem/client/Writer.h index 1d898bf6e3bc7382e4a4a22318507a3b29ee2cd7..6c4b223ce12e0ee80cd5564e2d2d3ad688661cbc 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.h +++ b/source/RobotAPI/libraries/armem/client/Writer.h @@ -49,7 +49,7 @@ namespace armarx::armem::client EntityUpdateResult commit( const MemoryID& entityID, const std::vector<aron::data::DictPtr>& instancesData, - Time timeCreated); + Time referencedTime); // with bare-ice types data::CommitResult commit(const data::Commit& commit); diff --git a/source/RobotAPI/libraries/armem/core/Commit.cpp b/source/RobotAPI/libraries/armem/core/Commit.cpp index 3c311d2249c3dc7ebe6baee5779c9337b6e19a01..341d160ec7852bb9d397d283289a4944c1f98409 100644 --- a/source/RobotAPI/libraries/armem/core/Commit.cpp +++ b/source/RobotAPI/libraries/armem/core/Commit.cpp @@ -14,7 +14,7 @@ namespace armarx::armem { return os << "Entity update: " << "\n- success: \t" << rhs.entityID - << "\n- timestamp: \t" << toDateTimeMilliSeconds(rhs.timeCreated) + << "\n- timestamp: \t" << toDateTimeMilliSeconds(rhs.referencedTime) << "\n- #instances: \t" << rhs.instancesData.size() << "\n" ; @@ -25,7 +25,7 @@ namespace armarx::armem return os << "Entity update result: " << "\n- success: \t" << (rhs.success ? "true" : "false") << "\n- snapshotID: \t" << rhs.snapshotID - << "\n- time arrived: \t" << toDateTimeMilliSeconds(rhs.timeArrived) + << "\n- time arrived: \t" << toDateTimeMilliSeconds(rhs.arrivedTime) << "\n- error message: \t" << rhs.errorMessage << "\n" ; diff --git a/source/RobotAPI/libraries/armem/core/Commit.h b/source/RobotAPI/libraries/armem/core/Commit.h index 8a1da207528940d0db22dd004faae5b15e3d07f3..81d0413849549af39abb5f2733e76d53565a6f3b 100644 --- a/source/RobotAPI/libraries/armem/core/Commit.h +++ b/source/RobotAPI/libraries/armem/core/Commit.h @@ -36,7 +36,7 @@ namespace armarx::armem * @brief Time when this entity update was created (e.g. time of image recording). * This is the key of the entity's history. */ - Time timeCreated = Time::Invalid(); + Time referencedTime = Time::Invalid(); // OPTIONAL @@ -52,14 +52,14 @@ namespace armarx::armem * * Set automatically when sending the commit. */ - Time timeSent = Time::Invalid(); + Time sentTime = Time::Invalid(); /** * @brief Time when this update arrived at the memory server. * * Set by memory server on arrival. */ - Time timeArrived = Time::Invalid(); + Time arrivedTime = Time::Invalid(); friend std::ostream& operator<<(std::ostream& os, const EntityUpdate& rhs); @@ -74,7 +74,7 @@ namespace armarx::armem bool success = false; MemoryID snapshotID; - Time timeArrived = Time::Invalid(); + Time arrivedTime = Time::Invalid(); std::string errorMessage; diff --git a/source/RobotAPI/libraries/armem/core/base/EntityBase.h b/source/RobotAPI/libraries/armem/core/base/EntityBase.h index 9c9a8c88a535eb919029c16305f2af72e999423d..7b6972a93bf7dcad9d804a03136869472b364082 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityBase.h @@ -552,11 +552,11 @@ namespace armarx::armem::base EntitySnapshotT* snapshot; - auto it = this->_container.find(update.timeCreated); + auto it = this->_container.find(update.referencedTime); if (it == this->_container.end()) { // Insert into history. - snapshot = &addSnapshot(update.timeCreated); + snapshot = &addSnapshot(update.referencedTime); // ret.removedSnapshots = this->truncate(); ret.entityUpdateType = UpdateType::InsertedNew; } diff --git a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.cpp b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.cpp index 1cc2e9544d00ce96d65658acaf853c670418bdce..a2cabd58bd92564c68374f0bf61ab06ef5990135 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.cpp +++ b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.cpp @@ -3,11 +3,17 @@ namespace armarx::armem::base { + void EntityInstanceMetadata::access() const + { + numAccessed++; + lastAccessedTime = armarx::core::time::DateTime::Now(); + } + bool EntityInstanceMetadata::operator==(const EntityInstanceMetadata& other) const { - return timeCreated == other.timeCreated - && timeSent == other.timeSent - && timeArrived == other.timeArrived + return referencedTime == other.referencedTime + && sentTime == other.sentTime + && arrivedTime == other.arrivedTime && std::abs(confidence - other.confidence) < 1e-6f; } } @@ -16,10 +22,11 @@ namespace armarx::armem::base std::ostream& armarx::armem::base::operator<<(std::ostream& os, const EntityInstanceMetadata& d) { os << "EntityInstanceMetadata: " - << "\n- t_create = \t" << armem::toStringMicroSeconds(d.timeCreated) << " us" - << "\n- t_sent = \t" << armem::toStringMicroSeconds(d.timeSent) << " us" - << "\n- t_arrived = \t" << armem::toStringMicroSeconds(d.timeArrived) << " us" - << "\n- confidence = \t" << d.confidence << " us" + << "\n - t_referenced = \t" << armem::toStringMicroSeconds(d.referencedTime) << " us" + << "\n - t_sent = \t" << armem::toStringMicroSeconds(d.sentTime) << " us" + << "\n - t_arrived = \t" << armem::toStringMicroSeconds(d.arrivedTime) << " us" + << "\n - t_accessed = \t" << armem::toStringMicroSeconds(d.lastAccessedTime) << " us (" << d.numAccessed << ")" + << "\n - confidence = \t" << d.confidence << " us" ; return os; } diff --git a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h index 02b2bcae49014e801c59d001fe9150dcae7a1b95..2dadcbc6784ac89dff3658c4d3c4c5282d3e7ef1 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h @@ -14,6 +14,16 @@ namespace armarx::armem::base */ struct NoData { + virtual ~NoData() = default; + + bool operator==(const NoData& other) + { + return true; + } + bool operator!=(const NoData& other) + { + return false; + } }; @@ -22,22 +32,34 @@ namespace armarx::armem::base */ struct EntityInstanceMetadata { - /// Time when this value was created. - Time timeCreated; + + virtual ~EntityInstanceMetadata() = default; + + /** + * @brief Time this instance refers to. + * + * For example, the physical time point when an image was captured. + * If the image is processed, the result should have the same + * referencedTime as the image. + */ + Time referencedTime = Time::Invalid(); + /// Time when this value was sent to the memory. - Time timeSent; + Time sentTime = Time::Invalid(); /// Time when this value has arrived at the memory. - Time timeArrived; + Time arrivedTime = Time::Invalid(); /// An optional confidence, may be used for things like decay. float confidence = 1.0; - /// An optional value indicating the last access - Time lastAccessed = Time::Invalid(); + /// An optional value indicating the time of last access. + mutable Time lastAccessedTime = Time::Invalid(); - /// A counter how often the instance has been accessed - unsigned long accessed = 0; + /// A counter how often the instance has been accessed. + mutable unsigned long numAccessed = 0; + /// Called whenever the entity instance this metadata belongs to is accessed (e.g. queried). + void access() const; bool operator==(const EntityInstanceMetadata& other) const; inline bool operator!=(const EntityInstanceMetadata& other) const @@ -91,11 +113,11 @@ namespace armarx::armem::base // Data - EntityInstanceMetadata& metadata() + MetadataT& metadata() { return _metadata; } - const EntityInstanceMetadata& metadata() const + const MetadataT& metadata() const { return _metadata; } diff --git a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h index c983dd8dec8a9a351b0a4cd1efc9d00320f59a1c..b7048a6328990d6be2152c0559466cf1ff142b9e 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h @@ -223,7 +223,7 @@ namespace armarx::armem::base void update(const EntityUpdate& update) { - detail::throwIfNotEqual(time(), update.timeCreated); + detail::throwIfNotEqual(time(), update.referencedTime); this->_container.clear(); for (int index = 0; index < int(update.instancesData.size()); ++index) diff --git a/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp index 6ec40abd7ec808b8aca5aaf3cb4a93a5772e17b1..42620f2d928b91f7941600315a9970b16111618c 100644 --- a/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp +++ b/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp @@ -56,16 +56,20 @@ namespace armarx::armem void base::toIce(data::EntityInstanceMetadata& ice, const EntityInstanceMetadata& metadata) { ice.confidence = metadata.confidence; - toIce(ice.timeArrived, metadata.timeArrived); - toIce(ice.timeCreated, metadata.timeCreated); - toIce(ice.timeSent, metadata.timeSent); + toIce(ice.arrivedTime, metadata.arrivedTime); + toIce(ice.referencedTime, metadata.referencedTime); + toIce(ice.sentTime, metadata.sentTime); + toIce(ice.lastAccessedTime, metadata.lastAccessedTime); + ice.accessed = metadata.numAccessed; } void base::fromIce(const data::EntityInstanceMetadata& ice, EntityInstanceMetadata& metadata) { metadata.confidence = ice.confidence; - fromIce(ice.timeArrived, metadata.timeArrived); - fromIce(ice.timeCreated, metadata.timeCreated); - fromIce(ice.timeSent, metadata.timeSent); + fromIce(ice.arrivedTime, metadata.arrivedTime); + fromIce(ice.referencedTime, metadata.referencedTime); + fromIce(ice.sentTime, metadata.sentTime); + fromIce(ice.lastAccessedTime, metadata.lastAccessedTime); + metadata.numAccessed = ice.accessed; } diff --git a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp index dfd25e3ba39ca2bc9a18be1b45684d004255297f..5e1ace16263e1bcdd11a760e8aba7c5216afc36d 100644 --- a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp +++ b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp @@ -87,10 +87,10 @@ namespace armarx std::transform(ice.instancesData.begin(), ice.instancesData.end(), std::back_inserter(update.instancesData), aron::data::Dict::FromAronDictDTO); - fromIce(ice.timeCreated, update.timeCreated); + fromIce(ice.referencedTime, update.referencedTime); update.confidence = ice.confidence; - fromIce(ice.timeSent, update.timeSent); + fromIce(ice.timeSent, update.sentTime); } void armem::toIce(data::EntityUpdate& ice, const EntityUpdate& update) @@ -102,17 +102,17 @@ namespace armarx std::transform(update.instancesData.begin(), update.instancesData.end(), std::back_inserter(ice.instancesData), aron::data::Dict::ToAronDictDTO); - toIce(ice.timeCreated, update.timeCreated); + toIce(ice.referencedTime, update.referencedTime); ice.confidence = update.confidence; - toIce(ice.timeSent, update.timeSent); + toIce(ice.timeSent, update.sentTime); } void armem::fromIce(const data::EntityUpdateResult& ice, EntityUpdateResult& result) { result.success = ice.success; fromIce(ice.snapshotID, result.snapshotID); - fromIce(ice.timeArrived, result.timeArrived); + fromIce(ice.timeArrived, result.arrivedTime); result.errorMessage = ice.errorMessage; } @@ -120,7 +120,7 @@ namespace armarx { ice.success = result.success; toIce(ice.snapshotID, result.snapshotID); - toIce(ice.timeArrived, result.timeArrived); + toIce(ice.timeArrived, result.arrivedTime); ice.errorMessage = result.errorMessage; } @@ -137,7 +137,7 @@ namespace armarx void armem::fromIce(const data::EntityUpdate& ice, EntityUpdate& update, Time timeArrived) { fromIce(ice, update); - update.timeArrived = timeArrived; + update.arrivedTime = timeArrived; } void armem::fromIce(const actions::data::MenuPtr& ice, actions::Menu& menu) diff --git a/source/RobotAPI/libraries/armem/core/operations.cpp b/source/RobotAPI/libraries/armem/core/operations.cpp index 51729c613b6d10e5903a92818d9e1b4fa507fa11..5ac621a9ec9bd0e1ca9bf3ef6a6ca0e16ceb5d49 100644 --- a/source/RobotAPI/libraries/armem/core/operations.cpp +++ b/source/RobotAPI/libraries/armem/core/operations.cpp @@ -25,7 +25,7 @@ namespace armarx { EntityUpdate up; up.entityID = snapshot.id().getEntityID(); - up.timeCreated = snapshot.time(); + up.referencedTime = snapshot.time(); up.instancesData = getAronData(snapshot); return up; } diff --git a/source/RobotAPI/libraries/armem/core/wm/aron_conversions.cpp b/source/RobotAPI/libraries/armem/core/wm/aron_conversions.cpp index d24ce36b544670f5e24e72177f64b839be52fc0d..e2ceb0f2ac5e77f23d0a8a330b9b7837699691fa 100644 --- a/source/RobotAPI/libraries/armem/core/wm/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem/core/wm/aron_conversions.cpp @@ -6,7 +6,7 @@ namespace armarx::armem { constexpr const char* DATA_WRAPPER_TIME_STORED_FIELD = "__WRITER_METADATA__TIME_STORED"; - constexpr const char* DATA_WRAPPER_TIME_CREATED_FIELD = "__ENTITY_METADATA__TIME_CREATED"; + constexpr const char* DATA_WRAPPER_TIME_REFERENCED_FIELD = "__ENTITY_METADATA__TIME_REFERENCED"; constexpr const char* DATA_WRAPPER_TIME_SENT_FIELD = "__ENTITY_METADATA__TIME_SENT"; constexpr const char* DATA_WRAPPER_TIME_ARRIVED_FIELD = "__ENTITY_METADATA__TIME_ARRIVED"; constexpr const char* DATA_WRAPPER_CONFIDENCE_FIELD = "__ENTITY_METADATA__CONFIDENCE"; @@ -22,14 +22,14 @@ void armarx::armem::from_aron(const aron::data::DictPtr& metadata, const aron::d e.data() = data; - auto timeCreated = aron::data::Long::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_TIME_CREATED_FIELD)); - m.timeCreated = Time(Duration::MicroSeconds(timeCreated->toAronLongDTO()->value)); + auto referencedTime = aron::data::Long::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_TIME_REFERENCED_FIELD)); + m.referencedTime = Time(Duration::MicroSeconds(referencedTime->toAronLongDTO()->value)); auto timeSent = aron::data::Long::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_TIME_SENT_FIELD)); - m.timeSent = Time(Duration::MicroSeconds(timeSent->toAronLongDTO()->value)); + m.sentTime = Time(Duration::MicroSeconds(timeSent->toAronLongDTO()->value)); auto timeArrived = aron::data::Long::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_TIME_ARRIVED_FIELD)); - m.timeArrived = Time(Duration::MicroSeconds(timeArrived->toAronLongDTO()->value)); + m.arrivedTime = Time(Duration::MicroSeconds(timeArrived->toAronLongDTO()->value)); auto confidence = aron::data::Double::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_CONFIDENCE_FIELD)); m.confidence = static_cast<float>(confidence->toAronDoubleDTO()->value); @@ -41,24 +41,24 @@ void armarx::armem::to_aron(aron::data::DictPtr& metadata, aron::data::DictPtr& data = e.data(); metadata = std::make_shared<aron::data::Dict>(); - auto timeWrapped = std::make_shared<aron::data::Long>(); + auto timeWrapped = std::make_shared<aron::data::Long>(armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_STORED_FIELD})); timeWrapped->setValue(Time::Now().toMicroSecondsSinceEpoch()); metadata->addElement(DATA_WRAPPER_TIME_STORED_FIELD, timeWrapped); const wm::EntityInstanceMetadata& m = e.metadata(); - auto timeCreated = std::make_shared<aron::data::Long>(); - timeCreated->setValue(m.timeCreated.toMicroSecondsSinceEpoch()); - metadata->addElement(DATA_WRAPPER_TIME_CREATED_FIELD, timeCreated); + auto referencedTime = std::make_shared<aron::data::Long>(armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_REFERENCED_FIELD})); + referencedTime->setValue(m.referencedTime.toMicroSecondsSinceEpoch()); + metadata->addElement(DATA_WRAPPER_TIME_REFERENCED_FIELD, referencedTime); - auto timeSent = std::make_shared<aron::data::Long>(); - timeSent->setValue(m.timeSent.toMicroSecondsSinceEpoch()); + auto timeSent = std::make_shared<aron::data::Long>(armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_SENT_FIELD})); + timeSent->setValue(m.sentTime.toMicroSecondsSinceEpoch()); metadata->addElement(DATA_WRAPPER_TIME_SENT_FIELD, timeSent); - auto timeArrived = std::make_shared<aron::data::Long>(); - timeArrived->setValue(m.timeArrived.toMicroSecondsSinceEpoch()); + auto timeArrived = std::make_shared<aron::data::Long>(armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_ARRIVED_FIELD})); + timeArrived->setValue(m.arrivedTime.toMicroSecondsSinceEpoch()); metadata->addElement(DATA_WRAPPER_TIME_ARRIVED_FIELD, timeArrived); - auto confidence = std::make_shared<aron::data::Double>(); + auto confidence = std::make_shared<aron::data::Double>(armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_CONFIDENCE_FIELD})); confidence->setValue(static_cast<double>(m.confidence)); metadata->addElement(DATA_WRAPPER_CONFIDENCE_FIELD, confidence); } diff --git a/source/RobotAPI/libraries/armem/core/wm/memory_definitions.cpp b/source/RobotAPI/libraries/armem/core/wm/memory_definitions.cpp index 0758020be61e3326c6b870b8bffae8d06e318a79..bfc408ac99a98a5bf1826f37334e1c331196ed1b 100644 --- a/source/RobotAPI/libraries/armem/core/wm/memory_definitions.cpp +++ b/source/RobotAPI/libraries/armem/core/wm/memory_definitions.cpp @@ -37,9 +37,9 @@ namespace armarx::armem::wm this->_metadata.confidence = update.confidence; - this->_metadata.timeCreated = update.timeCreated; - this->_metadata.timeSent = update.timeSent; - this->_metadata.timeArrived = update.timeArrived; + this->_metadata.referencedTime = update.referencedTime; + this->_metadata.sentTime = update.sentTime; + this->_metadata.arrivedTime = update.arrivedTime; } } diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index 63b9bba20d1575cc3377109b856d57a09bc4aae8..b70d98e4fb09a9d209c151dfcede09c551828367 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -187,7 +187,7 @@ namespace armarx::armem::server result.success = true; result.snapshotID = updateResult.id; - result.timeArrived = update.timeArrived; + result.arrivedTime = update.arrivedTime; for (const auto& snapshot : updateResult.removedSnapshots) { diff --git a/source/RobotAPI/libraries/armem/server/query_proc/ltm/detail/EntityQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/ltm/detail/EntityQueryProcessorBase.h index d9f64fc7a42508ddf297490d4ce8481a054fdb9a..42b87df82d95dcf6e264319dc5b6a7e868dbde94 100644 --- a/source/RobotAPI/libraries/armem/server/query_proc/ltm/detail/EntityQueryProcessorBase.h +++ b/source/RobotAPI/libraries/armem/server/query_proc/ltm/detail/EntityQueryProcessorBase.h @@ -27,6 +27,7 @@ namespace armarx::armem::server::query_proc::ltm::detail protected: + // default addResultSnapshot method. Always copies the data void addResultSnapshot(ResultEntityT& result, const EntitySnapshotT& snapshot) const override { ResultSnapshotT s; diff --git a/source/RobotAPI/libraries/armem/server/query_proc/wm/detail/EntityQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/wm/detail/EntityQueryProcessorBase.h index faa3fe544af4dedb4e4226123a1d422a2a1ed200..5fbd2300c13561d64075720d399bc0e4c87633f0 100644 --- a/source/RobotAPI/libraries/armem/server/query_proc/wm/detail/EntityQueryProcessorBase.h +++ b/source/RobotAPI/libraries/armem/server/query_proc/wm/detail/EntityQueryProcessorBase.h @@ -2,6 +2,7 @@ #include "../../base/EntityQueryProcessorBase.h" +#include <ArmarXCore/core/logging/Logging.h> namespace armarx::armem::server::query_proc::wm::detail { @@ -32,7 +33,12 @@ namespace armarx::armem::server::query_proc::wm::detail protected: void addResultSnapshot(ResultEntityT& result, const EntitySnapshotT& snapshot) const override { - result.addSnapshot(snapshot); + snapshot.forEachInstance([](const typename EntitySnapshotT::EntityInstanceT& instance) + { + instance.metadata().access(); + }); + EntitySnapshotT copy = snapshot; + result.addSnapshot(std::move(copy)); } }; } diff --git a/source/RobotAPI/libraries/armem/server/query_proc/wm/wm.h b/source/RobotAPI/libraries/armem/server/query_proc/wm/wm.h index 27e88e82881deb7ba6f47249d385867b134b9621..312a39896aa717fb8d17115dfe4c0c904a524181 100644 --- a/source/RobotAPI/libraries/armem/server/query_proc/wm/wm.h +++ b/source/RobotAPI/libraries/armem/server/query_proc/wm/wm.h @@ -53,15 +53,21 @@ namespace armarx::armem::server::query_proc::wm::detail bool withData = (dataMode == armem::query::DataMode::WithData); if (withData) { - result.addSnapshot(server::wm::EntitySnapshot{ snapshot }); + Base::addResultSnapshot(result, snapshot); } else { + // 1. access real data + snapshot.forEachInstance([](const server::wm::EntityInstance& i) + { + i.metadata().access(); + }); + + // 2. create copy and remove data from copy server::wm::EntitySnapshot copy = snapshot; copy.forEachInstance([](server::wm::EntityInstance & i) { i.data() = nullptr; - return true; }); result.addSnapshot(std::move(copy)); } diff --git a/source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp index edaa7bb5c5d92b57b0edf3918d1674db34337680..fd326aa038d122cb76a26ad34825dcab4f85b933 100644 --- a/source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp +++ b/source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp @@ -123,7 +123,7 @@ namespace ArMemLTMTest } update.entityID = armem::MemoryID::fromString(memoryName + "/TestCoreSegment/TestProvider/TestEntity"); update.instancesData = q; - update.timeCreated = armem::Time::Now(); + update.referencedTime = armem::Time::Now(); BOOST_CHECK_NO_THROW(providerSegment.update(update)); BOOST_CHECK_EQUAL(providerSegment.size(), 1); } diff --git a/source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp index 8c3052e7d3abebf761431789865f4d0f46633cc7..70a0a2839f7f575d02d876a2721c3b3a6c73b58c 100644 --- a/source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp +++ b/source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp @@ -653,7 +653,7 @@ struct CopyMoveCtorsOpsTest : public CopyMoveCtorsOpsTestBase { armem::EntityUpdate update; update.entityID = armem::MemoryID("M", "C", "P", "E", armem::Time(armem::Duration::MicroSeconds(123000)), 0); - update.timeCreated = update.entityID.timestamp; + update.referencedTime = update.entityID.timestamp; update.instancesData.emplace_back(); in.update(update); } @@ -814,7 +814,7 @@ BOOST_AUTO_TEST_CASE(test_segment_setup) std::make_shared<aron::data::Dict>(), std::make_shared<aron::data::Dict>() }; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(1000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(1000)); BOOST_CHECK_NO_THROW(providerSegment.update(update)); BOOST_CHECK_EQUAL(providerSegment.size(), 1); @@ -824,25 +824,25 @@ BOOST_AUTO_TEST_CASE(test_segment_setup) wm::Entity& entity = providerSegment.getEntity("image"); BOOST_CHECK_EQUAL(entity.name(), "image"); BOOST_CHECK_EQUAL(entity.size(), 1); - BOOST_CHECK(entity.hasSnapshot(update.timeCreated)); + BOOST_CHECK(entity.hasSnapshot(update.referencedTime)); - wm::EntitySnapshot& entitySnapshot = entity.getSnapshot(update.timeCreated); + wm::EntitySnapshot& entitySnapshot = entity.getSnapshot(update.referencedTime); BOOST_CHECK_EQUAL(entitySnapshot.size(), update.instancesData.size()); // Another update (on memory). update.instancesData = { std::make_shared<aron::data::Dict>() }; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(2000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(2000)); memory.update(update); BOOST_CHECK_EQUAL(entity.size(), 2); - BOOST_CHECK(entity.hasSnapshot(update.timeCreated)); - BOOST_CHECK_EQUAL(entity.getSnapshot(update.timeCreated).size(), update.instancesData.size()); + BOOST_CHECK(entity.hasSnapshot(update.referencedTime)); + BOOST_CHECK_EQUAL(entity.getSnapshot(update.referencedTime).size(), update.instancesData.size()); // A third update (on entity). update.instancesData = { std::make_shared<aron::data::Dict>() }; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(3000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(3000)); entity.update(update); BOOST_CHECK_EQUAL(entity.size(), 3); @@ -858,11 +858,11 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_entity) update.entityID.entityName = entity.name(); // With unlimited history. - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(1000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(1000)); entity.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(2000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(2000)); entity.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(3000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(3000)); entity.update(update); BOOST_CHECK_EQUAL(entity.size(), 3); @@ -874,7 +874,7 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_entity) BOOST_CHECK(entity.hasSnapshot(armem::Time(armem::Duration::MilliSeconds(3000)))); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(4000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(4000)); entity.update(update); BOOST_CHECK_EQUAL(entity.size(), 2); BOOST_CHECK(not entity.hasSnapshot(armem::Time(armem::Duration::MilliSeconds(2000)))); @@ -884,7 +884,7 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_entity) // Disable maximum history size. entity.setMaxHistorySize(-1); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(5000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(5000)); entity.update(update); BOOST_CHECK_EQUAL(entity.size(), 3); BOOST_CHECK(entity.hasSnapshot(armem::Time(armem::Duration::MilliSeconds(3000)))); @@ -907,15 +907,15 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_provider_segment) { update.entityID.entityName = name; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(1000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(1000)); providerSegment.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(2000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(2000)); providerSegment.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(3000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(3000)); providerSegment.update(update); } update.entityID.entityName = entityNames.back(); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(4000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(4000)); providerSegment.update(update); BOOST_CHECK_EQUAL(providerSegment.getEntity("A").size(), 3); @@ -939,11 +939,11 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_provider_segment) providerSegment.setMaxHistorySize(2); update.entityID.entityName = "C"; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(1000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(1000)); providerSegment.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(2000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(2000)); providerSegment.update(update); - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(3000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(3000)); providerSegment.update(update); // Check correctly inherited history size. @@ -958,7 +958,7 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_provider_segment) for (const std::string& name : entityNames) { update.entityID.entityName = name; - update.timeCreated = armem::Time(armem::Duration::MilliSeconds(5000)); + update.referencedTime = armem::Time(armem::Duration::MilliSeconds(5000)); providerSegment.update(update); BOOST_CHECK_EQUAL(providerSegment.getEntity(name).getMaxHistorySize(), -1); BOOST_CHECK_EQUAL(providerSegment.getEntity(name).size(), 3); diff --git a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp index f1b5b362318e577dda941c1dd8fff97dd3cf72d7..bf97734a52d7d9db9198101307270c23d8b07383 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp @@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE(test_forEach) EntityUpdate update; update.entityID = eid; - update.timeCreated = sid.timestamp; + update.referencedTime = sid.timestamp; for (size_t i = 0; i <= s; ++i) { const MemoryID iid = sid.withInstanceIndex(int(i)); diff --git a/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp b/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp index e5c40a12dbb73b0cef3569eb12d80fb1980f95f2..00bd50a3d4721765f2287482bd31f09540d480a3 100644 --- a/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp +++ b/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp @@ -127,7 +127,7 @@ namespace armarx::armem::grasping::segment { EntityUpdate& update = commit.add(); update.entityID = providerID.withEntityName(info.id().str()); - update.entityID.timestamp = update.timeArrived = update.timeCreated = update.timeSent = now; + update.entityID.timestamp = update.arrivedTime = update.referencedTime = update.sentTime = now; update.instancesData = { diff --git a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp index b9c789398b0d8ce5c6fb17e0c2cb44fb5bc5b531..4fdda00748d1201e84181c80e3054938c0143348 100644 --- a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp +++ b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp @@ -391,7 +391,7 @@ namespace armarx::armem::gui entityUpdate.entityID = memId; entityUpdate.confidence = 1.0; entityUpdate.instancesData = {aron}; - entityUpdate.timeCreated = now; + entityUpdate.referencedTime = now; it->second.commit(comm); } } diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp index e2d04e0449c190acacf502bb0b847d785e7f85cd..1c7a40faed6b57b15bcd0a4ddd8677b103e8670d 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp @@ -50,6 +50,7 @@ namespace armarx::armem::gui::instance treeItemMetadata->addChild(new QTreeWidgetItem({"Time Created"})); treeItemMetadata->addChild(new QTreeWidgetItem({"Time Sent"})); treeItemMetadata->addChild(new QTreeWidgetItem({"Time Arrived"})); + treeItemMetadata->addChild(new QTreeWidgetItem({"Time Last Accessed"})); QList<QTreeWidgetItem*> items = {treeItemInstanceID, treeItemMetadata}; tree->insertTopLevelItems(0, items); @@ -110,9 +111,10 @@ namespace armarx::armem::gui::instance std::vector<std::string> items = { std::to_string(metadata.confidence), - armem::toDateTimeMilliSeconds(metadata.timeCreated), - armem::toDateTimeMilliSeconds(metadata.timeSent), - armem::toDateTimeMilliSeconds(metadata.timeArrived) + armem::toDateTimeMilliSeconds(metadata.referencedTime), + armem::toDateTimeMilliSeconds(metadata.sentTime), + armem::toDateTimeMilliSeconds(metadata.arrivedTime), + armem::toDateTimeMilliSeconds(metadata.lastAccessedTime) + " (" + std::to_string(metadata.numAccessed) + " times total)" }; ARMARX_CHECK_EQUAL(static_cast<size_t>(treeItemMetadata->childCount()), items.size()); int i = 0; diff --git a/source/RobotAPI/libraries/armem_laser_scans/client/common/Writer.cpp b/source/RobotAPI/libraries/armem_laser_scans/client/common/Writer.cpp index 08f456b165d08e52c9c3ce0aed649aa96ec8f863..9a7aa7e5aa8a97032bd5ab9dcbe245b693a52cc3 100644 --- a/source/RobotAPI/libraries/armem_laser_scans/client/common/Writer.cpp +++ b/source/RobotAPI/libraries/armem_laser_scans/client/common/Writer.cpp @@ -83,7 +83,7 @@ namespace armarx::armem::laser_scans::client dict->addElement("scan", toAron(laserScan)); update.instancesData = {dict}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); diff --git a/source/RobotAPI/libraries/armem_motions/server/MotionSegment.cpp b/source/RobotAPI/libraries/armem_motions/server/MotionSegment.cpp index 8e9621c5a711816c2e84762d9a9d59f10f333f03..76c811b3f05438c5d880da647afc54eb461dd114 100644 --- a/source/RobotAPI/libraries/armem_motions/server/MotionSegment.cpp +++ b/source/RobotAPI/libraries/armem_motions/server/MotionSegment.cpp @@ -76,9 +76,9 @@ namespace armarx::armem::server::motions::mdb::segment auto& snapshot = entity.addSnapshot(op->createdDate); armem::wm::EntityInstance& instance = snapshot.addInstance(); - instance.metadata().timeCreated = op->createdDate; - instance.metadata().timeSent = Time::Now(); - instance.metadata().timeArrived = Time::Now(); + instance.metadata().referencedTime = op->createdDate; + instance.metadata().sentTime = Time::Now(); + instance.metadata().arrivedTime = Time::Now(); instance.metadata().confidence = 1.0; instance.data() = op->toAron(); } diff --git a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/Segment.cpp b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/Segment.cpp index a45cd788ff673d0e5a9c78e5a92940d0d2daf3c9..23b68572384fb24b7b4f28729fe1041f60d8c307 100644 --- a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/Segment.cpp +++ b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/Segment.cpp @@ -87,9 +87,9 @@ namespace armarx::armem::server::motions::mps::segment ss << "Found valid instance at: " << pathToInfoJson << ". The motionID is: "; armem::wm::EntityInstance instance; - instance.metadata().timeCreated = armem::Time::Now(); //op->createdDate; - instance.metadata().timeSent = armem::Time::Now(); - instance.metadata().timeArrived = armem::Time::Now(); + instance.metadata().referencedTime = armem::Time::Now(); //op->createdDate; + instance.metadata().sentTime = armem::Time::Now(); + instance.metadata().arrivedTime = armem::Time::Now(); instance.metadata().confidence = 1.0; if(taskspace) diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp index fbce08b6323e1a1235bd000aadbd4e73ff6cbf8c..80c3168c5fc5e7c893c2813082171e5cd9c6319b 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp @@ -154,7 +154,7 @@ namespace armarx::armem::articulated_object toAron(aronArticulatedObjectDescription, obj.description); update.instancesData = {aronArticulatedObjectDescription.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); @@ -233,7 +233,7 @@ namespace armarx::armem::articulated_object objectInstance.pose.objectID = cs; update.instancesData = {objectInstance.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp index 69f5806c2bb6dc4cbfae1f196d4f967c04ab9a12..9a59562ec531ce44644b4bda5ed2a8e9a0c6ac3e 100644 --- a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp @@ -82,7 +82,7 @@ namespace armarx::armem::attachment toAron(aronAttachment, attachment); update.instancesData = {aronAttachment.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); @@ -126,7 +126,7 @@ namespace armarx::armem::attachment toAron(aronAttachment, attachment); update.instancesData = {aronAttachment.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); diff --git a/source/RobotAPI/libraries/armem_objects/client/instance/ObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/instance/ObjectWriter.cpp index 84b1e4613b8b4bbe8a72938949d503276500e407..8ee596b27069f82c9ff19d63efcd40e7cc819699 100644 --- a/source/RobotAPI/libraries/armem_objects/client/instance/ObjectWriter.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/instance/ObjectWriter.cpp @@ -64,8 +64,8 @@ namespace armarx::armem::obj::instance e.entityID.coreSegmentName = properties.coreSegmentName; e.entityID.providerSegmentName = provider; e.entityID.entityName = inst.pose.objectID.dataset + "/" + inst.pose.objectID.className + "/" + inst.pose.objectID.instanceName; - e.timeCreated = t; - e.timeSent = armem::Time::Now(); + e.referencedTime = t; + e.sentTime = armem::Time::Now(); e.instancesData = { inst.toAron() }; auto res = memoryWriter.commit(c); diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp index 4dcf3262724cd6a9626a967f9582d4514a478d89..c841afc4dc6afe2629802871399944a0ef39da04 100644 --- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp @@ -95,7 +95,7 @@ namespace armarx::armem::server::obj::clazz EntityUpdate& update = commit.add(); update.entityID = providerID.withEntityName(info.id().str()); - update.timeArrived = update.timeCreated = update.timeSent = now; + update.arrivedTime = update.referencedTime = update.sentTime = now; arondto::ObjectClass objectClass = objectClassFromInfo(info); update.instancesData = diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index c17ce69020b2b7f2c363219339754919fc805723..b0726c001d978f7f98e5517e69248c6a9b4fd47f 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -335,8 +335,8 @@ namespace armarx::armem::server::obj::instance providerName.empty() ? pose.providerName : providerName); update.entityID = providerID.withEntityName(pose.objectID.str()); - update.timeArrived = now; - update.timeCreated = pose.timestamp; + update.arrivedTime = now; + update.referencedTime = pose.timestamp; update.confidence = pose.confidence; arondto::ObjectInstance dto; @@ -781,7 +781,7 @@ namespace armarx::armem::server::obj::instance armem::Commit commit; armem::EntityUpdate & update = commit.add(); update.entityID = objectEntity->id(); - update.timeCreated = now; + update.referencedTime = now; { arondto::ObjectInstance updated = data; toAron(updated.pose.attachment, info); @@ -889,7 +889,7 @@ namespace armarx::armem::server::obj::instance armem::Commit commit; armem::EntityUpdate & update = commit.add(); update.entityID = entity.id(); - update.timeCreated = now; + update.referencedTime = now; { arondto::ObjectInstance updated; if (commitAttachedPose and data.pose.attachmentValid) diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp index 579a335212beaeedcf61e2b77e279461345375f1..cfa84fb3f50ad95db2f82b29114cd2606250a2c4 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp @@ -85,7 +85,7 @@ namespace armarx::armem::robot_state toAron(aronDescription, description); update.instancesData = {aronDescription.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); @@ -129,7 +129,7 @@ namespace armarx::armem::robot_state } update.instancesData = {aronTransform.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); @@ -163,7 +163,7 @@ namespace armarx::armem::robot_state aronProprioception.joints.position = jointMap; update.instancesData = {aronProprioception.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp index 932f55b0a6ea2ff74762a62ffa74f88d0ff18422..9f93ae53156e0da1e126ed7cc922905eb2f0796b 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp @@ -98,7 +98,7 @@ namespace armarx::armem::client::robot_state::localization armem::EntityUpdate update; update.entityID = entityID; - update.timeCreated = timestamp; + update.referencedTime = timestamp; arondto::Transform aronTransform; toAron(aronTransform, transform); diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp index af2381c78d334e62ea39eb22978492ad66a32f1a..7a8f6ae0369050000b2a1b8f4df57ec4de4f050a 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp @@ -58,7 +58,7 @@ namespace armarx::armem::server::robot_state::description EntityUpdate update; update.entityID = providerID.withEntityName("description"); - update.timeArrived = update.timeCreated = update.timeSent = now; + update.arrivedTime = update.referencedTime = update.sentTime = now; arondto::RobotDescription dto; robot::toAron(dto, robotDescription); diff --git a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp index 3fbf097937386a7d4973b55a22f76419d3f5d5eb..a503bae532af41ee91809d394c22cd74f4aab071 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp @@ -187,7 +187,7 @@ namespace armarx::armem::server::robot_state::localization EntityUpdate update; update.entityID = providerID.withEntityName(transform.header.parentFrame + "," + transform.header.frame); - update.timeArrived = update.timeCreated = update.timeSent = timestamp; + update.arrivedTime = update.referencedTime = update.sentTime = timestamp; arondto::Transform aronTransform; toAron(aronTransform, transform); diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotStateWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotStateWriter.cpp index 847ec98c82966408545a50bf9d7fa93fc7081d9f..0c5ac1284fba2003474b9f885682de280a5b4403 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotStateWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotStateWriter.cpp @@ -159,7 +159,7 @@ namespace armarx::armem::server::robot_state::proprioception up.entityID = properties.robotUnitProviderID.withEntityName( properties.robotUnitProviderID.providerSegmentName); up.entityID.coreSegmentName =::armarx::armem::robot_state::constants::proprioceptionCoreSegment; - up.timeCreated = data.timestamp; + up.referencedTime = data.timestamp; up.instancesData = {data.proprioception}; } @@ -169,7 +169,7 @@ namespace armarx::armem::server::robot_state::proprioception up.entityID = properties.robotUnitProviderID.withEntityName( properties.robotUnitProviderID.providerSegmentName); up.entityID.coreSegmentName = ::armarx::armem::robot_state::constants::exteroceptionCoreSegment; - up.timeCreated = data.timestamp; + up.referencedTime = data.timestamp; up.instancesData = {data.exteroception}; } diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ExecutableSkillLibrarySegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/ExecutableSkillLibrarySegment.cpp index ec84a4f91658a5b5ed7c8a50416a1b634142a491..df0f6da140cce0cca44a8a25c1b5d70fa96aa8a4 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/ExecutableSkillLibrarySegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/ExecutableSkillLibrarySegment.cpp @@ -49,7 +49,7 @@ namespace armarx::skills::segment armem::Commit commit; auto& entityUpdate = commit.add(); entityUpdate.confidence = 1.0; - entityUpdate.timeCreated = armem::Time::Now(); + entityUpdate.referencedTime = armem::Time::Now(); entityUpdate.instancesData = {skillDescription.toAron()}; entityUpdate.entityID = provId.withEntityName(skillDescription.skillName); diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp index 51c72a4caa79ca48823dc06670d90989cf2c2d07..1fa0989e8938206462674f93d9646f48b065123f 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp @@ -54,7 +54,7 @@ namespace armarx::skills::segment armem::Commit comm; auto& entityUpdate = comm.add(); entityUpdate.confidence = 1.0; - entityUpdate.timeCreated = armem::Time::Now(); + entityUpdate.referencedTime = armem::Time::Now(); entityUpdate.instancesData = { aron }; entityUpdate.entityID = commitId; diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.cpp index f8333282e1c09b206ef8829cbda44c64bde470ec..818f3d13bb4315ebf69909c744c042b1ac268a39 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.cpp @@ -66,7 +66,7 @@ namespace armarx::skills::segment entityUpdate.entityID = skillExecutionMemID; entityUpdate.instancesData = { aron }; entityUpdate.confidence = 1.0; - entityUpdate.timeCreated = armem::Time::Now(); + entityUpdate.referencedTime = armem::Time::Now(); } { @@ -79,7 +79,7 @@ namespace armarx::skills::segment entityUpdate.entityID = skillExecutionMemID; entityUpdate.instancesData = { aron }; entityUpdate.confidence = 1.0; - entityUpdate.timeCreated = armem::Time::Now(); + entityUpdate.referencedTime = armem::Time::Now(); } diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.cpp index 46629f7cd066751e6286cb38cb081f5442b6b869..b2c5a53472a39c9dcf02f65323ff189caa3ae7b6 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.cpp @@ -31,7 +31,7 @@ namespace armarx::skills::segment armem::EntityUpdate update; update.entityID = segmentPtr->id().withEntityName(entityName); - update.timeCreated = transitionTime; + update.referencedTime = transitionTime; skills::arondto::Statechart::Transition data; armem::toAron(data, t); update.instancesData.push_back(data.toAron()); diff --git a/source/RobotAPI/libraries/armem_system_state/server/CPUSegment.cpp b/source/RobotAPI/libraries/armem_system_state/server/CPUSegment.cpp index fa392c615789ffac9e8ae2b9fd70eda0052e6d27..9886fdbe2b73326ca8b614ab0ed039d52e4e2b6e 100644 --- a/source/RobotAPI/libraries/armem_system_state/server/CPUSegment.cpp +++ b/source/RobotAPI/libraries/armem_system_state/server/CPUSegment.cpp @@ -63,7 +63,7 @@ namespace armarx::armem::server::systemstate::segment EntityUpdate update; update.entityID = providerId.withEntityName("CurrentCpuLoad"); update.confidence = 1.0; - update.timeCreated = armem::Time::Now(); + update.referencedTime = armem::Time::Now(); update.instancesData = { data }; segmentPtr->update(update); diff --git a/source/RobotAPI/libraries/armem_system_state/server/RAMSegment.cpp b/source/RobotAPI/libraries/armem_system_state/server/RAMSegment.cpp index f02b8f4fa263687d52336012322ca640ecd84f1d..a201c4731c14a211cfb670608f8839acf19482d1 100644 --- a/source/RobotAPI/libraries/armem_system_state/server/RAMSegment.cpp +++ b/source/RobotAPI/libraries/armem_system_state/server/RAMSegment.cpp @@ -54,7 +54,7 @@ namespace armarx::armem::server::systemstate::segment EntityUpdate update; update.entityID = providerId.withEntityName("CurrentMemoryLoad"); update.confidence = 1.0; - update.timeCreated = armem::Time::Now(); + update.referencedTime = armem::Time::Now(); update.instancesData = { data }; segmentPtr->update(update); diff --git a/source/RobotAPI/libraries/armem_vision/client/laser_scanner_features/Writer.cpp b/source/RobotAPI/libraries/armem_vision/client/laser_scanner_features/Writer.cpp index 0b24561dd5507efeef77793a5285b5a3eb2b00c9..8ae7ba4379288420d3578d7f30ae9bc9c58c559d 100644 --- a/source/RobotAPI/libraries/armem_vision/client/laser_scanner_features/Writer.cpp +++ b/source/RobotAPI/libraries/armem_vision/client/laser_scanner_features/Writer.cpp @@ -91,7 +91,7 @@ namespace armarx::armem::vision::laser_scanner_features::client ARMARX_TRACE; update.instancesData = {dto.toAron()}; - update.timeCreated = timestamp; + update.referencedTime = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; diff --git a/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp b/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp index e781a2582e511b59f3ebefe9cde4a35d425da60a..a682162553005783d3ad74e42d78bffefbc09ae2 100644 --- a/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp +++ b/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp @@ -41,7 +41,7 @@ namespace armarx::armem::vision::occupancy_grid::client dict->addElement("grid", toAron(grid.grid)); update.instancesData = {dict}; - update.timeCreated = iceTimestamp; + update.referencedTime = iceTimestamp; ARMARX_DEBUG << "Committing " << update << " at time " << iceTimestamp; armem::EntityUpdateResult updateResult = memoryWriter().commit(update);