From 15826b17cabb1551c14899023636c9df0334d134 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 19:31:49 +0200
Subject: [PATCH 1/7] first draft: update navigator

---
 .../components/example_client/Component.cpp   |  90 +++++++++-
 .../components/example_client/Component.h     |  14 ++
 ...ulatedObjectLocalizerDynamicSimulation.cfg |   8 -
 .../HandUnitDynamicSimulationApp.LeftHand.cfg |  17 ++
 ...HandUnitDynamicSimulationApp.RightHand.cfg |  17 ++
 .../config/ObjectMemory.cfg                   |  26 +--
 .../config/RobotUnitSimulationApp.cfg         |   2 +-
 .../SelfLocalizationDynamicSimulationApp.cfg  |  39 +++--
 .../config/SimulatorViewerApp.cfg             |  74 ++-------
 .../config/VisionMemory.cfg                   |  26 +--
 .../config/ObjectMemory.cfg                   |  97 ++++++++++-
 .../config/VisionMemory.cfg                   |  97 ++++++++++-
 .../config/example_client.cfg                 |  36 ----
 .../config/navigation_memory.cfg              |  22 ++-
 .../PlatformNavigation/config/navigator.cfg   |  51 ++++--
 .../navigation/client/ComponentPlugin.cpp     | 150 ++++++++---------
 source/armarx/navigation/client/Navigator.cpp |   7 +
 source/armarx/navigation/client/Navigator.h   |   2 +
 .../client/ice/NavigatorInterface.ice         |   2 +
 .../client/services/IceNavigator.cpp          |  12 ++
 .../navigation/client/services/IceNavigator.h |   5 +
 .../components/navigator/CMakeLists.txt       |  11 +-
 .../components/navigator/Component.cpp        |  84 +++++++++-
 .../components/navigator/Component.h          |  11 +-
 .../navigation/core/NavigatorInterface.h      |   6 +
 source/armarx/navigation/server/Navigator.cpp | 155 ++++++++++++++++--
 source/armarx/navigation/server/Navigator.h   |  13 ++
 27 files changed, 773 insertions(+), 301 deletions(-)

diff --git a/examples/components/example_client/Component.cpp b/examples/components/example_client/Component.cpp
index afbf7503..7b48c323 100644
--- a/examples/components/example_client/Component.cpp
+++ b/examples/components/example_client/Component.cpp
@@ -36,10 +36,11 @@
 #include <ArmarXCore/core/time/forward_declarations.h>
 #include <ArmarXCore/libraries/DecoupledSingleComponent/Decoupled.h>
 
-#include <armarx/navigation/client/types.h>
-#include <armarx/navigation/global_planning/Point2Point.h>
+#include "armarx/navigation/core/types.h"
 #include <armarx/navigation/client/PathBuilder.h>
+#include <armarx/navigation/client/types.h>
 #include <armarx/navigation/global_planning/AStar.h>
+#include <armarx/navigation/global_planning/Point2Point.h>
 #include <armarx/navigation/trajectory_control/local/TrajectoryFollowingController.h>
 
 
@@ -68,7 +69,7 @@ namespace armarx::navigation::components::example_client
     void
     Component::onConnectComponent()
     {
-        task = new armarx::RunningTask<Component>(this, &Component::exampleNavigationPointToPoint);
+        task = new armarx::RunningTask<Component>(this, &Component::run);
         task->start();
     }
 
@@ -94,6 +95,74 @@ namespace armarx::navigation::components::example_client
         return "ExampleClient";
     }
 
+    void
+    Component::run()
+    {
+        switch (properties.mode)
+        {
+
+            case Mode::Standard:
+                ARMARX_IMPORTANT << "Running `Mode::Standard`";
+                exampleNavigation();
+                break;
+            case Mode::Complex:
+                ARMARX_IMPORTANT << "Running `Mode::Complex`";
+                exampleNavigationComplex();
+                break;
+            case Mode::PointToPoint:
+                ARMARX_IMPORTANT << "Running `Mode::PointToPoint`";
+                exampleNavigationPointToPoint();
+                break;
+            case Mode::UpdateNavigator:
+                ARMARX_IMPORTANT << "Running `Mode::UpdateNavigator`";
+                exampleNavigationUpdateNavigator();
+                break;
+        }
+    }
+
+    void
+    Component::exampleNavigationUpdateNavigator()
+    {
+        // Import relevant namespaces.
+        using namespace armarx::navigation;
+
+        ARMARX_INFO << "Configuring navigator";
+
+        // Create an example configuration valid for the following move* calls.
+        configureNavigator(
+            client::NavigationStackConfig()
+                .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
+                .globalPlanner(global_planning::AStarParams())
+                .trajectoryController(traj_ctrl::local::TrajectoryFollowingControllerParams()));
+
+        // Example of registering a lambda as callback.
+        getNavigator().onGoalReached([&]() { ARMARX_IMPORTANT << "Goal reached!"; });
+
+        // Start moving to goal position using above config.
+
+        ARMARX_INFO << "Moving to goal pose";
+        core::Pose goal = core::Pose::Identity();
+        goal.translation() << 2000, 1000, 0;
+        getNavigator().moveTo({goal}, core::NavigationFrame::Absolute);
+        Clock::WaitFor(Duration::Seconds(1.0));
+
+
+        // after short period of time (before goal is reached), change goal
+        const std::vector<core::Pose> goals{
+            core::Pose(Eigen::Translation3f{1000, 2000, 0}),
+            core::Pose(Eigen::Translation3f{3000, 0, 0}),
+            core::Pose(Eigen::Translation3f{5000, 1000, 0}),
+        };
+
+        while (true)
+        {
+            for (const auto& nextGoal : goals)
+            {
+                Clock::WaitFor(Duration::Seconds(1.0));
+                getNavigator().update({nextGoal}, core::NavigationFrame::Absolute);
+            }
+        }
+    }
 
     void
     Component::exampleNavigation()
@@ -108,7 +177,8 @@ namespace armarx::navigation::components::example_client
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
                 .globalPlanner(global_planning::AStarParams())
