From a9cf7786c735a7db2acdfc6d062f4825cfae98c4 Mon Sep 17 00:00:00 2001 From: ArmarX User <armarx@kit.edu> Date: Thu, 29 Aug 2019 12:32:43 +0200 Subject: [PATCH] fix merge --- .../NJointTaskSpaceDMPController.ice | 5 ++ .../DMPController/TaskSpaceDMPController.cpp | 5 +- .../DMPController/TaskSpaceDMPController.h | 5 +- .../DMPController/NJointTSDMPController.cpp | 78 ++++++++++--------- .../DMPController/NJointTSDMPController.h | 1 - source/RobotAPI/libraries/core/CMakeLists.txt | 6 ++ 6 files changed, 59 insertions(+), 41 deletions(-) diff --git a/source/RobotAPI/interface/units/RobotUnit/NJointTaskSpaceDMPController.ice b/source/RobotAPI/interface/units/RobotUnit/NJointTaskSpaceDMPController.ice index 70defbba2..5d5a40944 100644 --- a/source/RobotAPI/interface/units/RobotUnit/NJointTaskSpaceDMPController.ice +++ b/source/RobotAPI/interface/units/RobotUnit/NJointTaskSpaceDMPController.ice @@ -264,11 +264,16 @@ module armarx bool isFinished(); void runDMP(Ice::DoubleSeq goals); + void runDMPWithTime(Ice::DoubleSeq goals, double timeDuration); + void setViaPoints(double canVal, Ice::DoubleSeq point); void setGoals(Ice::DoubleSeq goals); double getVirtualTime(); + void resetDMP(); + void stopDMP(); + void resumeDMP(); }; diff --git a/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.cpp b/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.cpp index 304fab026..7f84c71a0 100644 --- a/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.cpp +++ b/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.cpp @@ -43,7 +43,7 @@ double TaskSpaceDMPController::flow(double canVal, double deltaT, const Eigen::M } if (canVal < 0.1 && config.DMPStyle == "Periodic") { - canVal = config.motionTimeDuration; + canVal = config.motionTimeDuration; // prepareExecution(eigen4f2vec(currentPose), goalPoseVec); } if (canVal < 1e-8 && config.DMPStyle == "Discrete") { @@ -85,8 +85,9 @@ double TaskSpaceDMPController::flow(double canVal, double deltaT, const Eigen::M isDisturbance = false; } +// double tau = dmpPtr->getTemporalFactor(); double timeDuration = config.motionTimeDuration; - canVal -= tau * deltaT * 1;// / (1 + phaseStop) ; + canVal -= tau * deltaT * 1;// / (1 + phaseStop) ; //canVal -= deltaT * 1 / (1 + phaseStop) ; DMP::Vec<DMP::DMPState > temporalState = dmpPtr->calculateDirectlyVelocity(currentState, canVal / timeDuration, deltaT / timeDuration, targetPoseVec); diff --git a/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.h b/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.h index 81e87e887..aec4f1c0a 100644 --- a/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.h +++ b/source/RobotAPI/libraries/DMPController/TaskSpaceDMPController.h @@ -199,8 +199,6 @@ namespace armarx double canVal; bool isPhaseStopControl; std::string dmpName; - TaskSpaceDMPControllerConfig config; - bool paused; private: @@ -212,7 +210,8 @@ namespace armarx DMP::UMITSMPPtr dmpPtr; DMP::Vec<DMP::DMPState > currentState; - + TaskSpaceDMPControllerConfig config; + bool paused; bool isDisturbance; diff --git a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp index 24ffb9039..9a13d4079 100644 --- a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp +++ b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp @@ -19,14 +19,21 @@ namespace armarx const SensorValueBase* sv = useSensorValue(jointName); targets.push_back(ct->asA<ControlTarget1DoFActuatorVelocity>()); - // const SensorValue1DoFActuatorTorque* torqueSensor = sv->asA<SensorValue1DoFActuatorTorque>(); - // const SensorValue1DoFGravityTorque* gravityTorqueSensor = sv->asA<SensorValue1DoFGravityTorque>(); - + const SensorValue1DoFActuatorTorque* torqueSensor = sv->asA<SensorValue1DoFActuatorTorque>(); const SensorValue1DoFActuatorVelocity* velocitySensor = sv->asA<SensorValue1DoFActuatorVelocity>(); + const SensorValue1DoFGravityTorque* gravityTorqueSensor = sv->asA<SensorValue1DoFGravityTorque>(); const SensorValue1DoFActuatorPosition* positionSensor = sv->asA<SensorValue1DoFActuatorPosition>(); + if (!torqueSensor) + { + ARMARX_WARNING << "No Torque sensor available for " << jointName; + } + if (!gravityTorqueSensor) + { + ARMARX_WARNING << "No Gravity Torque sensor available for " << jointName; + } - // torqueSensors.push_back(torqueSensor); - // gravityTorqueSensors.push_back(gravityTorqueSensor); + torqueSensors.push_back(torqueSensor); + gravityTorqueSensors.push_back(gravityTorqueSensor); velocitySensors.push_back(velocitySensor); positionSensors.push_back(positionSensor); }; @@ -71,17 +78,20 @@ namespace armarx initSensorData.currentTwist.setZero(); rt2CtrlData.reinitAllBuffers(initSensorData); - targetVels.resize(6); - - NJointTSDMPControllerControlData initData; - initData.targetTSVel.resize(6); - for (size_t i = 0; i < 6; ++i) - { - initData.targetTSVel(i) = 0; - targetVels(i) = 0; - } - initData.nullspaceJointVelocities.resize(tcpController->rns->getSize(), 0); - reinitTripleBuffer(initData); + // targetVels.resize(6); + // NJointTSDMPControllerControlData initData; + // initData.targetTSVel.resize(6); + // for (size_t i = 0; i < 6; ++i) + // { + // initData.targetTSVel(i) = 0; + // targetVels(i) = 0; + // } + // initData.targetPose = tcp->getPoseInRootFrame(); + // initData.nullspaceJointVelocities.resize(tcpController->rns->getSize(), 0); + // initData.torqueKp.resize(tcpController->rns->getSize(), 0); + // initData.torqueKd.resize(tcpController->rns->getSize(), 0); + // initData.mode = ModeFromIce(cfg->mode); + // reinitTripleBuffer(initData); debugName = cfg->debugName; @@ -115,9 +125,9 @@ namespace armarx // NJointTSDMPControllerInterfaceData initInterfaceData; // initInterfaceData.currentTcpPose = tcp->getPoseInRootFrame(); // interfaceData.reinitAllBuffers(initInterfaceData); - RTToUserData initInterfaceData2; - initInterfaceData2.currentTcpPose = Eigen::Matrix4f::Identity(); - rt2UserData.reinitAllBuffers(initInterfaceData2); + RTToUserData initInterfaceData; + initInterfaceData.currentTcpPose = tcp->getPoseInRootFrame(); + rt2UserData.reinitAllBuffers(initInterfaceData); } std::string NJointTSDMPController::getClassName(const Ice::Current&) const @@ -506,22 +516,20 @@ namespace armarx void NJointTSDMPController::onInitNJointController() { ARMARX_INFO << "init ..."; - /* - targetVels.resize(6); - NJointTSDMPControllerControlData initData; - initData.targetTSVel.resize(6); - for (size_t i = 0; i < 6; ++i) - { - initData.targetTSVel(i) = 0; - targetVels(i) = 0; - initData.targetPose = tcp->getPoseInRootFrame(); - } - initData.nullspaceJointVelocities.resize(tcpController->rns->getSize(), 0); - initData.torqueKp.resize(tcpController->rns->getSize(), 0); - initData.torqueKd.resize(tcpController->rns->getSize(), 0); - initData.mode = ModeFromIce(cfg->mode); - reinitTripleBuffer(initData); - */ + targetVels.resize(6); + NJointTSDMPControllerControlData initData; + initData.targetTSVel.resize(6); + for (size_t i = 0; i < 6; ++i) + { + initData.targetTSVel(i) = 0; + targetVels(i) = 0; + initData.targetPose = tcp->getPoseInRootFrame(); + } + initData.nullspaceJointVelocities.resize(tcpController->rns->getSize(), 0); + initData.torqueKp.resize(tcpController->rns->getSize(), 0); + initData.torqueKd.resize(tcpController->rns->getSize(), 0); + initData.mode = ModeFromIce(cfg->mode); + reinitTripleBuffer(initData); started = false; runTask("NJointTSDMPController", [&] diff --git a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h index 924393193..403bbaef1 100644 --- a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h +++ b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h @@ -36,7 +36,6 @@ namespace armarx std::vector<float> torqueKp; std::vector<float> torqueKd; VirtualRobot::IKSolver::CartesianSelection mode = VirtualRobot::IKSolver::All; - }; class pidController diff --git a/source/RobotAPI/libraries/core/CMakeLists.txt b/source/RobotAPI/libraries/core/CMakeLists.txt index 249994acd..73a786619 100644 --- a/source/RobotAPI/libraries/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/core/CMakeLists.txt @@ -3,8 +3,14 @@ armarx_set_target("RobotAPI Core Library: RobotAPICore") find_package(Eigen3 QUIET) find_package(Simox ${ArmarX_Simox_VERSION} QUIET) +armarx_build_if(Eigen3_FOUND "Eigen3 not available") armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available") +if (Eigen3_FOUND AND Simox_FOUND) + include_directories(${Simox_INCLUDE_DIRS}) + include_directories(SYSTEM ${Eigen3_INCLUDE_DIR}) +endif() + set(LIB_NAME RobotAPICore) set(LIBS RobotAPIInterfaces ArmarXCoreObservers ArmarXCoreStatechart ArmarXCoreEigen3Variants -- GitLab