hpp-constraints  6.1.0
Definition of basic geometric constraints for motion planning
hierarchical-iterative.hh
Go to the documentation of this file.
1 // Copyright (c) 2017, 2018
2 // Authors: Joseph Mirabel (joseph.mirabel@laas.fr)
3 //
4 
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // 1. Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //
12 // 2. Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
27 // DAMAGE.
28 
29 #ifndef HPP_CONSTRAINTS_SOLVER_HIERARCHICAL_ITERATIVE_HH
30 #define HPP_CONSTRAINTS_SOLVER_HIERARCHICAL_ITERATIVE_HH
31 
32 #include <functional>
34 #include <hpp/constraints/fwd.hh>
38 #include <map>
39 
40 namespace hpp {
41 namespace constraints {
42 namespace solver {
45 namespace lineSearch {
47 struct Constant {
48  template <typename SolverType>
49  bool operator()(const SolverType& solver, vectorOut_t arg, vectorOut_t darg);
50 };
51 
54 struct Backtracking {
56 
57  template <typename SolverType>
58  bool operator()(const SolverType& solver, vectorOut_t arg, vectorOut_t darg);
59 
60  template <typename SolverType>
61  inline value_type computeLocalSlope(const SolverType& solver) const;
62 
63  value_type c, tau, smallAlpha; // 0.8 ^ 7 = 0.209, 0.8 ^ 8 = 0.1677
64  mutable vector_t arg_darg, df, darg;
65 };
66 
70 struct FixedSequence {
72 
73  template <typename SolverType>
74  bool operator()(const SolverType& solver, vectorOut_t arg, vectorOut_t darg);
75 
78 };
79 
87  ErrorNormBased(value_type alphaMin = 0.2);
88 
89  template <typename SolverType>
90  bool operator()(const SolverType& solver, vectorOut_t arg, vectorOut_t darg);
91 
93 };
94 } // namespace lineSearch
95 
96 namespace saturation {
104 struct Base {
116  virtual bool saturate(vectorIn_t q, vectorOut_t qSat,
117  Eigen::VectorXi& saturation);
118  virtual ~Base() {}
119 };
121 struct Function : Base {
122  typedef std::function<bool(vectorIn_t, vectorOut_t, Eigen::VectorXi&)>
124  bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi& saturation) {
125  return function(q, qSat, saturation);
126  }
127  Function() {}
128  Function(const function_t& function) : function(function) {}
129  function_t function;
130 };
132 struct Bounds : Base {
133  bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi& saturation);
134  Bounds() {}
135  Bounds(const vector_t& lb, const vector_t& ub) : lb(lb), ub(ub), iq2iv_() {
136  iq2iv_.resize(ub.size());
137  for (size_type i = 0; i < ub.size(); ++i) {
138  iq2iv_[i] = (Eigen::VectorXi::Scalar)i;
139  }
140  }
141  Bounds(const vector_t& lb, const vector_t& ub, const Eigen::VectorXi& iq2iv)
142  : lb(lb), ub(ub), iq2iv_(iq2iv) {}
144  Eigen::VectorXi iq2iv_;
145 };
147 struct Device : Base {
149  bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi& saturation);
150  Device() {}
153 };
154 } // namespace saturation
155 
241  public:
244 
245  enum Status { ERROR_INCREASED, MAX_ITERATION_REACHED, INFEASIBLE, SUCCESS };
246  typedef shared_ptr<saturation::Base> Saturation_t;
247 
249 
251 
253 
256 
258  const LiegroupSpacePtr_t& configSpace() const { return configSpace_; }
262  virtual bool contains(const ImplicitPtr_t& numericalConstraint) const;
263 
269  virtual bool add(const ImplicitPtr_t& constraint,
270  const std::size_t& priority);
271 
277  virtual void merge(const HierarchicalIterative& other);
278 
280  void saturation(const Saturation_t& saturate) { saturate_ = saturate; }
281 
283  const Saturation_t& saturation() const { return saturate_; }
284 
294 
296 
299 
314  template <typename LineSearchType>
315  Status solve(vectorOut_t arg, LineSearchType ls = LineSearchType()) const;
316 
331  inline Status solve(vectorOut_t arg) const {
332  return solve(arg, DefaultLineSearch());
333  }
334 
338  bool isSatisfied(vectorIn_t arg) const {
339  computeValue<false>(arg);
340  computeError();
341  return squaredNorm_ < squaredErrorThreshold_;
342  }
343 
348  bool isSatisfied(vectorIn_t arg, value_type errorThreshold) const {
349  computeValue<false>(arg);
350  computeError();
351  return squaredNorm_ < errorThreshold * errorThreshold;
352  }
353 
363  bool isConstraintSatisfied(const ImplicitPtr_t& constraint, vectorIn_t arg,
364  vectorOut_t error, bool& constraintFound) const;
365 
370  const value_type& sigma() const { return sigma_; }
371 
373 
376 
383  void freeVariables(const segments_t intervals) {
384  freeVariables_ = Indices_t();
385  for (std::size_t i = 0; i < intervals.size(); ++i)
386  freeVariables_.addRow(intervals[i].first, intervals[i].second);
387  freeVariables_.updateIndices<true, true, true>();
388  update();
389  }
390 
395  void freeVariables(const Indices_t& indices) {
396  freeVariables_ = indices;
397  update();
398  }
399 
401  const Indices_t& freeVariables() const { return freeVariables_; }
402 
404  void maxIterations(size_type iterations) { maxIterations_ = iterations; }
406  size_type maxIterations() const { return maxIterations_; }
407 
409  void errorThreshold(const value_type& threshold) {
410  squaredErrorThreshold_ = threshold * threshold;
411  }
413  value_type errorThreshold() const { return sqrt(squaredErrorThreshold_); }
415  value_type squaredErrorThreshold() const { return squaredErrorThreshold_; }
416 
418  value_type inequalityThreshold() const { return inequalityThreshold_; }
420  void inequalityThreshold(const value_type& it) { inequalityThreshold_ = it; }
421 
422  void lastIsOptional(bool optional) { lastIsOptional_ = optional; }
423 
424  bool lastIsOptional() const { return lastIsOptional_; }
425 
426  // Set whether the constraints are solved level by level
427  //
428  // If true, the solver will consider only the higher level of
429  // priority that is not satisfied when computing the direction
430  // of descent.
431  void solveLevelByLevel(bool solveLevelByLevel) {
432  solveLevelByLevel_ = solveLevelByLevel;
433  }
434 
435  // Get whether the constraints are solved level by level
436  bool solveLevelByLevel() const { return solveLevelByLevel_; }
438 
441 
443  const ImplicitConstraintSet& constraints(const std::size_t priority) {
444  assert(priority < stacks_.size());
445  return stacks_[priority];
446  }
447 
449  const NumericalConstraints_t& constraints() const { return constraints_; }
450 
451  std::size_t numberStacks() const { return stacks_.size(); }
452 
453  const size_type& dimension() const { return dimension_; }
454 
457  const size_type& reducedDimension() const { return reducedDimension_; }
458 
461 
464 
466 
468  value_type residualError() const { return squaredNorm_; }
469 
471  void residualError(vectorOut_t error) const;
472 
481  bool definesSubmanifoldOf(const HierarchicalIterative& solver) const;
482 
485 
493 
500  virtual bool rightHandSideFromConfig(const ImplicitPtr_t& constraint,
501  ConfigurationIn_t config);
507  virtual bool rightHandSide(const ImplicitPtr_t& constraint, vectorIn_t rhs);
508 
510  virtual bool getRightHandSide(const ImplicitPtr_t& constraint,
511  vectorOut_t rhs) const;
512 
517  virtual void rightHandSide(vectorIn_t rhs);
518 
521  void rightHandSideAt(const value_type& s);
522 
528 
533 
535 
539 
541  template <bool ComputeJac>
542  void computeValue(vectorIn_t arg) const;
543  void computeSaturation(vectorIn_t arg) const;
544  void getValue(vectorOut_t v) const;
548  void computeError() const;
549 
551  const vector_t& lastStep() const { return dq_; }
552 
553  virtual bool integrate(vectorIn_t from, vectorIn_t velocity,
554  vectorOut_t result) const;
556 
557  virtual std::ostream& print(std::ostream& os) const;
558 
559  protected:
560  typedef Eigen::JacobiSVD<matrix_t> SVD_t;
561 
562  struct Data {
564  : output(),
565  rightHandSide(),
566  error(),
567  jacobian(),
568  reducedJ(),
569  svd(),
570  PK(),
571  comparison(),
572  inequalityIndices(),
573  equalityIndices(),
574  activeRowsOfJ() {}
576  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
578  LiegroupElement output, rightHandSide;
580  matrix_t jacobian, reducedJ;
581 
584 
586 
588  std::vector<std::size_t> inequalityIndices;
591  };
592 
595  void update();
596 
600  virtual void computeActiveRowsOfJ(std::size_t iStack);
601 
610  void expandDqSmall() const;
611  void saturate(vectorOut_t arg) const;
612 
613  value_type squaredErrorThreshold_, inequalityThreshold_;
615 
616  std::vector<ImplicitConstraintSet> stacks_;
618  size_type dimension_, reducedDimension_;
627  std::map<DifferentiableFunctionPtr_t, size_type> iq_;
629  std::map<DifferentiableFunctionPtr_t, size_type> iv_;
631  std::map<DifferentiableFunctionPtr_t, std::size_t> priority_;
632 
635 
636  mutable vector_t dq_, dqSmall_;
638  mutable Eigen::VectorXi saturation_, reducedSaturation_;
640  mutable ArrayXb tmpSat_;
642  mutable std::vector<Data> datas_;
643  mutable SVD_t svd_;
644  mutable vector_t OM_;
645  mutable vector_t OP_;
646 
648 
649  protected:
651 
652  private:
654 }; // class HierarchicalIterative
656 inline std::ostream& operator<<(std::ostream& os,
657  const HierarchicalIterative& hs) {
658  return hs.print(os);
659 }
660 } // namespace solver
661 } // namespace constraints
662 } // namespace hpp
663 
664 #endif // HPP_CONSTRAINTS_SOLVER_HIERARCHICAL_ITERATIVE_HH
Definition: implicit-constraint-set.hh:45
Definition: hierarchical-iterative.hh:240
const size_type & dimension() const
Definition: hierarchical-iterative.hh:453
Configuration_t qSat_
Definition: hierarchical-iterative.hh:639
virtual ~HierarchicalIterative()
Definition: hierarchical-iterative.hh:252
virtual bool integrate(vectorIn_t from, vectorIn_t velocity, vectorOut_t result) const
virtual bool rightHandSideFromConfig(const ImplicitPtr_t &constraint, ConfigurationIn_t config)
std::vector< ImplicitConstraintSet > stacks_
Definition: hierarchical-iterative.hh:616
lineSearch::FixedSequence DefaultLineSearch
Definition: hierarchical-iterative.hh:243
Status solve(vectorOut_t arg) const
Definition: hierarchical-iterative.hh:331
Saturation_t saturate_
Definition: hierarchical-iterative.hh:623
virtual bool getRightHandSide(const ImplicitPtr_t &constraint, vectorOut_t rhs) const
Get right hand side of a constraints.
bool solveLevelByLevel() const
Definition: hierarchical-iterative.hh:436
virtual void computeActiveRowsOfJ(std::size_t iStack)
size_type maxIterations_
Definition: hierarchical-iterative.hh:614
void saturation(const Saturation_t &saturate)
Set the saturation function.
Definition: hierarchical-iterative.hh:280
vector_t rightHandSideFromConfig(ConfigurationIn_t config)
bool solveLevelByLevel_
Definition: hierarchical-iterative.hh:620
Eigen::VectorXi reducedSaturation_
Definition: hierarchical-iterative.hh:638
const size_type & reducedDimension() const
Definition: hierarchical-iterative.hh:457
const ImplicitConstraintSet & constraints(const std::size_t priority)
Get set of constraints for a give priority level.
Definition: hierarchical-iterative.hh:443
void freeVariables(const Indices_t &indices)
Definition: hierarchical-iterative.hh:395
bool isConstraintSatisfied(const ImplicitPtr_t &constraint, vectorIn_t arg, vectorOut_t error, bool &constraintFound) const
vector_t OM_
Definition: hierarchical-iterative.hh:644
HierarchicalIterative(const LiegroupSpacePtr_t &configSpace)
value_type residualError() const
Returns the squared norm of the error vector.
Definition: hierarchical-iterative.hh:468
void errorThreshold(const value_type &threshold)
Set error threshold.
Definition: hierarchical-iterative.hh:409
HierarchicalIterative(const HierarchicalIterative &other)
value_type squaredNorm_
Definition: hierarchical-iterative.hh:641
virtual std::ostream & print(std::ostream &os) const
void computeValue(vectorIn_t arg) const
Compute the value of each level, and the jacobian if ComputeJac is true.
std::size_t numberStacks() const
Definition: hierarchical-iterative.hh:451
value_type inequalityThreshold_
Definition: hierarchical-iterative.hh:613
virtual bool add(const ImplicitPtr_t &constraint, const std::size_t &priority)
std::map< DifferentiableFunctionPtr_t, std::size_t > priority_
Priority level of constraint.
Definition: hierarchical-iterative.hh:631
LiegroupSpacePtr_t configSpace_
Definition: hierarchical-iterative.hh:617
Status solve(vectorOut_t arg, LineSearchType ls=LineSearchType()) const
const Saturation_t & saturation() const
Get the saturation function.
Definition: hierarchical-iterative.hh:283
void computeSaturation(vectorIn_t arg) const
vector_t dq_
Definition: hierarchical-iterative.hh:636
virtual void rightHandSide(vectorIn_t rhs)
Eigen::JacobiSVD< matrix_t > SVD_t
Definition: hierarchical-iterative.hh:560
const vector_t & lastStep() const
Accessor to the last step done.
Definition: hierarchical-iterative.hh:551
HierarchicalIterative()
Definition: hierarchical-iterative.hh:650
Status
Definition: hierarchical-iterative.hh:245
@ ERROR_INCREASED
Definition: hierarchical-iterative.hh:245
ArrayXb activeDerivativeParameters() const
Velocity parameters involved in the constraint resolution.
void freeVariables(const segments_t intervals)
Definition: hierarchical-iterative.hh:383
vector_t OP_
Definition: hierarchical-iterative.hh:645
std::map< DifferentiableFunctionPtr_t, size_type > iq_
Value rank of constraint in its priority level.
Definition: hierarchical-iterative.hh:627
void lastIsOptional(bool optional)
Definition: hierarchical-iterative.hh:422
value_type sigma_
The smallest non-zero singular value.
Definition: hierarchical-iterative.hh:634
std::vector< Data > datas_
Definition: hierarchical-iterative.hh:642
void inequalityThreshold(const value_type &it)
set the inequality threshold
Definition: hierarchical-iterative.hh:420
ArrayXb tmpSat_
Definition: hierarchical-iterative.hh:640
NumericalConstraints_t constraints_
Members moved from core::ConfigProjector.
Definition: hierarchical-iterative.hh:625
void residualError(vectorOut_t error) const
Returns the error vector.
bool lastIsOptional() const
Definition: hierarchical-iterative.hh:424
bool isSatisfied(vectorIn_t arg) const
Definition: hierarchical-iterative.hh:338
virtual void merge(const HierarchicalIterative &other)
virtual bool contains(const ImplicitPtr_t &numericalConstraint) const
ArrayXb activeParameters() const
Configuration parameters involved in the constraint resolution.
HierarchicalIterative extract(interval_t interval) const
bool definesSubmanifoldOf(const HierarchicalIterative &solver) const
void solveLevelByLevel(bool solveLevelByLevel)
Definition: hierarchical-iterative.hh:431
const LiegroupSpacePtr_t & configSpace() const
Get configuration space on which constraints are defined.
Definition: hierarchical-iterative.hh:258
Eigen::RowBlockIndices Indices_t
Definition: hierarchical-iterative.hh:242
size_type dimension_
Definition: hierarchical-iterative.hh:618
shared_ptr< saturation::Base > Saturation_t
Definition: hierarchical-iterative.hh:246
std::map< DifferentiableFunctionPtr_t, size_type > iv_
Derivative rank of constraint in its priority level.
Definition: hierarchical-iterative.hh:629
size_type maxIterations() const
Get maximal number of iterations in config projector.
Definition: hierarchical-iterative.hh:406
void maxIterations(size_type iterations)
Set maximal number of iterations.
Definition: hierarchical-iterative.hh:404
bool isSatisfied(vectorIn_t arg, value_type errorThreshold) const
Definition: hierarchical-iterative.hh:348
const value_type & sigma() const
Definition: hierarchical-iterative.hh:370
SVD_t svd_
Definition: hierarchical-iterative.hh:643
const Indices_t & freeVariables() const
Get free velocity variables.
Definition: hierarchical-iterative.hh:401
value_type inequalityThreshold() const
Get the inequality threshold.
Definition: hierarchical-iterative.hh:418
value_type errorThreshold() const
Get error threshold.
Definition: hierarchical-iterative.hh:413
Indices_t freeVariables_
Unknown of the set of implicit constraints.
Definition: hierarchical-iterative.hh:622
matrix_t reducedJ_
Definition: hierarchical-iterative.hh:637
bool lastIsOptional_
Definition: hierarchical-iterative.hh:619
value_type squaredErrorThreshold() const
Get error threshold.
Definition: hierarchical-iterative.hh:415
virtual bool rightHandSide(const ImplicitPtr_t &constraint, vectorIn_t rhs)
const NumericalConstraints_t & constraints() const
Get constraints (implicit and explicit)
Definition: hierarchical-iterative.hh:449
#define HPP_CONSTRAINTS_DLLAPI
Definition: config.hh:88
assert(d.lhs()._blocks()==d.rhs()._blocks())
std::ostream & operator<<(std::ostream &os, const HierarchicalIterative &hs)
Definition: hierarchical-iterative.hh:656
pinocchio::Configuration_t Configuration_t
Definition: fwd.hh:106
std::vector< ComparisonType > ComparisonTypes_t
Definition: fwd.hh:181
pinocchio::DevicePtr_t DevicePtr_t
Definition: fwd.hh:110
pinocchio::LiegroupSpacePtr_t LiegroupSpacePtr_t
Definition: fwd.hh:69
shared_ptr< Implicit > ImplicitPtr_t
Definition: fwd.hh:174
std::pair< value_type, value_type > interval_t
Definition: fwd.hh:84
pinocchio::size_type size_type
Definition: fwd.hh:47
pinocchio::ArrayXb ArrayXb
Definition: fwd.hh:80
pinocchio::value_type value_type
Definition: fwd.hh:48
pinocchio::vectorIn_t vectorIn_t
Definition: fwd.hh:60
pinocchio::ConfigurationIn_t ConfigurationIn_t
Definition: fwd.hh:107
pinocchio::matrix_t matrix_t
Definition: fwd.hh:56
Eigen::Ref< matrix_t > matrixOut_t
Definition: fwd.hh:58
std::vector< segment_t > segments_t
Definition: fwd.hh:85
pinocchio::vectorOut_t vectorOut_t
Definition: fwd.hh:61
std::vector< constraints::ImplicitPtr_t > NumericalConstraints_t
Definition: fwd.hh:176
pinocchio::vector_t vector_t
Definition: fwd.hh:59
constexpr int error
void saturate(const DevicePtr_t &robot, ConfigurationOut_t configuration)
#define HPP_SERIALIZABLE_SPLIT()
Definition: hierarchical-iterative.hh:562
std::vector< std::size_t > inequalityIndices
Definition: hierarchical-iterative.hh:588
LiegroupElement output
Definition: hierarchical-iterative.hh:578
size_type maxRank
Definition: hierarchical-iterative.hh:585
ComparisonTypes_t comparison
Definition: hierarchical-iterative.hh:587
Eigen::RowBlockIndices equalityIndices
Definition: hierarchical-iterative.hh:589
matrix_t jacobian
Definition: hierarchical-iterative.hh:580
SVD_t svd
Definition: hierarchical-iterative.hh:582
vector_t error
Definition: hierarchical-iterative.hh:579
matrix_t PK
Definition: hierarchical-iterative.hh:583
Eigen::MatrixBlocks< false, false > activeRowsOfJ
Definition: hierarchical-iterative.hh:590
Data()
Definition: hierarchical-iterative.hh:563
Definition: hierarchical-iterative.hh:54
vector_t df
Definition: hierarchical-iterative.hh:64
vector_t arg_darg
Definition: hierarchical-iterative.hh:64
value_type smallAlpha
Definition: hierarchical-iterative.hh:63
value_type tau
Definition: hierarchical-iterative.hh:63
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition: hierarchical-iterative.hh:48
value_type computeLocalSlope(const SolverType &solver) const
Definition: hierarchical-iterative.hh:94
value_type c
Definition: hierarchical-iterative.hh:63
vector_t darg
Definition: hierarchical-iterative.hh:64
No line search. Use .
Definition: hierarchical-iterative.hh:47
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition: hierarchical-iterative.hh:41
Definition: hierarchical-iterative.hh:85
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition: hierarchical-iterative.hh:118
value_type b
Definition: hierarchical-iterative.hh:92
value_type K
Definition: hierarchical-iterative.hh:92
ErrorNormBased(value_type alphaMin, value_type _a, value_type _b)
value_type a
Definition: hierarchical-iterative.hh:92
value_type C
Definition: hierarchical-iterative.hh:92
Definition: hierarchical-iterative.hh:70
value_type alphaMax
Definition: hierarchical-iterative.hh:77
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition: hierarchical-iterative.hh:109
value_type K
Definition: hierarchical-iterative.hh:77
value_type alpha
Definition: hierarchical-iterative.hh:76
Base class for box constraints. To prevent configuration variables to get out of joint limits during ...
Definition: hierarchical-iterative.hh:104
virtual ~Base()
Definition: hierarchical-iterative.hh:118
virtual bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi &saturation)
simple box constraints
Definition: hierarchical-iterative.hh:132
Bounds(const vector_t &lb, const vector_t &ub)
Definition: hierarchical-iterative.hh:135
vector_t ub
Definition: hierarchical-iterative.hh:143
Bounds(const vector_t &lb, const vector_t &ub, const Eigen::VectorXi &iq2iv)
Definition: hierarchical-iterative.hh:141
Eigen::VectorXi iq2iv_
Definition: hierarchical-iterative.hh:144
bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi &saturation)
vector_t lb
Definition: hierarchical-iterative.hh:143
Bounds()
Definition: hierarchical-iterative.hh:134
Box constraints use a Device joint limits.
Definition: hierarchical-iterative.hh:147
DevicePtr_t device
Definition: hierarchical-iterative.hh:152
Device()
Definition: hierarchical-iterative.hh:150
bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi &saturation)
Device(const DevicePtr_t &device)
Definition: hierarchical-iterative.hh:151
saturation from a std::function.
Definition: hierarchical-iterative.hh:121
bool saturate(vectorIn_t q, vectorOut_t qSat, Eigen::VectorXi &saturation)
Definition: hierarchical-iterative.hh:124
function_t function
Definition: hierarchical-iterative.hh:129
Function()
Definition: hierarchical-iterative.hh:127
Function(const function_t &function)
Definition: hierarchical-iterative.hh:128
std::function< bool(vectorIn_t, vectorOut_t, Eigen::VectorXi &)> function_t
Definition: hierarchical-iterative.hh:123