-                .trajectoryController(traj_ctrl::local::TrajectoryFollowingControllerParams()));  // FIXME
+                .trajectoryController(
+                    traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
 
         // Example of registering a lambda as callback.
         getNavigator().onGoalReached([&]() { ARMARX_IMPORTANT << "Goal reached! (lambda-style)"; });
@@ -207,7 +277,8 @@ namespace armarx::navigation::components::example_client
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
                 .globalPlanner(global_planning::AStarParams())
-                .trajectoryController(traj_ctrl::local::TrajectoryFollowingControllerParams()));  // FIXME
+                .trajectoryController(
+                    traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
 
         // Example of registering a lambda as callback.
         getNavigator().onGoalReached([&]() { ARMARX_IMPORTANT << "Goal reached! (lambda-style)"; });
@@ -283,7 +354,8 @@ namespace armarx::navigation::components::example_client
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
                 .globalPlanner(global_planning::Point2PointParams())
-                .trajectoryController(traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
+                .trajectoryController(
+                    traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
 
         Clock::WaitFor(Duration::Seconds(1));
 
@@ -366,6 +438,12 @@ namespace armarx::navigation::components::example_client
                       "relativeMovement",
                       "The distance between two target poses [mm]");
 
+        def->optional(properties.mode, "mode", "Which example to run")
+            .map({{"standard", Mode::Standard},
+                  {"complex", Mode::Complex},
+                  {"point_to_point", Mode::PointToPoint},
+                  {"update_navigator", Mode::UpdateNavigator}});
+
         return def;
     }
 
diff --git a/examples/components/example_client/Component.h b/examples/components/example_client/Component.h
index 295d1964..2e622a35 100644
--- a/examples/components/example_client/Component.h
+++ b/examples/components/example_client/Component.h
@@ -35,6 +35,14 @@
 namespace armarx::navigation::components::example_client
 {
 
+    enum class Mode
+    {
+        Standard,
+        Complex,
+        PointToPoint,
+        UpdateNavigator
+    };
+
     /**
      * @defgroup Component-ExampleClient ExampleClient
      * @ingroup armarx_navigation-Components
@@ -75,6 +83,8 @@ namespace armarx::navigation::components::example_client
 
         std::string getDefaultName() const override;
 
+        void run();
+
         void exampleNavigation();
         void exampleNavigationComplex();
 
@@ -91,12 +101,16 @@ namespace armarx::navigation::components::example_client
          */
         void exampleNavigationPointToPoint();
 
+        void exampleNavigationUpdateNavigator();
+
     private:
         void goalReached();
 
         struct{
             std::string robotName = "Armar6";
             float relativeMovement = 200; // [mm]
+
+            Mode mode = Mode::Standard;
         } properties;
 
         armarx::RunningTask<Component>::pointer_type task;
diff --git a/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg b/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
index a64fd58d..7c4574e0 100644
--- a/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
+++ b/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
@@ -133,14 +133,6 @@ ArmarX.ArticulatedObjectLocalizerDynamicSimulation.mem.obj.articulated.ProviderN
 # ArmarX.ArticulatedObjectLocalizerDynamicSimulation.objects = Default value not mapped.
 
 
-# ArmarX.ArticulatedObjectLocalizerDynamicSimulation.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
-#  Attributes:
-#  - Default:            MemoryUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ArticulatedObjectLocalizerDynamicSimulation.tpc.sub.MemoryListener = MemoryUpdates
-
-
 # ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
diff --git a/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.LeftHand.cfg b/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.LeftHand.cfg
index 18e2d2db..aa21b8fd 100644
--- a/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.LeftHand.cfg
+++ b/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.LeftHand.cfg
@@ -139,6 +139,23 @@ ArmarX.HandUnitDynamicSimulation.ObjectName = LeftHandUnit
 # ArmarX.HandUnitDynamicSimulation.SimulatorProxyName = Simulator
 
 
+# ArmarX.HandUnitDynamicSimulation.UseLegacyWorkingMemory:  Require the legacy MemoryX working memory to be available before starting.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.HandUnitDynamicSimulation.UseLegacyWorkingMemory = false
+
+
+# ArmarX.HandUnitDynamicSimulation.cmp.ObjectPoseStorageName:  Name of the object pose storage (only used if necessary).
+#  Attributes:
+#  - Default:            ObjectMemory
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.HandUnitDynamicSimulation.cmp.ObjectPoseStorageName = ObjectMemory
+
+
 # ArmarX.HandUnitDynamicSimulation.inheritFrom:  No Description
 #  Attributes:
 #  - Default:            RobotConfig
diff --git a/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.RightHand.cfg b/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.RightHand.cfg
index 85cc4345..b92bb000 100644
--- a/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.RightHand.cfg
+++ b/scenarios/NavigationSimulation/config/HandUnitDynamicSimulationApp.RightHand.cfg
@@ -139,6 +139,23 @@ ArmarX.HandUnitDynamicSimulation.ObjectName = RightHandUnit
 # ArmarX.HandUnitDynamicSimulation.SimulatorProxyName = Simulator
 
 
+# ArmarX.HandUnitDynamicSimulation.UseLegacyWorkingMemory:  Require the legacy MemoryX working memory to be available before starting.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.HandUnitDynamicSimulation.UseLegacyWorkingMemory = false
+
+
+# ArmarX.HandUnitDynamicSimulation.cmp.ObjectPoseStorageName:  Name of the object pose storage (only used if necessary).
+#  Attributes:
+#  - Default:            ObjectMemory
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.HandUnitDynamicSimulation.cmp.ObjectPoseStorageName = ObjectMemory
+
+
 # ArmarX.HandUnitDynamicSimulation.inheritFrom:  No Description
 #  Attributes:
 #  - Default:            RobotConfig
diff --git a/scenarios/NavigationSimulation/config/ObjectMemory.cfg b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
index ed320714..a1b9d81c 100644
--- a/scenarios/NavigationSimulation/config/ObjectMemory.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
@@ -513,37 +513,21 @@ ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad = R003_grasping_challenge_r
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels = true
 
 
-# ArmarX.ObjectMemory.mem.ltm..configuration:  
+# ArmarX.ObjectMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm..configuration = ""
+# ArmarX.ObjectMemory.mem.ltm.configuration = {}
 
 
-# ArmarX.ObjectMemory.mem.ltm..enabled:  
+# ArmarX.ObjectMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm..enabled = false
-
-
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.ObjectMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.storagepath = Default value not mapped.
+# ArmarX.ObjectMemory.mem.ltm.enabled = false
 
 
 # ArmarX.ObjectMemory.mem.robot_state.Memory:  
diff --git a/scenarios/NavigationSimulation/config/RobotUnitSimulationApp.cfg b/scenarios/NavigationSimulation/config/RobotUnitSimulationApp.cfg
index 47323755..10974951 100644
--- a/scenarios/NavigationSimulation/config/RobotUnitSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/RobotUnitSimulationApp.cfg
@@ -474,7 +474,7 @@ ArmarX.RobotUnitSimulation.PlatformUnitName = Armar6PlatformUnit
 # ArmarX.RobotUnitSimulation.RTLogging_DefaultLog = ""
 
 
-# ArmarX.RobotUnitSimulation.RTLogging_KeepIterationsForMs:  All logging data (SensorValues, ControlTargets, Messages) is keept for this duration and can be dunped in case of an error.
+# ArmarX.RobotUnitSimulation.RTLogging_KeepIterationsForMs:  All logging data (SensorValues, ControlTargets, Messages) is kept for this duration and can be dumped in case of an error.
 #  Attributes:
 #  - Default:            60000
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg b/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
index 1dab8f00..b8200627 100644
--- a/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
@@ -175,23 +175,32 @@ ArmarX.SelfLocalizationDynamicSimulation.RobotName = Armar6
 # ArmarX.SelfLocalizationDynamicSimulation.cmp.Simulator = Simulator
 
 
-# ArmarX.SelfLocalizationDynamicSimulation.cmp.WorkingMemory:  Ice object name of the `WorkingMemory` component.
+# ArmarX.SelfLocalizationDynamicSimulation.cycleTime:  
 #  Attributes:
-#  - Default:            WorkingMemory
+#  - Default:            30
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.SelfLocalizationDynamicSimulation.cmp.WorkingMemory = WorkingMemory
+# ArmarX.SelfLocalizationDynamicSimulation.cycleTime = 30
 
 
-# ArmarX.SelfLocalizationDynamicSimulation.cycleTime:  
+# ArmarX.SelfLocalizationDynamicSimulation.localizationUnit.proxyName:  If enabled, connects to the localization unit
 #  Attributes:
-#  - Default:            30
+#  - Default:            LocalizationUnit
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.SelfLocalizationDynamicSimulation.cycleTime = 30
+# ArmarX.SelfLocalizationDynamicSimulation.localizationUnit.proxyName = LocalizationUnit
 
 
-# ArmarX.SelfLocalizationDynamicSimulation.longterm_memory:  Ice object name of the `LongtermMemory` component.
+# ArmarX.SelfLocalizationDynamicSimulation.localizationUnit.use:  If enabled, connects to the localization unit
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.SelfLocalizationDynamicSimulation.localizationUnit.use = true
+
+
+# ArmarX.SelfLocalizationDynamicSimulation.longterm_memory:  Which legacy long-term memory to use if longterm_memory.updateor longterm_memory.retrieve_initial_pose are set
 #  Attributes:
 #  - Default:            LongtermMemory
 #  - Case sensitivity:   yes
@@ -291,6 +300,14 @@ ArmarX.SelfLocalizationDynamicSimulation.mem.robot_state.Memory = RobotState
 # ArmarX.SelfLocalizationDynamicSimulation.tpc.pub.GlobalRobotPoseLocalization = GlobalRobotPoseLocalization
 
 
+# ArmarX.SelfLocalizationDynamicSimulation.tpc.pub.GlobalRobotPoseLocalizationCorrection:  Name of the `GlobalRobotPoseLocalizationCorrection` topic to publish data to.
+#  Attributes:
+#  - Default:            GlobalRobotPoseLocalizationCorrection
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.SelfLocalizationDynamicSimulation.tpc.pub.GlobalRobotPoseLocalizationCorrection = GlobalRobotPoseLocalizationCorrection
+
+
 # ArmarX.SelfLocalizationDynamicSimulation.tpc.pub.LaserScannerSelfLocalisation:  Name of the `LaserScannerSelfLocalisation` topic to publish data to.
 #  Attributes:
 #  - Default:            LaserScannerSelfLocalisation
@@ -307,14 +324,6 @@ ArmarX.SelfLocalizationDynamicSimulation.mem.robot_state.Memory = RobotState
 # ArmarX.SelfLocalizationDynamicSimulation.tpc.pub.PlatformUnit = PlatformUnit
 
 
-# ArmarX.SelfLocalizationDynamicSimulation.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
-#  Attributes:
-#  - Default:            MemoryUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SelfLocalizationDynamicSimulation.tpc.sub.MemoryListener = MemoryUpdates
-
-
 # ArmarX.SelfLocalizationDynamicSimulation.working_memory.update:  If enabled, updates the global pose in the working memory
 #  Attributes:
 #  - Default:            true
diff --git a/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg b/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
index d514a485..74604be7 100644
--- a/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
+++ b/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
@@ -117,73 +117,14 @@
 # ArmarX.SecondsStartupDelay = 0
 
 
-# ArmarX.SimulatorViewer_EntityDrawer.CommonStorageName:  Name of the the CommonStorage memory component
+# ArmarX.SimulatorViewer_EntityDrawer.MinimumLoggingLevel:  No Description
 #  Attributes:
-#  - Default:            CommonStorage
-#  - Case sensitivity:   yes
+#  - Default:            Verbose
+#  - Case sensitivity:   no
 #  - Required:           no
-# ArmarX.SimulatorViewer_EntityDrawer.CommonStorageName = CommonStorage
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.DebugDrawerSelectionTopic:  Name of the DebugDrawerSelectionTopic
-#  Attributes:
-#  - Default:            DebugDrawerSelections
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SimulatorViewer_EntityDrawer.DebugDrawerSelectionTopic = DebugDrawerSelections
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.DebugDrawerTopic:  Name of the DebugDrawerTopic
-#  Attributes:
-#  - Default:            DebugDrawerUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SimulatorViewer_EntityDrawer.DebugDrawerTopic = DebugDrawerUpdates
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.EnableProfiling:  enable profiler which is used for logging performance events
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.SimulatorViewer_EntityDrawer.EnableProfiling = false
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.MinimumLoggingLevel:  Local logging level only for this component
-#  Attributes:
-#  - Default:            Undefined
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 ArmarX.SimulatorViewer_EntityDrawer.MinimumLoggingLevel = Verbose
 
 
-# ArmarX.SimulatorViewer_EntityDrawer.ObjectName:  Name of IceGrid well-known object
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SimulatorViewer_EntityDrawer.ObjectName = ""
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.PriorKnowledgeName:  Name of the the PriorKnowledge memory component
-#  Attributes:
-#  - Default:            PriorKnowledge
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SimulatorViewer_EntityDrawer.PriorKnowledgeName = PriorKnowledge
-
-
-# ArmarX.SimulatorViewer_EntityDrawer.ShowDebugDrawing:  The simulator implements the DebugDrawerInterface. The debug visualizations (e.g. coordinate systems) can enabled/disbaled with this flag.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.SimulatorViewer_EntityDrawer.ShowDebugDrawing = true
-
-
 # ArmarX.SimulatorViewer_PhysicsWorldVisualization.EnableProfiling:  enable profiler which is used for logging performance events
 #  Attributes:
 #  - Default:            false
@@ -383,6 +324,15 @@ ArmarX.SimulatorViewer_SimulationWindow.Camera.z = 6000
 # ArmarX.UpdateRate = 30
 
 
+# ArmarX.UseDebugDrawer:  Whether to create the debug drawer component for the viewer.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.UseDebugDrawer = false
+
+
 # ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
 #  Attributes:
 #  - Default:            false
diff --git a/scenarios/NavigationSimulation/config/VisionMemory.cfg b/scenarios/NavigationSimulation/config/VisionMemory.cfg
index 4c7327ed..1b95447f 100644
--- a/scenarios/NavigationSimulation/config/VisionMemory.cfg
+++ b/scenarios/NavigationSimulation/config/VisionMemory.cfg
@@ -210,37 +210,21 @@
 # ArmarX.VisionMemory.mem.MemoryName = Vision
 
 
-# ArmarX.VisionMemory.mem.ltm..configuration:  
+# ArmarX.VisionMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.VisionMemory.mem.ltm..configuration = ""
+# ArmarX.VisionMemory.mem.ltm.configuration = {}
 
 
-# ArmarX.VisionMemory.mem.ltm..enabled:  
+# ArmarX.VisionMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm..enabled = false
-
-
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.VisionMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.storagepath = Default value not mapped.
+# ArmarX.VisionMemory.mem.ltm.enabled = false
 
 
 # ArmarX.VisionMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
diff --git a/scenarios/PlatformNavigation/config/ObjectMemory.cfg b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
index 2af60bde..b2764c9b 100644
--- a/scenarios/PlatformNavigation/config/ObjectMemory.cfg
+++ b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
@@ -513,21 +513,74 @@
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels = true
 
 
-# ArmarX.ObjectMemory.mem.ltm..configuration:  
+# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq:  Frequency to store the buffer to the LTM in Hz.
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm..configuration = ""
+# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq = 10
 
 
-# ArmarX.ObjectMemory.mem.ltm..enabled:  
+# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm..enabled = false
+# ArmarX.ObjectMemory.mem.ltm.enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime:  Waiting time in MS after each LTM update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime = -1
+
+
+# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled = true
 
 
 # ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
@@ -538,6 +591,40 @@
 # ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
 
 
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime:  Max Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime = -1
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime:  Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime = -1
+
+
 # ArmarX.ObjectMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
 #  Attributes:
 #  - Default:            Default value not mapped.
@@ -678,5 +765,3 @@
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 # ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/PlatformNavigation/config/VisionMemory.cfg b/scenarios/PlatformNavigation/config/VisionMemory.cfg
index 4c7327ed..0dfef493 100644
--- a/scenarios/PlatformNavigation/config/VisionMemory.cfg
+++ b/scenarios/PlatformNavigation/config/VisionMemory.cfg
@@ -210,21 +210,74 @@
 # ArmarX.VisionMemory.mem.MemoryName = Vision
 
 
-# ArmarX.VisionMemory.mem.ltm..configuration:  
+# ArmarX.VisionMemory.mem.ltm..buffer.storeFreq:  Frequency to store the buffer to the LTM in Hz.
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.VisionMemory.mem.ltm..configuration = ""
+# ArmarX.VisionMemory.mem.ltm..buffer.storeFreq = 10
 
 
-# ArmarX.VisionMemory.mem.ltm..enabled:  
+# ArmarX.VisionMemory.mem.ltm.depthImageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.depthImageExtractor.Enabled = true
+
+
+# ArmarX.VisionMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm..enabled = false
+# ArmarX.VisionMemory.mem.ltm.enabled = false
+
+
+# ArmarX.VisionMemory.mem.ltm.exrConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.exrConverter.Enabled = true
+
+
+# ArmarX.VisionMemory.mem.ltm.imageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.imageExtractor.Enabled = true
+
+
+# ArmarX.VisionMemory.mem.ltm.memFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.memFreqFilter.Enabled = false
+
+
+# ArmarX.VisionMemory.mem.ltm.memFreqFilter.WaitingTime:  Waiting time in MS after each LTM update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.mem.ltm.memFreqFilter.WaitingTime = -1
+
+
+# ArmarX.VisionMemory.mem.ltm.pngConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.pngConverter.Enabled = true
 
 
 # ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
@@ -235,6 +288,40 @@
 # ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
 
 
+# ArmarX.VisionMemory.mem.ltm.snapEqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.snapEqFilter.Enabled = false
+
+
+# ArmarX.VisionMemory.mem.ltm.snapEqFilter.MaxWaitingTime:  Max Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.mem.ltm.snapEqFilter.MaxWaitingTime = -1
+
+
+# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.Enabled = false
+
+
+# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.WaitingTime:  Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.WaitingTime = -1
+
+
 # ArmarX.VisionMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
 #  Attributes:
 #  - Default:            Default value not mapped.
@@ -275,5 +362,3 @@
 #  - Case sensitivity:   yes
 #  - Required:           no
 # ArmarX.VisionMemory.pointCloudMaxHistorySize = 20
-
-
diff --git a/scenarios/PlatformNavigation/config/example_client.cfg b/scenarios/PlatformNavigation/config/example_client.cfg
index eef85301..6a9bccd3 100644
--- a/scenarios/PlatformNavigation/config/example_client.cfg
+++ b/scenarios/PlatformNavigation/config/example_client.cfg
@@ -102,40 +102,6 @@
 # ArmarX.ExampleClient.ObjectName = ""
 
 
-# ArmarX.ExampleClient.mem.robot_state.Memory:  
-#  Attributes:
-#  - Default:            RobotState
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.mem.robot_state.Memory = RobotState
-
-
-# ArmarX.ExampleClient.mem.robot_state.localizationSegment:  Name of the localization memory core segment to use.
-#  Attributes:
-#  - Default:            Localization
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.mem.robot_state.localizationSegment = Localization
-
-
-# ArmarX.ExampleClient.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
-# Set to false to use this memory as a stand-alone.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ExampleClient.mns.MemoryNameSystemEnabled = true
-
-
-# ArmarX.ExampleClient.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
-#  Attributes:
-#  - Default:            MemoryNameSystem
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.mns.MemoryNameSystemName = MemoryNameSystem
-
-
 # ArmarX.ExampleClient.nav.NavigatorName:  Name of the Navigator
 #  Attributes:
 #  - Default:            navigator
@@ -242,5 +208,3 @@ ArmarX.ExampleClient.nav.NavigatorName = navigator
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 # ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/PlatformNavigation/config/navigation_memory.cfg b/scenarios/PlatformNavigation/config/navigation_memory.cfg
index f808f777..8253a316 100644
--- a/scenarios/PlatformNavigation/config/navigation_memory.cfg
+++ b/scenarios/PlatformNavigation/config/navigation_memory.cfg
@@ -155,7 +155,7 @@
 #  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mem.ltm.configuration = {}
+# ArmarX.NavigationMemory.mem.ltm..configuration = ""
 
 
 # ArmarX.NavigationMemory.mem.ltm.enabled:  
@@ -164,7 +164,23 @@
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.mem.ltm.enabled = false
+# ArmarX.NavigationMemory.mem.ltm..enabled = false
+
+
+# ArmarX.NavigationMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
+#  Attributes:
+#  - Default:            1024
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.NavigationMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
+
+
+# ArmarX.NavigationMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
+#  Attributes:
+#  - Default:            Default value not mapped.
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.NavigationMemory.mem.ltm.storagepath = Default value not mapped.
 
 
 # ArmarX.NavigationMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
@@ -286,5 +302,3 @@ ArmarX.NavigationMemory.p.snapshotToLoad = ./PriorKnowledgeData/navigation-graph
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 # ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/PlatformNavigation/config/navigator.cfg b/scenarios/PlatformNavigation/config/navigator.cfg
index 482582bb..233f17f4 100644
--- a/scenarios/PlatformNavigation/config/navigator.cfg
+++ b/scenarios/PlatformNavigation/config/navigator.cfg
@@ -139,12 +139,20 @@
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.TopicSuffix = ""
+ArmarX.Navigator.ObjectName = navigator
 
 
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
+# ArmarX.Navigator.RobotUnitName:  Name of the RobotUnit
 #  Attributes:
-#  - Default:            false
+#  - Default:            Armar6Unit
+#  - Case sensitivity:   no
+#  - Required:           no
+ArmarX.Navigator.RobotUnitName = Armar6Unit
+
+
+# ArmarX.Navigator.cmp.PlatformUnit:  Ice object name of the `PlatformUnit` component.
+#  Attributes:
+#  - Default:            PlatformUnit
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
@@ -270,18 +278,26 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.mem.nav.events.Provider = ""
+# ArmarX.Navigator.mem.nav.stack_result.Provider = ""
 
 
-# ArmarX.navigator.mem.nav.graph.CoreSegment:  
+# ArmarX.Navigator.mem.robot_state.Memory:  
 #  Attributes:
-#  - Default:            Location
+#  - Default:            RobotState
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.mem.nav.graph.CoreSegment = Location
+# ArmarX.Navigator.mem.robot_state.Memory = RobotState
 
 
-# ArmarX.navigator.mem.nav.graph.Memory:  
+# ArmarX.Navigator.mem.robot_state.descriptionSegment:  
+#  Attributes:
+#  - Default:            Description
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.Navigator.mem.robot_state.descriptionSegment = Description
+
+
+# ArmarX.Navigator.mem.robot_state.localizationSegment:  
 #  Attributes:
 #  - Default:            Navigation
 #  - Case sensitivity:   yes
@@ -289,15 +305,16 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 # ArmarX.navigator.mem.nav.graph.Memory = Navigation
 
 
-# ArmarX.navigator.mem.nav.param.CoreSegment:  
+# ArmarX.Navigator.mem.robot_state.proprioceptionSegment:  
 #  Attributes:
-#  - Default:            Parameterization
+#  - Default:            Proprioception
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.mem.nav.param.CoreSegment = Parameterization
+# ArmarX.Navigator.mem.robot_state.proprioceptionSegment = Proprioception
 
 
-# ArmarX.navigator.mem.nav.param.Memory:  
+# ArmarX.Navigator.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
+# Set to false to use this memory as a stand-alone.
 #  Attributes:
 #  - Default:            Navigation
 #  - Case sensitivity:   yes
@@ -321,15 +338,15 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 # ArmarX.navigator.mem.nav.stack_result.CoreSegment = ""
 
 
-# ArmarX.navigator.mem.nav.stack_result.Memory:  
+# ArmarX.Navigator.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
 #  Attributes:
-#  - Default:            Navigation
+#  - Default:            MemoryUpdates
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.mem.nav.stack_result.Memory = Navigation
+# ArmarX.Navigator.tpc.sub.MemoryListener = MemoryUpdates
 
 
-# ArmarX.navigator.mem.nav.stack_result.Provider:  Name of this provider
+# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
@@ -386,5 +403,3 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 #  - Case sensitivity:   yes
 #  - Required:           no
 ArmarX.navigator.p.occupancy_grid.occopied_threshold = 0.8
-
-
diff --git a/source/armarx/navigation/client/ComponentPlugin.cpp b/source/armarx/navigation/client/ComponentPlugin.cpp
index b047700c..173e3dd4 100644
--- a/source/armarx/navigation/client/ComponentPlugin.cpp
+++ b/source/armarx/navigation/client/ComponentPlugin.cpp
@@ -17,93 +17,97 @@
 
 // ComponentPlugin
 
-armarx::navigation::client::ComponentPlugin::~ComponentPlugin() = default;
-
-void
-armarx::navigation::client::ComponentPlugin::postCreatePropertyDefinitions(
-    armarx::PropertyDefinitionsPtr& properties)
+namespace armarx::navigation::client
 {
-    if (not properties->hasDefinition(PROPERTY_NAME))
-    {
-        properties->defineOptionalProperty<std::string>(
-            PROPERTY_NAME, "navigator", "Name of the Navigator");
-    }
-}
 
-void
-armarx::navigation::client::ComponentPlugin::preOnInitComponent()
-{
-    ARMARX_TRACE;
-    parent<armarx::Component>().usingProxyFromProperty(PROPERTY_NAME);
-}
+    ComponentPlugin::~ComponentPlugin() = default;
 
-void
-armarx::navigation::client::ComponentPlugin::preOnConnectComponent()
-{
-    ARMARX_TRACE;
-    parent<armarx::Component>().getProxyFromProperty(navigatorPrx, PROPERTY_NAME);
+    void
+    ComponentPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties)
+    {
+        if (not properties->hasDefinition(PROPERTY_NAME))
+        {
+            properties->defineOptionalProperty<std::string>(
+                PROPERTY_NAME, "navigator", "Name of the Navigator");
+        }
+    }
 
-    ARMARX_TRACE;
-    const std::string componentName = parent().getName();
+    void
+    ComponentPlugin::preOnInitComponent()
+    {
+        ARMARX_TRACE;
+        parent<armarx::Component>().usingProxyFromProperty(PROPERTY_NAME);
+    }
 
-    ARMARX_CHECK_NOT_NULL(navigatorPrx) << "Navigator proxy is null!";
-    iceNavigator.setNavigatorComponent(navigatorPrx);
-}
+    void
+    ComponentPlugin::preOnConnectComponent()
+    {
+        ARMARX_TRACE;
+        parent<armarx::Component>().getProxyFromProperty(navigatorPrx, PROPERTY_NAME);
 
-void
-armarx::navigation::client::ComponentPlugin::configureNavigator(
-    const client::NavigationStackConfig& stackConfig,
-    const std::string& configId)
-{
-    ARMARX_TRACE;
+        ARMARX_TRACE;
+        const std::string componentName = parent().getName();
 
-    // ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
+        ARMARX_CHECK_NOT_NULL(navigatorPrx) << "Navigator proxy is null!";
+        iceNavigator.setNavigatorComponent(navigatorPrx);
+    }
 
-    eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler>
+    void
+    ComponentPlugin::configureNavigator(const client::NavigationStackConfig& stackConfig,
+                                        const std::string& configId)
     {
-        if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>())
-        {
-            ARMARX_INFO << "Using memory event callbacks.";
-            // must(!!) use a reference here: otherwise the mns events won't work
-            auto& memoryNameSystem =
-                parent<armarx::armem::client::plugins::ListeningPluginUser>().memoryNameSystem();
-            return std::make_unique<MemorySubscriber>(configId, memoryNameSystem);
-        }
+        ARMARX_TRACE;
 
-        ARMARX_INFO << "Cannot use memory event callbacks as this component is not derived from "
-                       "`armarx::armem::client::plugins::ListeningPluginUser`";
+        // ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
 
-        return std::make_unique<SimpleEventHandler>();
-    }();
-
-    iceNavigator.createConfig(stackConfig, configId);
+        eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler>
+        {
+            if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>())
+            {
+                ARMARX_INFO << "Using memory event callbacks.";
+                // must(!!) use a reference here: otherwise the mns events won't work
+                auto& memoryNameSystem =
+                    parent<armarx::armem::client::plugins::ListeningPluginUser>()
+                        .memoryNameSystem();
+                return std::make_unique<MemorySubscriber>(configId, memoryNameSystem);
+            }
+
+            ARMARX_INFO
+                << "Cannot use memory event callbacks as this component is not derived from "
+                   "`armarx::armem::client::plugins::ListeningPluginUser`";
+
+            return std::make_unique<SimpleEventHandler>();
+        }();
+
+        iceNavigator.createConfig(stackConfig, configId);
+
+        navigator = std::make_unique<Navigator>(Navigator::InjectedServices{
+            .navigator = &iceNavigator, .subscriber = eventHandler.get()});
+    }
 
