From f3159e8c60629ed451c89fdde36ddde019393870 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 17 Aug 2022 09:28:07 +0200
Subject: [PATCH] dynamic_scene_provider component: tested on ARMAR-6; minor
 fixes

---
 .../dynamic_scene_provider/CMakeLists.txt     |  2 +-
 .../dynamic_scene_provider/Component.cpp      | 24 ++++++++++++++++---
 .../dynamic_scene_provider/Component.h        |  5 ++++
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/source/armarx/navigation/components/dynamic_scene_provider/CMakeLists.txt b/source/armarx/navigation/components/dynamic_scene_provider/CMakeLists.txt
index 39d89c1a..e061ea23 100644
--- a/source/armarx/navigation/components/dynamic_scene_provider/CMakeLists.txt
+++ b/source/armarx/navigation/components/dynamic_scene_provider/CMakeLists.txt
@@ -35,7 +35,7 @@ armarx_add_component(dynamic_scene_provider
         ## RobotAPICore
         ## RobotAPIInterfaces
         ## RobotAPIComponentPlugins  # For ArViz and other plugins.
-    DEPENDENCIES_PRIVATE
+    # DEPENDENCIES_PRIVATE
         range-v3::range-v3
     # DEPENDENCIES_LEGACY
         ## Add libraries that do not provide any targets but ${FOO_*} variables.
diff --git a/source/armarx/navigation/components/dynamic_scene_provider/Component.cpp b/source/armarx/navigation/components/dynamic_scene_provider/Component.cpp
index e8abd88f..4a1cd5e8 100644
--- a/source/armarx/navigation/components/dynamic_scene_provider/Component.cpp
+++ b/source/armarx/navigation/components/dynamic_scene_provider/Component.cpp
@@ -53,6 +53,7 @@ namespace armarx::navigation::components::dynamic_scene_provider
         addPlugin(virtualRobotReaderPlugin);
         addPlugin(costmapReaderPlugin);
         addPlugin(occupancyGridReaderPlugin);
+        addPlugin(humanWriterPlugin);
     }
 
     armarx::PropertyDefinitionsPtr
@@ -86,6 +87,8 @@ namespace armarx::navigation::components::dynamic_scene_provider
         def->optional(properties.occupancyGrid.name, "p.occupancyGrid.name", "");
         def->optional(properties.occupancyGrid.freespaceThreshold, "p.occupancyGrid.freespaceThreshold", "");
         def->optional(properties.occupancyGrid.occupiedThreshold, "p.occupancyGrid.occupiedThreshold", "");
+        
+        def->optional(properties.humanPoseProvider, "p.humanPoseProvider", "");
 
         return def;
     }
@@ -141,12 +144,14 @@ namespace armarx::navigation::components::dynamic_scene_provider
 
         task = new PeriodicTask<Component>(
             this, &Component::runPeriodically, properties.taskPeriodMs, false, "runningTask");
+        task->start();
     }
 
 
     void
     Component::onDisconnectComponent()
     {
+        task->stop();
     }
 
 
@@ -189,12 +194,14 @@ namespace armarx::navigation::components::dynamic_scene_provider
         // Human
         //
 
-        const armem::human::client::Reader::Query humanPoseQuery{.providerName = "", // all
+        ARMARX_INFO << "Querying humans";
+
+        const armem::human::client::Reader::Query humanPoseQuery{.providerName = properties.humanPoseProvider,
                                                                  .timestamp = timestamp};
 
         const armem::human::client::Reader::Result humanPoseResult =
             humanPoseReaderPlugin->get().query(humanPoseQuery);
-        ARMARX_CHECK_EQUAL(humanPoseResult.status, armem::human::client::Reader::Result::Success);
+        ARMARX_CHECK_EQUAL(humanPoseResult.status, armem::human::client::Reader::Result::Success) << humanPoseResult.errorMessage;
 
         ARMARX_INFO << humanPoseResult.humanPoses.size() << " humans in the scene.";
 
@@ -202,6 +209,8 @@ namespace armarx::navigation::components::dynamic_scene_provider
         // Laser scanner features
         //
 
+        ARMARX_INFO << "Querying laser scanner features";
+
         const armem::vision::laser_scanner_features::client::Reader::Query laserFeaturesQuery{
             .providerName = properties.laserScannerFeatures.providerName,
             .name = properties.laserScannerFeatures.name,
@@ -219,6 +228,8 @@ namespace armarx::navigation::components::dynamic_scene_provider
         //  Objects in the scene (both static and dynamic)
         //
 
+        ARMARX_INFO << "Querying object poses";
+
         const objpose::ObjectPoseSeq objectPoses = ObjectPoseClientPluginUser::getObjectPoses();
 
         // remove those objects that belong to an object dataset. the manipulation object / distance computation is broken
@@ -243,8 +254,10 @@ namespace armarx::navigation::components::dynamic_scene_provider
         //  Costmaps
         //
 
+        ARMARX_INFO << "Querying costmap";
+
         const memory::client::costmap::Reader::Query costmapQuery{.providerName =
-                                                                      "navigator", // TODO check
+                                                                      "distance_to_obstacle_costmap_provider", // TODO check
                                                                   .name = "distance_to_obstacles",
                                                                   .timestamp = timestamp};
 
@@ -319,8 +332,13 @@ namespace armarx::navigation::components::dynamic_scene_provider
 
         // here ends: data fetching
 
+        ARMARX_INFO << "Running human tracker";
+
         humanTracker.update(HumanTracker::Measurements{.detectionTime = timestamp,
                                                        .humanPoses = humanPoseResult.humanPoses});
+
+
+        humanWriterPlugin->get().store(humanTracker.getTrackedHumans(),getName(), timestamp);
     }
 
 
diff --git a/source/armarx/navigation/components/dynamic_scene_provider/Component.h b/source/armarx/navigation/components/dynamic_scene_provider/Component.h
index 171b8638..bcc3ad7d 100644
--- a/source/armarx/navigation/components/dynamic_scene_provider/Component.h
+++ b/source/armarx/navigation/components/dynamic_scene_provider/Component.h
@@ -49,6 +49,7 @@
 #include "armarx/navigation/components/dynamic_scene_provider/ArVizDrawer.h"
 #include "armarx/navigation/components/dynamic_scene_provider/HumanTracker.h"
 #include "armarx/navigation/memory/client/costmap/Reader.h"
+#include "armarx/navigation/memory/client/human/Writer.h"
 #include <armarx/navigation/components/dynamic_scene_provider/ComponentInterface.h>
 
 
@@ -151,6 +152,8 @@ namespace armarx::navigation::components::dynamic_scene_provider
                 float freespaceThreshold = 0.45F;
                 float occupiedThreshold = 0.55;
             } occupancyGrid;
+
+            std::string humanPoseProvider = "OpenNIPointCloudProvider";
         };
         Properties properties;
         /* Use a mutex if you access variables from different threads
@@ -199,6 +202,8 @@ namespace armarx::navigation::components::dynamic_scene_provider
         ReaderWriterPlugin<armem::vision::occupancy_grid::client::Reader>*
             occupancyGridReaderPlugin = nullptr;
 
+        ReaderWriterPlugin<memory::client::human::Writer>* humanWriterPlugin = nullptr;
+
 
         HumanTracker humanTracker;
     };
-- 
GitLab