|
| template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateRobot>::value>::type> |
| | GenInequalityConstraint (unsigned int rIndex) |
| |
| template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateLambda>::value>::type> |
| | GenInequalityConstraint (const tasks::qp::ContactId &cid) |
| |
| template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateForce>::value>::type> |
| | GenInequalityConstraint (const mc_solver::QPSolver &solver, const tasks::qp::ContactId &cid) |
| |
| const Eigen::MatrixXd & | AGenInEq () const override |
| |
| std::string | descGenInEq (const std::vector< rbd::MultiBody > &, int i) override |
| |
template<typename UpdateT>
class mc_solver::utils::GenInequalityConstraint< UpdateT >
Helper class to write a general inequality constraint for Tasks.
This implements \( L \le A * x \le U \)
You must implement the following functions:
const Eigen::MatrixXd & A() const override; // Return A
- void compute() override; // Update constraint matrix and bounds
- int maxGenInEq() const override; // Number of inequality lines
- std::string nameGenInEq() const override; // Desriptive name of the constraint
- const Eigen::VectorXd & LowerGenInEq() const override; // Return the lower bound L
- const Eigen::VectorXd & UpperGenInEq() const override; // Return the upper bound U
Depending on what the constraint applies 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 t
- (nrLines, 6) for a constraint on a wrench