-    navigator = std::make_unique<Navigator>(
-        Navigator::InjectedServices{.navigator = &iceNavigator, .subscriber = eventHandler.get()});
-}
+    // ComponentPluginUser
 
-// ComponentPluginUser
+    ComponentPluginUser::ComponentPluginUser()
+    {
+        ARMARX_TRACE;
+        addPlugin(plugin);
+    }
 
-armarx::navigation::client::ComponentPluginUser::ComponentPluginUser()
-{
-    ARMARX_TRACE;
-    addPlugin(plugin);
-}
+    void
+    ComponentPluginUser::configureNavigator(const client::NavigationStackConfig& stackConfig)
+    {
+        ARMARX_TRACE;
+        plugin->configureNavigator(stackConfig, getName());
+    }
 
-void
-armarx::navigation::client::ComponentPluginUser::configureNavigator(
-    const client::NavigationStackConfig& stackConfig)
-{
-    ARMARX_TRACE;
-    plugin->configureNavigator(stackConfig, getName());
-}
+    Navigator&
+    ComponentPluginUser::getNavigator()
+    {
+        ARMARX_CHECK_NOT_NULL(plugin->navigator)
+            << "You need to call `configureNavigator()` before you can access the navigator!";
+        return *plugin->navigator;
+    }
 
-armarx::navigation::client::Navigator&
-armarx::navigation::client::ComponentPluginUser::getNavigator()
-{
-    ARMARX_CHECK_NOT_NULL(plugin->navigator)
-        << "You need to call `configureNavigator()` before you can access the navigator!";
-    return *plugin->navigator;
-}
+    ComponentPluginUser::~ComponentPluginUser() = default;
 
-armarx::navigation::client::ComponentPluginUser::~ComponentPluginUser() = default;
+} // namespace armarx::navigation::client
diff --git a/source/armarx/navigation/client/Navigator.cpp b/source/armarx/navigation/client/Navigator.cpp
index 15fb4bc1..e2f47c4d 100644
--- a/source/armarx/navigation/client/Navigator.cpp
+++ b/source/armarx/navigation/client/Navigator.cpp
@@ -60,6 +60,13 @@ namespace armarx::navigation::client
 
         srv.navigator->moveTo(path, frame);
     }
+    
+    void Navigator::update(const std::vector<core::Pose>& waypoints, core::NavigationFrame frame)
+    {
+        ARMARX_TRACE;;
+        ARMARX_CHECK_NOT_NULL(srv.navigator) << "Navigator service must not be null!";
+        srv.navigator->update(waypoints, frame);
+    }
 
 
     void
diff --git a/source/armarx/navigation/client/Navigator.h b/source/armarx/navigation/client/Navigator.h
index d116a1de..32af0bb9 100644
--- a/source/armarx/navigation/client/Navigator.h
+++ b/source/armarx/navigation/client/Navigator.h
@@ -132,6 +132,8 @@ namespace armarx::navigation::client
 
         void moveTowards(const core::Direction& direction, core::NavigationFrame frame);
 
+        void update(const std::vector<core::Pose>& waypoints, core::NavigationFrame frame);
+
         void pause();
 
         void resume();
diff --git a/source/armarx/navigation/client/ice/NavigatorInterface.ice b/source/armarx/navigation/client/ice/NavigatorInterface.ice
index 678379d0..806aa2d9 100644
--- a/source/armarx/navigation/client/ice/NavigatorInterface.ice
+++ b/source/armarx/navigation/client/ice/NavigatorInterface.ice
@@ -67,6 +67,8 @@ module armarx
 
                 void moveTo2(detail::Waypoints waypoints, string navigationFrame, string callerId);
 
+                void updateMoveTo(Eigen::Matrix4fSeq waypoints, string navigationFrame, string callerId);
+
                 void
                 moveTowards(Eigen::Vector3f direction, string navigationFrame, string callerId);
 
diff --git a/source/armarx/navigation/client/services/IceNavigator.cpp b/source/armarx/navigation/client/services/IceNavigator.cpp
index 965a59ee..cc1c51b4 100644
--- a/source/armarx/navigation/client/services/IceNavigator.cpp
+++ b/source/armarx/navigation/client/services/IceNavigator.cpp
@@ -2,6 +2,8 @@
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
+#include "armarx/navigation/core/types.h"
+
 
 namespace armarx::navigation::client
 {
@@ -79,6 +81,16 @@ namespace armarx::navigation::client
             direction, core::NavigationFrameNames.to_name(navigationFrame), configId);
     }
 
+    void
+    IceNavigator::update(const std::vector<core::Pose>& waypoints,
+                         core::NavigationFrame navigationFrame)
+    {
+        ARMARX_TRACE;
+
+        navigator->updateMoveTo(
+            convert(waypoints), core::NavigationFrameNames.to_name(navigationFrame), configId);
+    }
+
     void
     IceNavigator::pause()
     {
diff --git a/source/armarx/navigation/client/services/IceNavigator.h b/source/armarx/navigation/client/services/IceNavigator.h
index 60750002..142bebb4 100644
--- a/source/armarx/navigation/client/services/IceNavigator.h
+++ b/source/armarx/navigation/client/services/IceNavigator.h
@@ -3,6 +3,8 @@
 
 #include <string>
 
+#include "armarx/navigation/core/basic_types.h"
+#include "armarx/navigation/core/types.h"
 #include <armarx/navigation/client/NavigationStackConfig.h>
 #include <armarx/navigation/client/ice/NavigatorInterface.h>
 #include <armarx/navigation/client/ice_conversions.h>
@@ -35,6 +37,9 @@ namespace armarx::navigation::client
         void moveTowards(const core::Direction& direction,
                          core::NavigationFrame navigationFrame) override;
 
+        void update(const std::vector<core::Pose>& waypoints,
+                    core::NavigationFrame navigationFrame) override;
+
         void pause() override;
 
         void resume() override;
diff --git a/source/armarx/navigation/components/navigator/CMakeLists.txt b/source/armarx/navigation/components/navigator/CMakeLists.txt
index a8d6245e..a686acda 100644
--- a/source/armarx/navigation/components/navigator/CMakeLists.txt
+++ b/source/armarx/navigation/components/navigator/CMakeLists.txt
@@ -8,7 +8,8 @@ armarx_add_component(navigator
     DEPENDENCIES
         # ArmarXCore
         ArmarXCore
-        # ArmarXCoreComponentPlugins  # For DebugObserver plugin. ArmarXGui
+        ArmarXCoreComponentPlugins  # For DebugObserver plugin. 
+        # ArmarXGui
         ArmarXGuiComponentPlugins # For RemoteGui plugin.
         # RobotAPI
         RobotAPICore
@@ -18,15 +19,13 @@ armarx_add_component(navigator
         armem_robot
         armem_robot_state
         armem_vision
-        # This project ${PROJECT_NAME}Interfaces  # For ice interfaces from this
-        # package. This component
+        # navigation
         armarx_navigation::server
         armarx_navigation::client
         armarx_navigation::util
         armarx_navigation::factories
+        # Simox
         Simox::SimoxUtility
+        # others
         Eigen3::Eigen
-    ICE_DEPENDENCIES
-        ArmarXCoreInterfaces
-        RobotAPIInterfaces
 )
diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index 4cf28549..32cc481f 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -281,6 +281,7 @@ namespace armarx::navigation::components::navigator
                                                     .publisher =
                                                         memoryPublishers.at(callerId).get(),
                                                     .introspector = &(introspector.value()),
+                                                    .debugObserverHelper = &getDebugObserverComponentPlugin(),
                                                     .sceneProvider = &sceneProvider.value()}));
     }
 
@@ -313,6 +314,37 @@ namespace armarx::navigation::components::navigator
         }
     }
 
+    void
+    Navigator::updateMoveTo(const std::vector<Eigen::Matrix4f>& waypoints,
+                            const std::string& navigationMode,
+                            const std::string& callerId,
+                            const Ice::Current&  /*c*/)
+    {
+        ARMARX_TRACE;
+
+        ARMARX_INFO << "updateMoveTo() requested by caller '" << callerId << "'";
+        ARMARX_CHECK(navigators.count(callerId) > 0)
+            << "Navigator config for caller `" << callerId << "` not registered!";
+
+        const auto checkIsActiveNavigator = [&](const std::string& callerId)
+        {
+            const std::optional<std::string> activeNavigatorCallerId = activeNavigator();
+            if (not activeNavigatorCallerId.has_value())
+            {
+                ARMARX_VERBOSE << "No navigator is active.";
+                return false;
+            }
+
+            return activeNavigatorCallerId == callerId;
+        };
+
+        ARMARX_CHECK(checkIsActiveNavigator(callerId))
+            << "The navigator with id `" << callerId << "` is not active!";
+
+        navigators.at(callerId).update(convert(waypoints),
+                                       core::NavigationFrameNames.from_name(navigationMode));
+    }
+
 
     void
     Component::moveTo2(const client::detail::Waypoints& waypoints,
@@ -458,27 +490,67 @@ namespace armarx::navigation::components::navigator
         return def;
     }
 
