29#ifndef HPP_CONSTRAINTS_EXPLICIT_CONSTRAINT_SET_HH
30#define HPP_CONSTRAINTS_EXPLICIT_CONSTRAINT_SET_HH
39namespace constraints {
176 : configSpace_(space),
183 argFunction_(
Eigen::VectorXi::Constant(space->nq(), -1)),
184 derFunction_(
Eigen::VectorXi::Constant(space->nv(), -1)),
192 notOutArgs_.addRow(0, space->nq());
193 notOutDers_.addCol(0, space->nv());
197 : configSpace_(other.configSpace_),
198 inArgs_(other.inArgs_),
199 notOutArgs_(other.notOutArgs_),
200 inDers_(other.inDers_),
201 notOutDers_(other.notOutDers_),
202 outArgs_(other.outArgs_),
203 outDers_(other.outDers_),
204 inOutDependencies_(other.inOutDependencies_),
206 computationOrder_(other.computationOrder_),
207 argFunction_(other.argFunction_),
208 derFunction_(other.derFunction_),
209 errorThreshold_(other.errorThreshold_),
210 errorSize_(other.errorSize_),
213 diffSmall_(other.diffSmall_) {}
221 errorThreshold_ = threshold;
227 return errorThreshold_ * errorThreshold_;
263 return inOutDependencies_;
269 const Eigen::VectorXi&
derFunction()
const {
return derFunction_; }
287 std::size_t
nq()
const {
return configSpace_->nq(); }
290 std::size_t
nv()
const {
return configSpace_->nv(); }
307 return MatrixBlockView(jacobian, outDers_.nbIndices(), outDers_.indices(),
308 notOutDers_.nbIndices(), notOutDers_.indices());
435 std::ostream&
print(std::ostream& os)
const;
438 typedef std::vector<bool> Computed_t;
444 void solveExplicitConstraint(
const std::size_t& i,
vectorOut_t arg)
const;
459 void computeJacobian(
const std::size_t& i,
matrixOut_t J)
const;
460 void computeOrder(
const std::size_t& iF, std::size_t& iOrder,
461 Computed_t& computed);
487 RowBlockIndices inArgs_, notOutArgs_;
488 ColBlockIndices inDers_, notOutDers_;
490 RowBlockIndices outArgs_, outDers_;
492 Eigen::MatrixXi inOutDependencies_;
494 std::vector<Data> data_;
495 std::vector<std::size_t> computationOrder_;
501 Eigen::VectorXi argFunction_, derFunction_;
505 mutable vector_t arg_, diff_, diffSmall_;
518 void init(
const LiegroupSpacePtr_t& space) {
519 configSpace_ = space;
520 argFunction_ = Eigen::VectorXi::Constant(space->nq(), -1);
521 derFunction_ = Eigen::VectorXi::Constant(space->nv(), -1);
522 arg_.resize(space->nq());
523 diff_.resize(space->nv());
525 notOutArgs_.addRow(0, space->nq());
526 notOutDers_.addCol(0, space->nv());
Definition matrix-view.hh:835
Definition explicit-constraint-set.hh:99
ColBlockIndices activeParameters() const
Same as inArgs.
void jacobian(matrixOut_t jacobian, vectorIn_t q) const
bool contains(const ExplicitPtr_t &numericalConstraint) const
std::ostream & print(std::ostream &os) const
const RowBlockIndices & outArgs() const
Definition explicit-constraint-set.hh:275
Eigen::ColBlockIndices ColBlockIndices
Definition explicit-constraint-set.hh:102
bool isSatisfied(vectorIn_t arg, vectorOut_t error, value_type errorThreshold=-1) const
ExplicitConstraintSet(const LiegroupSpacePtr_t &space)
Definition explicit-constraint-set.hh:175
size_type errorSize() const
Definition explicit-constraint-set.hh:121
bool rightHandSideFromInput(const ExplicitPtr_t &constraint, vectorIn_t p)
bool isConstraintSatisfied(const ImplicitPtr_t &constraint, vectorIn_t arg, vectorOut_t error, bool &constraintFound) const
size_type add(const ExplicitPtr_t &constraint)
void rightHandSide(const size_type &i, vectorIn_t rhs)
bool isSatisfied(vectorIn_t arg, value_type errorThreshold=-1) const
Eigen::MatrixBlockView< matrix_t, Eigen::Dynamic, Eigen::Dynamic, false, false > MatrixBlockView
Definition explicit-constraint-set.hh:105
ExplicitConstraintSet(const ExplicitConstraintSet &other)
Definition explicit-constraint-set.hh:196
void rightHandSide(vectorIn_t rhs)
MatrixBlockView jacobianNotOutToOut(matrix_t &jacobian) const
Definition explicit-constraint-set.hh:306
void rightHandSideFromInput(const size_type &i, vectorIn_t p)
const RowBlockIndices & inArgs() const
Set of input configuration variables.
Definition explicit-constraint-set.hh:236
const ColBlockIndices & inDers() const
Set of input velocity variables.
Definition explicit-constraint-set.hh:239
const Eigen::MatrixXi & inOutDependencies() const
Definition explicit-constraint-set.hh:262
Eigen::RowBlockIndices RowBlockIndices
Definition explicit-constraint-set.hh:101
void errorThreshold(const value_type &threshold)
Set error threshold.
Definition explicit-constraint-set.hh:220
vector_t rightHandSide() const
std::size_t nq() const
The number of variables.
Definition explicit-constraint-set.hh:287
const ColBlockIndices & activeDerivativeParameters() const
Same as inDers.
vector_t rightHandSideFromInput(vectorIn_t p)
Eigen::MatrixXi inOutDofDependencies() const
Same as inOutDependencies except that cols correpond to DoFs.
value_type errorThreshold() const
Get error threshold.
Definition explicit-constraint-set.hh:224
const Eigen::VectorXi & derFunction() const
Definition explicit-constraint-set.hh:269
bool getRightHandSide(const ExplicitPtr_t &constraint, vectorOut_t rhs) const
const ColBlockIndices & notOutDers() const
Definition explicit-constraint-set.hh:249
value_type squaredErrorThreshold() const
Get error threshold.
Definition explicit-constraint-set.hh:226
std::size_t nv() const
The number of derivative variables.
Definition explicit-constraint-set.hh:290
size_type rightHandSideSize() const
const RowBlockIndices & outDers() const
Definition explicit-constraint-set.hh:281
bool solve(vectorOut_t arg) const
const RowBlockIndices & notOutArgs() const
Definition explicit-constraint-set.hh:244
LiegroupSpacePtr_t configSpace() const
The Lie group on which constraints are defined.
Definition explicit-constraint-set.hh:284
bool rightHandSide(const ExplicitPtr_t &constraint, vectorIn_t rhs)
Definition by-substitution.hh:73
#define HPP_CONSTRAINTS_DLLAPI
Definition config.hh:88
shared_ptr< Explicit > ExplicitPtr_t
Definition fwd.hh:184
pinocchio::LiegroupSpacePtr_t LiegroupSpacePtr_t
Definition fwd.hh:69
shared_ptr< Implicit > ImplicitPtr_t
Definition fwd.hh:174
pinocchio::size_type size_type
Definition fwd.hh:47
pinocchio::value_type value_type
Definition fwd.hh:48
std::map< ImplicitPtr_t, ImplicitPtr_t > ConstraintReplacement_t
Definition fwd.hh:188
pinocchio::vectorIn_t vectorIn_t
Definition fwd.hh:60
pinocchio::matrix_t matrix_t
Definition fwd.hh:56
Eigen::Ref< matrix_t > matrixOut_t
Definition fwd.hh:58
pinocchio::vectorOut_t vectorOut_t
Definition fwd.hh:61
pinocchio::vector_t vector_t
Definition fwd.hh:59