From 5104c3b5bea33ccc8e11bfb000d0a58ee75bc4e7 Mon Sep 17 00:00:00 2001
From: phesch <ulila@student.kit.edu>
Date: Mon, 9 May 2022 19:28:05 +0200
Subject: [PATCH] Implement suggestions from Gitlab MR

---
 .../armem/server/ObjectMemory/ObjectMemory.cpp | 18 ++++++++----------
 .../armem/server/ObjectMemory/ObjectMemory.h   |  2 +-
 .../objectpose/ObjectPoseStorageInterface.ice  |  2 +-
 .../RobotAPI/libraries/armem/client/Reader.h   |  1 +
 .../armem_objects/server/instance/Segment.cpp  |  6 +++---
 .../armem_objects/server/instance/Visu.cpp     | 10 ++++------
 6 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
index b3cb8043a..4b6ec249d 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
@@ -61,9 +61,9 @@ namespace armarx::armem::server::obj
         // defs->component(kinematicUnitObserver);  // Optional dependency.
         defs->defineOptionalProperty<std::string>("cmp.KinematicUnitObserverName", "KinematicUnitObserver",
                 "Name of the kinematic unit observer.");
-        defs->optional(predictionLookbackSeconds, "prediction.LookbackSeconds",
-                       "Lookback to use for predictions when requested via the PredictingMemoryInterface"
-                       " (in seconds).");
+        defs->optional(predictionTimeWindow, "prediction.TimeWindow",
+                       "Duration of time window into the past to use for predictions"
+                       " when requested via the PredictingMemoryInterface (in seconds).");
 
         return defs;
     }
@@ -239,14 +239,12 @@ namespace armarx::armem::server::obj
                 !boRequest.snapshotID.hasGap() && boRequest.snapshotID.hasInstanceIndex())
             {
                 objpose::ObjectPosePredictionRequest objPoseRequest;
-                objPoseRequest.lookback = armarx::toIce<armarx::core::time::dto::Duration>(
-                    Duration::SecondsDouble(predictionLookbackSeconds));
-                objPoseRequest.objectID = armarx::toIce<armarx::data::ObjectID>(
-                    ObjectID(boRequest.snapshotID.entityName + "/" +
-                             boRequest.snapshotID.instanceIndexStr()));
+                toIce(objPoseRequest.timeWindow, Duration::SecondsDouble(predictionTimeWindow));
+                toIce(objPoseRequest.objectID,
+                      ObjectID(boRequest.snapshotID.entityName + "/" +
+                               boRequest.snapshotID.instanceIndexStr()));
                 objPoseRequest.settings = request.settings;
-                objPoseRequest.timestamp = armarx::toIce<armarx::core::time::dto::DateTime>(
-                    boRequest.snapshotID.timestamp);
+                toIce(objPoseRequest.timestamp, boRequest.snapshotID.timestamp);
                 objpose::ObjectPosePredictionResult objPoseResult =
                     predictObjectPoses({objPoseRequest}).at(0);
                 result.success = objPoseResult.success;
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
index f078b436c..7067f42da 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
@@ -123,7 +123,7 @@ namespace armarx::armem::server::obj
         RobotStateComponentInterfacePrx robotStateComponent;
         KinematicUnitObserverInterfacePrx kinematicUnitObserver;
 
-        double predictionLookbackSeconds = 2;
+        double predictionTimeWindow = 2;
 
         clazz::Segment classSegment;
 
diff --git a/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice b/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
index 3b5c76e98..a069da907 100644
--- a/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
+++ b/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
@@ -156,7 +156,7 @@ module armarx
         {
             armarx::data::ObjectID objectID;
             armarx::core::time::dto::DateTime timestamp;
-            armarx::core::time::dto::Duration lookback;
+            armarx::core::time::dto::Duration timeWindow;
             armem::prediction::data::PredictionSettings settings;
         };
         sequence<ObjectPosePredictionRequest> ObjectPosePredictionRequestSeq;
diff --git a/source/RobotAPI/libraries/armem/client/Reader.h b/source/RobotAPI/libraries/armem/client/Reader.h
index 37bc5fba0..34b3ce320 100644
--- a/source/RobotAPI/libraries/armem/client/Reader.h
+++ b/source/RobotAPI/libraries/armem/client/Reader.h
@@ -178,6 +178,7 @@ namespace armarx::armem::client
          */
         std::vector<PredictionResult> predict(const std::vector<PredictionRequest>& requests) const;
 
+        //TODO(phesch): Fix this interface with the proper type
         /**
          * @brief Get the list of prediction engines supported by the memory.
          *
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
index 819eb729f..32398f8c4 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
@@ -589,7 +589,7 @@ namespace armarx::armem::server::obj::instance
 
         const ObjectID objID = armarx::fromIce<ObjectID>(request.objectID);
 
-        const Duration lookbackDuration = armarx::fromIce<Duration>(request.lookback);
+        const Duration timeWindow = armarx::fromIce<Duration>(request.timeWindow);
 
         const wm::Entity* entity = findObjectEntity(objID);
         if (!entity)
@@ -606,7 +606,7 @@ namespace armarx::armem::server::obj::instance
         std::vector<Eigen::Vector3d> positions;
 
         entity->forEachSnapshotInTimeRange(
-            Time::Now() - lookbackDuration, Time::Invalid(),
+            Time::Now() - timeWindow, Time::Invalid(),
             [&timeOrigin, &timestampsSec, &positions](const wm::EntitySnapshot& snapshot)
             {
                 snapshot.forEachInstance(
@@ -632,7 +632,7 @@ namespace armarx::armem::server::obj::instance
         {
             std::stringstream sstream;
             sstream << "No snapshots of the object " << objID << " were found in the last "
-                    << lookbackDuration << ". Cannot make a prediction.";
+                    << timeWindow << ". Cannot make a prediction.";
             result.errorMessage = sstream.str();
             return result;
         }
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
index 0c36323b4..131a60865 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
@@ -245,13 +245,11 @@ namespace armarx::armem::server::obj::instance
         if (showLinearPredictions)
         {
             objpose::ObjectPosePredictionRequest request;
-            request.objectID = armarx::toIce<armarx::data::ObjectID>(id);
+            toIce(request.objectID, id);
             request.settings.predictionEngineID = "Linear Position Regression";
-            request.lookback =
-                armarx::toIce<armarx::core::time::dto::Duration>(Duration::Seconds(2));
-            request.timestamp = armarx::toIce<armarx::core::time::dto::DateTime>(
-                // ToDo: Make parametrizable.
-                Time::Now() + Duration::MilliSeconds(1000));
+            toIce(request.timeWindow, Duration::Seconds(2));
+            // TODO(phesch): Make parametrizable.
+            toIce(request.timestamp, Time::Now() + Duration::MilliSeconds(1000));
             auto predictionResult = predictor(request);
             if (predictionResult.success)
             {
-- 
GitLab