+    void
+    visualize(const algorithms::Costmap& costmap, viz::Client& arviz, const std::string& name)
+    {
+        const auto cmap = simox::color::cmaps::viridis();
+        const float vmax = costmap.getGrid().array().maxCoeff();
+
+        const auto asColor = [&cmap, &vmax](const float distance) -> viz::data::Color
+        {
+            const auto color = cmap.at(distance, 0.F, vmax);
+            return {color.a, color.r, color.g, color.b};
+        };
+
+        auto layer = arviz.layer("costmap_" + name);
+
+        const std::int64_t cols = costmap.getGrid().cols();
+        const std::int64_t rows = costmap.getGrid().rows();
+
+        auto mesh = viz::Mesh("");
+
+        std::vector<std::vector<Eigen::Vector3f>> vertices;
+        std::vector<std::vector<viz::data::Color>> colors;
+
+        for (int r = 0; r < rows; r++)
+        {
+            auto& verticesRow = vertices.emplace_back(cols);
+            auto& colorsRow = colors.emplace_back(cols);
+
+            for (int c = 0; c < cols; c++)
+            {
+                verticesRow.at(c) = conv::to3D(costmap.toPositionGlobal({r, c}));
+                colorsRow.at(c) = asColor(costmap.getGrid()(r, c));
+            }
+        }
+
+        mesh.grid2D(vertices, colors);
+
+        layer.add(mesh);
+
+        arviz.commit(layer);
+    }
 
     server::Navigator*
-    Component::activeNavigator()
+    components::Navigator::activeNavigator()
     {
         ARMARX_TRACE;
         // We define the active navigator to be the one whose movement is enabled.
-        const auto isActive = [](auto& nameNavPair) -> bool
+        const auto isActive = [](const auto& nameNavPair) -> bool
         {
-            server::Navigator& navigator = nameNavPair.second;
+            const auto& [name, navigator] = nameNavPair;
             return not navigator.isPaused();
         };
 
-        auto it = std::find_if(navigators.begin(), navigators.end(), isActive);
+        const auto it = std::find_if(navigators.begin(), navigators.end(), isActive);
 
         // no navigator active?
         if (it == navigators.end())
         {
-            return nullptr;
+            return std::nullopt;
         }
 
-        return &it->second;
+        return it->first;
     }
 
 } // namespace armarx::navigation::components::navigator
diff --git a/source/armarx/navigation/components/navigator/Component.h b/source/armarx/navigation/components/navigator/Component.h
index 316e4da5..d5f41ea9 100644
--- a/source/armarx/navigation/components/navigator/Component.h
+++ b/source/armarx/navigation/components/navigator/Component.h
@@ -33,6 +33,7 @@
 
 #include <Ice/Object.h>
 
+#include "ArmarXCore/libraries/ArmarXCoreComponentPlugins/DebugObserverComponentPlugin.h"
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 #include <ArmarXCore/util/CPPUtility/TripleBuffer.h>
@@ -85,7 +86,8 @@ namespace armarx::navigation::components::navigator
         virtual public client::NavigatorInterface,
         virtual public ObjectPoseClientPluginUser,
         virtual public ArVizComponentPluginUser,
-        virtual public armarx::control::client::ComponentPluginUser
+        virtual public armarx::control::client::ComponentPluginUser,
+        virtual public armarx::DebugObserverComponentPluginUser
     // virtual public armem::ListeningClientPluginUser
     {
 
@@ -112,6 +114,11 @@ namespace armarx::navigation::components::navigator
                      const std::string& callerId,
                      const Ice::Current& c = Ice::emptyCurrent) override;
 
+        void updateMoveTo(const std::vector<Eigen::Matrix4f>& waypoints,
+                    const std::string& navigationMode,
+                    const std::string& callerId,
+                    const Ice::Current& c = Ice::emptyCurrent) override;
+
         void moveTowards(const Eigen::Vector3f& direction,
                          const std::string& navigationMode,
                          const std::string& callerId,
@@ -158,7 +165,7 @@ namespace armarx::navigation::components::navigator
         // [[nodiscard]] VirtualRobot::RobotPtr getRobot();
         // void updateRobot();
 
-        server::Navigator* activeNavigator();
+        std::optional<std::string> activeNavigator() const;
 
     private:
         void visualizeSPFA();
diff --git a/source/armarx/navigation/core/NavigatorInterface.h b/source/armarx/navigation/core/NavigatorInterface.h
index 05df688d..18e50335 100644
--- a/source/armarx/navigation/core/NavigatorInterface.h
+++ b/source/armarx/navigation/core/NavigatorInterface.h
@@ -6,6 +6,10 @@
 namespace armarx::navigation::core
 {
 
+    /**
+     * @brief Navigator interface for PointGoal navigation (with waypoints) and relative movement
+     * 
+     */
     class NavigatorInterface
     {
 
@@ -19,6 +23,8 @@ namespace armarx::navigation::core
         virtual void moveTo(const std::vector<client::WaypointTarget>& targets,
                             core::NavigationFrame navigationFrame) = 0;
 
+        virtual void update(const std::vector<core::Pose>& waypoints,
+                            core::NavigationFrame navigationFrame) = 0;
 
         virtual void pause() = 0;
 
diff --git a/source/armarx/navigation/server/Navigator.cpp b/source/armarx/navigation/server/Navigator.cpp
index af121508..22913fa5 100644
--- a/source/armarx/navigation/server/Navigator.cpp
+++ b/source/armarx/navigation/server/Navigator.cpp
@@ -5,9 +5,6 @@
 #include <optional>
 #include <thread>
 
-#include <range/v3/view.hpp>
-#include <range/v3/view/reverse.hpp>
-
 #include <boost/graph/dijkstra_shortest_paths.hpp>
 #include <boost/graph/named_function_params.hpp>
 #include <boost/graph/properties.hpp>
@@ -42,6 +39,8 @@
 #include <armarx/navigation/server/StackResult.h>
 #include <armarx/navigation/server/monitoring/GoalReachedMonitor.h>
 #include <armarx/navigation/server/scene_provider/SceneProviderInterface.h>
+#include <range/v3/view.hpp>
+#include <range/v3/view/reverse.hpp>
 
 
 namespace armarx::navigation::server
@@ -164,6 +163,33 @@ namespace armarx::navigation::server
         moveToAbsolute(globalWaypoints);
     }
 
+    void
+    Navigator::update(const std::vector<core::Pose>& waypoints,
+                      core::NavigationFrame navigationFrame)
+    {
+        ARMARX_INFO << "Received update() request.";
+
+        std::vector<core::Pose> globalWaypoints;
+        switch (navigationFrame)
+        {
+            case core::NavigationFrame::Absolute:
+                globalWaypoints = waypoints;
+                break;
+            case core::NavigationFrame::Relative:
+                globalWaypoints.reserve(waypoints.size());
+                std::transform(
+                    std::begin(waypoints),
+                    std::end(waypoints),
+                    std::back_inserter(globalWaypoints),
+                    [&](const core::Pose& p)
+                    { return core::Pose(srv.sceneProvider->scene().robot->getGlobalPose()) * p; });
+                break;
+        }
+
+        ARMARX_TRACE;
+        updateAbsolute(globalWaypoints);
+    }
+
     using GraphPath = std::vector<semrel::ShapeID>;
 
 
@@ -626,6 +652,8 @@ namespace armarx::navigation::server
         ARMARX_TRACE;
 
         ARMARX_INFO << "Planning local trajectory enabled";
+
+        // FIXME instead of PeriodicTask, use RunningTask.
         runningTask = new PeriodicTask<Navigator>(this,
                                                   &Navigator::run,
                                                   config.general.tasks.replanningUpdatePeriod,
@@ -644,13 +672,14 @@ namespace armarx::navigation::server
     Navigator::moveToAbsolute(const std::vector<core::Pose>& waypoints)
     {
         ARMARX_TRACE;
+
         // if this navigator is in use, stop the movement ...
         pause();
         // ... and all threads
         stopAllThreads();
 
         // FIXME remove
-        std::this_thread::sleep_for(std::chrono::seconds(1));
+        //std::this_thread::sleep_for(std::chrono::seconds(1));
 
         ARMARX_TRACE;
         ARMARX_CHECK_NOT_EMPTY(waypoints);
@@ -710,6 +739,48 @@ namespace armarx::navigation::server
         ARMARX_INFO << "Movement started.";
     }
 
+
+    void
+    Navigator::updateAbsolute(const std::vector<core::Pose>& waypoints)
+    {
+        ARMARX_TRACE;
+        ARMARX_CHECK_NOT_EMPTY(waypoints);
+
+
+        // global planner
+        ARMARX_INFO << "Planning global trajectory";
+        ARMARX_CHECK_NOT_NULL(config.stack.globalPlanner);
+        // TODO plan on multiple waypoints, ignoring waypoints for now
+        // idea: compute multiple global trajectories, one for each segment between waypoints.
+
+        srv.introspector->onGoal(waypoints.back());
+        globalPlan = config.stack.globalPlanner->plan(waypoints.back());
+
+        ARMARX_TRACE;
+
+        if (not globalPlan.has_value())
+        {
+            ARMARX_WARNING << "No global trajectory. Cannot move.";
+            srv.publisher->globalPlanningFailed(
+                core::GlobalPlanningFailedEvent{{.timestamp = armarx::Clock::Now()}, {""}});
+
+            srv.introspector->failure();
+            return;
+        }
+
+        ARMARX_TRACE;
+        srv.publisher->globalTrajectoryUpdated(globalPlan.value());
+        srv.introspector->onGlobalPlannerResult(globalPlan.value());
+        // srv.executor->execute(globalPlan->trajectory);
+
+        ARMARX_INFO << "Global planning completed. Will now start all required threads";
+        ARMARX_TRACE;
+
+        startStack();
+
+        ARMARX_INFO << "Movement started.";
+    }
+
     void
     Navigator::moveTowards(const core::Direction& direction, core::NavigationFrame navigationFrame)
     {
@@ -733,8 +804,67 @@ namespace armarx::navigation::server
             const Duration duration =
                 armarx::core::time::StopWatch::measure([&]() { updateScene(); });
 
-            ARMARX_VERBOSE << deactivateSpam(0.2) << "Scene update: " << duration.toMilliSecondsDouble()
-                           << "ms.";
+            ARMARX_VERBOSE << deactivateSpam(0.2)
+                           << "Scene update: " << duration.toMilliSecondsDouble() << "ms.";
+
+            srv.debugObserverHelper->setDebugObserverDatafield("scene update [ms]", duration.toMilliSecondsDouble());
+        }
+
+        // global planner update if goal has changed
+        {
+            std::lock_guard g{globalPlanningRequestMtx};
+
+            if (globalPlanningRequest.has_value())
+            {
+                const auto& waypoints = globalPlanningRequest.value();
+
+                // recreate goal monitor
+                {
+                    // first we check if we are already at the goal position
+                    goalReachedMonitor = std::nullopt;
+                    goalReachedMonitor = GoalReachedMonitor(
+                        waypoints.back(), srv.sceneProvider->scene(), GoalReachedMonitorConfig());
+
+                    if (goalReachedMonitor->goalReached())
+                    {
+                        ARMARX_INFO << "Already at goal position. Robot won't move.";
+
+                        srv.publisher->goalReached(core::GoalReachedEvent{
+                            {armarx::Clock::Now()},
+                            core::Pose(srv.sceneProvider->scene().robot->getGlobalPose())});
+
+                        return;
+                    }
+                }
+
+                // global planning
+                {
+                    // global planner
+                    ARMARX_INFO << "Update/Planning global trajectory";
+                    ARMARX_CHECK_NOT_NULL(config.stack.globalPlanner);
+                    // TODO plan on multiple waypoints, ignoring waypoints for now
+                    // idea: compute multiple global trajectories, one for each segment between waypoints.
+
+                    srv.introspector->onGoal(waypoints.back());
+                    globalPlan = config.stack.globalPlanner->plan(waypoints.back());
+
+                    ARMARX_TRACE;
+
+                    if (not globalPlan.has_value())
+                    {
+                        ARMARX_WARNING << "No global trajectory. Cannot move.";
+                        srv.publisher->globalPlanningFailed(core::GlobalPlanningFailedEvent{
+                            {.timestamp = armarx::Clock::Now()}, {""}});
+
+                        srv.introspector->failure();
+                        return;
+                    }
+
+                    ARMARX_TRACE;
+                    srv.publisher->globalTrajectoryUpdated(globalPlan.value());
+                    srv.introspector->onGlobalPlannerResult(globalPlan.value());
+                }
+            }
         }
 
         // local planner update
@@ -753,6 +883,8 @@ namespace armarx::navigation::server
                 });
             ARMARX_VERBOSE << deactivateSpam(0.2)
                            << "Local planner update: " << duration.toMilliSecondsDouble() << "ms.";
+
+            srv.debugObserverHelper->setDebugObserverDatafield("local planner update [ms]", duration.toMilliSecondsDouble());
         }
 
         // monitor update
@@ -764,6 +896,8 @@ namespace armarx::navigation::server
 
             ARMARX_VERBOSE << deactivateSpam(0.2)
                            << "Monitor update: " << duration.toMilliSecondsDouble() << "ms.";
+
+            srv.debugObserverHelper->setDebugObserverDatafield("monitor update [ms]", duration.toMilliSecondsDouble());
         }
     }
 
@@ -796,7 +930,7 @@ namespace armarx::navigation::server
     void
     Navigator::updateExecutor(const std::optional<local_planning::LocalPlannerResult>& localPlan)
     {
-        if(srv.executor == nullptr)
+        if (srv.executor == nullptr)
         {
             return;
         }
@@ -835,7 +969,8 @@ namespace armarx::navigation::server
     }
 
     void
