From 04bce89fb74fb29c6e00f0fc49589cbd4b85dd00 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 19 Aug 2021 11:35:44 +0200 Subject: [PATCH] Use MemoryIDs instead of strings --- .../GraphImportExport/GraphImportExport.cpp | 66 +++++++++---------- .../GraphImportExport/GraphImportExport.h | 19 +++--- source/armarx/navigation/graph/CMakeLists.txt | 1 + source/armarx/navigation/graph/constants.cpp | 4 +- source/armarx/navigation/graph/constants.h | 4 +- .../armarx/navigation/location/CMakeLists.txt | 3 + .../armarx/navigation/location/constants.cpp | 4 +- source/armarx/navigation/location/constants.h | 4 +- 8 files changed, 56 insertions(+), 49 deletions(-) diff --git a/source/armarx/navigation/components/GraphImportExport/GraphImportExport.cpp b/source/armarx/navigation/components/GraphImportExport/GraphImportExport.cpp index 14b6704b..96a69c23 100644 --- a/source/armarx/navigation/components/GraphImportExport/GraphImportExport.cpp +++ b/source/armarx/navigation/components/GraphImportExport/GraphImportExport.cpp @@ -26,6 +26,7 @@ #include <armarx/navigation/location/aron/Location.aron.generated.h> #include <armarx/navigation/location/constants.h> +#include <armarx/navigation/graph/Writer.h> #include <armarx/navigation/graph/aron/Graph.aron.generated.h> #include <armarx/navigation/graph/constants.h> @@ -50,9 +51,8 @@ namespace armarx::nav GraphImportExport::GraphImportExport() { - properties.memoryName = "Navigation"; - properties.locationCoreSegmentName = loc::coreSegmentName; - properties.graphCoreSegmentName = graph::coreSegmentName; + properties.locationCoreSegmentID = loc::coreSegmentID; + properties.graphCoreSegmentID = graph::coreSegmentID; } @@ -83,7 +83,9 @@ namespace armarx::nav { proxies.graphSegment = proxies.priorKnowledge->getGraphSegment(); } - proxies.navigationWriter = memoryNameSystem.useWriter(armem::MemoryID(properties.memoryName)); + proxies.locationWriter = memoryNameSystem.useWriter(properties.locationCoreSegmentID); + proxies.graphWriter = memoryNameSystem.useWriter(properties.graphCoreSegmentID); + // Setup and start the remote GUI. refreshScenes(); @@ -183,11 +185,11 @@ namespace armarx::nav if (tab.locationsClearArMemButton.wasClicked()) { - clearArMemProviderSegment(getLocationProviderSegmentID()); + clearArMemProviderSegment(proxies.locationWriter, getLocationProviderSegmentID()); } if (tab.graphClearArMemButton.wasClicked()) { - clearArMemProviderSegment(getGraphProviderSegmentID()); + clearArMemProviderSegment(proxies.graphWriter, getGraphProviderSegmentID()); } } @@ -199,21 +201,6 @@ namespace armarx::nav } - void GraphImportExport::clearArMemProviderSegment(const armem::MemoryID& providerSegmentID) - { - const bool clearWhenExists = true; - auto result = proxies.navigationWriter.addSegment(providerSegmentID, clearWhenExists); - if (result.success) - { - ARMARX_IMPORTANT << "Cleared ArMem provider segment " << providerSegmentID << "."; - } - else - { - ARMARX_WARNING << result.errorMessage; - } - } - - void GraphImportExport::locationsMemoryxToArmem(const std::string& sceneName) { const armem::Time time = armem::Time::now(); @@ -260,7 +247,7 @@ namespace armarx::nav if (not tab.dryRun.getValue()) { - armem::CommitResult result = proxies.navigationWriter.commit(commit); + armem::CommitResult result = proxies.locationWriter.commit(commit); if (result.allSuccess()) { ARMARX_IMPORTANT << "Successfully exported " << result.results.size() << " locations from MemoryX to ArMem."; @@ -289,11 +276,6 @@ namespace armarx::nav memoryx::GraphNodeBaseList graphNodes = proxies.graphSegment->getNodesByScene(sceneName); nav::graph::Graph graph = toArmemGraph(graphNodes); - // Build ARON Graph - nav::graph::arondto::Graph aron; - toAron(aron, graph); - - if (tab.visuEnabled.getValue()) { nav::graph::GraphVisu visu; @@ -304,6 +286,9 @@ namespace armarx::nav arviz.commit(layer); } + // Build ARON Graph + nav::graph::arondto::Graph aron; + toAron(aron, graph); // Build commit const armem::Time time = armem::Time::now(); @@ -314,7 +299,7 @@ namespace armarx::nav if (not tab.dryRun.getValue()) { - armem::EntityUpdateResult result = proxies.navigationWriter.commit(update); + armem::EntityUpdateResult result = proxies.graphWriter.commit(update); if (result.success) { ARMARX_IMPORTANT << "Successfully exported graph '" << sceneName << "' from MemoryX to ArMem."; @@ -338,20 +323,33 @@ namespace armarx::nav } + void GraphImportExport::clearArMemProviderSegment(armem::client::Writer& writer, const armem::MemoryID& providerSegmentID) + { + const bool clearWhenExists = true; + auto result = writer.addSegment(providerSegmentID, clearWhenExists); + if (result.success) + { + ARMARX_IMPORTANT << "Cleared ArMem provider segment " << providerSegmentID << "."; + } + else + { + ARMARX_WARNING << result.errorMessage; + } + } + + armem::MemoryID GraphImportExport::getLocationProviderSegmentID() { - return armem::MemoryID(properties.memoryName, - properties.locationCoreSegmentName, - tab.providerSegmentLine.getValue()); + return properties.locationCoreSegmentID.withProviderSegmentName(tab.providerSegmentLine.getValue()); } + armem::MemoryID GraphImportExport::getGraphProviderSegmentID() { - return armem::MemoryID(properties.memoryName, - properties.graphCoreSegmentName, - tab.providerSegmentLine.getValue()); + return properties.graphCoreSegmentID.withProviderSegmentName(tab.providerSegmentLine.getValue()); } + nav::graph::Graph GraphImportExport::toArmemGraph(const memoryx::GraphNodeBaseList& graphNodes) { nav::graph::Graph graph; diff --git a/source/armarx/navigation/components/GraphImportExport/GraphImportExport.h b/source/armarx/navigation/components/GraphImportExport/GraphImportExport.h index efd4aed1..949ad673 100644 --- a/source/armarx/navigation/components/GraphImportExport/GraphImportExport.h +++ b/source/armarx/navigation/components/GraphImportExport/GraphImportExport.h @@ -24,12 +24,13 @@ #include <armarx/navigation/graph/forward_declarations.h> -#include <MemoryX/interface/components/PriorKnowledgeInterface.h> +#include <MemoryX/interface/memorytypes/MemoryEntities.h> #include <MemoryX/interface/memorytypes/MemorySegments.h> +#include <MemoryX/interface/components/PriorKnowledgeInterface.h> #include <MemoryX/interface/components/GraphNodePoseResolverInterface.h> -#include <MemoryX/interface/memorytypes/MemoryEntities.h> -#include <RobotAPI/libraries/armem/client/ComponentPlugin.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystemComponentPlugin.h> +#include <RobotAPI/libraries/armem/client/Writer.h> #include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h> #include <ArmarXGui/libraries/ArmarXGuiComponentPlugins/LightweightRemoteGuiComponentPlugin.h> @@ -57,7 +58,7 @@ namespace armarx::nav , virtual public armarx::DebugObserverComponentPluginUser , virtual public armarx::LightweightRemoteGuiComponentPluginUser , virtual public armarx::ArVizComponentPluginUser - , virtual public armarx::armem::client::ComponentPluginUser + , virtual public armarx::armem::client::MemoryNameSystemComponentPluginUser { public: @@ -105,7 +106,7 @@ namespace armarx::nav void graphMemoryxToArmem(const std::string& sceneName); void graphArmemToMemoryx(const std::string& sceneName); - void clearArMemProviderSegment(const armem::MemoryID& providerSegmentID); + void clearArMemProviderSegment(armem::client::Writer& writer, const armem::MemoryID& providerSegmentID); armem::MemoryID getLocationProviderSegmentID(); armem::MemoryID getGraphProviderSegmentID(); @@ -121,7 +122,8 @@ namespace armarx::nav memoryx::GraphNodePoseResolverInterfacePrx graphNodePoseResolver; memoryx::GraphMemorySegmentBasePrx graphSegment; - armem::client::Writer navigationWriter; + armem::client::Writer locationWriter; + armem::client::Writer graphWriter; }; Proxies proxies; @@ -129,9 +131,8 @@ namespace armarx::nav /// Properties shown in the Scenario GUI. struct Properties { - std::string memoryName; - std::string locationCoreSegmentName; - std::string graphCoreSegmentName; + armem::MemoryID locationCoreSegmentID; + armem::MemoryID graphCoreSegmentID; }; Properties properties; diff --git a/source/armarx/navigation/graph/CMakeLists.txt b/source/armarx/navigation/graph/CMakeLists.txt index 530fe93e..a53eb52b 100644 --- a/source/armarx/navigation/graph/CMakeLists.txt +++ b/source/armarx/navigation/graph/CMakeLists.txt @@ -12,6 +12,7 @@ armarx_add_library( # RobotAPI aron + armem SOURCES constants.cpp diff --git a/source/armarx/navigation/graph/constants.cpp b/source/armarx/navigation/graph/constants.cpp index 543952ee..f862be9c 100644 --- a/source/armarx/navigation/graph/constants.cpp +++ b/source/armarx/navigation/graph/constants.cpp @@ -1,9 +1,11 @@ #include "constants.h" +#include <RobotAPI/libraries/armem/core/MemoryID.h> + namespace armarx::nav { - const std::string graph::coreSegmentName = "Graph"; + const armem::MemoryID graph::coreSegmentID { "Navigation", "Graph" }; } diff --git a/source/armarx/navigation/graph/constants.h b/source/armarx/navigation/graph/constants.h index 7e518c7e..ccb1cc7e 100644 --- a/source/armarx/navigation/graph/constants.h +++ b/source/armarx/navigation/graph/constants.h @@ -21,12 +21,12 @@ #pragma once -#include <string> +#include <RobotAPI/libraries/armem/core/forward_declarations.h> namespace armarx::nav::graph { - extern const std::string coreSegmentName; + extern const armem::MemoryID coreSegmentID; } diff --git a/source/armarx/navigation/location/CMakeLists.txt b/source/armarx/navigation/location/CMakeLists.txt index a23eb4a2..675377bd 100644 --- a/source/armarx/navigation/location/CMakeLists.txt +++ b/source/armarx/navigation/location/CMakeLists.txt @@ -9,6 +9,9 @@ armarx_add_library( ArmarXCoreInterfaces ArmarXCore # ${ProjectName}Libraries + + armem + SOURCES constants.cpp HEADERS diff --git a/source/armarx/navigation/location/constants.cpp b/source/armarx/navigation/location/constants.cpp index 4a9a4ca4..33b2bc98 100644 --- a/source/armarx/navigation/location/constants.cpp +++ b/source/armarx/navigation/location/constants.cpp @@ -1,9 +1,11 @@ #include "constants.h" +#include <RobotAPI/libraries/armem/core/MemoryID.h> + namespace armarx::nav { - const std::string loc::coreSegmentName = "Location"; + const armem::MemoryID loc::coreSegmentID { "Navigation", "Location" }; } diff --git a/source/armarx/navigation/location/constants.h b/source/armarx/navigation/location/constants.h index 31d558d0..ac5f34ef 100644 --- a/source/armarx/navigation/location/constants.h +++ b/source/armarx/navigation/location/constants.h @@ -21,12 +21,12 @@ #pragma once -#include <string> +#include <RobotAPI/libraries/armem/core/forward_declarations.h> namespace armarx::nav::loc { - extern const std::string coreSegmentName; + extern const armem::MemoryID coreSegmentID; } -- GitLab