From 991c106cc171755fcea4da5b5c6d19c4f30653c1 Mon Sep 17 00:00:00 2001
From: Christoph Pohl <christoph.pohl@kit.edu>
Date: Mon, 31 Jul 2023 11:50:32 +0200
Subject: [PATCH] Improve Force-Torque querying for RobotReader

Signed-off-by: ARMAR-DE <>
---
 source/RobotAPI/libraries/armem_robot/types.h         |  2 ++
 .../libraries/armem_robot_state/aron_conversions.cpp  |  4 ++++
 .../client/common/VirtualRobotReader.cpp              | 11 +++++++++++
 .../client/common/VirtualRobotReader.h                |  3 +++
 4 files changed, 20 insertions(+)

diff --git a/source/RobotAPI/libraries/armem_robot/types.h b/source/RobotAPI/libraries/armem_robot/types.h
index 2bc45c144..2eeff803f 100644
--- a/source/RobotAPI/libraries/armem_robot/types.h
+++ b/source/RobotAPI/libraries/armem_robot/types.h
@@ -37,7 +37,9 @@ namespace armarx::armem::robot
     struct ForceTorque
     {
         Eigen::Vector3f force;
+        Eigen::Vector3f gravityCompensatedForce;
         Eigen::Vector3f torque;
+        Eigen::Vector3f gravityCompensatedTorque;
     };
 
     using ToFArray = Eigen::MatrixXf;
diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
index 3749c892d..901d98dcb 100644
--- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
@@ -88,14 +88,18 @@ namespace armarx::armem
     fromAron(const armarx::armem::prop::arondto::ForceTorque& dto, robot::ForceTorque& bo)
     {
         aron::fromAron(dto.force, bo.force);
+        aron::fromAron(dto.gravityCompensationForce, bo.gravityCompensatedForce);
         aron::fromAron(dto.torque, bo.torque);
+        aron::fromAron(dto.gravityCompensationTorque, bo.gravityCompensatedTorque);
     }
 
     void
     toAron(armarx::armem::prop::arondto::ForceTorque& dto, const robot::ForceTorque& bo)
     {
         aron::toAron(dto.force, bo.force);
+        aron::toAron(dto.gravityCompensationForce, bo.gravityCompensatedForce);
         aron::toAron(dto.torque, bo.torque);
+        aron::toAron(dto.gravityCompensationTorque, bo.gravityCompensatedTorque);
     }
 
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
index 76fa10a4c..416585111 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
@@ -117,5 +117,16 @@ namespace armarx::armem::robot_state
         return nullptr;
     }
 
+    std::optional<std::map<RobotReader::Hand, robot::ForceTorque>>
+    VirtualRobotReader::queryForceTorque(const std::string& name, const Time& timestamp)
+    {
+        const auto description = queryDescription(name, timestamp);
+        if (not description.has_value())
+        {
+            return std::nullopt;
+        }
+        return RobotReader::queryForceTorque(description.value(), timestamp);
+    }
+
 
 } // namespace armarx::armem::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
index 3de8fbe8b..a80d9b028 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
@@ -68,6 +68,9 @@ namespace armarx::armem::robot_state
                                  VirtualRobot::RobotIO::RobotDescription::eStructure,
                              bool blocking = true);
 
+        std::optional<std::map<RobotReader::Hand, robot::ForceTorque>>
+        queryForceTorque(const std::string& name, const armem::Time& timestamp);
+        using RobotReader::queryForceTorque;
 
     private:
         [[nodiscard]] VirtualRobot::RobotPtr
-- 
GitLab