-    Navigator::updateIntrospector(const std::optional<local_planning::LocalPlannerResult>& localPlan)
+    Navigator::updateIntrospector(
+        const std::optional<local_planning::LocalPlannerResult>& localPlan)
     {
         ARMARX_CHECK_NOT_NULL(srv.introspector);
 
@@ -930,7 +1065,7 @@ namespace armarx::navigation::server
 
         executorEnabled.store(false);
 
-        if(srv.executor != nullptr)
+        if (srv.executor != nullptr)
         {
             srv.executor->stop();
         }
@@ -943,7 +1078,7 @@ namespace armarx::navigation::server
 
         executorEnabled.store(true);
 
-        if(srv.executor != nullptr)
+        if (srv.executor != nullptr)
         {
             srv.executor->start();
         }
diff --git a/source/armarx/navigation/server/Navigator.h b/source/armarx/navigation/server/Navigator.h
index 5c236f3a..f4c0fb10 100644
--- a/source/armarx/navigation/server/Navigator.h
+++ b/source/armarx/navigation/server/Navigator.h
@@ -30,6 +30,7 @@
 #include <Eigen/Core>
 
 // ArmarX
+#include "ArmarXCore/libraries/DebugObserverHelper/DebugObserverHelper.h"
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
@@ -81,6 +82,8 @@ namespace armarx::navigation::server
             EventPublishingInterface* publisher;
             IntrospectorInterface* introspector = nullptr;
 
+            armarx::DebugObserverHelper* debugObserverHelper;
+
             scene_provider::SceneProviderInterface* sceneProvider;
         };
 
@@ -89,6 +92,9 @@ namespace armarx::navigation::server
         void moveTo(const std::vector<core::Pose>& waypoints,
                     core::NavigationFrame navigationFrame) override;
 
+        void update(const std::vector<core::Pose>& waypoints,
+                    core::NavigationFrame navigationFrame) override;
+
 
         void moveTo(const std::vector<client::WaypointTarget>& targets,
                     core::NavigationFrame navigationFrame) override;
@@ -116,6 +122,8 @@ namespace armarx::navigation::server
         void moveToAbsolute(const std::vector<core::Pose>& waypoints);
         void moveTowardsAbsolute(const core::Direction& direction);
 
+        void updateAbsolute(const std::vector<core::Pose>& waypoints);
+
         void run();
 
         void updateScene();
@@ -155,6 +163,11 @@ namespace armarx::navigation::server
 
         std::optional<global_planning::GlobalPlannerResult> globalPlan;
         std::optional<local_planning::LocalPlannerResult> localPlan;
+
+        using Waypoints = std::vector<core::Pose>;
+
+        std::mutex globalPlanningRequestMtx;
+        std::optional<Waypoints> globalPlanningRequest;
     };
 
 } // namespace armarx::navigation::server
-- 
GitLab


From 0bf689dda741a622cedcf1d8f28cd5660327993a Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 19:40:59 +0200
Subject: [PATCH 2/7] minor cleanup

---
 .../components/navigator/Component.cpp           | 16 +++++++++++++++-
 .../navigation/components/navigator/Component.h  |  3 ++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index 32cc481f..d4938415 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -29,6 +29,7 @@
 #include <cstdint>
 #include <iterator>
 #include <memory>
+#include <optional>
 #include <utility>
 
 #include <Eigen/Geometry>
@@ -532,7 +533,20 @@ namespace armarx::navigation::components::navigator
     }
 
     server::Navigator*
-    components::Navigator::activeNavigator()
+    Component::activeNavigator()
+    {
+        
+        const auto navigatorId = activeNavigatorId();
+        if(not navigatorId.has_value())
+        {
+            return nullptr;
+        }
+
+        return &navigators.at(navigatorId.value());
+    }
+
+    std::optional<std::string>
+    Component::activeNavigatorId() const
     {
         ARMARX_TRACE;
         // We define the active navigator to be the one whose movement is enabled.
diff --git a/source/armarx/navigation/components/navigator/Component.h b/source/armarx/navigation/components/navigator/Component.h
index d5f41ea9..5e552d7f 100644
--- a/source/armarx/navigation/components/navigator/Component.h
+++ b/source/armarx/navigation/components/navigator/Component.h
@@ -165,7 +165,8 @@ namespace armarx::navigation::components::navigator
         // [[nodiscard]] VirtualRobot::RobotPtr getRobot();
         // void updateRobot();
 
-        std::optional<std::string> activeNavigator() const;
+        server::Navigator* activeNavigator();
+        std::optional<std::string> activeNavigatorId() const;
 
     private:
         void visualizeSPFA();
-- 
GitLab


From 5801fb3c6e0bb280d307631cdfb413c257d4cf90 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 19:43:01 +0200
Subject: [PATCH 3/7] fix: build

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

diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp
index d4938415..402c90e4 100644
--- a/source/armarx/navigation/components/navigator/Component.cpp
+++ b/source/armarx/navigation/components/navigator/Component.cpp
@@ -316,7 +316,7 @@ namespace armarx::navigation::components::navigator
     }
 
     void
