From 1c275b0f1336ccd98137bb946eece5334406c996 Mon Sep 17 00:00:00 2001
From: zhou <you.zhou@kit.edu>
Date: Thu, 15 Feb 2018 14:08:11 +0100
Subject: [PATCH] fixed name issue of robotik and cvc

---
 data/RobotAPI/VariantInfo-RobotAPI.xml        |  8 ++++++++
 .../components/units/RobotUnit/CMakeLists.txt | 12 +++++++++++
 .../NJointCartesianVelocityController.cpp     | 20 +++++++++----------
 .../NJointCartesianVelocityController.h       |  6 +++---
 .../NJointCartesianVelocityController.ice     | 15 ++++++++------
 .../core/CartesianPositionController.cpp      | 16 +++++++++++++++
 .../core/CartesianPositionController.h        |  3 +++
 7 files changed, 61 insertions(+), 19 deletions(-)

diff --git a/data/RobotAPI/VariantInfo-RobotAPI.xml b/data/RobotAPI/VariantInfo-RobotAPI.xml
index 8b3475ac1..af488467e 100644
--- a/data/RobotAPI/VariantInfo-RobotAPI.xml
+++ b/data/RobotAPI/VariantInfo-RobotAPI.xml
@@ -99,6 +99,14 @@
             propertyName="HapticUnitObserverName"
             propertyIsOptional="true"
             propertyDefaultValue="HapticUnitObserver" />
+        <Proxy include="RobotAPI/interface/units/HandUnitInterface.h"
+			humanName="Hand Unit "
+            typeName="HandUnitInterfacePrx"
+            memberName="handUnit"
+            getterName="getHandUnit"
+            propertyName="handUnitName"
+            propertyIsOptional="true"
+            propertyDefaultValue="HandUnit" />
         <Proxy include="RobotAPI/interface/units/WeissHapticUnit.h"
 			humanName="Weiss Haptic Unit"
             typeName="WeissHapticUnitInterfacePrx"
diff --git a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt
index ea9a07589..a4a5ab39c 100644
--- a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt
+++ b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt
@@ -115,6 +115,18 @@ set(LIB_HEADERS
     Devices/RTThreadTimingsSensorDevice.h
 )
 
+find_package(DMP QUIET)
+if (DMP_FOUND)
+    list(APPEND LIB_HEADERS NJointControllers/NJointDMPCartesianVelocityController.h)
+    list(APPEND LIB_FILES NJointControllers/NJointDMPCartesianVelocityController.cpp)
+    list(APPEND LIBS ${DMP_LIBRARIES})
+    include_directories(${DMP_INCLUDE_DIRS})
+    link_directories(${DMP_LIB_DIRS})
+endif()
+
+
+
+
 add_subdirectory(test)
 
 armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}")
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
index c86504e4f..8e97708c5 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
@@ -264,35 +264,35 @@ namespace armarx
         return (VirtualRobot::IKSolver::CartesianSelection)0;
     }
 
-    NJointCartesianVelocityControllerCartesianSelection NJointCartesianVelocityController::IceModeFromString(const std::string mode)
+    NJointCartesianVelocityControllerMode::CartesianSelection NJointCartesianVelocityController::IceModeFromString(const std::string mode)
     {
         if (mode == "Position")
         {
-            return NJointCartesianVelocityControllerCartesianSelection::ePosition;
+            return NJointCartesianVelocityControllerMode::CartesianSelection::ePosition;
         }
         if (mode == "Orientation")
         {
-            return NJointCartesianVelocityControllerCartesianSelection::eOrientation;
+            return NJointCartesianVelocityControllerMode::CartesianSelection::eOrientation;
         }
         if (mode == "Both")
         {
-            return NJointCartesianVelocityControllerCartesianSelection::eAll;
+            return NJointCartesianVelocityControllerMode::CartesianSelection::eAll;
         }
         ARMARX_ERROR_S << "invalid mode " << mode;
-        return (NJointCartesianVelocityControllerCartesianSelection)0;
+        return (NJointCartesianVelocityControllerMode::CartesianSelection)0;
     }
 
-    VirtualRobot::IKSolver::CartesianSelection NJointCartesianVelocityController::ModeFromIce(const NJointCartesianVelocityControllerCartesianSelection mode)
+    VirtualRobot::IKSolver::CartesianSelection NJointCartesianVelocityController::ModeFromIce(const NJointCartesianVelocityControllerMode::CartesianSelection mode)
     {
-        if (mode == NJointCartesianVelocityControllerCartesianSelection::ePosition)
+        if (mode == NJointCartesianVelocityControllerMode::CartesianSelection::ePosition)
         {
             return VirtualRobot::IKSolver::CartesianSelection::Position;
         }
-        if (mode == NJointCartesianVelocityControllerCartesianSelection::eOrientation)
+        if (mode == NJointCartesianVelocityControllerMode::CartesianSelection::eOrientation)
         {
             return VirtualRobot::IKSolver::CartesianSelection::Orientation;
         }
-        if (mode == NJointCartesianVelocityControllerCartesianSelection::eAll)
+        if (mode == NJointCartesianVelocityControllerMode::CartesianSelection::eAll)
         {
             return VirtualRobot::IKSolver::CartesianSelection::All;
         }
@@ -401,7 +401,7 @@ namespace armarx
 
 
 
-void armarx::NJointCartesianVelocityController::setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerCartesianSelection mode, const Ice::Current&)
+void armarx::NJointCartesianVelocityController::setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerMode::CartesianSelection mode, const Ice::Current&)
 {
     LockGuardType guard {controlDataMutex};
     getWriterControlStruct().xVel = x;
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
index 9375868ff..df9409436 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
@@ -113,8 +113,8 @@ namespace armarx
         WidgetDescription::HBoxLayoutPtr createJointSlidersLayout(float min, float max, float defaultValue) const;
 
         static VirtualRobot::IKSolver::CartesianSelection ModeFromString(const std::string mode);
-        static NJointCartesianVelocityControllerCartesianSelection IceModeFromString(const std::string mode);
-        static VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const NJointCartesianVelocityControllerCartesianSelection mode);
+        static NJointCartesianVelocityControllerMode::CartesianSelection IceModeFromString(const std::string mode);
+        static VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const NJointCartesianVelocityControllerMode::CartesianSelection mode);
     protected:
         void rtPreActivateController() override;
         void rtPostDeactivateController() override;
