From 9368239edb269bee1000cdc0c1300161cfff7cfb Mon Sep 17 00:00:00 2001
From: Christoph Pohl <christoph.pohl@kit.edu>
Date: Mon, 10 Jan 2022 10:16:13 +0100
Subject: [PATCH] Added new Memory to GraspCandidateObserver

---
 source/RobotAPI/components/units/CMakeLists.txt             | 1 +
 source/RobotAPI/components/units/GraspCandidateObserver.cpp | 4 +++-
 source/RobotAPI/components/units/GraspCandidateObserver.h   | 5 ++++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/source/RobotAPI/components/units/CMakeLists.txt b/source/RobotAPI/components/units/CMakeLists.txt
index 3fa535901..f6710bc22 100644
--- a/source/RobotAPI/components/units/CMakeLists.txt
+++ b/source/RobotAPI/components/units/CMakeLists.txt
@@ -6,6 +6,7 @@ set(LIBS
     RobotAPICore
     ArmarXCoreObservers
     ArmarXCoreEigen3Variants
+    GraspingUtility
 )
 
 set(LIB_HEADERS
diff --git a/source/RobotAPI/components/units/GraspCandidateObserver.cpp b/source/RobotAPI/components/units/GraspCandidateObserver.cpp
index e780bbfe3..d4b5ea81c 100644
--- a/source/RobotAPI/components/units/GraspCandidateObserver.cpp
+++ b/source/RobotAPI/components/units/GraspCandidateObserver.cpp
@@ -38,7 +38,7 @@
 using namespace armarx;
 using namespace armarx::grasping;
 
-GraspCandidateObserver::GraspCandidateObserver()
+GraspCandidateObserver::GraspCandidateObserver() : graspCandidateWriter(memoryNameSystem())
 {
 }
 
@@ -53,6 +53,7 @@ void GraspCandidateObserver::onInitObserver()
 void GraspCandidateObserver::onConnectObserver()
 {
     configTopic = getTopic<GraspCandidateProviderInterfacePrx>(getProperty<std::string>("ConfigTopicName").getValue());
+    graspCandidateWriter.connect();
 }
 
 PropertyDefinitionsPtr GraspCandidateObserver::createPropertyDefinitions()
@@ -125,6 +126,7 @@ void GraspCandidateObserver::reportGraspCandidates(const std::string& providerNa
 {
     std::unique_lock lock(dataMutex);
     this->candidates[providerName] = candidates;
+    graspCandidateWriter.commitGraspCandidateSeq(candidates, armarx::armem::Time::now(), providerName);
     handleProviderUpdate(providerName, candidates.size());
 }
 
diff --git a/source/RobotAPI/components/units/GraspCandidateObserver.h b/source/RobotAPI/components/units/GraspCandidateObserver.h
index f4bb0ba3e..91169049b 100644
--- a/source/RobotAPI/components/units/GraspCandidateObserver.h
+++ b/source/RobotAPI/components/units/GraspCandidateObserver.h
@@ -25,6 +25,8 @@
 
 #include <ArmarXCore/observers/Observer.h>
 #include <RobotAPI/interface/observers/GraspCandidateObserverInterface.h>
+#include <RobotAPI/libraries/armem/client/plugins/PluginUser.h>
+#include <RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.h>
 
 #include <mutex>
 
@@ -52,6 +54,7 @@ namespace armarx
      */
     class GraspCandidateObserver :
         virtual public Observer,
+        virtual public armarx::armem::ClientPluginUser,
         virtual public grasping::GraspCandidateObserverInterface
     {
     public:
@@ -124,7 +127,7 @@ namespace armarx
         grasping::GraspCandidateSeq selectedCandidates;
 
         grasping::BimanualGraspCandidateSeq selectedBimanualCandidates;
-
+        armarx::armem::GraspCandidateWriter graspCandidateWriter;
 
         void handleProviderUpdate(const std::string& providerName, int candidateCount);
     };
-- 
GitLab