From b6e953fd443f54bc279ad23b12dc6450db046c3a Mon Sep 17 00:00:00 2001 From: ArmarX User <armarx@kit.edu> Date: Tue, 18 Feb 2020 09:59:49 +0100 Subject: [PATCH] some code cleanup in NJointTSDMPController --- .../DMPController/NJointTSDMPController.cpp | 58 +++++-------------- .../DMPController/NJointTSDMPController.h | 15 +++-- 2 files changed, 22 insertions(+), 51 deletions(-) diff --git a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp index eb262048b..4c8aced57 100644 --- a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp +++ b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.cpp @@ -47,7 +47,6 @@ namespace armarx // set tcp controller tcpController.reset(new CartesianVelocityController(rns, tcp)); nodeSetName = cfg->nodeSetName; - torquePIDs.resize(tcpController->rns->getSize(), pidController()); ik.reset(new VirtualRobot::DifferentialIK(rns, refFrame, VirtualRobot::JacobiProvider::eSVDDamped)); @@ -82,29 +81,16 @@ namespace armarx rt2CtrlData.reinitAllBuffers(initSensorData); // targetVels.resize(6); - // NJointTSDMPControllerControlData initData; + targetVels.setZero(6); + NJointTSDMPControllerControlData initData; // initData.targetTSVel.resize(6); + initData.targetTSVel.setZero(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.targetPose = refFrame->toLocalCoordinateSystem(tcp->getGlobalPose()); initData.nullspaceJointVelocities.resize(tcpController->rns->getSize(), 0); @@ -123,7 +109,7 @@ namespace armarx filtered_qvel.setZero(targets.size()); vel_filter_factor = cfg->vel_filter; - filtered_position.setZero(); + filtered_position.setZero(3); pos_filter_factor = cfg->pos_filter; // jlhigh = rns->getNode("..")->getJointLimitHi(); @@ -242,8 +228,6 @@ namespace armarx void NJointTSDMPController::rtRun(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration) { - // Eigen::Matrix4f currentPose = tcp->getPoseInRootFrame(); - // Eigen::Matrix4f currentPose = refFrame->toLocalCoordinateSystem(tcp->getGlobalPose()); rt2UserData.getWriteBuffer().currentTcpPose = currentPose; rt2UserData.commitWrite(); @@ -268,14 +252,10 @@ namespace armarx Eigen::MatrixXf jacobi = ik->getJacobianMatrix(tcp, VirtualRobot::IKSolver::CartesianSelection::All); - Eigen::VectorXf qvel; - qvel.resize(velocitySensors.size()); - Eigen::VectorXf qpos; - qpos.resize(positionSensors.size()); + Eigen::VectorXf qvel(velocitySensors.size()); for (size_t i = 0; i < velocitySensors.size(); ++i) { qvel(i) = velocitySensors[i]->velocity; - qpos(i) = positionSensors[i]->position; } filtered_qvel = (1 - vel_filter_factor) * filtered_qvel + vel_filter_factor * qvel; @@ -293,18 +273,16 @@ namespace armarx Eigen::VectorXf targetVel = rtGetControlStruct().targetTSVel; Eigen::Matrix4f targetPose = rtGetControlStruct().targetPose; - Eigen::VectorXf jointTargetVelocities; - jointTargetVelocities.setZero(targets.size()); + Eigen::VectorXf jointTargetVelocities = Eigen::VectorXf::Zero(targets.size()); if (started) { - targetVel = rtGetControlStruct().targetTSVel; - targetPose = rtGetControlStruct().targetPose; + // targetVel = rtGetControlStruct().targetTSVel; + // targetPose = rtGetControlStruct().targetPose; Eigen::Matrix3f diffMat = targetPose.block<3, 3>(0, 0) * currentPose.block<3, 3>(0, 0).inverse(); Eigen::Vector3f errorRPY = VirtualRobot::MathTools::eigen3f2rpy(diffMat); - Eigen::VectorXf rtTargetVel; - rtTargetVel.resize(6); + Eigen::Vector6f rtTargetVel; rtTargetVel.block<3, 1>(0, 0) = KpF * (targetPose.block<3, 1>(0, 3) - currentPose.block<3, 1>(0, 3)) + DpF * (- tcptwist.block<3, 1>(0, 0)); // rtTargetVel.block<3, 1>(0, 0) = KpF * (targetPose.block<3, 1>(0, 3) - currentPose.block<3, 1>(0, 3)) + DpF * (targetVel.block<3, 1>(0, 0) - tcptwist.block<3, 1>(0, 0)); rtTargetVel.block<3, 1>(3, 0) = KoF * errorRPY + DoF * (targetVel.block<3, 1>(3, 0) - tcptwist.block<3, 1>(3, 0)); @@ -326,12 +304,11 @@ namespace armarx // cartesian vel controller - Eigen::VectorXf x; - x.resize(6); - for (size_t i = 0; i < 6; i++) - { - x(i) = rtTargetVel(i); - } + // Eigen::Vector6f x; + // for (size_t i = 0; i < 6; i++) + // { + // x(i) = rtTargetVel(i); + // } Eigen::VectorXf jnv = Eigen::VectorXf::Zero(tcpController->rns->getSize()); float jointLimitAvoidanceKp = rtGetControlStruct().avoidJointLimitsKp; @@ -345,7 +322,7 @@ namespace armarx } // jointTargetVelocities = tcpController->calculate(x, jnv, VirtualRobot::IKSolver::CartesianSelection::All); - jointTargetVelocities = calcIK(x, jnv, VirtualRobot::IKSolver::CartesianSelection::All); + jointTargetVelocities = calcIK(rtTargetVel, jnv, VirtualRobot::IKSolver::CartesianSelection::All); ARMARX_CHECK_EXPRESSION(!targets.empty()); ARMARX_CHECK_LESS(targets.size(), 1000); @@ -519,7 +496,6 @@ namespace armarx void NJointTSDMPController::runDMPWithTime(const Ice::DoubleSeq& goals, Ice::Double timeDuration, const Ice::Current&) { - // ARMARX_INFO << "------dmp controller: " << VAROUT(goals); firstRun = true; while (firstRun) { @@ -537,14 +513,10 @@ namespace armarx dmpCtrl->prepareExecution(dmpCtrl->eigen4f2vec(pose), goals); finished = false; - - // ARMARX_INFO << "run DMP"; started = true; } - - void NJointTSDMPController::rtPreActivateController() { } diff --git a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h index 95d31adcc..e0671966c 100644 --- a/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h +++ b/source/RobotAPI/libraries/RobotAPINJointControllers/DMPController/NJointTSDMPController.h @@ -28,7 +28,7 @@ namespace armarx class NJointTSDMPControllerControlData { public: - Eigen::VectorXf targetTSVel; + Eigen::Vector6f targetTSVel; Eigen::Matrix4f targetPose; // cartesian velocity control data std::vector<float> nullspaceJointVelocities; @@ -69,7 +69,7 @@ namespace armarx // NJointController interface - void rtRun(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration) override; + void rtRun(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration); // NJointTSDMPControllerInterface interface void learnDMPFromFiles(const Ice::StringSeq& fileNames, const Ice::Current&) override; @@ -108,13 +108,13 @@ namespace armarx VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const NJointTaskSpaceDMPControllerMode::CartesianSelection mode); Eigen::VectorXf calcIK(const Eigen::VectorXf& cartesianVel, const Eigen::VectorXf& nullspace, VirtualRobot::IKSolver::CartesianSelection mode); protected: - void rtPreActivateController() override; - void rtPostDeactivateController() override; + void rtPreActivateController(); + void rtPostDeactivateController(); // VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const NJointTaskSpaceDMPControllerMode::CartesianSelection mode); virtual void onPublish(const SensorAndControl&, const DebugDrawerInterfacePrx&, const DebugObserverInterfacePrx&) override; - void onInitNJointController() override; - void onDisconnectNJointController() override; + void onInitNJointController(); + void onDisconnectNJointController(); void controllerRun(); private: @@ -174,7 +174,6 @@ namespace armarx // velocity ik controller parameters - std::vector<pidController> torquePIDs; CartesianVelocityControllerPtr tcpController; std::string nodeSetName; @@ -185,7 +184,7 @@ namespace armarx VirtualRobot::DifferentialIKPtr ik; VirtualRobot::RobotNodePtr tcp; VirtualRobot::RobotNodePtr refFrame; - Eigen::VectorXf targetVels; + Eigen::Vector6f targetVels; Eigen::Matrix4f targetPose; NJointTaskSpaceDMPControllerConfigPtr cfg; -- GitLab