18 template<
typename UpdateNrVars>
21 static_assert(std::is_same<UpdateNrVars, UpdateNrVarsRobot>::value
22 || std::is_same<UpdateNrVars, UpdateNrVarsLambda>::value,
23 "This should not be instanciated with unexpected UpdateNrVars classes");
29 template<
typename U = UpdateNrVars,
30 typename =
typename std::enable_if<std::is_same<U, UpdateNrVarsRobot>::value>::type>
31 explicit Update(
unsigned int rIndex) : UpdateNrVars(rIndex)
35 template<
typename U = UpdateNrVars,
36 typename =
typename std::enable_if<std::is_same<U, UpdateNrVarsLambda>::value>::type>
37 explicit Update(
const tasks::qp::ContactId & cid) : UpdateNrVars(cid)
47 virtual const Eigen::MatrixXd &
A()
const = 0;
50 const std::vector<rbd::MultiBodyConfig> &,
51 const tasks::qp::SolverData &)
54 const auto & A_ =
A();
55 auto nInEq = A_.rows();
56 AFull_.setZero(nInEq, UpdateNrVars::nrVars_);
57 AFull_.block(0, UpdateNrVars::ABegin_, nInEq, A_.cols()) = A_;
65 struct IsUpdate :
public std::is_base_of<UpdateTag, T>
77 void updateImpl(
const std::vector<rbd::MultiBody> &,
78 const std::vector<rbd::MultiBodyConfig> &,
79 const tasks::qp::SolverData &);
85 Eigen::MatrixXd ALambda_;