From 9f43cd9a294b7f089437496c071b7ee66206ebbc Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Thu, 21 May 2020 10:06:10 +0200
Subject: [PATCH] Use std instead of boost

---
 .../CyberGloveObserver/CyberGloveObserver.cpp |  4 +--
 .../CyberGloveObserver/CyberGloveObserver.h   |  5 ++-
 .../RobotState/RobotStateComponent.cpp        |  8 ++---
 .../RobotState/RobotStateComponent.h          |  7 ++--
 .../components/units/ForceTorqueObserver.cpp  |  6 ++--
 .../components/units/ForceTorqueObserver.h    |  4 ++-
 .../components/units/GamepadUnitObserver.cpp  |  2 +-
 .../components/units/GamepadUnitObserver.h    |  3 +-
 .../units/GraspCandidateObserver.cpp          | 34 +++++++++----------
 .../components/units/GraspCandidateObserver.h |  6 ++--
 .../components/units/HapticObserver.cpp       |  4 +--
 .../components/units/HapticObserver.h         |  3 +-
 .../units/InertialMeasurementUnitObserver.cpp |  2 +-
 .../units/InertialMeasurementUnitObserver.h   |  3 +-
 .../units/KinematicUnitObserver.cpp           |  2 +-
 .../components/units/KinematicUnitObserver.h  |  3 +-
 .../units/LaserScannerUnitObserver.cpp        |  2 +-
 .../units/LaserScannerUnitObserver.h          |  3 +-
 .../components/units/MetaWearIMUObserver.cpp  |  2 +-
 .../components/units/MetaWearIMUObserver.h    |  3 +-
 .../units/OptoForceUnitObserver.cpp           |  4 +--
 .../components/units/OptoForceUnitObserver.h  |  3 +-
 .../OrientedTactileSensorUnitObserver.cpp     |  2 +-
 .../units/OrientedTactileSensorUnitObserver.h |  3 +-
 .../core/remoterobot/RobotStateObserver.cpp   |  6 ++--
 .../core/remoterobot/RobotStateObserver.h     |  2 +-
 26 files changed, 70 insertions(+), 56 deletions(-)

diff --git a/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.cpp b/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.cpp
index a68eb49d8..96b0f863c 100644
--- a/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.cpp
+++ b/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.cpp
@@ -56,7 +56,7 @@ namespace armarx
 
     void CyberGloveObserver::reportGloveValues(const CyberGloveValues& gloveValues, const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         IceUtil::Time now = TimeUtil::GetTime();
 
@@ -107,7 +107,7 @@ namespace armarx
 
     CyberGloveValues armarx::CyberGloveObserver::getLatestValues(const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         return latestValues;
     }
 }
diff --git a/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.h b/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.h
index 8eb91e465..45eb2f52a 100644
--- a/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.h
+++ b/source/RobotAPI/components/CyberGloveObserver/CyberGloveObserver.h
@@ -23,13 +23,12 @@
 #pragma once
 
 
-//#include <ArmarXCore/core/Component.h>
-//#include <RobotAPI/interface/units/CyberGloveInterface.h>
 #include <RobotAPI/interface/units/CyberGloveObserverInterface.h>
 #include <ArmarXCore/observers/Observer.h>
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -103,7 +102,7 @@ namespace armarx
 
     private:
 
-        Mutex dataMutex;
+        std::mutex dataMutex;
         CyberGloveValues latestValues;
         IceUtil::Time lastUpdate;
 
diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
index e3c8d00b9..53fb866aa 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
@@ -323,7 +323,7 @@ namespace armarx
         }
 
         {
-            boost::unique_lock<SharedMutex> lock(jointHistoryMutex);
+            std::unique_lock lock(jointHistoryMutex);
             jointHistory.emplace_hint(jointHistory.end(), time, jointAngles);
 
             if (jointHistory.size() > jointHistoryLength)
@@ -512,7 +512,7 @@ namespace armarx
         IceUtil::Time duration;
         {
             IceUtil::Time start = IceUtil::Time::now();
-            boost::unique_lock<SharedMutex> lock(poseHistoryMutex);
+            std::unique_lock lock(poseHistoryMutex);
             duration = IceUtil::Time::now() - start;
 
             poseHistory.emplace_hint(poseHistory.end(),
@@ -553,7 +553,7 @@ namespace armarx
 
     auto RobotStateComponent::interpolateJoints(IceUtil::Time time) const -> std::optional<Timestamped<NameValueMap>>
     {
-        boost::shared_lock<SharedMutex> lock(jointHistoryMutex);
+        std::shared_lock lock(jointHistoryMutex);
         if (jointHistory.empty())
         {
             ARMARX_WARNING << deactivateSpam(1) << "Joint history of robot state component is empty!";
@@ -628,7 +628,7 @@ namespace armarx
 
     auto RobotStateComponent::interpolatePose(IceUtil::Time time) const -> std::optional<Timestamped<FramedPosePtr>>
     {
-        boost::shared_lock<SharedMutex> lock(poseHistoryMutex);
+        std::shared_lock lock(poseHistoryMutex);
 
         if (poseHistory.empty())
         {
diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.h b/source/RobotAPI/components/RobotState/RobotStateComponent.h
index 27751d203..2a1da853b 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.h
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.h
@@ -37,6 +37,9 @@
 
 #include "SharedRobotServants.h"
 
+#include <shared_mutex>
+#include <mutex>
+
 
 namespace armarx
 {
@@ -216,11 +219,11 @@ namespace armarx
         std::string robotFile;
         std::string relativeRobotFile;
 
-        mutable SharedMutex jointHistoryMutex;
+        mutable std::shared_mutex jointHistoryMutex;
         std::map<IceUtil::Time, NameValueMap> jointHistory;
         size_t jointHistoryLength;
 
-        mutable SharedMutex poseHistoryMutex;
+        mutable std::shared_mutex poseHistoryMutex;
         std::map<IceUtil::Time, FramedPosePtr> poseHistory;
         size_t poseHistoryLength;
 
diff --git a/source/RobotAPI/components/units/ForceTorqueObserver.cpp b/source/RobotAPI/components/units/ForceTorqueObserver.cpp
index a365530d8..58a5eb9ed 100644
--- a/source/RobotAPI/components/units/ForceTorqueObserver.cpp
+++ b/source/RobotAPI/components/units/ForceTorqueObserver.cpp
@@ -123,7 +123,7 @@ namespace armarx
         auto channels = getAvailableChannels(false);
         auto batchPrx = debugDrawer->ice_batchOneway();
         {
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
 
             std::set<std::string> frameAlreadyReported;
             for (auto& channel : channels)
@@ -242,7 +242,7 @@ namespace armarx
 
     void ForceTorqueObserver::updateRobot()
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         RemoteRobot::synchronizeLocalClone(localRobot, robot);
     }
 
@@ -304,7 +304,7 @@ namespace armarx
 
     void armarx::ForceTorqueObserver::reportSensorValues(const std::string& sensorNodeName, const FramedDirectionBasePtr& forces, const FramedDirectionBasePtr& torques, const Ice::Current& c)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         auto offerForceAndTorqueValue = [ = ](std::string const & sensorNodeName, std::string const & frame, std::string channelName, const FramedDirectionBasePtr & forces, const FramedDirectionBasePtr & torques)
         {
diff --git a/source/RobotAPI/components/units/ForceTorqueObserver.h b/source/RobotAPI/components/units/ForceTorqueObserver.h
index 24c031200..0f17d8a49 100644
--- a/source/RobotAPI/components/units/ForceTorqueObserver.h
+++ b/source/RobotAPI/components/units/ForceTorqueObserver.h
@@ -27,6 +27,8 @@
 #include <ArmarXCore/observers/Observer.h>
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 
+#include <mutex>
+
 namespace armarx
 {
     /**
@@ -92,7 +94,7 @@ namespace armarx
     private:
         void updateRobot();
 
-        armarx::Mutex dataMutex;
+        std::mutex dataMutex;
         std::string topicName;
         RobotStateComponentInterfacePrx robot;
         VirtualRobot::RobotPtr localRobot;
diff --git a/source/RobotAPI/components/units/GamepadUnitObserver.cpp b/source/RobotAPI/components/units/GamepadUnitObserver.cpp
index e6e522632..b1848c532 100644
--- a/source/RobotAPI/components/units/GamepadUnitObserver.cpp
+++ b/source/RobotAPI/components/units/GamepadUnitObserver.cpp
@@ -69,7 +69,7 @@ namespace armarx
 
     void GamepadUnitObserver::reportGamepadState(const std::string& device, const std::string& name, const GamepadData& data, const TimestampBasePtr& timestamp, const Ice::Current& c)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
diff --git a/source/RobotAPI/components/units/GamepadUnitObserver.h b/source/RobotAPI/components/units/GamepadUnitObserver.h
index fcccf65fc..2f4d59c2a 100644
--- a/source/RobotAPI/components/units/GamepadUnitObserver.h
+++ b/source/RobotAPI/components/units/GamepadUnitObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -79,7 +80,7 @@ namespace armarx
 
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
         DebugDrawerInterfacePrx debugDrawerPrx;
 
 
diff --git a/source/RobotAPI/components/units/GraspCandidateObserver.cpp b/source/RobotAPI/components/units/GraspCandidateObserver.cpp
index 3a0cac2ec..527216c96 100644
--- a/source/RobotAPI/components/units/GraspCandidateObserver.cpp
+++ b/source/RobotAPI/components/units/GraspCandidateObserver.cpp
@@ -122,21 +122,21 @@ void GraspCandidateObserver::handleProviderUpdate(const std::string& providerNam
 
 void GraspCandidateObserver::reportGraspCandidates(const std::string& providerName, const GraspCandidateSeq& candidates, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     this->candidates[providerName] = candidates;
     handleProviderUpdate(providerName, candidates.size());
 }
 
 void GraspCandidateObserver::reportBimanualGraspCandidates(const std::string& providerName, const BimanualGraspCandidateSeq& candidates, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     this->bimanualCandidates[providerName] = candidates;
     handleProviderUpdate(providerName, candidates.size());
 }
 
 void GraspCandidateObserver::reportProviderInfo(const std::string& providerName, const ProviderInfoPtr& info, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     providers[providerName] = info;
     if (updateCounters.count(providerName) == 0)
     {
@@ -153,13 +153,13 @@ void GraspCandidateObserver::reportProviderInfo(const std::string& providerName,
 
 InfoMap GraspCandidateObserver::getAvailableProvidersWithInfo(const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     return providers;
 }
 
 StringSeq GraspCandidateObserver::getAvailableProviderNames(const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     return getAvailableProviderNames();
 }
 
@@ -167,14 +167,14 @@ StringSeq GraspCandidateObserver::getAvailableProviderNames(const Ice::Current&)
 
 ProviderInfoPtr GraspCandidateObserver::getProviderInfo(const std::string& providerName, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     checkHasProvider(providerName);
     return providers[providerName];
 }
 
 bool GraspCandidateObserver::hasProvider(const std::string& providerName, const Ice::Current& c)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     return hasProvider(providerName);
 }
 
@@ -182,7 +182,7 @@ bool GraspCandidateObserver::hasProvider(const std::string& providerName, const
 
 GraspCandidateSeq GraspCandidateObserver::getAllCandidates(const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     GraspCandidateSeq all;
     for (const std::pair<std::string, grasping::GraspCandidateSeq>& pair : candidates)
     {
@@ -200,7 +200,7 @@ GraspCandidateSeq GraspCandidateObserver::getCandidatesByProvider(const std::str
 
 GraspCandidateSeq GraspCandidateObserver::getCandidatesByFilter(const CandidateFilterConditionPtr& filter, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     GraspCandidateSeq matching;
     for (const std::pair<std::string, grasping::GraspCandidateSeq>& pair : candidates)
     {
@@ -217,20 +217,20 @@ GraspCandidateSeq GraspCandidateObserver::getCandidatesByFilter(const CandidateF
 
 Ice::Int GraspCandidateObserver::getUpdateCounterByProvider(const std::string& providerName, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     checkHasProvider(providerName);
     return updateCounters[providerName];
 }
 
 IntMap GraspCandidateObserver::getAllUpdateCounters(const Ice::Current& providerName)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     return updateCounters;
 }
 
 bool GraspCandidateObserver::setProviderConfig(const std::string& providerName, const StringVariantBaseMap& config, const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     if (providers.count(providerName) == 0)
     {
         return false;
@@ -241,19 +241,19 @@ bool GraspCandidateObserver::setProviderConfig(const std::string& providerName,
 
 void GraspCandidateObserver::setSelectedCandidates(const GraspCandidateSeq& candidates, const Ice::Current&)
 {
-    ScopedLock lock(selectedCandidatesMutex);
+    std::unique_lock lock(selectedCandidatesMutex);
     selectedCandidates = candidates;
 }
 
 GraspCandidateSeq GraspCandidateObserver::getSelectedCandidates(const Ice::Current&)
 {
-    ScopedLock lock(selectedCandidatesMutex);
+    std::unique_lock lock(selectedCandidatesMutex);
     return selectedCandidates;
 }
 
 BimanualGraspCandidateSeq GraspCandidateObserver::getAllBimanualCandidates(const Ice::Current&)
 {
-    ScopedLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     BimanualGraspCandidateSeq all;
     for (const std::pair<std::string, grasping::BimanualGraspCandidateSeq>& pair : bimanualCandidates)
     {
@@ -264,13 +264,13 @@ BimanualGraspCandidateSeq GraspCandidateObserver::getAllBimanualCandidates(const
 
 void GraspCandidateObserver::setSelectedBimanualCandidates(const grasping::BimanualGraspCandidateSeq& candidates, const Ice::Current&)
 {
-    ScopedLock lock(selectedCandidatesMutex);
+    std::unique_lock lock(selectedCandidatesMutex);
     selectedBimanualCandidates = candidates;
 }
 
 BimanualGraspCandidateSeq GraspCandidateObserver::getSelectedBimanualCandidates(const Ice::Current&)
 {
-    ScopedLock lock(selectedCandidatesMutex);
+    std::unique_lock lock(selectedCandidatesMutex);
     return selectedBimanualCandidates;
 }
 
diff --git a/source/RobotAPI/components/units/GraspCandidateObserver.h b/source/RobotAPI/components/units/GraspCandidateObserver.h
index a481ec279..beb95c3a2 100644
--- a/source/RobotAPI/components/units/GraspCandidateObserver.h
+++ b/source/RobotAPI/components/units/GraspCandidateObserver.h
@@ -26,6 +26,8 @@
 #include <ArmarXCore/observers/Observer.h>
 #include <RobotAPI/interface/observers/GraspCandidateObserverInterface.h>
 
+#include <mutex>
+
 namespace armarx
 {
     /**
@@ -106,7 +108,7 @@ namespace armarx
         bool hasProvider(const std::string& providerName);
         void checkHasProvider(const std::string& providerName);
         grasping::StringSeq getAvailableProviderNames();
-        Mutex dataMutex;
+        std::mutex dataMutex;
         std::map<std::string, grasping::GraspCandidateSeq> candidates;
         std::map<std::string, grasping::BimanualGraspCandidateSeq> bimanualCandidates;
         grasping::InfoMap providers;
@@ -114,7 +116,7 @@ namespace armarx
 
         grasping::GraspCandidateProviderInterfacePrx configTopic;
 
-        Mutex selectedCandidatesMutex;
+        std::mutex selectedCandidatesMutex;
         grasping::GraspCandidateSeq selectedCandidates;
 
         grasping::BimanualGraspCandidateSeq selectedBimanualCandidates;
diff --git a/source/RobotAPI/components/units/HapticObserver.cpp b/source/RobotAPI/components/units/HapticObserver.cpp
index 759927bd8..0fe52df49 100644
--- a/source/RobotAPI/components/units/HapticObserver.cpp
+++ b/source/RobotAPI/components/units/HapticObserver.cpp
@@ -76,7 +76,7 @@ namespace armarx
 
     void HapticObserver::reportSensorValues(const std::string& device, const std::string& name, const armarx::MatrixFloatBasePtr& values, const armarx::TimestampBasePtr& timestamp, const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         MatrixFloatPtr matrix = MatrixFloatPtr::dynamicCast(values);
         if (matrix->cols == 0)
@@ -159,7 +159,7 @@ namespace armarx
 
     void HapticObserver::updateStatistics()
     {
-        /*ScopedLock lock(dataMutex);
+        /*std::unique_lock lock(dataMutex);
         //ARMARX_LOG << "updateStatistics";
         long now = TimestampVariant::nowLong();
         for (std::map<std::string, HapticSampleStatistics>::iterator it = statistics.begin(); it != statistics.end(); ++it)
diff --git a/source/RobotAPI/components/units/HapticObserver.h b/source/RobotAPI/components/units/HapticObserver.h
index 5e75db5b0..cac9a85c9 100644
--- a/source/RobotAPI/components/units/HapticObserver.h
+++ b/source/RobotAPI/components/units/HapticObserver.h
@@ -30,6 +30,7 @@
 #include <ArmarXCore/util/variants/eigen3/Eigen3VariantObjectFactories.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -146,7 +147,7 @@ namespace armarx
          */
         PropertyDefinitionsPtr createPropertyDefinitions() override;
     private:
-        armarx::Mutex dataMutex;
+        std::mutex dataMutex;
         std::string topicName;
         PeriodicTask<HapticObserver>::pointer_type statisticsTask;
 
diff --git a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
index 52e6f92ea..dc73454fe 100644
--- a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
+++ b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
@@ -71,7 +71,7 @@ namespace armarx
         const std::string& device, const std::string& name, const IMUData& values,
         const TimestampBasePtr& timestamp, const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
diff --git a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.h b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.h
index 4591228d9..728e2dc38 100644
--- a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.h
+++ b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -82,7 +83,7 @@ namespace armarx
 
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
         DebugDrawerInterfacePrx debugDrawerPrx;
 
 
diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.cpp b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
index 15712aa55..c3d52e47f 100644
--- a/source/RobotAPI/components/units/KinematicUnitObserver.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
@@ -287,7 +287,7 @@ namespace armarx
         //    ARMARX_INFO << deactivateSpam(10) << " timestamp is " << (IceUtil::Time::now() - IceUtil::Time::microSeconds(timestamp)).toMicroSecondsDouble() << " µs old";
         bool newChannel;
         {
-            ScopedLock lock(initializedChannelsMutex);
+            std::unique_lock lock(initializedChannelsMutex);
             newChannel = initializedChannels.count(channelName) == 0;
             initializedChannels.insert(channelName);
         }
diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.h b/source/RobotAPI/components/units/KinematicUnitObserver.h
index 8d7266006..5b21e89d0 100644
--- a/source/RobotAPI/components/units/KinematicUnitObserver.h
+++ b/source/RobotAPI/components/units/KinematicUnitObserver.h
@@ -32,6 +32,7 @@
 #include <ArmarXCore/observers/Observer.h>
 
 #include <string>
+#include <mutex>
 
 namespace armarx
 {
@@ -154,7 +155,7 @@ namespace armarx
     protected:
         void nameValueMapToDataFields(const std::string& channelName, const NameValueMap& nameValueMap, Ice::Long timestamp, bool aValueChanged);
         std::set<std::string> initializedChannels;
-        Mutex initializedChannelsMutex;
+        std::mutex initializedChannelsMutex;
     private:
         std::string robotNodeSetName;
         std::set<std::string> robotNodes;
diff --git a/source/RobotAPI/components/units/LaserScannerUnitObserver.cpp b/source/RobotAPI/components/units/LaserScannerUnitObserver.cpp
index 0944336bf..04bd47d5a 100644
--- a/source/RobotAPI/components/units/LaserScannerUnitObserver.cpp
+++ b/source/RobotAPI/components/units/LaserScannerUnitObserver.cpp
@@ -64,7 +64,7 @@ namespace armarx
 
     void LaserScannerUnitObserver::reportSensorValues(const std::string& device, const std::string& name, const LaserScan& scan, const TimestampBasePtr& timestamp, const Ice::Current& c)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         if (!existsChannel(device))
         {
diff --git a/source/RobotAPI/components/units/LaserScannerUnitObserver.h b/source/RobotAPI/components/units/LaserScannerUnitObserver.h
index 4b093eb49..05aa07cb9 100644
--- a/source/RobotAPI/components/units/LaserScannerUnitObserver.h
+++ b/source/RobotAPI/components/units/LaserScannerUnitObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -78,7 +79,7 @@ namespace armarx
                                 const TimestampBasePtr& timestamp, const Ice::Current& c) override;
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
 
     };
 }
diff --git a/source/RobotAPI/components/units/MetaWearIMUObserver.cpp b/source/RobotAPI/components/units/MetaWearIMUObserver.cpp
index b6885037d..959373308 100644
--- a/source/RobotAPI/components/units/MetaWearIMUObserver.cpp
+++ b/source/RobotAPI/components/units/MetaWearIMUObserver.cpp
@@ -64,7 +64,7 @@ namespace armarx
 
     void armarx::MetaWearIMUObserver::reportIMUValues(const std::string& name, const MetaWearIMUData& data, const TimestampBasePtr& timestamp, const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         if (!existsChannel(name))
         {
diff --git a/source/RobotAPI/components/units/MetaWearIMUObserver.h b/source/RobotAPI/components/units/MetaWearIMUObserver.h
index 6dba1f746..87eb6b49f 100644
--- a/source/RobotAPI/components/units/MetaWearIMUObserver.h
+++ b/source/RobotAPI/components/units/MetaWearIMUObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -74,7 +75,7 @@ namespace armarx
 
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
         DebugDrawerInterfacePrx debugDrawerPrx;
 
         void offerVector3(const std::string& channelName, const std::string& dfName, const std::vector<float>& data);
diff --git a/source/RobotAPI/components/units/OptoForceUnitObserver.cpp b/source/RobotAPI/components/units/OptoForceUnitObserver.cpp
index ce09bacd4..f87a5b56e 100644
--- a/source/RobotAPI/components/units/OptoForceUnitObserver.cpp
+++ b/source/RobotAPI/components/units/OptoForceUnitObserver.cpp
@@ -65,7 +65,7 @@ namespace armarx
 
     void OptoForceUnitObserver::reportSensorValues(const std::string& device, const std::string& name, float fx, float fy, float fz, const TimestampBasePtr& timestamp, const Ice::Current& c)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
         if (!existsChannel(name))
@@ -86,7 +86,7 @@ namespace armarx
 
     /*void OptoForceUnitObserver::reportSensorValues(const std::string& device, const std::string& name, const IMUData& values, const TimestampBasePtr& timestamp, const Ice::Current& c)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
diff --git a/source/RobotAPI/components/units/OptoForceUnitObserver.h b/source/RobotAPI/components/units/OptoForceUnitObserver.h
index 3bdc63e1a..0d415cb2b 100644
--- a/source/RobotAPI/components/units/OptoForceUnitObserver.h
+++ b/source/RobotAPI/components/units/OptoForceUnitObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -81,7 +82,7 @@ namespace armarx
 
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
         DebugDrawerInterfacePrx debugDrawerPrx;
 
 
diff --git a/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.cpp b/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.cpp
index 514a1767b..756408776 100644
--- a/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.cpp
+++ b/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.cpp
@@ -59,7 +59,7 @@ namespace armarx
 
     void OrientedTactileSensorUnitObserver::reportSensorValues(int id, float pressure, float qw, float qx, float qy, float qz, float pressureRate, float rotationRate, float accelerationRate, float accelx, float accely, float accelz, const TimestampBasePtr& timestamp, const Ice::Current&)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
         std::stringstream ss;
diff --git a/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.h b/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.h
index 033f9cd08..70916163f 100644
--- a/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.h
+++ b/source/RobotAPI/components/units/OrientedTactileSensorUnitObserver.h
@@ -29,6 +29,7 @@
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
+#include <mutex>
 
 namespace armarx
 {
@@ -80,7 +81,7 @@ namespace armarx
 
 
     private:
-        Mutex dataMutex;
+        std::mutex dataMutex;
         DebugDrawerInterfacePrx debugDrawerPrx;
     };
 }
diff --git a/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
index 9a2dbb98e..9fe87907b 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
@@ -92,7 +92,7 @@ void RobotStateObserver::updatePoses()
         return;
     }
 
-    ScopedRecursiveLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     ReadLockPtr lock2 = robot->getReadLock();
     FramedPoseBaseMap tcpPoses;
     std::string rootFrame =  robot->getRootNode()->getName();
@@ -181,7 +181,7 @@ void RobotStateObserver::updateNodeVelocities(const NameValueMap& jointVel, long
         return;
     }
 
-    ScopedRecursiveLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
 
     if (!robot)
     {
@@ -316,7 +316,7 @@ PropertyDefinitionsPtr RobotStateObserver::createPropertyDefinitions()
 
 void RobotStateObserver::setRobot(RobotPtr robot)
 {
-    ScopedRecursiveLock lock(dataMutex);
+    std::unique_lock lock(dataMutex);
     this->robot = robot;
 
     std::vector< VirtualRobot::RobotNodeSetPtr > robotNodes;
diff --git a/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
index b604011ae..e3acfd611 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
+++ b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
@@ -94,7 +94,7 @@ namespace armarx
         RobotStateComponentInterfacePrx server;
         VirtualRobot::RobotPtr  robot, velocityReportRobot;
         std::vector<std::pair<VirtualRobot::RobotNodePtr, std::string> > nodesToReport;
-        RecursiveMutex dataMutex;
+        std::recursive_mutex dataMutex;
         IceUtil::Time lastVelocityUpdate;
 
         // RobotStateObserverInterface interface
-- 
GitLab