From 0d1f46d32ec0d2c608a90f0a91b13d4d37136442 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Tue, 16 Jan 2024 15:36:00 +0100 Subject: [PATCH] armem_objects: improving reader and writer for articulated objects --- .../client/articulated_object/Reader.cpp | 34 +++++++++++++------ .../client/articulated_object/Writer.cpp | 2 ++ .../common/localization/TransformHelper.cpp | 8 ++--- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp index 4c9ec304a..28a4198b5 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp @@ -126,7 +126,7 @@ namespace armarx::armem::articulated_object .config = {}, // will be populated by `synchronize()` .timestamp = timestamp}; - synchronize(obj, timestamp, providerName); + ARMARX_CHECK(synchronize(obj, timestamp, providerName)); return obj; } @@ -225,18 +225,32 @@ namespace armarx::armem::articulated_object const armem::Time& timestamp, const std::optional<std::string>& providerName) { - // TODO(fabian.reister): how to deal with multiple providers? - // Query all entities from provider. armem::client::query::Builder qb; - // clang-format off - qb - .coreSegments().withName(objects::constants::CoreInstanceSegmentName) - .providerSegments().all() // withName(properties.providerName) // agent - .entities().withName(instanceName) - .snapshots().latest(); - // clang-format on + + if(not providerName.has_value()) + { + // clang-format off + qb + .coreSegments().withName(objects::constants::CoreInstanceSegmentName) + .providerSegments().all() // no specific provider + .entities().withName(instanceName) + // .snapshots().beforeOrAtTime(timestamp); + .snapshots().latest(); + // clang-format on + }else + { + // clang-format off + qb + .coreSegments().withName(objects::constants::CoreInstanceSegmentName) + .providerSegments().withName(providerName.value()) // agent + .entities().withName(instanceName) + // .snapshots().beforeOrAtTime(timestamp); + .snapshots().latest(); + // clang-format on + } + const armem::client::QueryResult qResult = memoryReader.query(qb.buildQueryInput()); 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 b87554869..c507fd905 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp @@ -115,6 +115,8 @@ namespace armarx::armem::articulated_object return objectId->second; } + ARMARX_INFO << simox::alg::get_keys(knownObjects); + throw LocalException("articulated object class " + obj.description.name + " not found"); // otherwise create diff --git a/source/RobotAPI/libraries/armem_robot_state/common/localization/TransformHelper.cpp b/source/RobotAPI/libraries/armem_robot_state/common/localization/TransformHelper.cpp index c163ff7f6..252dd7869 100644 --- a/source/RobotAPI/libraries/armem_robot_state/common/localization/TransformHelper.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/common/localization/TransformHelper.cpp @@ -71,9 +71,9 @@ namespace armarx::armem::common::robot_state::localization ARMARX_INFO << deactivateSpam(1) << "No transform available."; return {.transform = {.header = query.header}, .status = TransformResult::Status::ErrorFrameNotAvailable, - .errorMessage = "Error in TF loookup: '" + query.header.parentFrame + + .errorMessage = "Error in TF lookup: '" + query.header.parentFrame + " -> " + query.header.frame + - "'. No memory data in time range."}; + "'. No memory data in time range. Reference time " + sanitizedTimestamp.value().toTimeString()}; } const Eigen::Affine3f transform = std::accumulate( @@ -114,8 +114,8 @@ namespace armarx::armem::common::robot_state::localization .header = query.header, .transforms = {}, .status = TransformChainResult::Status::ErrorFrameNotAvailable, - .errorMessage = "Error in TF loookup: '" + query.header.parentFrame + " -> " + - query.header.frame + "'. No memory data in time range." + .errorMessage = "Error in TF lookup: '" + query.header.parentFrame + " -> " + + query.header.frame + "'. No memory data in time range. Reference time " + query.header.timestamp.toTimeString() }; } -- GitLab