From c8017d983d9056ab5563bee1fe5c064208e931e7 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 22:56:22 +0200
Subject: [PATCH 1/7] human reader plugin

---
 source/armarx/navigation/components/navigator/Component.cpp | 1 +
 source/armarx/navigation/components/navigator/Component.h   | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index 40f41ce2..e8612e91 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -123,6 +123,7 @@ namespace armarx::navigation::components::navigator
         addPlugin(resultsWriterPlugin);
         addPlugin(graphReaderPlugin);
         addPlugin(costmapReaderPlugin);
+        addPlugin(humanReaderPlugin);
 
         addPlugin(virtualRobotReaderPlugin);
 
diff --git a/source/armarx/navigation/components/navigator/Component.h b/source/armarx/navigation/components/navigator/Component.h
index 8b2b3467..7462c3d7 100644
--- a/source/armarx/navigation/components/navigator/Component.h
+++ b/source/armarx/navigation/components/navigator/Component.h
@@ -50,6 +50,8 @@
 #include <RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h>
 
 #include <armarx/control/client/ComponentPlugin.h>
+
+#include <armarx/navigation/memory/client/human/Reader.h>
 #include <armarx/navigation/components/navigator/RemoteGui.h>
 #include <armarx/navigation/core/types.h>
 #include <armarx/navigation/memory/client/graph/Reader.h>
@@ -194,6 +196,8 @@ namespace armarx::navigation::components::navigator
             graphReaderPlugin = nullptr;
         armem::client::plugins::ReaderWriterPlugin<memory::client::costmap::Reader>*
             costmapReaderPlugin = nullptr;
+        armem::client::plugins::ReaderWriterPlugin<memory::client::human::Reader>*
+            humanReaderPlugin = nullptr;
 
         // armem::vision::occupancy_grid::client::Reader occupancyGridReader;
 
@@ -217,4 +221,4 @@ namespace armarx::navigation::components::navigator
 
         Parameters params;
     };
-}  // namespace armarx::navigation::components::navigator
+} // namespace armarx::navigation::components::navigator
-- 
GitLab


From 7961d63d548e201b21c71e6f869ba857738d8d6c Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 22:56:46 +0200
Subject: [PATCH 2/7] navigator: remotegui as optional

---
 source/armarx/navigation/components/navigator/Component.cpp | 2 +-
 source/armarx/navigation/components/navigator/Component.h   | 4 +---
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index e8612e91..b5dff818 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -191,7 +191,7 @@ namespace armarx::navigation::components::navigator
         // memoryIntrospector = server::MemoryIntrospector(resultsWriterPlugin->get(), );
 
 
-        navRemoteGui = std::make_unique<navigator::RemoteGui>(remoteGui, *this);
+        navRemoteGui.emplace(remoteGui, *this);
         navRemoteGui->enable();
 
         initialized = true;
diff --git a/source/armarx/navigation/components/navigator/Component.h b/source/armarx/navigation/components/navigator/Component.h
index 7462c3d7..316e4da5 100644
--- a/source/armarx/navigation/components/navigator/Component.h
+++ b/source/armarx/navigation/components/navigator/Component.h
@@ -176,9 +176,7 @@ namespace armarx::navigation::components::navigator
 
         std::mutex propertiesMutex;
 
-        // TODO maybe as optional, but requires some effort
-        std::unique_ptr<armarx::navigation::components::navigator::RemoteGui> navRemoteGui;
-
+        std::optional<armarx::navigation::components::navigator::RemoteGui> navRemoteGui;
 
         // unique_ptr to avoid dangling refs
         std::vector<std::unique_ptr<server::MemoryIntrospector>> memoryIntrospectors;
-- 
GitLab


From 6f5e92d3c30d35cb4722d7996eb0b92de33cfc71 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 23:15:53 +0200
Subject: [PATCH 3/7] scene provider: adding human reader

---
 .../server/scene_provider/SceneProvider.cpp   | 20 ++++++++++------
 .../server/scene_provider/SceneProvider.h     | 24 +++++++++++++++++--
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/source/armarx/navigation/server/scene_provider/SceneProvider.cpp b/source/armarx/navigation/server/scene_provider/SceneProvider.cpp
index 6ab93b8f..26d9cd41 100644
--- a/source/armarx/navigation/server/scene_provider/SceneProvider.cpp
+++ b/source/armarx/navigation/server/scene_provider/SceneProvider.cpp
@@ -2,17 +2,20 @@
 
 #include <VirtualRobot/SceneObjectSet.h>
 
-#include "ArmarXCore/core/exceptions/local/ExpressionException.h"
-#include "ArmarXCore/core/logging/Logging.h"
-#include "ArmarXCore/core/time/Clock.h"
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+#include <ArmarXCore/core/logging/Logging.h>
+#include <ArmarXCore/core/time/Clock.h>
 
-#include "RobotAPI/libraries/armem_robot/types.h"
+#include <RobotAPI/libraries/armem_robot/types.h>
 
