10 const std::vector<size_t>& jointIDTorqueCtrlMode,
11 const std::vector<size_t>& jointIDVelocityCtrlMode)
92 I = Eigen::MatrixXf::Identity(
nDoF,
nDoF);
111 const Eigen::Ref<const Eigen::VectorXf>& jointLimitsLow,
112 const Eigen::Ref<const Eigen::VectorXf>& jointLimitsHigh,
113 Eigen::VectorXf& jointAngleLimitGradient)
117 int nbJoints = jointAngles.size();
118 Eigen::VectorXf weights(nbJoints);
119 Eigen::VectorXf gradient = Eigen::VectorXf::Zero(nbJoints);
121 if (jointAngleLimitGradient.rows() == 0)
123 jointAngleLimitGradient = Eigen::VectorXf::Zero(nbJoints);
126 for (
int i = 0; i < nbJoints; i++)
128 if ((jointLimitsLow(i) == 0 && jointLimitsHigh(i) == 0) || jointLimitsHigh(i) > 1e8)
135 gradient(i) = std::pow(jointLimitsHigh(i) - jointLimitsLow(i), 2) *
136 (2 * jointAngles(i) - jointLimitsHigh(i) - jointLimitsLow(i)) /
137 (4 * std::pow(jointLimitsHigh(i) - jointAngles(i), 2) *
138 std::pow(jointAngles(i) - jointLimitsLow(i), 2));
140 if ((std::abs(gradient(i)) - std::abs(jointAngleLimitGradient(i))) >= 0.)
143 weights(i) = 1. / std::sqrt((1. + std::abs(gradient(i))));
152 jointAngleLimitGradient = gradient;
153 return weights.asDiagonal();
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
This file is part of ArmarX.
Eigen::MatrixXf computeJointLimitWeightMatrix(const Eigen::Ref< const Eigen::VectorXf > &jointAngles, const Eigen::Ref< const Eigen::VectorXf > &jointLimitsLow, const Eigen::Ref< const Eigen::VectorXf > &jointLimitsHigh, Eigen::VectorXf &jointAngleLimitGradient)
Eigen::VectorXf jointVelocity
virtual void reset(size_t nJoints, const std::vector< size_t > &jointIDTorqueCtrlMode, const std::vector< size_t > &jointIDVelocityCtrlMode)
std::vector< size_t > jointIDTorqueMode
std::vector< size_t > jointIDVelocityMode
Eigen::VectorXf jointPosition
Eigen::VectorXf jointTorque
Eigen::Matrix4f globalPose
Eigen::VectorXf desiredJointPosition
Eigen::Vector6f virtualAcc
Eigen::Matrix4f virtualPose
Eigen::VectorXf nullspaceVelocity
Eigen::AngleAxisf oriDiffAngleAxis
Eigen::VectorXf desiredJointVelocity
Eigen::Vector6f cartesianVelTarget
for impedance control
Eigen::Vector6f currentTwist
Eigen::Matrix3f poseDiffMatAdm
intermediate results for admittance controller
Eigen::MatrixXf jtpinv
pseudo inverse of the jacobi transpose [6, nDoF], for torque control
Eigen::MatrixXf I
for computing nullspace projection
Eigen::Matrix4f currentPose
Eigen::MatrixXf jpinv
pseudo inverse of the jacobi [nDoF, 6], for vel control
Eigen::MatrixXf jacobi
others jacobi matrix [6, nDoF]
void reset(size_t numDoF, const std::vector< size_t > &jointIDTorqueMode, const std::vector< size_t > &jointIDVelocityMode) override
Eigen::Vector6f poseErrorImp
Eigen::MatrixXf inertiaInv
Eigen::MatrixXf IVelCtrlJoint
Eigen::Matrix3f poseDiffMatImp
intermediate results
Eigen::Matrix4f desiredPose
Eigen::VectorXf qvelFiltered
for velocity control
Eigen::MatrixXf inertiaInvVelCtrlJoints
Eigen::VectorXf desiredJointTorque
targets
Eigen::Vector6f poseErrorAdm
Eigen::VectorXf nullspaceTorque
Eigen::MatrixXd inertia
inertia Note, the inertia variables are only used for collision avoidance controllers,...
Eigen::Vector6f forceImpedance
task space variables (command in operation space)
Eigen::Vector6f currentForceTorque
force torque
void rtPreActivate(const Eigen::Matrix4f ¤tTCPPose)
Eigen::MatrixXd inertiaVelCtrlJoints
Eigen::Vector6f safeFTGuardOffset
Eigen::Matrix4f desiredPoseUnsafe
Eigen::Vector6f virtualVel