From e1fd5c9c2b0794d6960d5e449f58300a88986593 Mon Sep 17 00:00:00 2001
From: ARMAR-User <armar@user>
Date: Wed, 5 Mar 2025 11:54:48 +0100
Subject: [PATCH] feat: Allow disabling global pose correction and localization
 sensors for FR3 and Panda

---
 .../RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp | 7 +++++--
 .../RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h   | 4 ++++
 .../RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp   | 8 ++++++++
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
index 61d0d6c3a..834203f53 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
@@ -513,8 +513,11 @@ namespace armarx::RobotUnitModule
 
         // this device will be used by the PlatformUnit to make the robot's global pose
         // available to e.g. the NJointControllers.
-        addSensorDevice(std::make_shared<GlobalRobotPoseCorrectionSensorDevice>());
-        addSensorDevice(std::make_shared<GlobalRobotLocalizationSensorDevice>());
+        if (getProperty<bool>("GlobalPoseCorrectionAndLocalizationSensorEnabled").getValue())
+        {
+            addSensorDevice(std::make_shared<GlobalRobotPoseCorrectionSensorDevice>());
+            addSensorDevice(std::make_shared<GlobalRobotLocalizationSensorDevice>());
+        }
     }
 
     void
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
index 28f698623..6e825e6dc 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
@@ -59,6 +59,10 @@ namespace armarx::RobotUnitModule
                 "Syntax: semicolon separated groups , each group is CSV of joints "
                 "e.g. j1,j2;j3,j4,j5 -> Group 1 = j1+j2 Group 2 = j3+j4+j5; No joint may be in two "
                 "groups!");
+            defineOptionalProperty<bool>("GlobalPoseCorrectionAndLocalizationSensorEnabled",
+                                         true,
+                                         "Whether to enable or disable the global pose correction "
+                                         "and localization sensors.");
         }
     };
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
index 09f522529..b37de4a71 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
@@ -641,6 +641,14 @@ namespace armarx::RobotUnitModule
         }
         ARMARX_TRACE;
 
+        if (_module<Devices>().getSensorDevices().count(
+                _module<RobotData>().getRobotPlatformName()) == 0)
+        {
+            ARMARX_WARNING << "No sensor devices found for robot platform `"
+                           << _module<RobotData>().getRobotPlatformName() << "`.";
+            return;
+        }
+
         ARMARX_DEBUG << "Getting device SensorValueHolonomicPlatformRelativePosition";
         ARMARX_CHECK(
             _module<Devices>().getSensorDevices().has(_module<RobotData>().getRobotPlatformName()))
-- 
GitLab