-#include "armarx/navigation/core/types.h"
-#include "armarx/navigation/memory/client/costmap/Reader.h"
 #include <armarx/navigation/algorithms/CostmapBuilder.h>
+#include <armarx/navigation/core/types.h>
+#include <armarx/navigation/memory/client/costmap/Reader.h>
+#include <armarx/navigation/memory/client/graph/Reader.h>
+#include <armarx/navigation/memory/client/human/Reader.h>
 #include <armarx/navigation/util/util.h>
 
+
 namespace armarx::navigation::server::scene_provider
 {
 
@@ -113,7 +116,10 @@ namespace armarx::navigation::server::scene_provider
     core::DynamicScene
     SceneProvider::getDynamicScene(const DateTime& timestamp) const
     {
-        return {}; // FIXME implement
+        const memory::client::human::Reader::Query query{.providerName = config.humanProviderName,
+                                                         .timestamp = timestamp};
+
+        return {.humans = srv.humanReader->queryHumans(query).humans};
     }
 
     core::SceneGraph
diff --git a/source/armarx/navigation/server/scene_provider/SceneProvider.h b/source/armarx/navigation/server/scene_provider/SceneProvider.h
index a71a958f..1f21e85e 100644
--- a/source/armarx/navigation/server/scene_provider/SceneProvider.h
+++ b/source/armarx/navigation/server/scene_provider/SceneProvider.h
@@ -31,12 +31,28 @@
 
 #include <armarx/navigation/core/DynamicScene.h>
 #include <armarx/navigation/core/StaticScene.h>
-#include <armarx/navigation/memory/client/costmap/Reader.h>
-#include <armarx/navigation/memory/client/graph/Reader.h>
 #include <armarx/navigation/core/types.h>
+#include <armarx/navigation/memory/client/human/Reader.h>
 #include <armarx/navigation/server/scene_provider/SceneProviderInterface.h>
 
 
+namespace armarx::navigation::memory::client
+{
+    namespace graph
+    {
+        class Reader;
+    }
+    namespace costmap
+    {
+        class Reader;
+    }
+    namespace human
+    {
+        class Reader;
+    }
+} // namespace armarx::navigation::memory::client
+
+
 namespace armarx::navigation::server::scene_provider
 {
 
@@ -54,6 +70,8 @@ namespace armarx::navigation::server::scene_provider
             // `robot_state` memory reader and writer
             armem::robot_state::VirtualRobotReader* virtualRobotReader;
 
+            memory::client::human::Reader* humanReader;
+
             objpose::ObjectPoseClient objectPoseClient;
         };
 
@@ -63,6 +81,8 @@ namespace armarx::navigation::server::scene_provider
 
             std::string staticCostmapProviderName = "distance_to_obstacle_costmap_provider";
             std::string staticCostmapName = "distance_to_obstacles";
+
+            std::string humanProviderName = "dynamic_scene_provider";
         };
 
         SceneProvider(const InjectedServices& srv, const Config& config);
-- 
GitLab


From c126f89b65f8d6055880e0601ebfa0aafa133c78 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 23:16:03 +0200
Subject: [PATCH 4/7] dynamic scene: adding humans

---
 source/armarx/navigation/core/DynamicScene.h | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/source/armarx/navigation/core/DynamicScene.h b/source/armarx/navigation/core/DynamicScene.h
index 05f211a9..172957d0 100644
--- a/source/armarx/navigation/core/DynamicScene.h
+++ b/source/armarx/navigation/core/DynamicScene.h
@@ -23,17 +23,14 @@
 #pragma once
 
 
+#include <armarx/navigation/human/types.h>
+
 namespace armarx::navigation::core
 {
 
     struct DynamicScene
     {
-
-            // TODO(SALt): Implement
-
-    public:
-    protected:
-    private:
+        human::Humans humans;
     };
 
 } // namespace armarx::navigation::core
-- 
GitLab


From 9ba0352267389370bf3d08b92bb9f17dc78be2ef Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 23:16:37 +0200
Subject: [PATCH 5/7] navigator: human readerwriter plugin

---
 source/armarx/navigation/components/navigator/Component.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index b5dff818..25dbba4c 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -66,8 +66,9 @@
 #include <RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h>
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
-#include "armarx/navigation/server/execution/ExecutorInterface.h"
-#include "armarx/navigation/server/scene_provider/SceneProvider.h"
+#include <armarx/navigation/memory/client/costmap/Reader.h>
+#include <armarx/navigation/server/execution/ExecutorInterface.h>
+#include <armarx/navigation/server/scene_provider/SceneProvider.h>
 #include <armarx/navigation/algorithms/Costmap.h>
 #include <armarx/navigation/algorithms/CostmapBuilder.h>
 #include <armarx/navigation/algorithms/astar/util.h>
@@ -165,6 +166,7 @@ namespace armarx::navigation::components::navigator
                 .graphReader = &graphReaderPlugin->get(),
                 .costmapReader = &costmapReaderPlugin->get(),
                 .virtualRobotReader = &virtualRobotReaderPlugin->get(),
