diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp index e48c16e1247278de3cf1a171009351504b000150..15efc34f03a50b46b457956de91eb97e3ca23d60 100644 --- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp +++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp @@ -212,10 +212,10 @@ namespace armarx // PREDICTING - armem::predictions::data::PredictionResultSeq - ExampleMemory::predict(const armem::predictions::data::PredictionRequestSeq& requests) + armem::prediction::data::PredictionResultSeq + ExampleMemory::predict(const armem::prediction::data::PredictionRequestSeq& requests) { - armem::predictions::data::PredictionResultSeq result; + armem::prediction::data::PredictionResultSeq result; for (auto request : requests) { result.push_back(predictSingle(request)); @@ -223,10 +223,10 @@ namespace armarx return result; } - armem::predictions::data::PredictionResult - ExampleMemory::predictSingle(const armem::predictions::data::PredictionRequest& request) + armem::prediction::data::PredictionResult + ExampleMemory::predictSingle(const armem::prediction::data::PredictionRequest& request) { - armem::predictions::data::PredictionResult result; + armem::prediction::data::PredictionResult result; std::string engine = request.settings.predictionEngine; if (engine.empty() || engine == "Latest") @@ -270,7 +270,7 @@ namespace armarx return result; } - armem::predictions::data::PredictionEngineSeq + armem::prediction::data::PredictionEngineSeq ExampleMemory::getAvailableEngines() { return {"Latest"}; diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h index b1bbee2381ff363ca4d057f82040a591a34c4659..de89914ba8ed44517ce40639849afa826d022ef1 100644 --- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h +++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h @@ -73,10 +73,10 @@ namespace armarx // PredictingMemoryInterface interface public: - armem::predictions::data::PredictionResultSeq - predict(const armem::predictions::data::PredictionRequestSeq& requests) override; + armem::prediction::data::PredictionResultSeq + predict(const armem::prediction::data::PredictionRequestSeq& requests) override; - armem::predictions::data::PredictionEngineSeq getAvailableEngines() override; + armem::prediction::data::PredictionEngineSeq getAvailableEngines() override; protected: @@ -91,8 +91,8 @@ namespace armarx private: - armem::predictions::data::PredictionResult - predictSingle(const armem::predictions::data::PredictionRequest& request); + armem::prediction::data::PredictionResult + predictSingle(const armem::prediction::data::PredictionRequest& request); armarx::DebugObserverInterfacePrx debugObserver; diff --git a/source/RobotAPI/interface/CMakeLists.txt b/source/RobotAPI/interface/CMakeLists.txt index 2913cd662cf51c48ef7315c930f5c48434eb7618..41a52f9f8a0a2d981583ae1a5c4e85a07f0ff750 100644 --- a/source/RobotAPI/interface/CMakeLists.txt +++ b/source/RobotAPI/interface/CMakeLists.txt @@ -110,7 +110,7 @@ set(SLICE_FILES armem/io.ice armem/commit.ice armem/memory.ice - armem/predictions.ice + armem/prediction.ice armem/query.ice armem/client.ice diff --git a/source/RobotAPI/interface/armem/predictions.ice b/source/RobotAPI/interface/armem/prediction.ice similarity index 97% rename from source/RobotAPI/interface/armem/predictions.ice rename to source/RobotAPI/interface/armem/prediction.ice index c7d4230d551004a33126d1ce6d9648a131a72633..b4f0efabe1df20ed3ca1ad4d5c3893b7d618e739 100644 --- a/source/RobotAPI/interface/armem/predictions.ice +++ b/source/RobotAPI/interface/armem/prediction.ice @@ -7,7 +7,7 @@ module armarx { module armem { - module predictions + module prediction { module data { diff --git a/source/RobotAPI/interface/armem/server/PredictingMemoryInterface.ice b/source/RobotAPI/interface/armem/server/PredictingMemoryInterface.ice index 38389367977470bee202e0a49f4ffdab36510e04..5b8b668ab72a3c4aef15720e450813891b140124 100644 --- a/source/RobotAPI/interface/armem/server/PredictingMemoryInterface.ice +++ b/source/RobotAPI/interface/armem/server/PredictingMemoryInterface.ice @@ -1,6 +1,6 @@ #pragma once -#include <RobotAPI/interface/armem/predictions.ice> +#include <RobotAPI/interface/armem/prediction.ice> #include <RobotAPI/interface/armem/query.ice> module armarx @@ -15,12 +15,12 @@ module armarx * The timestamp to requst a prediction for is encoded in the MemoryIDs. * The results are all packed into one QueryResult. */ - predictions::data::PredictionResultSeq - predict(predictions::data::PredictionRequestSeq requests); + prediction::data::PredictionResultSeq + predict(prediction::data::PredictionRequestSeq requests); /* Get the list of engines the memory offers for use in predictions. */ - predictions::data::PredictionEngineSeq getAvailableEngines(); + prediction::data::PredictionEngineSeq getAvailableEngines(); } }; }; diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 6b105d8f67ed0ba87bfd5ae17a2fcf54fea79b70..237d90fa5c71d2ad987102a443c6438691079e9f 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -51,6 +51,7 @@ set(LIB_FILES client/MemoryNameSystem.cpp + client/Prediction.cpp client/Reader.cpp client/Writer.cpp @@ -125,6 +126,7 @@ set(LIB_HEADERS client.h client/forward_declarations.h client/MemoryNameSystem.h + client/Prediction.h client/Reader.h client/Writer.h diff --git a/source/RobotAPI/libraries/armem/client/Prediction.cpp b/source/RobotAPI/libraries/armem/client/Prediction.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fa7429f2c9a7b2e0100e56688f396bf358bcb09a --- /dev/null +++ b/source/RobotAPI/libraries/armem/client/Prediction.cpp @@ -0,0 +1,110 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::armem::client + * @author phesch ( ulila at student dot kit dot edu ) + * @date 2022 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#include "Prediction.h" + +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> + +#include <RobotAPI/libraries/armem/core/ice_conversions.h> + +namespace armarx::armem::client +{ + + PredictionSettings + PredictionSettings::fromIce(const armem::prediction::data::PredictionSettings& ice) + { + return armarx::fromIce<PredictionSettings>(ice); + } + + armem::prediction::data::PredictionSettings + PredictionSettings::toIce() const + { + return armarx::toIce<armem::prediction::data::PredictionSettings>(*this); + } + + PredictionRequest + PredictionRequest::fromIce(const armem::prediction::data::PredictionRequest& ice) + { + return armarx::fromIce<PredictionRequest>(ice); + } + + armem::prediction::data::PredictionRequest + PredictionRequest::toIce() const + { + return armarx::toIce<armem::prediction::data::PredictionRequest>(*this); + } + + PredictionResult + PredictionResult::fromIce(const armem::prediction::data::PredictionResult& ice) + { + return armarx::fromIce<PredictionResult>(ice); + } + + armem::prediction::data::PredictionResult + PredictionResult::toIce() const + { + return armarx::toIce<armem::prediction::data::PredictionResult>(*this); + } + + void + toIce(armem::prediction::data::PredictionSettings& ice, const PredictionSettings& settings) + { + ice.predictionEngine = settings.predictionEngine; + } + + void + fromIce(const armem::prediction::data::PredictionSettings& ice, PredictionSettings& settings) + { + settings.predictionEngine = ice.predictionEngine; + } + + void + toIce(armem::prediction::data::PredictionRequest& ice, const PredictionRequest& request) + { + toIce(ice.memoryID, request.memoryID); + toIce(ice.settings, request.predictionSettings); + } + + void + fromIce(const armem::prediction::data::PredictionRequest& ice, PredictionRequest& request) + { + fromIce(ice.memoryID, request.memoryID); + fromIce(ice.settings, request.predictionSettings); + } + + void + toIce(armem::prediction::data::PredictionResult& ice, const PredictionResult& result) + { + ice.success = result.success; + ice.errorMessage = result.errorMessage; + ice.prediction = result.prediction->toAronDictDTO(); + } + + void + fromIce(const armem::prediction::data::PredictionResult& ice, PredictionResult& result) + { + result.success = ice.success; + result.errorMessage = ice.errorMessage; + result.prediction = aron::data::Dict::FromAronDictDTO(ice.prediction); + } + +} // namespace armarx::armem::client diff --git a/source/RobotAPI/libraries/armem/client/Prediction.h b/source/RobotAPI/libraries/armem/client/Prediction.h new file mode 100644 index 0000000000000000000000000000000000000000..8408911415af7725ed3fff6e176f1f42b688f2bb --- /dev/null +++ b/source/RobotAPI/libraries/armem/client/Prediction.h @@ -0,0 +1,71 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::armem::client + * @author phesch ( ulila at student dot kit dot edu ) + * @date 2022 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#pragma once + +#include <RobotAPI/interface/armem/prediction.h> +#include <RobotAPI/libraries/armem/core/MemoryID.h> +#include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h> + +namespace armarx::armem::client +{ + struct PredictionSettings + { + std::string predictionEngine; + + static PredictionSettings fromIce(const armem::prediction::data::PredictionSettings& ice); + armem::prediction::data::PredictionSettings toIce() const; + }; + + struct PredictionRequest + { + armem::MemoryID memoryID; + PredictionSettings predictionSettings; + + static PredictionRequest fromIce(const armem::prediction::data::PredictionRequest& ice); + armem::prediction::data::PredictionRequest toIce() const; + }; + + struct PredictionResult + { + bool success; + std::string errorMessage; + + aron::data::DictPtr prediction; + + static PredictionResult fromIce(const armem::prediction::data::PredictionResult& ice); + armem::prediction::data::PredictionResult toIce() const; + }; + + void toIce(armem::prediction::data::PredictionSettings& ice, + const PredictionSettings& settings); + void fromIce(const armem::prediction::data::PredictionSettings& ice, + PredictionSettings& settings); + + void toIce(armem::prediction::data::PredictionRequest& ice, const PredictionRequest& request); + void fromIce(const armem::prediction::data::PredictionRequest& ice, + PredictionRequest& request); + + void toIce(armem::prediction::data::PredictionResult& ice, const PredictionResult& result); + void fromIce(const armem::prediction::data::PredictionResult& ice, PredictionResult& result); + +} // namespace armarx::armem::client diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp index 85ebe639a208d0b3bb54aa06005424ff1248665d..45b08dfd35c50a75b1579f58af02ecb0855d3a83 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp @@ -117,13 +117,14 @@ namespace armarx::armem::server::plugins return {}; } - armem::predictions::data::PredictionResultSeq - ReadWritePluginUser::predict(const armem::predictions::data::PredictionRequestSeq& requests) + // PREDICTIONS + armem::prediction::data::PredictionResultSeq + ReadWritePluginUser::predict(const armem::prediction::data::PredictionRequestSeq& requests) { - armem::predictions::data::PredictionResultSeq result; + armem::prediction::data::PredictionResultSeq result; for (auto request : requests) { - armem::predictions::data::PredictionResult singleResult; + armem::prediction::data::PredictionResult singleResult; singleResult.success = false; singleResult.errorMessage = "This memory does not implement predictions."; singleResult.prediction = nullptr; @@ -132,21 +133,20 @@ namespace armarx::armem::server::plugins return result; } - armem::predictions::data::PredictionEngineSeq + armem::prediction::data::PredictionEngineSeq ReadWritePluginUser::getAvailableEngines() { return {}; } - // PREDICTIONS - armem::predictions::data::PredictionResultSeq - ReadWritePluginUser::predict(const armem::predictions::data::PredictionRequestSeq& requests, + armem::prediction::data::PredictionResultSeq + ReadWritePluginUser::predict(const armem::prediction::data::PredictionRequestSeq& requests, const ::Ice::Current& /*unused*/) { return predict(requests); } - armem::predictions::data::PredictionEngineSeq + armem::prediction::data::PredictionEngineSeq ReadWritePluginUser::getAvailableEngines(const ::Ice::Current& /*unused*/) { return getAvailableEngines(); diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h index 5b590e2b0593379aee3540f5c413c92445979342..1e0b4bc82568382ead82cbf7b337529db4f46251 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h +++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h @@ -56,11 +56,11 @@ namespace armarx::armem::server::plugins virtual armem::actions::ExecuteActionOutputSeq executeActions(const armem::actions::ExecuteActionInputSeq& inputs, const ::Ice::Current&) override; // PredictingInterface interface - virtual armem::predictions::data::PredictionResultSeq predict(const armem::predictions::data::PredictionRequestSeq& requests); - virtual armem::predictions::data::PredictionEngineSeq getAvailableEngines(); + virtual armem::prediction::data::PredictionResultSeq predict(const armem::prediction::data::PredictionRequestSeq& requests); + virtual armem::prediction::data::PredictionEngineSeq getAvailableEngines(); - virtual armem::predictions::data::PredictionResultSeq predict(const armem::predictions::data::PredictionRequestSeq& requests, const ::Ice::Current&) override; - virtual armem::predictions::data::PredictionEngineSeq getAvailableEngines(const ::Ice::Current&) override; + virtual armem::prediction::data::PredictionResultSeq predict(const armem::prediction::data::PredictionRequestSeq& requests, const ::Ice::Current&) override; + virtual armem::prediction::data::PredictionEngineSeq getAvailableEngines(const ::Ice::Current&) override; public: