From 6d9c4d75844ce86b59180a2a346ead4f5b755d43 Mon Sep 17 00:00:00 2001
From: Nikolaus Vahrenkamp <vahrenkamp@kit.edu>
Date: Tue, 19 Aug 2014 10:59:26 +0200
Subject: [PATCH] Switched to single sensor forceTorqueUnit (needs to be
 discussed) Fixed place object state

---
 .../ForceTorqueObserver/CMakeLists.txt        |  1 +
 .../ForceTorqueUnitSimulation/CMakeLists.txt  |  2 +-
 .../interface/units/ForceTorqueUnit.ice       | 18 ++--
 .../MovePlatformToLandmark.cpp                |  8 +-
 .../statecharts/PlaceObject/PlaceObject.cpp   | 85 +++++++++++++------
 source/RobotAPI/units/ForceTorqueObserver.cpp | 17 ++--
 source/RobotAPI/units/ForceTorqueObserver.h   | 11 ++-
 .../units/ForceTorqueUnitSimulation.cpp       | 26 +++---
 .../units/ForceTorqueUnitSimulation.h         | 12 +--
 9 files changed, 115 insertions(+), 65 deletions(-)

diff --git a/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt b/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
index fe1e3025a..3ce378f78 100644
--- a/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
@@ -7,6 +7,7 @@ armarx_build_if(Eigen3_FOUND "Eigen3 not available")
 find_package(Simox QUIET)
 armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available")
 
+include_directories(${Eigen3_INCLUDE_DIR})
 
 set(COMPONENT_LIBS RobotAPIUnits RobotAPICore RobotAPIInterfaces  ArmarXInterfaces ArmarXCore ArmarXCoreObservers RobotAPIRemoteRobot)
 
diff --git a/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt b/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
index 173374347..0411fa089 100644
--- a/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
+++ b/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
@@ -1,8 +1,8 @@
 
 armarx_component_set_name(ForceTorqueUnitSimulation)
+include_directories(${Eigen3_INCLUDE_DIR})
 
 set(COMPONENT_LIBS ArmarXInterfaces ArmarXCore RobotAPIUnits)
-
 set(SOURCES main.cpp ForceTorqueUnitSimulationApp.h)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/interface/units/ForceTorqueUnit.ice b/source/RobotAPI/interface/units/ForceTorqueUnit.ice
index cc09be4eb..de9cdf6ed 100644
--- a/source/RobotAPI/interface/units/ForceTorqueUnit.ice
+++ b/source/RobotAPI/interface/units/ForceTorqueUnit.ice
@@ -26,6 +26,7 @@
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
 #include <RobotAPI/interface/robotstate/RobotState.ice>
+#include <RobotAPI/interface/robotstate/PoseBase.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
@@ -36,21 +37,26 @@ module armarx
 {
 
 
-    sequence<string> StringMap;
+    //sequence<string> StringMap;
     interface ForceTorqueUnitInterface extends armarx::SensorActorUnitInterface
     {
-        void setOffset(FramedVector3Map forceTorqueOffsets);
-        void setToNull(StringMap sensorNames);
+        //void setOffset(FramedVector3Map forceTorqueOffsets);
+        //void setToNull(StringMap sensorNames);
+        void setOffset(FramedVector3Base forceOffsets, FramedVector3Base torqueOffsets);
+        void setToNull();
     };
 
 
 
     interface ForceTorqueUnitListener
     {
-        void reportSensorValues(string type, FramedVector3Map forces);
+        //void reportSensorValues(string type, FramedVector3Map forces);
 
-        void reportSensorForceValues(FramedVector3Map forces);
-        void reportSensorTorqueValues(FramedVector3Map torques);
+        //void reportSensorForceValues(FramedVector3Map forces);
+        //void reportSensorTorqueValues(FramedVector3Map torques);
+        void reportSensorValues(FramedVector3Base forces,FramedVector3Base torques);
+        void reportSensorForceValues(FramedVector3Base forces);
+        void reportSensorTorqueValues(FramedVector3Base torques);
     };
 
     interface ForceTorqueUnitObserverInterface extends ObserverInterface, ForceTorqueUnitListener
diff --git a/source/RobotAPI/statecharts/MovePlatformToLandmark/MovePlatformToLandmark.cpp b/source/RobotAPI/statecharts/MovePlatformToLandmark/MovePlatformToLandmark.cpp
index 7b6fcac5f..072d1177a 100644
--- a/source/RobotAPI/statecharts/MovePlatformToLandmark/MovePlatformToLandmark.cpp
+++ b/source/RobotAPI/statecharts/MovePlatformToLandmark/MovePlatformToLandmark.cpp
@@ -47,7 +47,10 @@ namespace armarx
 
     void MovePlatformToLandmarkStateChart::onConnectRemoteStateOfferer()
     {
-
+        if(!getArmarXManager()->getIceManager()->getCommunicator()->findObjectFactory(armarx::FramedVector3Base::ice_staticId()))
+        {
+            ARMARX_INFO << "could not find factory";
+        }
     }
 
     // ****************************************************************
@@ -55,7 +58,7 @@ namespace armarx
     // ****************************************************************
     void StatechartMovePlatformToLandmark::defineParameters()
     {
-        setConfigFile("RobotAPI/scenarios/MovePlatformToLandmarkTest/configs/MovePlatformToLandmarkExampleGraph.xml");
+        //setConfigFile("RobotAPI/scenarios/MovePlatformToLandmarkTest/configs/MovePlatformToLandmarkExampleGraph.xml");
 
         addToInput("targetLandmark", VariantType::String, false);
         addToInput("landmarkNodes", VariantType::List(VariantType::FramedVector3), false);
@@ -114,6 +117,7 @@ namespace armarx
         SingleTypeVariantListPtr landmarkNodes = getInput<SingleTypeVariantList>("landmarkNodes");
         std::map<std::string, NodePtr> nameToNodeMap;
         for (int i = 0; i < landmarkNodes->getSize(); i++) {
+            ARMARX_LOG << landmarkNodes->getVariant(i)->getTypeName() << std::endl;
             FramedVector3Ptr fv = landmarkNodes->getVariant(i)->get<FramedVector3>();
             NodePtr n = NodePtr(new Node());
             n->name = fv->frame;
diff --git a/source/RobotAPI/statecharts/PlaceObject/PlaceObject.cpp b/source/RobotAPI/statecharts/PlaceObject/PlaceObject.cpp
index b0c5867a9..76b8018ca 100644
--- a/source/RobotAPI/statecharts/PlaceObject/PlaceObject.cpp
+++ b/source/RobotAPI/statecharts/PlaceObject/PlaceObject.cpp
@@ -41,16 +41,16 @@ namespace armarx
     // ****************************************************************
     void StatechartPlaceObject::defineParameters()
     {
-        addToInput("maxHeightToMoveDown", VariantType::List(VariantType::Float), false);
-        addToInput("minForceForSuccess", VariantType::List(VariantType::Float), false);
-        addToInput("timeoutPlaceObject", VariantType::Float, false);
+        addToInput("maxHeightToMoveDown", VariantType::Float, false);
+        addToInput("minForceForSuccess", VariantType::Float, false);
+        addToInput("timeoutPlaceObject", VariantType::Int, false);
  
         addToInput("robotNodeSetName", VariantType::String, false);
         addToInput("robotBaseFrame", VariantType::String, false);
 
 
-        addToLocal("startPose", VariantType::List(VariantType::FramedPose));
-        addToLocal("goalPose", VariantType::List(VariantType::FramedPose));
+        addToLocal("startPose", VariantType::FramedPose);
+        addToLocal("goalPose", VariantType::FramedPose);
 
         //addToLocal("jointNames", VariantType::List(VariantType::String));
         //addToLocal("jointVelocitiesDatafields", VariantType::List(VariantType::DatafieldRef));
@@ -71,12 +71,17 @@ namespace armarx
         setInitState(stateMoveDown, mapMoveDown);
 
         //transitions
-        addTransition<EvSuccess>(stateMoveDown, stateMoveDown);
+        addTransition<EvSuccess>(stateMoveDown, stateMoveDown,mapMoveDown);
         addTransition<EvFailure>(stateMoveDown, stateFailure);
         //addTransition<EvSuccess>(stateCheckForces, stateSuccess);
         //addTransition<EvFailure>(stateCheckForces, stateMoveDown);
 
-        addTransition<EvPlaceObjectCollision>(stateMoveDown, stateSuccess);
+        // has to be defined in parent states
+        //addTransition<EvPlaceObjectCollision>(stateMoveDown, stateSuccess);
+        // for now: success
+        //addTransition<EvPlaceObjectTimeout>(stateMoveDown, stateSuccess);
+
+        //addTransition<EvPlaceObjectTimeout>(stateCheckForces, stateSuccess);
         //addTransition<EvPlaceObjectTimeout>(stateCheckForces, stateFailure);
 
     }
@@ -91,6 +96,8 @@ namespace armarx
 
         std::string rnsName = getInput<std::string>("robotNodeSetName");
         std::string rnBaseName = getInput<std::string>("robotBaseFrame");
+        ARMARX_LOG << "RNS:" << rnsName << ", rnBaseName:" << rnBaseName << flush;
+
         VirtualRobot::RobotNodeSetPtr nodeSet = context->remoteRobot->getRobotNodeSet(rnsName);
         if (!nodeSet)
         {
@@ -111,23 +118,27 @@ namespace armarx
         FramedPosePtr fp(new FramedPose(tcpPose,rnBaseName));
 
         setLocal("startPose", fp);
+        ARMARX_LOG << "startPose:" << tcpPose << ", rnBaseName:" << rnBaseName << flush;
+
 
         Eigen::Matrix4f tcpGoalPose = nodeSet->getTCP()->getGlobalPose();
         float maxHeight = getInput<float>("maxHeightToMoveDown");
-        tcpGoalPose(0,3) -= maxHeight;
+        tcpGoalPose(2,3) -= maxHeight;
         tcpGoalPose = nodeBase->toLocalCoordinateSystem(tcpGoalPose);
         FramedPosePtr fpGoal(new FramedPose(tcpGoalPose,rnBaseName));
 
         setLocal("goalPose", fpGoal);
+        ARMARX_LOG << "goalPose:" << tcpGoalPose << ", rnBaseName:" << rnBaseName << flush;
 
         ARMARX_LOG << eINFO << "Installing place object timeout condition";
-        float timeoutPlaceObject = getInput<float>("timeoutPlaceObject");
+        float timeoutPlaceObject = float(getInput<int>("timeoutPlaceObject"));
 
         condPlaceObjectTimeout = setTimeoutEvent(timeoutPlaceObject, createEvent<EvPlaceObjectTimeout>());
 
 
 
         // install the force condition
+
         float force = getInput<float>("minForceForSuccess");
         Term cond;
         for(unsigned int i=0; i<nodeSet->getSize(); i++)
@@ -139,7 +150,7 @@ namespace armarx
             Literal inrangeLiteral(DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointtorques", nodeSet->getNode(i)->getName()), "inrange", inrangeCheck);
             cond = cond && !inrangeLiteral;
         }
-
+        ARMARX_LOG << "Installed force consition, minForce:" << force << flush;
         condPlaceObjectCollision = installCondition<EvPlaceObjectCollision>(cond);
     }
 
@@ -148,6 +159,17 @@ namespace armarx
         removeTimeoutEvent(condPlaceObjectTimeout);
         removeCondition(condPlaceObjectCollision);
 
+        RobotStatechartContext *context = getContext<RobotStatechartContext>();
+        HandUnitInterfacePrx handUnitPrx = context->getHandUnit("RightHandUnit");
+        if (handUnitPrx)
+        {
+            ARMARX_INFO << "Sending open hand command" << flush;
+            handUnitPrx->open();
+            ARMARX_INFO << "TEST: set object released: Vitalis" << flush;
+            handUnitPrx->setObjectReleased("Vitalis");
+        } else
+            ARMARX_LOG << eINFO << "No hand unit found...";
+
         ARMARX_LOG << eINFO << "Exiting StatechartPlaceObject...";
     }
 
@@ -157,17 +179,18 @@ namespace armarx
 
     void StateMoveDown::defineParameters()
     {
-        addToInput("maxHeightToMoveDown", VariantType::List(VariantType::Float), false);
-        addToInput("minForceForSuccess", VariantType::List(VariantType::Float), false);
-        addToInput("timeoutPlaceObject", VariantType::Float, false);
+        addToInput("maxHeightToMoveDown", VariantType::Float, false);
+        addToInput("minForceForSuccess", VariantType::Float, false);
+        addToInput("timeoutPlaceObject", VariantType::Int, false);
         addToInput("robotNodeSetName", VariantType::String, false);
         addToInput("robotBaseFrame", VariantType::String, false);
-        addToInput("startPose", VariantType::List(VariantType::FramedPose), false);
+        addToInput("startPose", VariantType::FramedPose, false);
+        addToInput("goalPose", VariantType::FramedPose, false);
     }
 
     void StateMoveDown::onEnter()
     {
-        ARMARX_DEBUG << "Entering StateMoveDown" << flush;
+        ARMARX_INFO << "Entering StateMoveDown" << flush;
 
         RobotStatechartContext* rsContext = getContext<RobotStatechartContext>();
         std::string rnsName = getInput<std::string>("robotNodeSetName");
@@ -184,16 +207,22 @@ namespace armarx
         Eigen::Matrix4f currentPose = nodeSet->getTCP()->getGlobalPose();
         currentPose = nodeBase->toLocalCoordinateSystem(currentPose);
 
-        ARMARX_DEBUG << "startPose (coordsystem " << rnBaseName << ") : " << startPose << flush;
-        ARMARX_DEBUG << "goalPose (coordsystem " << rnBaseName << ") : " << goalPose << flush;
-        ARMARX_DEBUG << "currentPose (coordsystem " << rnBaseName << ") : " << currentPose << flush;
+        ARMARX_INFO << "startPose (coordsystem " << rnBaseName << ") : " << startPose << flush;
+        ARMARX_INFO << "goalPose (coordsystem " << rnBaseName << ") : " << goalPose << flush;
+        ARMARX_INFO << "currentPose (coordsystem " << rnBaseName << ") : " << currentPose << flush;
 
-        float dist = (goalPose.block(0,3,3,1) - currentPose.block(0,3,3,1)).norm();
-        if (dist<10.0f)
+        Eigen::Vector3f goalVect = goalPose.block(0,3,3,1) - currentPose.block(0,3,3,1);
+        float maxDist = 10.0f;
+        float dist = goalVect.norm();
+        if (dist<maxDist)
         {
             ARMARX_ERROR << "Did not hit any surface, sending failure event..." << flush;
             sendEvent<EvFailure>();
         }
+        goalVect = goalVect.normalized() * maxDist;
+
+        goalPose.block(0,3,3,1) = currentPose.block(0,3,3,1) + goalVect;
+        ARMARX_INFO << "goalPose cut (coordsystem " << rnBaseName << ") : " << goalPose << flush;
 
 
         VirtualRobot::DifferentialIKPtr ikSolver(new VirtualRobot::DifferentialIK(nodeSet,nodeBase));
@@ -210,21 +239,23 @@ namespace armarx
 
         std::vector<float> jointValues = nodeSet->getJointValues();
         NameValueMap jointNamesAndValues;
-
+        NameControlModeMap controlModes;
         for (unsigned int j=0; j<jointValues.size(); j++)
         {
-            jointNamesAndValues[nodeSet->getNode(j)->getName()]=jointValues[j];
-            ARMARX_DEBUG << "target for joint :" << nodeSet->getNode(j)->getName() << " -> " << jointValues[j] << flush;
+            std::string nName = nodeSet->getNode(j)->getName();
+            jointNamesAndValues[nName]=jointValues[j];
+            controlModes[nName] = ePositionControl;
+            ARMARX_INFO << "target for joint :" << nodeSet->getNode(j)->getName() << " -> " << jointValues[j] << flush;
         }
-
+        rsContext->kinematicUnitPrx->switchControlMode(controlModes);
         rsContext->kinematicUnitPrx->setJointAngles(jointNamesAndValues);
-
-        ARMARX_DEBUG << "StateMoveDown: Done onEnter()";
+        sendEvent<EvSuccess>();
+        ARMARX_INFO << "StateMoveDown: Done onEnter()";
     }
 
     void StateMoveDown::onExit()
     {
-        ARMARX_DEBUG << "StatePlaceObject: Done onExit()";
+        ARMARX_INFO << "StatePlaceObject: Done onExit()";
     }
 
 
diff --git a/source/RobotAPI/units/ForceTorqueObserver.cpp b/source/RobotAPI/units/ForceTorqueObserver.cpp
index d469ac113..b4a40e79f 100644
--- a/source/RobotAPI/units/ForceTorqueObserver.cpp
+++ b/source/RobotAPI/units/ForceTorqueObserver.cpp
@@ -98,9 +98,10 @@ void ForceTorqueObserver::onConnectObserver()
 
 
 
-void ForceTorqueObserver::reportSensorValues(const std::string &type, const FramedVector3Map &newValues, const Ice::Current &)
+void ForceTorqueObserver::reportSensorValues(const ::armarx::FramedVector3BasePtr &forces, const ::armarx::FramedVector3BasePtr &torques, const Ice::Current &)
 {
     ScopedLock lock(dataMutex);
+    /*
     FramedVector3Map::const_iterator it = newValues.begin();
     if(!existsChannel(type))
         offerChannel(type, "Force and Torque vectors on specific parts of the robot.");
@@ -131,13 +132,13 @@ void ForceTorqueObserver::reportSensorValues(const std::string &type, const Fram
         }
 
         updateChannel(identifier);
-    }
+    }*/
 }
 
-void ForceTorqueObserver::reportSensorForceValues(const ::armarx::FramedVector3Map &newForces, const ::Ice::Current &)
+void ForceTorqueObserver::reportSensorForceValues(const ::armarx::FramedVector3BasePtr &newForces, const ::Ice::Current &)
 {
     ScopedLock lock(dataMutex);
-    FramedVector3Map::const_iterator it = newForces.begin();
+    /*FramedVector3Map::const_iterator it = newForces.begin();
     std::string type = "force";
 
     if(!existsChannel(type))
@@ -177,13 +178,13 @@ void ForceTorqueObserver::reportSensorForceValues(const ::armarx::FramedVector3M
         }
 
         updateChannel(identifier);
-    }
+    }*/
 }
 
-void ForceTorqueObserver::reportSensorTorqueValues(const ::armarx::FramedVector3Map &newTorques, const ::Ice::Current &)
+void ForceTorqueObserver::reportSensorTorqueValues(const ::armarx::FramedVector3BasePtr &newTorques, const ::Ice::Current &)
 {
     ScopedLock lock(dataMutex);
-    FramedVector3Map::const_iterator it = newTorques.begin();
+    /*FramedVector3Map::const_iterator it = newTorques.begin();
     std::string type = "torque";
 
     if(!existsChannel(type))
@@ -223,7 +224,7 @@ void ForceTorqueObserver::reportSensorTorqueValues(const ::armarx::FramedVector3
         }
 
         updateChannel(identifier);
-    }
+    }*/
 }
 
 
diff --git a/source/RobotAPI/units/ForceTorqueObserver.h b/source/RobotAPI/units/ForceTorqueObserver.h
index fbaa7edde..2680f4eec 100644
--- a/source/RobotAPI/units/ForceTorqueObserver.h
+++ b/source/RobotAPI/units/ForceTorqueObserver.h
@@ -2,6 +2,7 @@
 #define _ARMARX_ROBOTAPI_FORCETORQUEOBSERVER_H
 
 #include <RobotAPI/interface/units/ForceTorqueUnit.h>
+#include <RobotAPI/robotstate/remote/ArmarPose.h>
 #include <Core/observers/Observer.h>
 
 namespace armarx
@@ -36,9 +37,13 @@ namespace armarx
         void onInitObserver();
         void onConnectObserver();
 
-        void reportSensorValues(const std::string & type, const ::armarx::FramedVector3Map& newForces, const ::Ice::Current& = ::Ice::Current());
-        void reportSensorForceValues(const ::armarx::FramedVector3Map& newForces, const ::Ice::Current& = ::Ice::Current());
-        void reportSensorTorqueValues(const ::armarx::FramedVector3Map& newTorques, const ::Ice::Current& = ::Ice::Current());
+        //void reportSensorValues(const std::string & type, const ::armarx::FramedVector3Map& newForces, const ::Ice::Current& = ::Ice::Current());
+        //void reportSensorForceValues(const ::armarx::FramedVector3Map& newForces, const ::Ice::Current& = ::Ice::Current());
+        //void reportSensorTorqueValues(const ::armarx::FramedVector3Map& newTorques, const ::Ice::Current& = ::Ice::Current());
+        void reportSensorValues(const ::armarx::FramedVector3BasePtr &forces, const ::armarx::FramedVector3BasePtr &torques, const ::Ice::Current& = ::Ice::Current());
+        void reportSensorForceValues(const ::armarx::FramedVector3BasePtr &forces, const ::Ice::Current& = ::Ice::Current());
+        void reportSensorTorqueValues(const ::armarx::FramedVector3BasePtr &torques, const ::Ice::Current& = ::Ice::Current());
+
 
 //        void reportForceWithOffset(const ::armarx::FramedVector3Map& newForces, const ::Ice::Current& = ::Ice::Current());
 //        void reportTorqueRaw(const ::armarx::FramedVector3Map& newTorques, const ::Ice::Current& = ::Ice::Current());
diff --git a/source/RobotAPI/units/ForceTorqueUnitSimulation.cpp b/source/RobotAPI/units/ForceTorqueUnitSimulation.cpp
index d4e0061bc..575dc3f25 100644
--- a/source/RobotAPI/units/ForceTorqueUnitSimulation.cpp
+++ b/source/RobotAPI/units/ForceTorqueUnitSimulation.cpp
@@ -33,16 +33,18 @@ using namespace armarx;
 void ForceTorqueUnitSimulation::onInitForceTorqueUnit()
 {
     int intervalMs = getProperty<int>("IntervalMs").getValue();
-    std::string sensorNames = getProperty<std::string>("SensorNames").getValue();
+    std::string sensorName = getProperty<std::string>("SensorName").getValue();
 
-    std::vector<std::string> sensorNamesList;
-    boost::split(sensorNamesList, sensorNames, boost::is_any_of(","));
+    //std::vector<std::string> sensorNamesList;
+    //boost::split(sensorNamesList, sensorNames, boost::is_any_of(","));
 
-    for(std::vector<std::string>::iterator s = sensorNamesList.begin(); s != sensorNamesList.end(); s++)
-    {
-        forces[*s] = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), *s);
-        torques[*s] = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), *s);
-    }
+    //for(std::vector<std::string>::iterator s = sensorNamesList.begin(); s != sensorNamesList.end(); s++)
+    //{
+    //    forces[*s] = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), *s);
+    //    torques[*s] = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), *s);
+   // }
+    forces = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), sensorName);
+    torques = new armarx::FramedVector3(Eigen::Vector3f(0, 0, 0), sensorName);
 
     ARMARX_VERBOSE << "Starting ForceTorqueUnitSimulation with " << intervalMs << " ms interval";
     simulationTask = new PeriodicTask<ForceTorqueUnitSimulation>(this, &ForceTorqueUnitSimulation::simulationFunction, intervalMs, false, "ForceTorqueUnitSimulation");
@@ -65,16 +67,16 @@ void ForceTorqueUnitSimulation::simulationFunction()
     listenerPrx->reportSensorForceValues(forces);
     listenerPrx->reportSensorTorqueValues(torques);
 
-    listenerPrx->reportSensorValues("force", forces);
-    listenerPrx->reportSensorValues("torque", torques);
+    //listenerPrx->reportSensorValues(forces);
+    //listenerPrx->reportSensorValues(torques);
 }
 
-void ForceTorqueUnitSimulation::setOffset(const FramedVector3Map &forceTorqueOffsets, const Ice::Current &c)
+void ForceTorqueUnitSimulation::setOffset(const FramedVector3BasePtr &forceOffsets, const FramedVector3BasePtr &torqueOffsets, const Ice::Current &c)
 {
     // Ignore
 }
 
-void ForceTorqueUnitSimulation::setToNull(const StringMap &sensorNames, const Ice::Current &c)
+void ForceTorqueUnitSimulation::setToNull(const Ice::Current &c)
 {
     // Ignore
 }
diff --git a/source/RobotAPI/units/ForceTorqueUnitSimulation.h b/source/RobotAPI/units/ForceTorqueUnitSimulation.h
index b62fb0a07..b4ec73b38 100644
--- a/source/RobotAPI/units/ForceTorqueUnitSimulation.h
+++ b/source/RobotAPI/units/ForceTorqueUnitSimulation.h
@@ -28,6 +28,7 @@
 
 #include <Core/core/services/tasks/PeriodicTask.h>
 #include <Core/core/system/ImportExportComponent.h>
