From bc2aad209d88295c51423c456e31ad73eb8df894 Mon Sep 17 00:00:00 2001
From: phesch <ulila@student.kit.edu>
Date: Mon, 9 May 2022 19:53:45 +0200
Subject: [PATCH] Add time offset and window params to ObjMem Visu

---
 .../armem_objects/server/instance/Visu.cpp    | 23 +++++++++++++++----
 .../armem_objects/server/instance/Visu.h      |  7 +++++-
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
index 131a60865..07ded4465 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
@@ -49,8 +49,12 @@ namespace armarx::armem::server::obj::instance
         defs->optional(useArticulatedModels, prefix + "useArticulatedModels",
                        "Prefer articulated object models if available.");
 
-        defs->optional(showLinearPredictions, prefix + "showLinearPredictions",
+        defs->optional(showLinearPredictions, prefix + "predictions.linear.show",
                        "Show arrows linearly predicting object positions.");
+        defs->optional(linearPredictionTimeOffsetSeconds, prefix + "predictions.linear.timeOffset",
+                       "The offset (in seconds) to the current time to make predictions for.");
+        defs->optional(linearPredictionTimeWindowSeconds, prefix + "predictions.linear.timeWindow",
+                       "The time window (in seconds) into the past to perform the regression on.");
     }
 
 
@@ -247,9 +251,9 @@ namespace armarx::armem::server::obj::instance
             objpose::ObjectPosePredictionRequest request;
             toIce(request.objectID, id);
             request.settings.predictionEngineID = "Linear Position Regression";
-            toIce(request.timeWindow, Duration::Seconds(2));
-            // TODO(phesch): Make parametrizable.
-            toIce(request.timestamp, Time::Now() + Duration::MilliSeconds(1000));
+            toIce(request.timeWindow, Duration::SecondsDouble(linearPredictionTimeWindowSeconds));
+            toIce(request.timestamp,
+                  Time::Now() + Duration::SecondsDouble(linearPredictionTimeOffsetSeconds));
             auto predictionResult = predictor(request);
             if (predictionResult.success)
             {
@@ -302,6 +306,9 @@ namespace armarx::armem::server::obj::instance
         useArticulatedModels.setValue(visu.useArticulatedModels);
 
         showLinearPredictions.setValue(visu.showLinearPredictions);
+        linearPredictionTimeOffsetSeconds.setValue(visu.linearPredictionTimeOffsetSeconds);
+        linearPredictionTimeWindowSeconds.setValue(visu.linearPredictionTimeWindowSeconds);
+        linearPredictionTimeWindowSeconds.setRange(0, std::numeric_limits<float>::max());
 
         GridLayout grid;
         int row = 0;
@@ -330,6 +337,12 @@ namespace armarx::armem::server::obj::instance
 
         grid.add(Label("Show Linear Predictions"), {row, 0}).add(showLinearPredictions, {row, 1});
         row++;
+        grid.add(Label("Time (seconds from now):"), {row, 0})
+            .add(linearPredictionTimeOffsetSeconds, {row, 1});
+        row++;
+        grid.add(Label("Time Window (seconds):"), {row, 0})
+            .add(linearPredictionTimeWindowSeconds, {row, 1});
+        row++;
 
         group = GroupBox();
         group.setLabel("Visualization");
@@ -380,6 +393,8 @@ namespace armarx::armem::server::obj::instance
         visu.useArticulatedModels = useArticulatedModels.getValue();
 
         visu.showLinearPredictions = showLinearPredictions.getValue();
+        visu.linearPredictionTimeOffsetSeconds = linearPredictionTimeOffsetSeconds.getValue();
+        visu.linearPredictionTimeWindowSeconds = linearPredictionTimeWindowSeconds.getValue();
     }
 
 }
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.h b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.h
index 8803e4d73..a88e3d2c8 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.h
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.h
@@ -87,8 +87,10 @@ namespace armarx::armem::server::obj::instance
         /// Prefer articulated models if available.
         bool useArticulatedModels = true;
 
-        /// Show linear prediction arrows for object positions.
+        /// Linear prediction arrows for object positions.
         bool showLinearPredictions = false;
+        float linearPredictionTimeOffsetSeconds = 1;
+        float linearPredictionTimeWindowSeconds = 2;
 
         SimpleRunningTask<>::pointer_type updateTask;
 
@@ -128,6 +130,9 @@ namespace armarx::armem::server::obj::instance
 
             armarx::RemoteGui::Client::CheckBox showLinearPredictions;
 
+            armarx::RemoteGui::Client::FloatSpinBox linearPredictionTimeOffsetSeconds;
+            armarx::RemoteGui::Client::FloatSpinBox linearPredictionTimeWindowSeconds;
+
 
             void setup(const Visu& visu);
             void update(Visu& visu);
-- 
GitLab