60 const Eigen::MatrixXd& jacobian_data)
const 62 uint32_t rows = sorted_singular_values.rows();
63 return Eigen::MatrixXd::Zero(rows, rows);
73 const Eigen::MatrixXd& jacobian_data)
const 75 uint32_t rows = sorted_singular_values.rows();
76 return Eigen::MatrixXd::Identity(rows, rows) *
pow(this->params_.damping_factor, 2);
87 const Eigen::MatrixXd& jacobian_data)
const 89 double w_threshold = this->params_.w_threshold;
90 double lambda_max = this->params_.lambda_max;
91 Eigen::MatrixXd prod = jacobian_data * jacobian_data.transpose();
92 double d = prod.determinant();
93 double w = std::sqrt(std::abs(d));
94 double damping_factor;
95 uint32_t rows = sorted_singular_values.rows();
96 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
100 double tmp_w = (1 - w / w_threshold);
101 damping_factor = lambda_max * tmp_w * tmp_w;
102 damping_matrix = Eigen::MatrixXd::Identity(rows, rows) *
pow(damping_factor, 2);
105 return damping_matrix;
115 const Eigen::MatrixXd& jacobian_data)
const 118 double least_singular_value = sorted_singular_values(sorted_singular_values.rows() - 1);
119 uint32_t rows = sorted_singular_values.rows();
120 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
122 if (least_singular_value < this->params_.eps_damping)
124 double lambda_quad =
pow(this->params_.lambda_max, 2.0);
125 double damping_factor =
sqrt( (1.0 -
pow(least_singular_value / this->params_.eps_damping, 2.0)) * lambda_quad);
126 damping_matrix = Eigen::MatrixXd::Identity(rows, rows) *
pow(damping_factor, 2);
129 return damping_matrix;
138 const Eigen::MatrixXd& jacobian_data)
const 141 uint32_t rows = sorted_singular_values.rows();
142 Eigen::MatrixXd damping_matrix = Eigen::MatrixXd::Zero(rows, rows);
144 for (
unsigned i = 0; i < rows; i++)
147 double lambda_sig = params_.lambda_max / (1 +
exp((sorted_singular_values[i] + params_.w_threshold) / params_.slope_damping));
148 damping_matrix(i, i) = lambda_sig;
151 return damping_matrix;
Class implementing a method to return the constant factor.
Class implementing a method to return a factor corresponding to the measure of manipulability.
virtual Eigen::MatrixXd getDampingFactor(const Eigen::VectorXd &sorted_singular_values, const Eigen::MatrixXd &jacobian_data) const
Class implementing a method to return a damping factor based on a sigmoid function.
DampingMethodTypes damping_method
INLINE Rall1d< T, V, S > sqrt(const Rall1d< T, V, S > &arg)
virtual Eigen::MatrixXd getDampingFactor(const Eigen::VectorXd &sorted_singular_values, const Eigen::MatrixXd &jacobian_data) const
INLINE Rall1d< T, V, S > exp(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
virtual Eigen::MatrixXd getDampingFactor(const Eigen::VectorXd &sorted_singular_values, const Eigen::MatrixXd &jacobian_data) const
Class implementing a method to return the constant factor.
static DampingBase * createDamping(const TwistControllerParams ¶ms)
virtual Eigen::MatrixXd getDampingFactor(const Eigen::VectorXd &sorted_singular_values, const Eigen::MatrixXd &jacobian_data) const
Base class for solvers, defining interface methods.
virtual Eigen::MatrixXd getDampingFactor(const Eigen::VectorXd &sorted_singular_values, const Eigen::MatrixXd &jacobian_data) const
Class implementing a method to return a damping factor based on least singular value.