|
template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateRobot>::value>::type> |
| InequalityConstraint (unsigned int rIndex) |
|
template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateLambda>::value>::type> |
| InequalityConstraint (const tasks::qp::ContactId &cid) |
|
template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateForce>::value>::type> |
| InequalityConstraint (const mc_solver::QPSolver &solver, const tasks::qp::ContactId &cid) |
|
const Eigen::MatrixXd & | AInEq () const override |
|
std::string | descInEq (const std::vector< rbd::MultiBody > &, int i) override |
|
template<typename UpdateT>
class mc_solver::utils::InequalityConstraint< UpdateT >
Helper class to write an inequality constraint for Tasks.
This implements \( A * x \le b \)
You must implement the following functions:
- const Eigen::MatrixXd & A() const override; // Return A
- void compute() override; // Update constraint matrix and bounds
- int maxInEq() const override; // Number of equality lines
- std::string nameInEq() const override; // Desriptive name of the constraint
- const Eigen::VectorXd & bInEq() const override; // Return the bound b
Depending on what the constraint apply to you have to make sure A has the following size:
- (nrLines, alphaD.size()) for a constraint on a robot's state
- (nrLines, nrLambda) for a constraint on the lambdas of a contact
- (nrLines, 6) for a constraint on a wrench