28 Eigen::JacobiSVD<Eigen::MatrixXd> svd(this->
jacobian_data_, Eigen::ComputeThinU | Eigen::ComputeThinV);
30 Eigen::MatrixXd J_T=J.transpose();
31 Eigen::MatrixXd U=svd.matrixU();
32 Eigen::MatrixXd U_T =U.transpose();
36 Eigen::MatrixXd Wt=Q*svd.matrixV();
37 Eigen::MatrixXd Wt_T=Wt.transpose();
60 Eigen::MatrixXd J_robust=J*Wt*Wt_T*J_T;
62 Eigen::MatrixXd qdots_out =Wt*Wt_T*J_T*pinv*in_cart_velocities;
73 Eigen::VectorXd q_dot = Jinv * in_cart_velocities;
78 Eigen::VectorXd weighting = Eigen::VectorXd::Zero(cols);
79 Eigen::VectorXd weighting_pos = Eigen::VectorXd::Zero(cols);
80 Eigen::VectorXd weighting_speed = Eigen::VectorXd::Zero(cols);
88 for (uint32_t i = 0; i < cols ; ++i)
91 weighting(i) = (1.0/(1.0+exp(-(q(i)-limits_min[i]-delta_pos)/sigma)))*(1.0/(1.0+exp((q(i)-limits_max[i]+delta_pos)/sigma)))+(1.0/(1.0+exp((q(i)*q_dot(i)+delta_speed)*sigma_speed)));
94 ROS_WARN(
"Joint %i tolerance distance to minimum position %f not respected",i,(fabs(q(i)-limits_min[i])));
97 ROS_WARN(
"Joint %i tolerance distance to maximum position %f not respected",i,(fabs(q(i)-limits_max[i])));
99 if( (fabs(q(i)-limits_min[i])<0.0)){
100 ROS_ERROR(
"Joint %i distance to minimum position %f not respected",i,(fabs(q(i)-limits_min[i])));
102 if( (fabs(q(i)-limits_max[i])<0.0)){
103 ROS_ERROR(
"Joint %i distance to maximum position %f not respected",i,(fabs(q(i)-limits_max[i])));
106 if(weighting(i)>1.0){
111 return weighting.asDiagonal();