-    Navigator::updateMoveTo(const std::vector<Eigen::Matrix4f>& waypoints,
+    Component::updateMoveTo(const std::vector<Eigen::Matrix4f>& waypoints,
                             const std::string& navigationMode,
                             const std::string& callerId,
                             const Ice::Current&  /*c*/)
@@ -329,7 +329,7 @@ namespace armarx::navigation::components::navigator
 
         const auto checkIsActiveNavigator = [&](const std::string& callerId)
         {
-            const std::optional<std::string> activeNavigatorCallerId = activeNavigator();
+            const std::optional<std::string> activeNavigatorCallerId = activeNavigatorId();
             if (not activeNavigatorCallerId.has_value())
             {
                 ARMARX_VERBOSE << "No navigator is active.";
-- 
GitLab


From 244b5edbead131343d3de4b4b6dea967f2cf5374 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 19:47:53 +0200
Subject: [PATCH 4/7] scenario update: removing memoryx

---
 .../NavigationSimulation.scx                  | 11 --------
 .../config/ObjectMemory.cfg                   | 25 +++++++++++++------
 .../SelfLocalizationDynamicSimulationApp.cfg  |  4 +--
 3 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/scenarios/NavigationSimulation/NavigationSimulation.scx b/scenarios/NavigationSimulation/NavigationSimulation.scx
index 66b83347..5115bad6 100644
--- a/scenarios/NavigationSimulation/NavigationSimulation.scx
+++ b/scenarios/NavigationSimulation/NavigationSimulation.scx
@@ -3,12 +3,7 @@
 	<application name="DebugObserver" instance="" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ConditionHandler" instance="" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="SystemObserver" instance="" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="CommonStorage" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="PriorKnowledge" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="LongtermMemory" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="WorkingMemory" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="RobotStateComponent" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="ViewSelectionApp" instance="" package="RobotAPI" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="ObjectLocalizationSaliencyApp" instance="" package="RobotComponents" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="SimulatorApp" instance="" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="SimulatorViewerApp" instance="" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
@@ -19,25 +14,19 @@
 	<application name="DepthImageProviderDynamicSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="ObjectLocalizationDynamicSimulationApp" instance="TexturedRecognition" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="ObjectLocalizationDynamicSimulationApp" instance="SegmentableRecognition" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
-	<application name="ObjectMemoryObserver" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="HandUnitDynamicSimulationApp" instance="LeftHand" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="HandUnitDynamicSimulationApp" instance="RightHand" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ForceTorqueObserver" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="SelfLocalizationDynamicSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="RobotHandLocalizationDynamicSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="HeadIKUnit" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="TCPControlUnit" instance="" package="RobotAPI" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="ProfilerObserverApp" instance="" package="ArmarXCore" nodeName="" enabled="false" iceAutoRestart="false"/>
-	<application name="GraphNodePoseResolverApp" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ImageSourceSelectionApp" instance="" package="VisionX" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="RobotUnitSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="LaserScannerUnitObserverApp" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ImageProviderDynamicSimulationApp" instance="Roboception" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ArmarXFileLoggerApp" instance="" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ArVizStorage" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="RobotToArVizApp" instance="" package="RobotAPI" nodeName="" enabled="false" iceAutoRestart="false"/>
-	<application name="WorkingMemoryToArVizApp" instance="" package="MemoryX" nodeName="" enabled="false" iceAutoRestart="false"/>
-	<application name="ObstacleAvoidingPlatformUnit" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="RemoteGuiProviderApp" instance="" package="ArmarXGui" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="DebugDrawerToArVizApp" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ArticulatedObjectLocalizerDynamicSimulation" instance="" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
diff --git a/scenarios/NavigationSimulation/config/ObjectMemory.cfg b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
index a1b9d81c..9d742ccc 100644
--- a/scenarios/NavigationSimulation/config/ObjectMemory.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
@@ -259,6 +259,15 @@ ArmarX.ObjectMemory.MinimumLoggingLevel = Debug
 # ArmarX.ObjectMemory.mem.inst.calibration.offset = 0
 
 
+# ArmarX.ObjectMemory.mem.inst.calibration.robotName:  Name of robot whose note can be calibrated.
+# If not given, the 'fallbackName' is used.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.calibration.robotName = ""
+
+
 # ArmarX.ObjectMemory.mem.inst.calibration.robotNode:  Robot node which can be calibrated.
 #  Attributes:
 #  - Default:            Neck_2_Pitch
@@ -341,6 +350,14 @@ ArmarX.ObjectMemory.MinimumLoggingLevel = Debug
 # ArmarX.ObjectMemory.mem.inst.head.maxJointVelocity = 0.0500000007
 
 
+# ArmarX.ObjectMemory.mem.inst.robots.FallbackName:  Robot name to use as fallback if the robot name is not specified in a provided object pose.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.robots.FallbackName = ""
+
+
 # ArmarX.ObjectMemory.mem.inst.scene.10_Package:  ArmarX package containing the scene snapshots.
 # Scene snapshots are expected to be located in Package/data/Package/Scenes/*.json.
 #  Attributes:
@@ -572,14 +589,6 @@ ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad = R003_grasping_challenge_r
 # ArmarX.ObjectMemory.prediction.TimeWindow = 2
 
 
-# ArmarX.ObjectMemory.robotName:  
-#  Attributes:
-#  - Default:            Armar6
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.robotName = Armar6
-
-
 # ArmarX.ObjectMemory.tpc.pub.DebugObserver:  Name of the `DebugObserver` topic to publish data to.
 #  Attributes:
 #  - Default:            DebugObserver
diff --git a/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg b/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
index b8200627..aa388636 100644
--- a/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/SelfLocalizationDynamicSimulationApp.cfg
@@ -223,7 +223,7 @@ ArmarX.SelfLocalizationDynamicSimulation.longterm_memory.retrieve_initial_pose =
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.SelfLocalizationDynamicSimulation.longterm_memory.update = true
+ArmarX.SelfLocalizationDynamicSimulation.longterm_memory.update = false
 
 
 # ArmarX.SelfLocalizationDynamicSimulation.longterm_memory.update_frequency:  
@@ -330,7 +330,7 @@ ArmarX.SelfLocalizationDynamicSimulation.mem.robot_state.Memory = RobotState
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.SelfLocalizationDynamicSimulation.working_memory.update = true
+ArmarX.SelfLocalizationDynamicSimulation.working_memory.update = false
 
 
 # ArmarX.SelfLocalizationDynamicSimulation.working_memory.update_frequency:  
-- 
GitLab


From 236e4b3b9e82dcbe6689473fcf67a99f4c585abe Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 20:25:25 +0200
Subject: [PATCH 5/7] scenario updates: fixes after renaming components

---
 .../config/ObjectMemory.cfg                   |  51 +++---
 .../config/VisionMemory.cfg                   |  26 +--
 ..._distance_to_obstacle_costmap_provider.cfg |   2 +-
 .../config/example_client.cfg                 | 149 +++++++++-------
 .../config/navigation_memory.cfg              |   5 +-
 .../HumanAwareNavigation/config/navigator.cfg |  68 +++----
 .../PlatformNavigation/PlatformNavigation.scx |   2 +-
 .../config/ObjectMemory.cfg                   | 111 +-----------
 .../config/VisionMemory.cfg                   | 111 +-----------
 .../config/example_client.cfg                 | 150 ++++++++++------
 .../config/navigation_memory.cfg              | 167 +++++++++---------
 .../PlatformNavigation/config/navigator.cfg   |  77 +++++---
 12 files changed, 376 insertions(+), 543 deletions(-)

diff --git a/scenarios/HumanAwareNavigation/config/ObjectMemory.cfg b/scenarios/HumanAwareNavigation/config/ObjectMemory.cfg
index 2af60bde..773e4812 100644
--- a/scenarios/HumanAwareNavigation/config/ObjectMemory.cfg
+++ b/scenarios/HumanAwareNavigation/config/ObjectMemory.cfg
@@ -259,6 +259,15 @@
 # ArmarX.ObjectMemory.mem.inst.calibration.offset = 0
 
 
+# ArmarX.ObjectMemory.mem.inst.calibration.robotName:  Name of robot whose note can be calibrated.
+# If not given, the 'fallbackName' is used.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.calibration.robotName = ""
+
+
 # ArmarX.ObjectMemory.mem.inst.calibration.robotNode:  Robot node which can be calibrated.
 #  Attributes:
 #  - Default:            Neck_2_Pitch
@@ -341,6 +350,14 @@
 # ArmarX.ObjectMemory.mem.inst.head.maxJointVelocity = 0.0500000007
 
 
+# ArmarX.ObjectMemory.mem.inst.robots.FallbackName:  Robot name to use as fallback if the robot name is not specified in a provided object pose.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.robots.FallbackName = ""
+
+
 # ArmarX.ObjectMemory.mem.inst.scene.10_Package:  ArmarX package containing the scene snapshots.
 # Scene snapshots are expected to be located in Package/data/Package/Scenes/*.json.
 #  Attributes:
@@ -513,37 +530,21 @@
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels = true
 
 
-# ArmarX.ObjectMemory.mem.ltm..configuration:  
+# ArmarX.ObjectMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm..configuration = ""
+# ArmarX.ObjectMemory.mem.ltm.configuration = {}
 
 
-# ArmarX.ObjectMemory.mem.ltm..enabled:  
+# ArmarX.ObjectMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm..enabled = false
-
-
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.ObjectMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.storagepath = Default value not mapped.
+# ArmarX.ObjectMemory.mem.ltm.enabled = false
 
 
 # ArmarX.ObjectMemory.mem.robot_state.Memory:  
@@ -588,14 +589,6 @@
 # ArmarX.ObjectMemory.prediction.TimeWindow = 2
 
 
-# ArmarX.ObjectMemory.robotName:  
-#  Attributes:
-#  - Default:            Armar6
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.robotName = Armar6
-
-
 # ArmarX.ObjectMemory.tpc.pub.DebugObserver:  Name of the `DebugObserver` topic to publish data to.
 #  Attributes:
 #  - Default:            DebugObserver
diff --git a/scenarios/HumanAwareNavigation/config/VisionMemory.cfg b/scenarios/HumanAwareNavigation/config/VisionMemory.cfg
index 4c7327ed..1b95447f 100644
--- a/scenarios/HumanAwareNavigation/config/VisionMemory.cfg
+++ b/scenarios/HumanAwareNavigation/config/VisionMemory.cfg
@@ -210,37 +210,21 @@
 # ArmarX.VisionMemory.mem.MemoryName = Vision
 
 
-# ArmarX.VisionMemory.mem.ltm..configuration:  
+# ArmarX.VisionMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.VisionMemory.mem.ltm..configuration = ""
+# ArmarX.VisionMemory.mem.ltm.configuration = {}
 
 
-# ArmarX.VisionMemory.mem.ltm..enabled:  
+# ArmarX.VisionMemory.mem.ltm.enabled:  
 #  Attributes:
 #  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm..enabled = false
-
-
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.VisionMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.storagepath = Default value not mapped.
+# ArmarX.VisionMemory.mem.ltm.enabled = false
 
 
 # ArmarX.VisionMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
diff --git a/scenarios/HumanAwareNavigation/config/dynamic_distance_to_obstacle_costmap_provider.cfg b/scenarios/HumanAwareNavigation/config/dynamic_distance_to_obstacle_costmap_provider.cfg
index 565bb501..81d7cebf 100644
--- a/scenarios/HumanAwareNavigation/config/dynamic_distance_to_obstacle_costmap_provider.cfg
+++ b/scenarios/HumanAwareNavigation/config/dynamic_distance_to_obstacle_costmap_provider.cfg
@@ -296,7 +296,7 @@
 #  Attributes:
 #  - Case sensitivity:   yes
 #  - Required:           yes
-# ArmarX.dynamic_distance_to_obstacle_costmap_provider.p.staticCostmap.providerName = ::_NOT_SET_::
+ArmarX.dynamic_distance_to_obstacle_costmap_provider.p.staticCostmap.providerName = distance_to_obstacle_costmap_provider
 
 
 # ArmarX.dynamic_distance_to_obstacle_costmap_provider.p.updatePeriodMs:  
diff --git a/scenarios/HumanAwareNavigation/config/example_client.cfg b/scenarios/HumanAwareNavigation/config/example_client.cfg
index eef85301..c21733bd 100644
--- a/scenarios/HumanAwareNavigation/config/example_client.cfg
+++ b/scenarios/HumanAwareNavigation/config/example_client.cfg
@@ -76,171 +76,188 @@
 # ArmarX.EnableProfiling = false
 
 
-# ArmarX.ExampleClient.EnableProfiling:  enable profiler which is used for logging performance events
+# ArmarX.ExampleClient.nav.NavigatorName:  No Description
 #  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
+#  - Default:            navigator
+#  - Case sensitivity:   no
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ExampleClient.EnableProfiling = false
+ArmarX.ExampleClient.nav.NavigatorName = navigator
 
 
-# ArmarX.ExampleClient.MinimumLoggingLevel:  Local logging level only for this component
+# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
 #  Attributes:
-#  - Default:            Undefined
+#  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.ExampleClient.MinimumLoggingLevel = Undefined
+# ArmarX.LoadLibraries = ""
 
 
-# ArmarX.ExampleClient.ObjectName:  Name of IceGrid well-known object
+# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.ObjectName = ""
+# ArmarX.LoggingGroup = ""
 
 
-# ArmarX.ExampleClient.mem.robot_state.Memory:  
+# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
 #  Attributes:
-#  - Default:            RobotState
+#  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.mem.robot_state.Memory = RobotState
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.RedirectStdout = true
 
 
-# ArmarX.ExampleClient.mem.robot_state.localizationSegment:  Name of the localization memory core segment to use.
+# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
 #  Attributes:
-#  - Default:            Localization
+#  - Default:            3000
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.mem.robot_state.localizationSegment = Localization
+# ArmarX.RemoteHandlesDeletionTimeout = 3000
 
 
-# ArmarX.ExampleClient.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
-# Set to false to use this memory as a stand-alone.
+# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
 #  Attributes:
-#  - Default:            true
+#  - Default:            0
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.SecondsStartupDelay = 0
+
+
+# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
+#  Attributes:
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ExampleClient.mns.MemoryNameSystemEnabled = true
+# ArmarX.StartDebuggerOnCrash = false
 
 
-# ArmarX.ExampleClient.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
+# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
 #  Attributes:
-#  - Default:            MemoryNameSystem
+#  - Default:            1
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.mns.MemoryNameSystemName = MemoryNameSystem
+# ArmarX.ThreadPoolSize = 1
 
 
-# ArmarX.ExampleClient.nav.NavigatorName:  Name of the Navigator
+# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
 #  Attributes:
-#  - Default:            navigator
+#  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.ExampleClient.nav.NavigatorName = navigator
+# ArmarX.TopicSuffix = ""
 
 
-# ArmarX.ExampleClient.relativeMovement:  The distance between two target poses [mm]
+# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
 #  Attributes:
-#  - Default:            200
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.relativeMovement = 200
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.UseTimeServer = false
 
 
-# ArmarX.ExampleClient.robotName:  
+# ArmarX.Verbosity:  Global logging level for whole application
 #  Attributes:
-#  - Default:            Armar6
+#  - Default:            Info
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.Verbosity = Info
+
+
+# ArmarX.example_client.EnableProfiling:  enable profiler which is used for logging performance events
+#  Attributes:
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ExampleClient.robotName = Armar6
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.example_client.EnableProfiling = false
 
 
-# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
+# ArmarX.example_client.MinimumLoggingLevel:  Local logging level only for this component
 #  Attributes:
-#  - Default:            ""
+#  - Default:            Undefined
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.LoadLibraries = ""
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.example_client.MinimumLoggingLevel = Undefined
 
 
-# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
+# ArmarX.example_client.ObjectName:  Name of IceGrid well-known object
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.LoggingGroup = ""
+# ArmarX.example_client.ObjectName = ""
 
 
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
+# ArmarX.example_client.mem.robot_state.Memory:  
 #  Attributes:
-#  - Default:            true
+#  - Default:            RobotState
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.RedirectStdout = true
+# ArmarX.example_client.mem.robot_state.Memory = RobotState
 
 
-# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
+# ArmarX.example_client.mem.robot_state.localizationSegment:  Name of the localization memory core segment to use.
 #  Attributes:
-#  - Default:            3000
+#  - Default:            Localization
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.RemoteHandlesDeletionTimeout = 3000
+# ArmarX.example_client.mem.robot_state.localizationSegment = Localization
 
 
-# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
+# ArmarX.example_client.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
+# Set to false to use this memory as a stand-alone.
 #  Attributes:
-#  - Default:            0
+#  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.SecondsStartupDelay = 0
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.example_client.mns.MemoryNameSystemEnabled = true
 
 
-# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
+# ArmarX.example_client.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
 #  Attributes:
-#  - Default:            false
+#  - Default:            MemoryNameSystem
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.StartDebuggerOnCrash = false
+# ArmarX.example_client.mns.MemoryNameSystemName = MemoryNameSystem
 
 
-# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
+# ArmarX.example_client.mode:  Which example to run
 #  Attributes:
-#  - Default:            1
+#  - Default:            standard
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ThreadPoolSize = 1
+#  - Possible values: {complex, point_to_point, standard, update_navigator}
+# ArmarX.example_client.mode = standard
 
 
-# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
+# ArmarX.example_client.nav.NavigatorName:  Name of the Navigator
 #  Attributes:
-#  - Default:            ""
+#  - Default:            navigator
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.TopicSuffix = ""
+# ArmarX.example_client.nav.NavigatorName = navigator
 
 
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
+# ArmarX.example_client.relativeMovement:  The distance between two target poses [mm]
 #  Attributes:
-#  - Default:            false
+#  - Default:            200
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.UseTimeServer = false
+# ArmarX.example_client.relativeMovement = 200
 
 
-# ArmarX.Verbosity:  Global logging level for whole application
+# ArmarX.example_client.robotName:  
 #  Attributes:
-#  - Default:            Info
+#  - Default:            Armar6
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
+# ArmarX.example_client.robotName = Armar6
 
 
diff --git a/scenarios/HumanAwareNavigation/config/navigation_memory.cfg b/scenarios/HumanAwareNavigation/config/navigation_memory.cfg
index 4fd3110f..a3e73f4f 100644
--- a/scenarios/HumanAwareNavigation/config/navigation_memory.cfg
+++ b/scenarios/HumanAwareNavigation/config/navigation_memory.cfg
@@ -191,7 +191,7 @@ ArmarX.Verbosity = Verbose
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.navigation_memory.MinimumLoggingLevel = Undefined
+ArmarX.navigation_memory.MinimumLoggingLevel = Verbose
 
 
 # ArmarX.navigation_memory.ObjectName:  Name of IceGrid well-known object
@@ -288,6 +288,3 @@ ArmarX.Verbosity = Verbose
 # ArmarX.navigation_memory.p.snapshotToLoad = ""
 
 
-# ArmarX.navigation_memory.MinimumLoggingLevel:  
-#  Attributes:
-ArmarX.navigation_memory.MinimumLoggingLevel = Verbose
diff --git a/scenarios/HumanAwareNavigation/config/navigator.cfg b/scenarios/HumanAwareNavigation/config/navigator.cfg
index 7b44af1c..e55d723f 100644
--- a/scenarios/HumanAwareNavigation/config/navigator.cfg
+++ b/scenarios/HumanAwareNavigation/config/navigator.cfg
@@ -92,46 +92,6 @@
 # ArmarX.LoggingGroup = ""
 
 
-# ArmarX.Navigator.ObjectName:  No Description
-#  Attributes:
-#  - Default:            navigator
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.ObjectName = navigator
-
-
-# ArmarX.Navigator.RobotUnitName:  No Description
-#  Attributes:
-#  - Default:            Armar6Unit
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.RobotUnitName = Armar6Unit
-
-
-# ArmarX.Navigator.cmp.PlatformUnit:  No Description
-#  Attributes:
-#  - Default:            Armar6PlatformUnit
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.cmp.PlatformUnit = Armar6PlatformUnit
-
-
-# ArmarX.Navigator.p.disableExecutor:  No Description
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.p.disableExecutor = false
-
-
-# ArmarX.Navigator.p.occupancy_grid.occopied_threshold:  No Description
-#  Attributes:
-#  - Default:            0.8
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.p.occupancy_grid.occopied_threshold = 0.8
-
-
 # ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
 #  Attributes:
 #  - Default:            true
@@ -216,6 +176,14 @@ ArmarX.Verbosity = Verbose
 # ArmarX.navigator.ArVizTopicName = ArVizTopic
 
 
+# ArmarX.navigator.DebugObserverTopicName:  Name of the topic the DebugObserver listens on
+#  Attributes:
+#  - Default:            DebugObserver
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.navigator.DebugObserverTopicName = DebugObserver
+
+
 # ArmarX.navigator.EnableProfiling:  enable profiler which is used for logging performance events
 #  Attributes:
 #  - Default:            false
@@ -254,7 +222,7 @@ ArmarX.Verbosity = Verbose
 #  Attributes:
 #  - Case sensitivity:   yes
 #  - Required:           yes
-# ArmarX.navigator.RobotUnitName = ::_NOT_SET_::
+ArmarX.navigator.RobotUnitName = Armar6Unit
 
 
 # ArmarX.navigator.cmp.RemoteGui:  Ice object name of the `RemoteGui` component.
@@ -321,6 +289,22 @@ ArmarX.Verbosity = Verbose
 # ArmarX.navigator.mem.nav.graph.Memory = Navigation
 
 
+# ArmarX.navigator.mem.nav.human.CoreSegment:  
+#  Attributes:
+#  - Default:            Human
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.navigator.mem.nav.human.CoreSegment = Human
+
+
+# ArmarX.navigator.mem.nav.human.Memory:  
+#  Attributes:
+#  - Default:            Navigation
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.navigator.mem.nav.human.Memory = Navigation
+
+
 # ArmarX.navigator.mem.nav.param.CoreSegment:  
 #  Attributes:
 #  - Default:            Parameterization
@@ -417,6 +401,6 @@ ArmarX.Verbosity = Verbose
 #  - Default:            0.550000012
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.p.occupancy_grid.occopied_threshold = 0.550000012
+ArmarX.navigator.p.occupancy_grid.occopied_threshold = 0.8
 
 
diff --git a/scenarios/PlatformNavigation/PlatformNavigation.scx b/scenarios/PlatformNavigation/PlatformNavigation.scx
index cc0fcea7..a290831f 100644
--- a/scenarios/PlatformNavigation/PlatformNavigation.scx
+++ b/scenarios/PlatformNavigation/PlatformNavigation.scx
@@ -6,7 +6,7 @@
 	<application name="MemoryNameSystem" instance="" package="RobotAPI" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="navigator" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="navigation_memory" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="example_client" instance="" package="armarx_navigation" nodeName="" enabled="false" iceAutoRestart="false"/>
+	<application name="example_client" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="VisionMemory" instance="" package="VisionX" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="control_memory" instance="" package="armarx_control" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="distance_to_obstacle_costmap_provider" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
diff --git a/scenarios/PlatformNavigation/config/ObjectMemory.cfg b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
index b2764c9b..be7ed818 100644
--- a/scenarios/PlatformNavigation/config/ObjectMemory.cfg
+++ b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
@@ -513,21 +513,12 @@
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels = true
 
 
-# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq:  Frequency to store the buffer to the LTM in Hz.
+# ArmarX.ObjectMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq = 10
-
-
-# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled = true
+# ArmarX.ObjectMemory.mem.ltm.configuration = {}
 
 
 # ArmarX.ObjectMemory.mem.ltm.enabled:  
@@ -539,100 +530,6 @@
 # ArmarX.ObjectMemory.mem.ltm.enabled = false
 
 
-# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled = true
-
-
-# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled = true
-
-
-# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled = false
-
-
-# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime:  Waiting time in MS after each LTM update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime = -1
-
-
-# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled = true
-
-
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled = false
-
-
-# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime:  Max Waiting time in MS after each Entity update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime = -1
-
-
-# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled = false
-
-
-# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime:  Waiting time in MS after each Entity update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime = -1
-
-
-# ArmarX.ObjectMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.ltm.storagepath = Default value not mapped.
-
-
 # ArmarX.ObjectMemory.mem.robot_state.Memory:  
 #  Attributes:
 #  - Default:            RobotState
@@ -765,3 +662,5 @@
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 # ArmarX.Verbosity = Info
+
+
diff --git a/scenarios/PlatformNavigation/config/VisionMemory.cfg b/scenarios/PlatformNavigation/config/VisionMemory.cfg
index 0dfef493..1b95447f 100644
--- a/scenarios/PlatformNavigation/config/VisionMemory.cfg
+++ b/scenarios/PlatformNavigation/config/VisionMemory.cfg
@@ -210,21 +210,12 @@
 # ArmarX.VisionMemory.mem.MemoryName = Vision
 
 
-# ArmarX.VisionMemory.mem.ltm..buffer.storeFreq:  Frequency to store the buffer to the LTM in Hz.
+# ArmarX.VisionMemory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm..buffer.storeFreq = 10
-
-
-# ArmarX.VisionMemory.mem.ltm.depthImageExtractor.Enabled:  
-#  Attributes:
-#  - Default:            true
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.depthImageExtractor.Enabled = true
+# ArmarX.VisionMemory.mem.ltm.configuration = {}
 
 
 # ArmarX.VisionMemory.mem.ltm.enabled:  
@@ -236,100 +227,6 @@
 # ArmarX.VisionMemory.mem.ltm.enabled = false
 
 
-# ArmarX.VisionMemory.mem.ltm.exrConverter.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.exrConverter.Enabled = true
-
-
-# ArmarX.VisionMemory.mem.ltm.imageExtractor.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.imageExtractor.Enabled = true
-
-
-# ArmarX.VisionMemory.mem.ltm.memFreqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.memFreqFilter.Enabled = false
-
-
-# ArmarX.VisionMemory.mem.ltm.memFreqFilter.WaitingTime:  Waiting time in MS after each LTM update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.memFreqFilter.WaitingTime = -1
-
-
-# ArmarX.VisionMemory.mem.ltm.pngConverter.Enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.pngConverter.Enabled = true
-
-
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
-#  Attributes:
-#  - Default:            1024
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
-
-
-# ArmarX.VisionMemory.mem.ltm.snapEqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.snapEqFilter.Enabled = false
-
-
-# ArmarX.VisionMemory.mem.ltm.snapEqFilter.MaxWaitingTime:  Max Waiting time in MS after each Entity update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.snapEqFilter.MaxWaitingTime = -1
-
-
-# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.Enabled:  
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.Enabled = false
-
-
-# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.WaitingTime:  Waiting time in MS after each Entity update.
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.snapFreqFilter.WaitingTime = -1
-
-
-# ArmarX.VisionMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.VisionMemory.mem.ltm.storagepath = Default value not mapped.
-
-
 # ArmarX.VisionMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
 # Set to false to use this memory as a stand-alone.
 #  Attributes:
@@ -362,3 +259,5 @@
 #  - Case sensitivity:   yes
 #  - Required:           no
 # ArmarX.VisionMemory.pointCloudMaxHistorySize = 20
+
+
diff --git a/scenarios/PlatformNavigation/config/example_client.cfg b/scenarios/PlatformNavigation/config/example_client.cfg
index 6a9bccd3..f459b030 100644
--- a/scenarios/PlatformNavigation/config/example_client.cfg
+++ b/scenarios/PlatformNavigation/config/example_client.cfg
@@ -76,56 +76,6 @@
 # ArmarX.EnableProfiling = false
 
 
-# ArmarX.ExampleClient.EnableProfiling:  enable profiler which is used for logging performance events
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ExampleClient.EnableProfiling = false
-
-
-# ArmarX.ExampleClient.MinimumLoggingLevel:  Local logging level only for this component
-#  Attributes:
-#  - Default:            Undefined
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.ExampleClient.MinimumLoggingLevel = Undefined
-
-
-# ArmarX.ExampleClient.ObjectName:  Name of IceGrid well-known object
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.ObjectName = ""
-
-
-# ArmarX.ExampleClient.nav.NavigatorName:  Name of the Navigator
-#  Attributes:
-#  - Default:            navigator
-#  - Case sensitivity:   yes
-#  - Required:           no
-ArmarX.ExampleClient.nav.NavigatorName = navigator
-
-
-# ArmarX.ExampleClient.relativeMovement:  The distance between two target poses [mm]
-#  Attributes:
-#  - Default:            200
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.relativeMovement = 200
-
-
-# ArmarX.ExampleClient.robotName:  
-#  Attributes:
-#  - Default:            Armar6
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ExampleClient.robotName = Armar6
-
-
 # ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
 #  Attributes:
 #  - Default:            ""
@@ -208,3 +158,103 @@ ArmarX.ExampleClient.nav.NavigatorName = navigator
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 # ArmarX.Verbosity = Info
+
+
+# ArmarX.example_client.EnableProfiling:  enable profiler which is used for logging performance events
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.example_client.EnableProfiling = false
+
+
+# ArmarX.example_client.MinimumLoggingLevel:  Local logging level only for this component
+#  Attributes:
+#  - Default:            Undefined
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.example_client.MinimumLoggingLevel = Undefined
+
+
+# ArmarX.example_client.ObjectName:  Name of IceGrid well-known object
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.ObjectName = ""
+
+
+# ArmarX.example_client.mem.robot_state.Memory:  
+#  Attributes:
+#  - Default:            RobotState
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.mem.robot_state.Memory = RobotState
+
+
+# ArmarX.example_client.mem.robot_state.localizationSegment:  Name of the localization memory core segment to use.
+#  Attributes:
+#  - Default:            Localization
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.mem.robot_state.localizationSegment = Localization
+
+
+# ArmarX.example_client.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
+# Set to false to use this memory as a stand-alone.
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.example_client.mns.MemoryNameSystemEnabled = true
+
+
+# ArmarX.example_client.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
+#  Attributes:
+#  - Default:            MemoryNameSystem
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.mns.MemoryNameSystemName = MemoryNameSystem
+
+
+# ArmarX.example_client.mode:  Which example to run
+#  Attributes:
+#  - Default:            standard
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {complex, point_to_point, standard, update_navigator}
+ArmarX.example_client.mode = standard
+
+
+# ArmarX.example_client.nav.NavigatorName:  Name of the Navigator
+#  Attributes:
+#  - Default:            navigator
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.nav.NavigatorName = navigator
+
+
+# ArmarX.example_client.relativeMovement:  The distance between two target poses [mm]
+#  Attributes:
+#  - Default:            200
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.relativeMovement = 200
+
+
+# ArmarX.example_client.robotName:  
+#  Attributes:
+#  - Default:            Armar6
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.example_client.robotName = Armar6
+
+
+# ArmarX.ExampleClient.nav.NavigatorName:  
+#  Attributes:
+ArmarX.ExampleClient.nav.NavigatorName = navigator
+
+
diff --git a/scenarios/PlatformNavigation/config/navigation_memory.cfg b/scenarios/PlatformNavigation/config/navigation_memory.cfg
index 8253a316..74b205e7 100644
--- a/scenarios/PlatformNavigation/config/navigation_memory.cfg
+++ b/scenarios/PlatformNavigation/config/navigation_memory.cfg
@@ -92,213 +92,204 @@
 # ArmarX.LoggingGroup = ""
 
 
-# ArmarX.NavigationMemory.ArVizStorageName:  Name of the ArViz storage
+# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
 #  Attributes:
-#  - Default:            ArVizStorage
+#  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.ArVizStorageName = ArVizStorage
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.RedirectStdout = true
 
 
-# ArmarX.NavigationMemory.ArVizTopicName:  Name of the ArViz topic
+# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
 #  Attributes:
-#  - Default:            ArVizTopic
+#  - Default:            3000
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.ArVizTopicName = ArVizTopic
+# ArmarX.RemoteHandlesDeletionTimeout = 3000
 
 
-# ArmarX.NavigationMemory.EnableProfiling:  enable profiler which is used for logging performance events
+# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
 #  Attributes:
-#  - Default:            false
+#  - Default:            0
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.EnableProfiling = false
+# ArmarX.SecondsStartupDelay = 0
 
 
-# ArmarX.NavigationMemory.MinimumLoggingLevel:  Local logging level only for this component
+# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
 #  Attributes:
-#  - Default:            Undefined
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.NavigationMemory.MinimumLoggingLevel = Undefined
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.StartDebuggerOnCrash = false
 
 
-# ArmarX.NavigationMemory.ObjectName:  Name of IceGrid well-known object
+# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
 #  Attributes:
-#  - Default:            ""
+#  - Default:            1
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.ObjectName = ""
+# ArmarX.ThreadPoolSize = 1
 
 
-# ArmarX.NavigationMemory.RemoteGuiName:  Name of the remote gui provider
+# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
 #  Attributes:
-#  - Default:            RemoteGuiProvider
+#  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.RemoteGuiName = RemoteGuiProvider
+# ArmarX.TopicSuffix = ""
 
 
-# ArmarX.NavigationMemory.mem.MemoryName:  Name of this memory server.
+# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
 #  Attributes:
-#  - Default:            Navigation
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mem.MemoryName = Navigation
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.UseTimeServer = false
 
 
-# ArmarX.NavigationMemory.mem.ltm.configuration:  
+# ArmarX.Verbosity:  Global logging level for whole application
 #  Attributes:
-#  - Default:            {}
+#  - Default:            Info
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mem.ltm..configuration = ""
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.Verbosity = Info
 
 
-# ArmarX.NavigationMemory.mem.ltm.enabled:  
+# ArmarX.navigation_memory.ArVizStorageName:  Name of the ArViz storage
 #  Attributes:
-#  - Default:            false
+#  - Default:            ArVizStorage
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.mem.ltm..enabled = false
+# ArmarX.navigation_memory.ArVizStorageName = ArVizStorage
 
 
-# ArmarX.NavigationMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
+# ArmarX.navigation_memory.ArVizTopicName:  Name of the ArViz topic
 #  Attributes:
-#  - Default:            1024
+#  - Default:            ArVizTopic
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
+# ArmarX.navigation_memory.ArVizTopicName = ArVizTopic
 
 
-# ArmarX.NavigationMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
+# ArmarX.navigation_memory.EnableProfiling:  enable profiler which is used for logging performance events
 #  Attributes:
-#  - Default:            Default value not mapped.
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mem.ltm.storagepath = Default value not mapped.
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.navigation_memory.EnableProfiling = false
 
 
-# ArmarX.NavigationMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
-# Set to false to use this memory as a stand-alone.
+# ArmarX.navigation_memory.MinimumLoggingLevel:  Local logging level only for this component
 #  Attributes:
-#  - Default:            true
+#  - Default:            Undefined
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.mns.MemoryNameSystemEnabled = true
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.navigation_memory.MinimumLoggingLevel = Undefined
 
 
-# ArmarX.NavigationMemory.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
+# ArmarX.navigation_memory.ObjectName:  Name of IceGrid well-known object
 #  Attributes:
-#  - Default:            MemoryNameSystem
+#  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.mns.MemoryNameSystemName = MemoryNameSystem
+# ArmarX.navigation_memory.ObjectName = ""
 
 
-# ArmarX.NavigationMemory.p.locationGraph.visuFrequency:  Visualization frequeny of locations and graph edges [Hz].
+# ArmarX.navigation_memory.RemoteGuiName:  Name of the remote gui provider
 #  Attributes:
-#  - Default:            2
+#  - Default:            RemoteGuiProvider
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.NavigationMemory.p.locationGraph.visuFrequency = 2
+# ArmarX.navigation_memory.RemoteGuiName = RemoteGuiProvider
 
 
-# ArmarX.NavigationMemory.p.locationGraph.visuGraphEdges:  Enable visualization of navigation graph edges.
+# ArmarX.navigation_memory.mem.MemoryName:  Name of this memory server.
 #  Attributes:
-#  - Default:            true
+#  - Default:            Navigation
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.p.locationGraph.visuGraphEdges = true
+# ArmarX.navigation_memory.mem.MemoryName = Navigation
 
 
-# ArmarX.NavigationMemory.p.locationGraph.visuLocation:  Enable visualization of locations.
+# ArmarX.navigation_memory.mem.ltm.configuration:  
 #  Attributes:
-#  - Default:            true
+#  - Default:            {}
 #  - Case sensitivity:   yes
 #  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.NavigationMemory.p.locationGraph.visuLocation = true
+# ArmarX.navigation_memory.mem.ltm.configuration = {}
 
 
-# ArmarX.NavigationMemory.p.snapshotToLoad:  Memory snapshot to load at start up 
-# (e.g. 'PriorKnowledgeData/navigation-graphs/snapshot').
+# ArmarX.navigation_memory.mem.ltm.enabled:  
 #  Attributes:
-#  - Default:            ""
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.NavigationMemory.p.snapshotToLoad = ./PriorKnowledgeData/navigation-graphs/audimax-science-week-opening
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.navigation_memory.mem.ltm.enabled = false
 
 
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
+# ArmarX.navigation_memory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
+# Set to false to use this memory as a stand-alone.
 #  Attributes:
 #  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.RedirectStdout = true
+# ArmarX.navigation_memory.mns.MemoryNameSystemEnabled = true
 
 
-# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
+# ArmarX.navigation_memory.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
 #  Attributes:
-#  - Default:            3000
+#  - Default:            MemoryNameSystem
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.RemoteHandlesDeletionTimeout = 3000
+# ArmarX.navigation_memory.mns.MemoryNameSystemName = MemoryNameSystem
 
 
-# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
+# ArmarX.navigation_memory.p.locationGraph.visuFrequency:  Visualization frequeny of locations and graph edges [Hz].
 #  Attributes:
-#  - Default:            0
+#  - Default:            2
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.SecondsStartupDelay = 0
+# ArmarX.navigation_memory.p.locationGraph.visuFrequency = 2
 
 
-# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
+# ArmarX.navigation_memory.p.locationGraph.visuGraphEdges:  Enable visualization of navigation graph edges.
 #  Attributes:
-#  - Default:            false
+#  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.StartDebuggerOnCrash = false
+# ArmarX.navigation_memory.p.locationGraph.visuGraphEdges = true
 
 
-# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
+# ArmarX.navigation_memory.p.locationGraph.visuLocation:  Enable visualization of locations.
 #  Attributes:
-#  - Default:            1
+#  - Default:            true
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ThreadPoolSize = 1
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.navigation_memory.p.locationGraph.visuLocation = true
 
 
-# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
+# ArmarX.navigation_memory.p.snapshotToLoad:  Memory snapshot to load at start up 
+# (e.g. 'PriorKnowledgeData/navigation-graphs/snapshot').
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.TopicSuffix = ""
+# ArmarX.navigation_memory.p.snapshotToLoad = ""
 
 
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
+# ArmarX.NavigationMemory.p.snapshotToLoad:  
 #  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.UseTimeServer = false
+ArmarX.NavigationMemory.p.snapshotToLoad = ./PriorKnowledgeData/navigation-graphs/audimax-science-week-opening
 
 
-# ArmarX.Verbosity:  Global logging level for whole application
-#  Attributes:
-#  - Default:            Info
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
diff --git a/scenarios/PlatformNavigation/config/navigator.cfg b/scenarios/PlatformNavigation/config/navigator.cfg
index 233f17f4..5bf206ad 100644
--- a/scenarios/PlatformNavigation/config/navigator.cfg
+++ b/scenarios/PlatformNavigation/config/navigator.cfg
@@ -139,20 +139,12 @@
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.Navigator.ObjectName = navigator
+# ArmarX.TopicSuffix = ""
 
 
-# ArmarX.Navigator.RobotUnitName:  Name of the RobotUnit
+# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
 #  Attributes:
-#  - Default:            Armar6Unit
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.Navigator.RobotUnitName = Armar6Unit
-
-
-# ArmarX.Navigator.cmp.PlatformUnit:  Ice object name of the `PlatformUnit` component.
-#  Attributes:
-#  - Default:            PlatformUnit
+#  - Default:            false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
@@ -184,6 +176,14 @@ ArmarX.Verbosity = Verbose
 # ArmarX.navigator.ArVizTopicName = ArVizTopic
 
 
+# ArmarX.navigator.DebugObserverTopicName:  Name of the topic the DebugObserver listens on
+#  Attributes:
+#  - Default:            DebugObserver
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.navigator.DebugObserverTopicName = DebugObserver
+
+
 # ArmarX.navigator.EnableProfiling:  enable profiler which is used for logging performance events
 #  Attributes:
 #  - Default:            false
@@ -278,43 +278,50 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.Navigator.mem.nav.stack_result.Provider = ""
+# ArmarX.navigator.mem.nav.events.Provider = ""
 
 
-# ArmarX.Navigator.mem.robot_state.Memory:  
+# ArmarX.navigator.mem.nav.graph.CoreSegment:  
 #  Attributes:
-#  - Default:            RobotState
+#  - Default:            Location
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.Navigator.mem.robot_state.Memory = RobotState
+# ArmarX.navigator.mem.nav.graph.CoreSegment = Location
 
 
-# ArmarX.Navigator.mem.robot_state.descriptionSegment:  
+# ArmarX.navigator.mem.nav.graph.Memory:  
 #  Attributes:
-#  - Default:            Description
+#  - Default:            Navigation
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.Navigator.mem.robot_state.descriptionSegment = Description
+# ArmarX.navigator.mem.nav.graph.Memory = Navigation
 
 
-# ArmarX.Navigator.mem.robot_state.localizationSegment:  
+# ArmarX.navigator.mem.nav.human.CoreSegment:  
+#  Attributes:
+#  - Default:            Human
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.navigator.mem.nav.human.CoreSegment = Human
+
+
+# ArmarX.navigator.mem.nav.human.Memory:  
 #  Attributes:
 #  - Default:            Navigation
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.navigator.mem.nav.graph.Memory = Navigation
+# ArmarX.navigator.mem.nav.human.Memory = Navigation
 
 
-# ArmarX.Navigator.mem.robot_state.proprioceptionSegment:  
+# ArmarX.navigator.mem.nav.param.CoreSegment:  
 #  Attributes:
-#  - Default:            Proprioception
+#  - Default:            Parameterization
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.Navigator.mem.robot_state.proprioceptionSegment = Proprioception
+# ArmarX.navigator.mem.nav.param.CoreSegment = Parameterization
 
 
-# ArmarX.Navigator.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
-# Set to false to use this memory as a stand-alone.
+# ArmarX.navigator.mem.nav.param.Memory:  
 #  Attributes:
 #  - Default:            Navigation
 #  - Case sensitivity:   yes
@@ -338,15 +345,15 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 # ArmarX.navigator.mem.nav.stack_result.CoreSegment = ""
 
 
-# ArmarX.Navigator.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
+# ArmarX.navigator.mem.nav.stack_result.Memory:  
 #  Attributes:
-#  - Default:            MemoryUpdates
+#  - Default:            Navigation
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.Navigator.tpc.sub.MemoryListener = MemoryUpdates
+# ArmarX.navigator.mem.nav.stack_result.Memory = Navigation
 
 
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
+# ArmarX.navigator.mem.nav.stack_result.Provider:  Name of this provider
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
@@ -403,3 +410,15 @@ ArmarX.navigator.cmp.PlatformUnit = Armar6PlatformUnit
 #  - Case sensitivity:   yes
 #  - Required:           no
 ArmarX.navigator.p.occupancy_grid.occopied_threshold = 0.8
+
+
+# ArmarX.Navigator.ObjectName:  
+#  Attributes:
+ArmarX.Navigator.ObjectName = navigator
+
+
+# ArmarX.Navigator.RobotUnitName:  
+#  Attributes:
+ArmarX.Navigator.RobotUnitName = Armar6Unit
+
+
-- 
GitLab


From 8ea35a42f6ba63301a644b414adca77ffa86f5cb Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 20:25:49 +0200
Subject: [PATCH 6/7] reming private eigen includes

---
 examples/components/example_client/Component.cpp | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/examples/components/example_client/Component.cpp b/examples/components/example_client/Component.cpp
index 7b48c323..c950667e 100644
--- a/examples/components/example_client/Component.cpp
+++ b/examples/components/example_client/Component.cpp
@@ -27,9 +27,6 @@
 #include <cmath>
 #include <thread>
 
-#include <Eigen/src/Geometry/AngleAxis.h>
-#include <Eigen/src/Geometry/Translation.h>
-
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/time/Clock.h>
 #include <ArmarXCore/core/time/ClockType.h>
-- 
GitLab


From 1c3ee0eb9377af1b80ccef7ad6438c4fed1e7469 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 19 Aug 2022 20:26:10 +0200
Subject: [PATCH 7/7] reduced verbosity; fixed example component

---
 .../components/example_client/Component.cpp   | 22 ++++++++++++++-----
 .../components/example_client/Component.h     |  2 ++
 .../navigation/client/ComponentPlugin.cpp     |  2 ++
 .../navigation/global_planning/AStar.cpp      | 11 +++++-----
 .../navigation/memory/client/human/Reader.cpp |  5 ++---
 source/armarx/navigation/server/Navigator.cpp |  6 ++---
 6 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/examples/components/example_client/Component.cpp b/examples/components/example_client/Component.cpp
index c950667e..4bb1c1f7 100644
--- a/examples/components/example_client/Component.cpp
+++ b/examples/components/example_client/Component.cpp
@@ -34,6 +34,8 @@
 #include <ArmarXCore/libraries/DecoupledSingleComponent/Decoupled.h>
 
 #include "armarx/navigation/core/types.h"
+#include "armarx/navigation/global_planning/SPFA.h"
+#include "armarx/navigation/local_planning/TimedElasticBands.h"
 #include <armarx/navigation/client/PathBuilder.h>
 #include <armarx/navigation/client/types.h>
 #include <armarx/navigation/global_planning/AStar.h>
@@ -89,9 +91,17 @@ namespace armarx::navigation::components::example_client
     std::string
     Component::getDefaultName() const
     {
-        return "ExampleClient";
+        return GetDefaultName();
     }
 
+
+    std::string
+    Component::GetDefaultName()
+    {
+        return "example_client";
+    }
+
+
     void
     Component::run()
     {
@@ -129,7 +139,8 @@ namespace armarx::navigation::components::example_client
         configureNavigator(
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
-                .globalPlanner(global_planning::AStarParams())
+                .globalPlanner(global_planning::SPFAParams())
+                .localPlanner(local_planning::TimedElasticBandsParams())
                 .trajectoryController(traj_ctrl::local::TrajectoryFollowingControllerParams()));
 
         // Example of registering a lambda as callback.
@@ -173,7 +184,7 @@ namespace armarx::navigation::components::example_client
         configureNavigator(
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
-                .globalPlanner(global_planning::AStarParams())
+                .globalPlanner(global_planning::SPFAParams())
                 .trajectoryController(
                     traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
 
@@ -273,7 +284,7 @@ namespace armarx::navigation::components::example_client
         configureNavigator(
             client::NavigationStackConfig()
                 .general({} /*{.maxVel = VelocityLimits{.linear = 400 , .angular = 0.1}}*/)
-                .globalPlanner(global_planning::AStarParams())
+                .globalPlanner(global_planning::SPFAParams())
                 .trajectoryController(
                     traj_ctrl::local::TrajectoryFollowingControllerParams())); // FIXME
 
@@ -444,7 +455,6 @@ namespace armarx::navigation::components::example_client
         return def;
     }
 
-
-    ARMARX_DECOUPLED_REGISTER_COMPONENT(Component);
+    ARMARX_REGISTER_COMPONENT_EXECUTABLE(Component, Component::GetDefaultName());
 
 } // namespace armarx::navigation::components::example_client
diff --git a/examples/components/example_client/Component.h b/examples/components/example_client/Component.h
index 2e622a35..3c6748d3 100644
--- a/examples/components/example_client/Component.h
+++ b/examples/components/example_client/Component.h
@@ -65,6 +65,8 @@ namespace armarx::navigation::components::example_client
 
         ~Component() override;
 
+        static std::string GetDefaultName();
+
     protected:
         /// @see PropertyUser::createPropertyDefinitions()
         armarx::PropertyDefinitionsPtr createPropertyDefinitions() override;
diff --git a/source/armarx/navigation/client/ComponentPlugin.cpp b/source/armarx/navigation/client/ComponentPlugin.cpp
index 173e3dd4..2ecd8fce 100644
--- a/source/armarx/navigation/client/ComponentPlugin.cpp
+++ b/source/armarx/navigation/client/ComponentPlugin.cpp
@@ -62,8 +62,10 @@ namespace armarx::navigation::client
 
         eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler>
         {
+            ARMARX_TRACE;
             if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>())
             {
+                ARMARX_TRACE;
                 ARMARX_INFO << "Using memory event callbacks.";
                 // must(!!) use a reference here: otherwise the mns events won't work
                 auto& memoryNameSystem =
diff --git a/source/armarx/navigation/global_planning/AStar.cpp b/source/armarx/navigation/global_planning/AStar.cpp
index 67db7790..6765a908 100644
--- a/source/armarx/navigation/global_planning/AStar.cpp
+++ b/source/armarx/navigation/global_planning/AStar.cpp
@@ -283,15 +283,16 @@ namespace armarx::navigation::global_planning
 
         if (not result)
         {
-            ARMARX_ERROR << "Optimizer failure";
+            ARMARX_WARNING << "Optimizer failure";
             return std::nullopt;
         }
 
-        // TODO circular path smoothing should be done now
+        ARMARX_TRACE;
 
-        algorithm::CircularPathSmoothing smoothing;
-        auto smoothTrajectory = smoothing.smooth(result.trajectory.value());
-        smoothTrajectory.setMaxVelocity(params.linearVelocity);
+        // TODO circular path smoothing should be done now
+        // algorithm::CircularPathSmoothing smoothing;
+        // auto smoothTrajectory = smoothing.smooth(result.trajectory.value());
+        // smoothTrajectory.setMaxVelocity(params.linearVelocity);
 
         ARMARX_TRACE;
         return GlobalPlannerResult{.trajectory = result.trajectory.value()};
diff --git a/source/armarx/navigation/memory/client/human/Reader.cpp b/source/armarx/navigation/memory/client/human/Reader.cpp
index e3bee9f2..de91ae99 100644
--- a/source/armarx/navigation/memory/client/human/Reader.cpp
+++ b/source/armarx/navigation/memory/client/human/Reader.cpp
@@ -152,8 +152,7 @@ namespace armarx::navigation::memory::client::human
 
         if (not coreSegment.hasProviderSegment(query.providerName))
         {
-            ARMARX_VERBOSE << "Provider segment `" << query.providerName
-                           << "` does not exist (yet).";
+            ARMARX_DEBUG << "Provider segment `" << query.providerName << "` does not exist (yet).";
             return {.groups = {}, .status = HumanGroupResult::Status::NoData};
         }
 
@@ -162,7 +161,7 @@ namespace armarx::navigation::memory::client::human
 
         if (providerSegment.empty())
         {
-            ARMARX_VERBOSE << "No entities.";
+            ARMARX_DEBUG << "No entities.";
             return {.groups = {},
                     .status = HumanGroupResult::Status::NoData,
                     .errorMessage = "No entities"};
diff --git a/source/armarx/navigation/server/Navigator.cpp b/source/armarx/navigation/server/Navigator.cpp
index 22913fa5..6c4c51b9 100644
--- a/source/armarx/navigation/server/Navigator.cpp
+++ b/source/armarx/navigation/server/Navigator.cpp
@@ -804,7 +804,7 @@ namespace armarx::navigation::server
             const Duration duration =
                 armarx::core::time::StopWatch::measure([&]() { updateScene(); });
 
-            ARMARX_VERBOSE << deactivateSpam(0.2)
+            ARMARX_DEBUG << deactivateSpam(0.2)
                            << "Scene update: " << duration.toMilliSecondsDouble() << "ms.";
 
             srv.debugObserverHelper->setDebugObserverDatafield("scene update [ms]", duration.toMilliSecondsDouble());
@@ -881,7 +881,7 @@ namespace armarx::navigation::server
                         updateIntrospector(localPlannerResult);
                     }
                 });
-            ARMARX_VERBOSE << deactivateSpam(0.2)
+            ARMARX_DEBUG << deactivateSpam(0.2)
                            << "Local planner update: " << duration.toMilliSecondsDouble() << "ms.";
 
             srv.debugObserverHelper->setDebugObserverDatafield("local planner update [ms]", duration.toMilliSecondsDouble());
@@ -894,7 +894,7 @@ namespace armarx::navigation::server
             const Duration duration =
                 armarx::core::time::StopWatch::measure([&]() { updateMonitor(); });
 
-            ARMARX_VERBOSE << deactivateSpam(0.2)
+            ARMARX_DEBUG << deactivateSpam(0.2)
                            << "Monitor update: " << duration.toMilliSecondsDouble() << "ms.";
 
             srv.debugObserverHelper->setDebugObserverDatafield("monitor update [ms]", duration.toMilliSecondsDouble());
-- 
GitLab