@@ -132,7 +132,7 @@ namespace armarx
 
         // NJointCartesianVelocityControllerInterface interface
     public:
-        void setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerCartesianSelection mode, const Ice::Current&);
+        void setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerMode::CartesianSelection mode, const Ice::Current&);
         void setTorqueKp(const StringFloatDictionary& torqueKp, const Ice::Current&);
         void setNullspaceJointVelocities(const StringFloatDictionary& nullspaceJointVelocities, const Ice::Current&);
     };
diff --git a/source/RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityController.ice b/source/RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityController.ice
index bde601c05..743e5cbe6 100644
--- a/source/RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityController.ice
+++ b/source/RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityController.ice
@@ -28,25 +28,28 @@
 
 module armarx
 {
-    enum NJointCartesianVelocityControllerCartesianSelection
+    module NJointCartesianVelocityControllerMode
     {
-        ePosition = 7,
-        eOrientation = 8,
-        eAll = 15
+        enum CartesianSelection
+        {
+            ePosition = 7,
+            eOrientation = 8,
+            eAll = 15
+        };
     };
 
     class NJointCartesianVelocityControllerConfig extends NJointControllerConfig
     {
         string nodeSetName = "";
         string tcpName = "";
-        NJointCartesianVelocityControllerCartesianSelection mode = eAll;
+        NJointCartesianVelocityControllerMode::CartesianSelection mode = NJointCartesianVelocityControllerMode::eAll;
     };
 
 
 
     interface NJointCartesianVelocityControllerInterface extends NJointControllerInterface
     {
-        void setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerCartesianSelection mode);
+        void setControllerTarget(float x, float y, float z, float roll, float pitch, float yaw, float avoidJointLimitsKp, NJointCartesianVelocityControllerMode::CartesianSelection mode);
         void setTorqueKp(StringFloatDictionary torqueKp);
         void setNullspaceJointVelocities(StringFloatDictionary nullspaceJointVelocities);
     };
diff --git a/source/RobotAPI/libraries/core/CartesianPositionController.cpp b/source/RobotAPI/libraries/core/CartesianPositionController.cpp
index 8f1c64ddc..8caa1a53b 100644
--- a/source/RobotAPI/libraries/core/CartesianPositionController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianPositionController.cpp
@@ -67,3 +67,19 @@ Eigen::VectorXf CartesianPositionController::calculate(const Eigen::Matrix4f& ta
     }
     return cartesianVel;
 }
+
+float CartesianPositionController::getPositionError(const Eigen::Matrix4f& targetPose)
+{
+    Eigen::Vector3f targetPos = targetPose.block<3, 1>(0, 3);
+    Eigen::Vector3f errPos = targetPos - tcp->getPositionInRootFrame();
+    return errPos.norm();
+}
+
+float CartesianPositionController::getOrientationError(const Eigen::Matrix4f& targetPose)
+{
+    Eigen::Matrix3f targetOri = targetPose.block<3, 3>(0, 0);
+    Eigen::Matrix3f tcpOri = tcp->getPoseInRootFrame().block<3, 3>(0, 0);
+    Eigen::Matrix3f oriDir = targetOri * tcpOri.inverse();
+    Eigen::AngleAxisf aa(oriDir);
+    return aa.angle();
+}
diff --git a/source/RobotAPI/libraries/core/CartesianPositionController.h b/source/RobotAPI/libraries/core/CartesianPositionController.h
index 0c41ab9f9..c0d8642ee 100644
--- a/source/RobotAPI/libraries/core/CartesianPositionController.h
+++ b/source/RobotAPI/libraries/core/CartesianPositionController.h
@@ -43,6 +43,9 @@ namespace armarx
 
         Eigen::VectorXf calculate(const Eigen::Matrix4f& targetPose, VirtualRobot::IKSolver::CartesianSelection mode);
 
+        float getPositionError(const Eigen::Matrix4f& targetPose);
+        float getOrientationError(const Eigen::Matrix4f& targetPose);
+
         //CartesianVelocityController velocityController;
         float KpPos = 1;
         float KpOri = 1;
-- 
GitLab