+                .humanReader = &humanReaderPlugin->get(),
                 .objectPoseClient = ObjectPoseClientPluginUser::getClient()};
 
             const std::string robotName = getControlComponentPlugin()
-- 
GitLab


From cbd3b908e5f27595793ce9c6c1c2aacca0594734 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 23:17:29 +0200
Subject: [PATCH 6/7] timedelasticbands: activated 
 obstManager.addHumanObstacle

---
 .../local_planning/TimedElasticBands.cpp          | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/source/armarx/navigation/local_planning/TimedElasticBands.cpp b/source/armarx/navigation/local_planning/TimedElasticBands.cpp
index 54c9700c..b9a9d0b3 100644
--- a/source/armarx/navigation/local_planning/TimedElasticBands.cpp
+++ b/source/armarx/navigation/local_planning/TimedElasticBands.cpp
@@ -145,7 +145,7 @@ namespace armarx::navigation::local_planning
 
         viz::Layer* visPtr = nullptr;
         viz::Layer visLayer;
-        if (arviz)
+        if (arviz != nullptr)
         {
             visLayer = arviz->layer("local_planner_obstacles");
             visPtr = &visLayer;
@@ -154,6 +154,7 @@ namespace armarx::navigation::local_planning
 
         if (scene.staticScene)
         {
+            ARMARX_CHECK(scene.staticScene.has_value());
             for (const auto& obst : scene.staticScene.value().objects->getCollisionModels())
             {
                 obstManager.addBoxObstacle(obst->getGlobalBoundingBox(), visPtr);
@@ -161,14 +162,14 @@ namespace armarx::navigation::local_planning
         }
         if (scene.dynamicScene)
         {
-            //TODO include humans in dynamic scene
-            //for (const auto& obst : scene.dynamicScene.value().humans)
-            //{
-            //   obstManager.addHumanObstacle(obst, visPtr);
-            //}
+            ARMARX_CHECK(scene.dynamicScene.has_value());
+            for (const auto& obst : scene.dynamicScene.value().humans)
+            {
+              obstManager.addHumanObstacle(obst, visPtr);
+            }
         }
 
-        if (arviz)
+        if (arviz != nullptr)
         {
             arviz->commit(visLayer);
         }
-- 
GitLab


From 6f52f9814edab484754bb4a67da0cb007a03aa03 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 18 Aug 2022 23:17:38 +0200
Subject: [PATCH 7/7] navigator: minor

---
 .../armarx/navigation/components/navigator/Component.cpp  | 2 +-
 .../navigation/local_planning/TebObstacleManager.cpp      | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index 25dbba4c..4cf28549 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -56,7 +56,7 @@
 #include <ArmarXCore/libraries/DecoupledSingleComponent/Decoupled.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
-#include "ArmarXGui/libraries/RemoteGui/Client/Widgets.h"
+#include <ArmarXGui/libraries/RemoteGui/Client/Widgets.h>
 
 #include <RobotAPI/components/ArViz/Client/Client.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.cpp b/source/armarx/navigation/local_planning/TebObstacleManager.cpp
index 6adb5614..1e395628 100644
--- a/source/armarx/navigation/local_planning/TebObstacleManager.cpp
+++ b/source/armarx/navigation/local_planning/TebObstacleManager.cpp
@@ -39,7 +39,7 @@ namespace armarx::navigation::local_planning
         obst->finalizePolygon();
         container.push_back(obst);
 
-        if (visLayer)
+        if (visLayer != nullptr)
         {
             const Eigen::Vector3f min3d = conv::fromRos(min);
             const Eigen::Vector3f max3d = conv::fromRos(max);
@@ -58,7 +58,7 @@ namespace armarx::navigation::local_planning
     {
         auto proxemicZones = proxemics.createProxemicZones(human);
 
-        for (auto& proxemicZone : proxemicZones)
+        for (const auto& proxemicZone : proxemicZones)
         {
             auto pose = conv::toRos(proxemicZone.pose);
             auto shape = conv::toRos(proxemicZone.shape);
@@ -67,7 +67,7 @@ namespace armarx::navigation::local_planning
             auto obst = boost::make_shared<teb_local_planner::extension::EllipseObstacle>(
                 pose.position(), pose.theta(), shape.a, shape.b);
 
-            auto& penalty = proxemicZone.penalty;
+            const auto& penalty = proxemicZone.penalty;
 
             obst->setPenaltyModel(boost::make_shared<teb_local_planner::ExponentialPenaltyModel>(
                 teb_local_planner::LinearPenaltyModel(penalty.minDistance, penalty.epsilon),
@@ -83,7 +83,7 @@ namespace armarx::navigation::local_planning
 
             container.push_back(obst);
 
-            if (visLayer)
+            if (visLayer != nullptr)
             {
                 const Eigen::Vector3f axisLength(proxemicZone.shape.a, proxemicZone.shape.b, 0);
                 const core::Pose pose3d = conv::to3D(human.pose);
-- 
GitLab