diff --git a/source/RobotAPI/libraries/core/CartesianPositionController.cpp b/source/RobotAPI/libraries/core/CartesianPositionController.cpp index 9681636da9a820a53711ed50f327205216a0fcc8..c34d94957311c775b378bcda7e0dda17f38fe1c3 100644 --- a/source/RobotAPI/libraries/core/CartesianPositionController.cpp +++ b/source/RobotAPI/libraries/core/CartesianPositionController.cpp @@ -24,6 +24,7 @@ #include "CartesianPositionController.h" #include <RobotAPI/libraries/core/math/MathUtils.h> +#include <ArmarXCore/util/CPPUtility/trace.h> namespace armarx { @@ -35,12 +36,14 @@ namespace armarx Eigen::VectorXf CartesianPositionController::calculate(const Eigen::Matrix4f& targetPose, VirtualRobot::IKSolver::CartesianSelection mode) const { + ARMARX_TRACE; int posLen = mode & VirtualRobot::IKSolver::Position ? 3 : 0; int oriLen = mode & VirtualRobot::IKSolver::Orientation ? 3 : 0; Eigen::VectorXf cartesianVel(posLen + oriLen); if (posLen) { + ARMARX_TRACE; Eigen::Vector3f targetPos = targetPose.block<3, 1>(0, 3); Eigen::Vector3f currentPos = tcp->getPositionInFrame(referenceFrame); Eigen::Vector3f errPos = targetPos - currentPos; @@ -54,6 +57,7 @@ namespace armarx if (oriLen) { + ARMARX_TRACE; Eigen::Matrix3f targetOri = targetPose.block<3, 3>(0, 0); Eigen::Matrix3f tcpOri = tcp->getPoseInFrame(referenceFrame).block<3, 3>(0, 0); Eigen::Matrix3f oriDir = targetOri * tcpOri.inverse(); @@ -72,12 +76,14 @@ namespace armarx Eigen::VectorXf CartesianPositionController::calculatePos(const Eigen::Vector3f& targetPos) const { + ARMARX_TRACE; Eigen::VectorXf cartesianVel(3); Eigen::Vector3f currentPos = tcp->getPositionInFrame(referenceFrame); Eigen::Vector3f errPos = targetPos - currentPos; Eigen::Vector3f posVel = errPos * KpPos; if (maxPosVel > 0) { + ARMARX_TRACE; posVel = math::MathUtils::LimitTo(posVel, maxPosVel); } cartesianVel.block<3, 1>(0, 0) = posVel; @@ -98,6 +104,7 @@ namespace armarx const VirtualRobot::RobotNodePtr& tcp, const VirtualRobot::RobotNodePtr& referenceFrame) { + ARMARX_TRACE; Eigen::Vector3f targetPos = targetPose.block<3, 1>(0, 3); Eigen::Vector3f tcpPos = referenceFrame ? tcp->getPositionInFrame(referenceFrame) : tcp->getPositionInRootFrame(); Eigen::Vector3f errPos = targetPos - tcpPos; @@ -108,6 +115,7 @@ namespace armarx const VirtualRobot::RobotNodePtr& tcp, const VirtualRobot::RobotNodePtr& referenceFrame) { + ARMARX_TRACE; Eigen::Matrix3f targetOri = targetPose.block<3, 3>(0, 0); Eigen::Matrix4f tcpPose = referenceFrame ? tcp->getPoseInFrame(referenceFrame) : tcp->getPoseInRootFrame(); Eigen::Matrix3f tcpOri = tcpPose.block<3, 3>(0, 0); @@ -129,6 +137,7 @@ namespace armarx bool CartesianPositionController::reached(const Eigen::Matrix4f& targetPose, VirtualRobot::IKSolver::CartesianSelection mode, float thresholdPosReached, float thresholdOriReached) { + ARMARX_TRACE; if (mode & VirtualRobot::IKSolver::Position) { if (GetPositionError(targetPose, tcp, referenceFrame) > thresholdPosReached) @@ -148,6 +157,7 @@ namespace armarx Eigen::Vector3f CartesianPositionController::getPositionDiff(const Eigen::Matrix4f& targetPose) const { + ARMARX_TRACE; Eigen::Vector3f targetPos = targetPose.block<3, 1>(0, 3); return targetPos - tcp->getPositionInFrame(referenceFrame); } @@ -159,6 +169,7 @@ namespace armarx Eigen::Vector3f CartesianPositionController::getOrientationDiff(const Eigen::Matrix4f& targetPose) const { + ARMARX_TRACE; Eigen::Matrix3f targetOri = targetPose.block<3, 3>(0, 0); Eigen::Matrix3f tcpOri = tcp->getPoseInFrame(referenceFrame).block<3, 3>(0, 0); Eigen::Matrix3f oriDir = targetOri * tcpOri.inverse(); diff --git a/source/RobotAPI/libraries/core/CartesianVelocityController.cpp b/source/RobotAPI/libraries/core/CartesianVelocityController.cpp index 9527835a6dd48107f5e11846ec882d30b056c54a..f7a7307bfb316db667d23ff59713d80551cd1e63 100644 --- a/source/RobotAPI/libraries/core/CartesianVelocityController.cpp +++ b/source/RobotAPI/libraries/core/CartesianVelocityController.cpp @@ -48,6 +48,7 @@ CartesianVelocityController::CartesianVelocityController(const VirtualRobot::Rob void CartesianVelocityController::calculateJacobis(VirtualRobot::IKSolver::CartesianSelection mode) { + ARMARX_TRACE; jacobi = ik->getJacobianMatrix(_tcp, mode); _jacobiWithCosts = Eigen::MatrixXf(jacobi.rows(), jacobi.cols()); for (int r = 0; r < jacobi.rows(); r++) @@ -98,7 +99,7 @@ Eigen::VectorXf CartesianVelocityController::calculate(const Eigen::VectorXf& ca Eigen::VectorXf CartesianVelocityController::calculate(const Eigen::VectorXf& cartesianVel, const Eigen::VectorXf& nullspaceVel, VirtualRobot::IKSolver::CartesianSelection mode) { - + ARMARX_TRACE; calculateJacobis(mode); @@ -106,6 +107,7 @@ Eigen::VectorXf CartesianVelocityController::calculate(const Eigen::VectorXf& ca if (nullspaceVel.rows() > 0) { + ARMARX_TRACE; // ARMARX_IMPORTANT << "nullspaceVel " << nullspaceVel.transpose(); Eigen::FullPivLU<Eigen::MatrixXf> lu_decomp(_jacobiWithCosts); //ARMARX_IMPORTANT << "The rank of the _jacobiWithCosts is " << lu_decomp.rank(); diff --git a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp index a72fe97e50b3249595840b6fe18e1aca8be36542..ee06ab837f18e01764757e98e9aa372fc63e785f 100644 --- a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp +++ b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp @@ -77,6 +77,7 @@ namespace armarx Eigen::VectorXf CartesianVelocityControllerWithRamp::calculate(const Eigen::VectorXf& cartesianVel, const Eigen::VectorXf& nullspaceVel, float dt) { + ARMARX_TRACE; return controller.calculate(cartesianVelocityRamp.update(cartesianVel, dt), nullSpaceVelocityRamp.update(nullspaceVel, dt), mode); } diff --git a/source/RobotAPI/libraries/core/CartesianWaypointController.cpp b/source/RobotAPI/libraries/core/CartesianWaypointController.cpp index fe9477986cee0a9d9a9a55b3f94d40206c010e3e..917877b7a5ce1556ece46a9d8353b274dba87465 100644 --- a/source/RobotAPI/libraries/core/CartesianWaypointController.cpp +++ b/source/RobotAPI/libraries/core/CartesianWaypointController.cpp @@ -32,6 +32,7 @@ #include <VirtualRobot/math/Helpers.h> #include <VirtualRobot/MathTools.h> #include <cfloat> +#include <ArmarXCore/util/CPPUtility/trace.h> namespace armarx { @@ -64,21 +65,25 @@ namespace armarx const Eigen::VectorXf& CartesianWaypointController::calculate(float dt) { + ARMARX_TRACE; //calculate cartesian velocity + some management stuff if (!isLastWaypoint() && isCurrentTargetNear()) { + ARMARX_TRACE; currentWaypointIndex++; } cartesianVelocity = ctrlCartesianPos2Vel.calculate(getCurrentTarget(), VirtualRobot::IKSolver::All) + feedForwardVelocity; if (autoClearFeedForward) { + ARMARX_TRACE; clearFeedForwardVelocity(); } //calculate joint velocity if (nullSpaceControlEnabled) { + ARMARX_TRACE; //avoid joint limits _jnv = KpJointLimitAvoidance * ctrlCartesianVelWithRamps.controller.calculateJointLimitAvoidance() + ctrlCartesianVelWithRamps.controller.calculateNullspaceVelocity( @@ -89,9 +94,11 @@ namespace armarx } else { + ARMARX_TRACE; //don't avoid joint limits _jnv *= 0; } + ARMARX_TRACE; _out = ctrlCartesianVelWithRamps.calculate(cartesianVelocity, _jnv, dt); return _out; } @@ -178,11 +185,13 @@ namespace armarx const Eigen::Vector3f CartesianWaypointController::getCurrentTargetPosition() const { + ARMARX_TRACE; return ::math::Helpers::GetPosition(waypoints.at(currentWaypointIndex)); } size_t CartesianWaypointController::skipToClosestWaypoint(float rad2mmFactor) { + ARMARX_TRACE; float dist = FLT_MAX; size_t minIndex = 0; for (size_t i = 0; i < waypoints.size(); i++)