+#include <RobotAPI/robotstate/remote/ArmarPose.h>
 
 #include <IceUtil/Time.h>
 
@@ -47,7 +48,7 @@ namespace armarx
         ForceTorqueUnitSimulationPropertyDefinitions(std::string prefix) :
             ForceTorqueUnitPropertyDefinitions(prefix)
         {
-            defineRequiredProperty<std::string>("SensorNames", "Comma-separated list of simulated sensor names");
+            defineRequiredProperty<std::string>("SensorName", "simulated sensor name");
             defineOptionalProperty<int>("IntervalMs", 10, "The time in milliseconds between two calls to the simulation method.");
         }
     };
@@ -76,9 +77,8 @@ namespace armarx
         virtual void onExitForceTorqueUnit();
 
         void simulationFunction();
-
-        virtual void setOffset(const armarx::FramedVector3Map &forceTorqueOffsets, const Ice::Current& c = ::Ice::Current());
-        virtual void setToNull(const armarx::StringMap &sensorNames, const Ice::Current& c = ::Ice::Current());
+        virtual void setOffset(const FramedVector3BasePtr &forceOffsets, const FramedVector3BasePtr &torqueOffsets, const Ice::Current& c = ::Ice::Current());
+        virtual void setToNull(const Ice::Current& c = ::Ice::Current());
 
         /**
          * @see PropertyUser::createPropertyDefinitions()
@@ -86,8 +86,8 @@ namespace armarx
         virtual PropertyDefinitionsPtr createPropertyDefinitions();
 
     protected:
-        armarx::FramedVector3Map forces;
-        armarx::FramedVector3Map torques;
+        armarx::FramedVector3Ptr forces;
+        armarx::FramedVector3Ptr torques;
 
         PeriodicTask<ForceTorqueUnitSimulation>::pointer_type simulationTask;
 
-- 
GitLab