-
Notifications
You must be signed in to change notification settings - Fork 65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gpm null space dimension print #126
Changes from 2 commits
58be1d3
dbe568e
12c5bba
95994a0
6bf88eb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -106,12 +106,23 @@ Eigen::MatrixXd StackOfTasksSolver::solve(const Vector6d_t& in_cart_velocities, | |
Eigen::MatrixXd J_temp = J_task * projector_i; | ||
Eigen::VectorXd v_task = it->task_; | ||
Eigen::MatrixXd J_temp_inv = pinv_calc_.calculate(J_temp); | ||
Eigen::FullPivLU<Eigen::MatrixXd> lu_decomp(J_temp_inv); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do you evaluate There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Because J_temp_inv is going to project the ith task velocities. If it has rank zero is not adding any velocity for that task. |
||
if(lu_decomp.rank()== 0){ | ||
qdots_out.col(0) = q_i; | ||
ROS_WARN("Null space projection matrix is null. It couldn't satisfy all constraints"); | ||
return qdots_out; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we cannot quit here as Just a warning that the projector of the current task is Zero but continue computation |
||
q_i = q_i + J_temp_inv * (v_task - J_task * q_i); | ||
projector_i = projector_i - J_temp_inv * J_temp; | ||
} | ||
|
||
qdots_out.col(0) = q_i + projector_i * sum_of_gradient; | ||
return qdots_out; | ||
Eigen::FullPivLU<Eigen::MatrixXd> lu_decomp(projector_i); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same performance comment as above |
||
if(lu_decomp.rank()== 0){ | ||
qdots_out.col(0) = q_i; | ||
ROS_WARN("Null space projection matrix is null. It couldn't satisfy the global weighting for all constraints."); | ||
return qdots_out; | ||
} | ||
qdots_out.col(0) = q_i + projector_i * sum_of_gradient; //WHY??? | ||
return qdots_out; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why identation |
||
} | ||
|
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -64,8 +64,9 @@ Eigen::MatrixXd TaskPrioritySolver::solve(const Vector6d_t& in_cart_velocities, | |
predict_jnts_vel.q(i) = particular_solution(i, 0) * cycle + joint_states.current_q_(i); | ||
predict_jnts_vel.qdot(i) = particular_solution(i, 0); | ||
} | ||
Eigen::FullPivLU<Eigen::MatrixXd> lu_decomp(projector); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same performance question |
||
|
||
if (this->constraints_.size() > 0) | ||
if ((this->constraints_.size() > 0) && (lu_decomp.rank() != 0)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you put the check into a new
because than it's more clear was has happened, i.e. whether the first or the second condition is |
||
{ | ||
for (std::set<ConstraintBase_t>::iterator it = this->constraints_.begin(); it != this->constraints_.end(); ++it) | ||
{ | ||
|
@@ -94,6 +95,7 @@ Eigen::MatrixXd TaskPrioritySolver::solve(const Vector6d_t& in_cart_velocities, | |
{ | ||
qdots_out = particular_solution; | ||
ROS_ERROR_STREAM("Should not occur solution: " << std::endl << qdots_out); | ||
ROS_WARN("Null space projection matrix is null. The constraint may not be satisfied"); | ||
} | ||
|
||
// Eigen::MatrixXd qdots_out = particular_solution + homogeneousSolution; // weighting with k_H is done in loop | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Performance question:
I think it is quite expensive to perform a FullPivLU to determine
rank
Could we not just check whether the determinant of a PartialPivLU is 0.0?
Or even easier:
compare
projector
with a Zero-Matrix using isApprox