diff --git a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp index d1e48cdea6aa941033225c291e50a3da312f9475..a4525305d6e0e73fef7e58d9b6c83f04a957c520 100644 --- a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp +++ b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp @@ -50,8 +50,8 @@ namespace armarx::articulated_object { ArticulatedObjectLocalizerExample::ArticulatedObjectLocalizerExample() : - articulatedObjectWriter(new ::armarx::armem::articulated_object::Writer(*this)), - articulatedObjectReader(new ::armarx::armem::articulated_object::Reader(*this)) {} + articulatedObjectWriter(new ::armarx::armem::articulated_object::Writer(memoryNameSystem)), + articulatedObjectReader(new ::armarx::armem::articulated_object::Reader(memoryNameSystem)) {} armarx::PropertyDefinitionsPtr ArticulatedObjectLocalizerExample::createPropertyDefinitions() { diff --git a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp index 87a2b7030613e8e4d8ebe8a95bb5c316235652f1..76e8cff37853683592ede4d13a473d10bceca4d7 100644 --- a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp +++ b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp @@ -76,7 +76,8 @@ namespace armarx ARMARX_IMPORTANT << "Waiting for memory '" << p.usedMemoryName << "' ..."; try { - armem::client::ComponentPluginUser::setMemoryServer(memoryNameSystem.useServer(p.usedMemoryName)); + memoryReader = memoryNameSystem.useReader(p.usedMemoryName); + memoryWriter = memoryNameSystem.useWriter(p.usedMemoryName); } catch (const armem::error::CouldNotResolveMemoryServer& e) { diff --git a/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp b/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp index 85ca85f48ca62c7bc686bd9286d52fae5480ebc7..6650e573785cce732f0f2bbe7c128aa34fc58626 100644 --- a/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp +++ b/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp @@ -31,7 +31,7 @@ namespace armarx::robot_state { VirtualRobotReaderExampleClient::VirtualRobotReaderExampleClient() : - virtualRobotReader(*this) {} + virtualRobotReader(this->memoryNameSystem) {} armarx::PropertyDefinitionsPtr VirtualRobotReaderExampleClient::createPropertyDefinitions() { diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 22399191b3ec0ad3e87468f615662fefdf8e7dd9..97695cb636128cea00e129ddf71e6ff41da626dd 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -168,6 +168,7 @@ set(LIB_HEADERS client/Writer.h client/WriterComponentPlugin.h + client/query.h client/Query.h client/query/Builder.h client/query/query_fns.h diff --git a/source/RobotAPI/libraries/armem/client.h b/source/RobotAPI/libraries/armem/client.h index baf0ca232e5447048939aa062ee122a1d4f936b2..834d62ab45d88d18e4277929c47acd55c5825263 100644 --- a/source/RobotAPI/libraries/armem/client.h +++ b/source/RobotAPI/libraries/armem/client.h @@ -1,6 +1,8 @@ #pragma once #include "client/ComponentPlugin.h" +#include "client/MemoryNameSystem.h" +#include "client/MemoryNameSystemComponentPlugin.h" #include "client/Query.h" #include "client/query/Builder.h" #include "client/query/query_fns.h" diff --git a/source/RobotAPI/libraries/armem/client/query.h b/source/RobotAPI/libraries/armem/client/query.h new file mode 100644 index 0000000000000000000000000000000000000000..99606089e06952dd2f5006b628c69f3644acd674 --- /dev/null +++ b/source/RobotAPI/libraries/armem/client/query.h @@ -0,0 +1,6 @@ +#pragma once + +#include "Query.h" +#include "query/Builder.h" +#include "query/query_fns.h" +#include "query/selectors.h" 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 d11b7421313e4586e4347b31c9f8c79c09f169f5..1457fc466ae12031d22482703c0037787c6d0a62 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp @@ -3,14 +3,15 @@ #include <mutex> #include <optional> -#include "ArmarXCore/core/logging/Logging.h" +#include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/PackagePath.h> -#include "RobotAPI/libraries/armem/client/query/Builder.h" -#include "RobotAPI/libraries/armem/core/Time.h" -#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h" -#include "RobotAPI/libraries/armem_robot/aron_conversions.h" -#include "RobotAPI/libraries/armem_robot/robot_conversions.h" +#include <RobotAPI/libraries/armem/client/query/Builder.h> +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/core/Time.h> +#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h> +#include <RobotAPI/libraries/armem_robot/aron_conversions.h> +#include <RobotAPI/libraries/armem_robot/robot_conversions.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> namespace fs = ::std::filesystem; @@ -18,7 +19,9 @@ namespace fs = ::std::filesystem; namespace armarx::armem::articulated_object { - Reader::Reader(armem::ClientReaderComponentPluginUser& component) : component(component) {} + Reader::Reader(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) + {} void Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { @@ -41,17 +44,17 @@ namespace armarx::armem::articulated_object { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "Reader: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = component.useMemory(properties.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName; - - memoryReader.setReadingMemory(result.proxy); - armem::MemoryID id = armem::MemoryID(); id.memoryName = properties.memoryName; id.coreSegmentName = properties.coreClassSegmentName; @@ -321,4 +324,4 @@ namespace armarx::armem::articulated_object return descriptions; } -} // namespace armarx::armem::articulated_object \ No newline at end of file +} // namespace armarx::armem::articulated_object diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h index 21a4591cd2f1f5c9a125177e50285b3802f561b9..b4c908a3629e7dbecaddeb668dd95442be33a310 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h @@ -24,18 +24,21 @@ #include <mutex> #include <optional> -#include "RobotAPI/libraries/armem/client.h" -#include "RobotAPI/libraries/armem/client/Reader.h" +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/Reader.h> #include "interfaces.h" + namespace armarx::armem::articulated_object { class Reader: virtual public ReaderInterface { public: - Reader(armem::ClientReaderComponentPluginUser& component); + Reader(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~Reader() = default; void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def); @@ -72,11 +75,11 @@ namespace armarx::armem::articulated_object const std::string propertyPrefix = "mem.obj.articulated."; + armem::client::MemoryNameSystem memoryNameSystem; + armem::client::Reader memoryReader; std::mutex memoryWriterMutex; - - armem::ClientReaderComponentPluginUser& component; }; -} // namespace armarx::armem::articulated_object \ No newline at end of file +} // namespace armarx::armem::articulated_object 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 9062747de124ac3db5ba37e3f14f2b8cdfc7b692..d74c8d86593df0f7d5a3ee5617403a1ccd1cc769 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp @@ -5,20 +5,24 @@ #include <mutex> #include <optional> -#include "ArmarXCore/core/logging/Logging.h" +#include <ArmarXCore/core/logging/Logging.h> -#include "RobotAPI/libraries/armem/core/MemoryID.h" -#include "RobotAPI/libraries/armem_objects/aron_conversions.h" -#include "RobotAPI/libraries/armem_robot/aron_conversions.h" +#include <RobotAPI/libraries/armem/core/MemoryID.h> +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/client/query.h> +#include <RobotAPI/libraries/armem_objects/aron_conversions.h> +#include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem/core/aron_conversions.h> -#include "RobotAPI/libraries/armem_robot/robot_conversions.h" +#include <RobotAPI/libraries/armem_robot/robot_conversions.h> namespace armarx::armem::articulated_object { - Writer::Writer(armem::ClientComponentPluginUser& component): component(component) {} + Writer::Writer(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) + {} void Writer::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { @@ -41,18 +45,18 @@ namespace armarx::armem::articulated_object { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "Writer: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = component.useMemory(properties.memoryName); - if (not result.success) + try + { + memoryWriter = memoryNameSystem.useWriter(properties.memoryName); + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) { - ARMARX_ERROR << result.errorMessage; + ARMARX_ERROR << e.what(); return; } - ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName; - - memoryWriter.setWritingMemory(result.proxy); - memoryReader.setReadingMemory(result.proxy); - const auto resultCoreClassSegment = memoryWriter.addSegment(properties.coreClassSegmentName, properties.providerName); const auto resultCoreInstanceSegmentName = @@ -323,4 +327,4 @@ namespace armarx::armem::articulated_object } -} // namespace armarx::armem::articulated_object \ No newline at end of file +} // namespace armarx::armem::articulated_object diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h index f2031dd402e546a21a80a17c28f8b2e4107f9059..d9ce15069e8fe2e23f8f841a38323d66e0080d19 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h @@ -23,9 +23,11 @@ #include <mutex> -#include "RobotAPI/libraries/armem/client/Reader.h" -#include "RobotAPI/libraries/armem/client/Writer.h" -#include "RobotAPI/libraries/armem/client.h" +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/Reader.h> +#include <RobotAPI/libraries/armem/client/Writer.h> #include "interfaces.h" @@ -37,7 +39,7 @@ namespace armarx::armem::articulated_object virtual public WriterInterface { public: - Writer(armem::ClientComponentPluginUser& component); + Writer(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~Writer() = default; @@ -77,6 +79,8 @@ namespace armarx::armem::articulated_object const std::string propertyPrefix = "mem.obj.articulated."; + armem::client::MemoryNameSystem memoryNameSystem; + armem::client::Writer memoryWriter; std::mutex memoryWriterMutex; @@ -85,9 +89,7 @@ namespace armarx::armem::articulated_object // key: name of object: RobotDescription::name std::unordered_map<std::string, MemoryID> knownObjects; - - armem::ClientComponentPluginUser& component; }; -} // namespace armarx::armem::articulated_object \ No newline at end of file +} // namespace armarx::armem::articulated_object diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp index e3ce169b9ef41292b7ad565f94b74faf141ee7ad..64d8003fb7fe06dd8bd819f71bcbfc97357f6929 100644 --- a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp @@ -3,19 +3,21 @@ #include <mutex> #include <optional> -#include "ArmarXCore/core/logging/Logging.h" +#include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/PackagePath.h> -#include "RobotAPI/libraries/armem/core/Time.h" -#include "RobotAPI/libraries/armem/client/query/Builder.h" -#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h" -#include "RobotAPI/libraries/armem/util/util.h" -#include "RobotAPI/libraries/armem_robot/robot_conversions.h" -#include "RobotAPI/libraries/armem_robot/aron_conversions.h" +#include <RobotAPI/libraries/armem/core/Time.h> +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/client/query/Builder.h> +#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h> +#include <RobotAPI/libraries/armem/util/util.h> +#include <RobotAPI/libraries/armem_robot/robot_conversions.h> +#include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem_objects/aron/Attachment.aron.generated.h> #include <RobotAPI/libraries/armem_objects/aron_conversions.h> -#include "RobotAPI/libraries/aron/common/aron_conversions.h" +#include <RobotAPI/libraries/aron/common/aron_conversions.h> + namespace armarx::armem::attachment { @@ -72,7 +74,9 @@ namespace armarx::armem::attachment } } // namespace - Reader::Reader(armem::ClientReaderComponentPluginUser& component) : component(component) {} + Reader::Reader(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) + {} void Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { @@ -92,16 +96,16 @@ namespace armarx::armem::attachment { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "Reader: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = component.useMemory(properties.memoryName); - if (not result.success) + try + { + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) { - ARMARX_ERROR << result.errorMessage; + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName; - - memoryReader.setReadingMemory(result.proxy); } @@ -207,4 +211,4 @@ namespace armarx::armem::attachment -} // namespace armarx::armem::attachment \ No newline at end of file +} // namespace armarx::armem::attachment diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h index bcfb3d1a135a2446f255a0038a2aaad85c2a3412..9149cbd5a52aedc03cea2a1af8482883637960cb 100644 --- a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h +++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h @@ -24,16 +24,19 @@ #include <mutex> #include <optional> -#include "RobotAPI/libraries/armem/client.h" -#include "RobotAPI/libraries/armem/client/Reader.h" -#include "RobotAPI/libraries/armem_objects/types.h" +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/Reader.h> +#include <RobotAPI/libraries/armem_objects/types.h> + namespace armarx::armem::attachment { class Reader { public: - Reader(armem::ClientReaderComponentPluginUser& component); + Reader(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~Reader() = default; void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def); @@ -56,11 +59,10 @@ namespace armarx::armem::attachment const std::string propertyPrefix = "mem.obj.attachment."; + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Reader memoryReader; std::mutex memoryWriterMutex; - - armem::ClientReaderComponentPluginUser& component; }; -} // namespace armarx::armem::attachment \ No newline at end of file +} // namespace armarx::armem::attachment diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp index f4d16070b84e4d29aca1742ce0356fb0c69ea5b0..dc520d22601308fd780a09448f69c2a82d8f1948 100644 --- a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp @@ -5,20 +5,23 @@ #include <mutex> #include <optional> -#include "ArmarXCore/core/logging/Logging.h" +#include <ArmarXCore/core/logging/Logging.h> -#include "RobotAPI/libraries/armem/core/MemoryID.h" -#include "RobotAPI/libraries/armem_objects/aron_conversions.h" -#include "RobotAPI/libraries/armem_robot/aron_conversions.h" +#include <RobotAPI/libraries/armem/core/MemoryID.h> +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem_objects/aron_conversions.h> +#include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem/core/aron_conversions.h> -#include "RobotAPI/libraries/armem_robot/robot_conversions.h" +#include <RobotAPI/libraries/armem_robot/robot_conversions.h> namespace armarx::armem::attachment { - Writer::Writer(armem::ClientComponentPluginUser& component): component(component) {} + Writer::Writer(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) + {} void Writer::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { @@ -38,17 +41,17 @@ namespace armarx::armem::attachment { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "Writer: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = component.useMemory(properties.memoryName); - if (not result.success) + try + { + memoryWriter = memoryNameSystem.useWriter(properties.memoryName); + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) { - ARMARX_ERROR << result.errorMessage; + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName; - - memoryWriter.setWritingMemory(result.proxy); - memoryReader.setReadingMemory(result.proxy); } @@ -141,4 +144,4 @@ namespace armarx::armem::attachment -} // namespace armarx::armem::attachment \ No newline at end of file +} // namespace armarx::armem::attachment diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h index f20421d4b27d9e2fc10e106e238a9684fca9d2cf..df85beca85be4523f2010a9c0b743517aae297a4 100644 --- a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h +++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h @@ -23,13 +23,14 @@ #include <mutex> -#include "RobotAPI/libraries/armem/client/Reader.h" -#include "RobotAPI/libraries/armem/client/Writer.h" -#include "RobotAPI/libraries/armem/client.h" +#include <RobotAPI/libraries/armem/client/Reader.h> +#include <RobotAPI/libraries/armem/client/Writer.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> -#include "RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h" +#include <RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h> + +#include <RobotAPI/libraries/armem_objects/types.h> -#include "RobotAPI/libraries/armem_objects/types.h" namespace armarx::armem::attachment { @@ -37,7 +38,7 @@ namespace armarx::armem::attachment class Writer { public: - Writer(armem::ClientComponentPluginUser& component); + Writer(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~Writer() = default; @@ -60,14 +61,14 @@ namespace armarx::armem::attachment const std::string propertyPrefix = "mem.obj.articulated."; + armem::client::MemoryNameSystem memoryNameSystem; + armem::client::Writer memoryWriter; std::mutex memoryWriterMutex; armem::client::Reader memoryReader; std::mutex memoryReaderMutex; - - armem::ClientComponentPluginUser& component; }; -} // namespace armarx::armem::attachment \ No newline at end of file +} // namespace armarx::armem::attachment diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp index fd8250c5b2b086f3869729e2bf6836e5e3c5dc32..a2394a26a15e6059005b30f634e3cbdbb9e83cf2 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp @@ -37,6 +37,7 @@ #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/selectors.h> +#include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/workingmemory/Memory.h> #include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h> #include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h> @@ -52,9 +53,10 @@ namespace armarx::armem { - MappingDataReader::MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient) - : memoryClient(memoryClient) {} - + MappingDataReader::MappingDataReader(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) + { + } MappingDataReader::~MappingDataReader() = default; void MappingDataReader::registerPropertyDefinitions( @@ -74,19 +76,18 @@ namespace armarx::armem void MappingDataReader::connect() { // Wait for the memory to become available and add it as dependency. - ARMARX_IMPORTANT << "TransformReader: Waiting for memory '" + ARMARX_IMPORTANT << "MappingDataReader: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = memoryClient.useMemory(properties.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryReader = memoryNameSystem.useReader(MemoryID().withMemoryName(properties.memoryName)); + ARMARX_IMPORTANT << "MappingDataReader: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "TransformReader: Connected to memory '" - << properties.memoryName; - - memoryReader.setReadingMemory(result.proxy); } armem::client::query::Builder diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h index aee783764f4b5720e4ae0d8d69fbf6faed297e98..39332417b0ff92fa7aa6149209d768c549bc03fc 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h +++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h @@ -30,6 +30,7 @@ #include <RobotAPI/libraries/armem/client.h> #include <RobotAPI/libraries/armem/client/Reader.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> #include <RobotAPI/libraries/armem_robot_mapping/types.h> @@ -62,8 +63,8 @@ namespace armarx::armem class MappingDataReader { public: - MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient); + MappingDataReader(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~MappingDataReader(); void connect(); @@ -107,6 +108,7 @@ namespace armarx::armem private: + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Reader memoryReader; // Properties @@ -118,8 +120,6 @@ namespace armarx::armem const std::string propertyPrefix = "mem.mapping."; - - armem::ClientReaderComponentPluginUser& memoryClient; }; } // namespace armarx::armem diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp index 351d71398a6959f346aadf45c6c604edcd865a53..82a365295236041f9bc457eaf34acc237f81ce18 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp @@ -1,14 +1,15 @@ #include "MappingDataWriter.h" -#include "RobotAPI/libraries/armem_robot_mapping/aron_conversions.h" +#include <RobotAPI/libraries/armem_robot_mapping/aron_conversions.h> #include <RobotAPI/libraries/armem_robot_mapping/aron/LaserScan.aron.generated.h> +#include <RobotAPI/libraries/armem/core/error.h> namespace armarx::armem { - MappingDataWriter::MappingDataWriter(armem::ClientWriterComponentPluginUser& component) - : component(component) {} + MappingDataWriter::MappingDataWriter(const armem::client::MemoryNameSystem& memoryNameSystem) + : memoryNameSystem(memoryNameSystem) {} MappingDataWriter::~MappingDataWriter() = default; @@ -30,16 +31,16 @@ namespace armarx::armem // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "MappingDataWriter: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = component.useMemory(properties.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryWriter = memoryNameSystem.useWriter(MemoryID().withMemoryName(properties.memoryName)); + ARMARX_IMPORTANT << "MappingDataWriter: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName; - - memoryWriter.setWritingMemory(result.proxy); } @@ -93,4 +94,4 @@ namespace armarx::armem return updateResult.success; } -} // namespace armarx::armem \ No newline at end of file +} // namespace armarx::armem diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h index e5de996746b7d54b46faa891cf2cd26007fbaf02..c7d8ba57719bf7d6004040d6487aa5cc32c5a621 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h +++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h @@ -24,10 +24,12 @@ #include <mutex> +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + #include <RobotAPI/interface/units/LaserScannerUnit.h> #include <RobotAPI/libraries/armem/client/Writer.h> -#include <RobotAPI/libraries/armem/client.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> namespace armarx::armem @@ -47,7 +49,8 @@ namespace armarx::armem class MappingDataWriter { public: - MappingDataWriter(armem::ClientWriterComponentPluginUser& component); + + MappingDataWriter(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~MappingDataWriter(); void connect(); @@ -62,6 +65,7 @@ namespace armarx::armem bool storeSensorData(const LaserScan& laserScan, const std::string& frame, const std::string& agentName, const std::int64_t& timestamp); private: + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Writer memoryWriter; // Properties @@ -75,8 +79,6 @@ namespace armarx::armem const std::string propertyPrefix = "mem.mapping."; - - armem::ClientWriterComponentPluginUser& component; }; diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp index 2d8319dc9f6517c41e9a38225ad4dbd11b9ae607..07fa4333c37a80b52569d1c54e3e4e843b13e4ef 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp @@ -3,25 +3,27 @@ #include <mutex> #include <optional> -#include "ArmarXCore/core/exceptions/LocalException.h" -#include "ArmarXCore/core/logging/Logging.h" +#include <ArmarXCore/core/exceptions/LocalException.h> +#include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/PackagePath.h> -#include "RobotAPI/libraries/armem/client/query/Builder.h" -#include "RobotAPI/libraries/armem/core/Time.h" -#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h" -#include "RobotAPI/libraries/armem_robot/aron_conversions.h" -#include "RobotAPI/libraries/armem_robot/robot_conversions.h" +#include <RobotAPI/libraries/armem/client/query/Builder.h> +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/core/Time.h> +#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h> +#include <RobotAPI/libraries/armem_robot/aron_conversions.h> +#include <RobotAPI/libraries/armem_robot/robot_conversions.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h> + namespace fs = ::std::filesystem; namespace armarx::armem::robot_state { - RobotReader::RobotReader(armem::ClientReaderComponentPluginUser& component) : - memoryClient(component), transformReader(component) + RobotReader::RobotReader(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem), transformReader(memoryNameSystem) { } @@ -42,16 +44,16 @@ namespace armarx::armem::robot_state // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "RobotReader: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = memoryClient.useMemory(properties.memoryName); - if (not result.success) + try + { + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "RobotReader: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) { - ARMARX_ERROR << result.errorMessage; + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "RobotReader: Connected to memory '" << properties.memoryName; - - memoryReader.setReadingMemory(result.proxy); } std::optional<robot::Robot> RobotReader::get(const std::string& name, @@ -327,4 +329,4 @@ namespace armarx::armem::robot_state return robot::convertRobotDescription(instance); } -} // namespace armarx::armem::robot_state \ No newline at end of file +} // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h index b5bd01e5d182a88cc6d36e8c8112e1683c017d16..9847996cd08621f20e7e35276f5141ff0589f20c 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h @@ -24,13 +24,14 @@ #include <mutex> #include <optional> -#include "RobotAPI/libraries/armem/client.h" -#include "RobotAPI/libraries/armem/client/Reader.h" +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/Reader.h> -#include "RobotAPI/libraries/armem_robot/client/interfaces.h" -#include "RobotAPI/libraries/armem_robot/types.h" +#include <RobotAPI/libraries/armem_robot/client/interfaces.h> +#include <RobotAPI/libraries/armem_robot/types.h> + +#include <RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h> -#include "RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h" namespace armarx::armem::robot_state { @@ -43,7 +44,7 @@ namespace armarx::armem::robot_state class RobotReader : virtual public robot::ReaderInterface { public: - RobotReader(armem::ClientReaderComponentPluginUser& component); + RobotReader(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~RobotReader() = default; void connect(); @@ -89,12 +90,11 @@ namespace armarx::armem::robot_state const std::string propertyPrefix = "mem.robot_state."; + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Reader memoryReader; std::mutex memoryWriterMutex; - armem::ClientReaderComponentPluginUser& memoryClient; - client::robot_state::localization::TransformReader transformReader; }; -} // namespace armarx::armem::robot_state \ No newline at end of file +} // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp index a3655fee1ae2597b768424f0b89fd581a1bb0680..a59d7c6564e588a8f97a3b8d42b5538042567327 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp @@ -14,8 +14,8 @@ namespace armarx::armem::robot_state { - VirtualRobotReader::VirtualRobotReader(armem::ClientReaderComponentPluginUser& component) : - RobotReader(component) + VirtualRobotReader::VirtualRobotReader(const armem::client::MemoryNameSystem& memoryNameSystem) : + RobotReader(memoryNameSystem) { } @@ -83,4 +83,4 @@ namespace armarx::armem::robot_state } -} // namespace armarx::armem::robot_state \ No newline at end of file +} // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h index a280e71b6132f065aec28a008ebb5ab803845dad..373cacf7bedee74c7174c7a5f31a47a4908f82e1 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h @@ -27,6 +27,7 @@ #include <VirtualRobot/VirtualRobot.h> #include <VirtualRobot/XML/RobotIO.h> + namespace armarx::armem::robot_state { /** @@ -40,7 +41,7 @@ namespace armarx::armem::robot_state class VirtualRobotReader : virtual public RobotReader { public: - VirtualRobotReader(armem::ClientReaderComponentPluginUser& component); + VirtualRobotReader(const armem::client::MemoryNameSystem& memoryNameSystem); virtual ~VirtualRobotReader() = default; void connect(); @@ -61,4 +62,4 @@ namespace armarx::armem::robot_state VirtualRobot::RobotIO::RobotDescription::eStructure); }; -} // namespace armarx::armem::robot_state \ No newline at end of file +} // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp index 8a37b2dec14cfc6721b7458fce984dac59bdfb21..cdbfc5a366ca6c019bd0afa18d8af160243ec893 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp @@ -47,6 +47,7 @@ // this package #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/query_fns.h> +#include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/workingmemory/Memory.h> #include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h> #include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h> @@ -61,7 +62,8 @@ namespace armarx::armem::client::robot_state::localization { - TransformReader::TransformReader(armem::ClientReaderComponentPluginUser& memoryClient) : memoryClient(memoryClient) {} + TransformReader::TransformReader(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) {} TransformReader::~TransformReader() = default; @@ -83,16 +85,16 @@ namespace armarx::armem::client::robot_state::localization // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "TransformReader: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = memoryClient.useMemory(properties.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryReader = memoryNameSystem.useReader(properties.memoryName); + ARMARX_IMPORTANT << "TransformReader: Connected to memory '" << properties.memoryName; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "TransformReader: Connected to memory '" << properties.memoryName; - - memoryReader.setReadingMemory(result.proxy); } TransformResult TransformReader::getGlobalPose(const std::string& agentName, diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h index 2d1d98ddf82c5c137b934b3be91079bb87298503..14186e55199f89ad0bb5ea1222200cf2fc85120a 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h @@ -22,10 +22,9 @@ #pragma once +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> #include <RobotAPI/libraries/armem/client/Reader.h> -#include <RobotAPI/libraries/armem/client.h> - #include "interfaces.h" namespace armarx::armem::client::robot_state::localization @@ -45,7 +44,7 @@ namespace armarx::armem::client::robot_state::localization virtual public TransformReaderInterface { public: - TransformReader(armem::ClientReaderComponentPluginUser& memoryClient); + TransformReader(const armem::client::MemoryNameSystem& memoryNameSystem); ~TransformReader() override; @@ -61,6 +60,7 @@ namespace armarx::armem::client::robot_state::localization private: + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Reader memoryReader; // Properties @@ -72,8 +72,5 @@ namespace armarx::armem::client::robot_state::localization const std::string propertyPrefix = "mem.robot_state."; - - armem::ClientReaderComponentPluginUser& memoryClient; - }; } // namespace armarx::armem::client::robot_state::localization 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 2327c141840bc74f8b43ab14df03b03f2b98ccdf..87f9ac31d7161f6e53ec877c94bae9dcb15ac048 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp @@ -46,14 +46,16 @@ #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron_conversions.h> -#include "RobotAPI/libraries/armem/core/MemoryID.h" +#include <RobotAPI/libraries/armem/core/MemoryID.h> +#include <RobotAPI/libraries/armem/core/error.h> namespace armarx::armem::client::robot_state::localization { - TransformWriter::TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient) : memoryClient(memoryClient) {} + TransformWriter::TransformWriter(const armem::client::MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) {} TransformWriter::~TransformWriter() = default; @@ -73,16 +75,16 @@ namespace armarx::armem::client::robot_state::localization // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "TransformWriter: Waiting for memory '" << properties.memoryName << "' ..."; - auto result = memoryClient.useMemory(properties.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryWriter = memoryNameSystem.useWriter(properties.memoryName); + ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName; - - memoryWriter.setWritingMemory(result.proxy); } bool TransformWriter::commitTransform(const ::armarx::armem::robot_state::Transform& transform) diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h index 0402d8188e52b9a967805a7ddb9ca5df9c14320c..d0895f3b8957d56548100f9544fdb7e282416a5a 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h @@ -24,13 +24,12 @@ #include <mutex> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> #include <RobotAPI/libraries/armem/client/Writer.h> -// #include <RobotAPI/libraries/armem/client/MemoryConnector.h> - -#include <RobotAPI/libraries/armem/client.h> #include "interfaces.h" + namespace armarx::armem::client::robot_state::localization { @@ -49,8 +48,8 @@ namespace armarx::armem::client::robot_state::localization virtual public TransformWriterInterface { public: - TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient); + TransformWriter(const armem::client::MemoryNameSystem& memoryNameSystem); ~TransformWriter() override; // TransformWriterInterface @@ -63,6 +62,8 @@ namespace armarx::armem::client::robot_state::localization bool commitTransform(const ::armarx::armem::robot_state::Transform& transform) override; private: + + armem::client::MemoryNameSystem memoryNameSystem; armem::client::Writer memoryWriter; std::mutex memoryWriterMutex; @@ -74,8 +75,6 @@ namespace armarx::armem::client::robot_state::localization } properties; const std::string propertyPrefix = "mem.robot_state."; - - armem::ClientWriterComponentPluginUser& memoryClient; }; } // namespace armarx::armem::client::robot_state::localization