Tasks  1.9.1
QPConstr.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 // Eigen
9 #include <Eigen/Core>
10 #include <Eigen/StdVector>
11 
12 // RBDyn
13 #include <RBDyn/CoM.h>
14 #include <RBDyn/Jacobian.h>
15 
16 // sch
17 #include <sch/Matrix/SCH_Types.h>
18 
19 // Tasks
20 #include "QPSolver.h"
21 
22 // unique_ptr
23 #include <memory>
24 
25 // forward declaration
26 // sch
27 namespace sch
28 {
29 class S_Object;
30 class CD_Pair;
31 } // namespace sch
32 
33 namespace tasks
34 {
35 struct QBound;
36 struct AlphaBound;
37 struct AlphaDBound;
38 struct AlphaDDBound;
39 
40 namespace qp
41 {
42 
44 TASKS_DLLAPI sch::Matrix4x4 tosch(const sva::PTransformd & t);
45 
56 class TASKS_DLLAPI JointLimitsConstr : public ConstraintFunction<Bound>
57 {
58 public:
65  JointLimitsConstr(const std::vector<rbd::MultiBody> & mbs, int robotIndex, QBound bound, double step);
66 
74  JointLimitsConstr(const std::vector<rbd::MultiBody> & mbs,
75  int robotIndex,
76  QBound bound,
77  const AlphaDBound & aDBound,
78  double step);
79 
88  JointLimitsConstr(const std::vector<rbd::MultiBody> & mbs,
89  int robotIndex,
90  QBound bound,
91  const AlphaDBound & aDBound,
92  const AlphaDDBound & aDDBound,
93  double step);
94 
95  // Constraint
96  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
97 
98  virtual void update(const std::vector<rbd::MultiBody> & mbs,
99  const std::vector<rbd::MultiBodyConfig> & mbcs,
100  const SolverData & data) override;
101 
102  virtual std::string nameBound() const override;
103  virtual std::string descBound(const std::vector<rbd::MultiBody> & mbs, int line) override;
104 
105  // Bound Constraint
106  virtual int beginVar() const override;
107 
108  virtual const Eigen::VectorXd & Lower() const override;
109  virtual const Eigen::VectorXd & Upper() const override;
110 
111 private:
112  int robotIndex_, alphaDBegin_, alphaDOffset_;
113  double step_;
114  Eigen::VectorXd qMin_, qMax_;
115  Eigen::VectorXd qVec_, alphaVec_;
116  Eigen::VectorXd lower_, upper_;
117  Eigen::VectorXd alphaDLower_, alphaDUpper_;
118  Eigen::VectorXd alphaDDLower_, alphaDDUpper_;
119  Eigen::VectorXd prevAlphaD_;
120 };
121 
151 class TASKS_DLLAPI DamperJointLimitsConstr : public ConstraintFunction<Bound>
152 {
153 public:
164  DamperJointLimitsConstr(const std::vector<rbd::MultiBody> & mbs,
165  int robotIndex,
166  const QBound & qBound,
167  const AlphaBound & aBound,
168  double interPercent,
169  double securityPercent,
170  double damperOffset,
171  double step);
183  DamperJointLimitsConstr(const std::vector<rbd::MultiBody> & mbs,
184  int robotIndex,
185  const QBound & qBound,
186  const AlphaBound & aBound,
187  const AlphaDBound & aDBound,
188  double interPercent,
189  double securityPercent,
190  double damperOffset,
191  double step);
192 
205  DamperJointLimitsConstr(const std::vector<rbd::MultiBody> & mbs,
206  int robotIndex,
207  const QBound & qBound,
208  const AlphaBound & aBound,
209  const AlphaDBound & aDBound,
210  const AlphaDDBound & aDDBound,
211  double interPercent,
212  double securityPercent,
213  double damperOffset,
214  double step);
215 
216  // Constraint
217  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
218 
219  virtual void update(const std::vector<rbd::MultiBody> & mbs,
220  const std::vector<rbd::MultiBodyConfig> & mbcs,
221  const SolverData & data) override;
222 
223  virtual std::string nameBound() const override;
224  virtual std::string descBound(const std::vector<rbd::MultiBody> & mbs, int line) override;
225 
226  // Bound Constraint
227  virtual int beginVar() const override;
228 
229  virtual const Eigen::VectorXd & Lower() const override;
230  virtual const Eigen::VectorXd & Upper() const override;
231 
233  double computeDamping(double alpha, double dist, double iDist, double sDist);
234  double computeDamper(double dist, double iDist, double sDist, double damping);
235 
236 private:
237  struct DampData
238  {
239  enum State
240  {
241  Low,
242  Upp,
243  Free
244  };
245 
246  DampData(double mi, double ma, double miV, double maV, double idi, double sdi, int aDB, int i)
247  : min(mi), max(ma), minVel(miV), maxVel(maV), iDist(idi), sDist(sdi), jointIndex(i), alphaDBegin(aDB), damping(0.),
248  state(Free)
249  {
250  }
251 
252  double min, max;
253  double minVel, maxVel;
254  double iDist, sDist;
255  int jointIndex;
256  int alphaDBegin;
257  double damping;
258  State state;
259  };
260 
261 private:
262  int robotIndex_, alphaDBegin_;
263  std::vector<DampData> data_;
264 
265  Eigen::VectorXd lower_, upper_;
266  Eigen::VectorXd alphaDLower_, alphaDUpper_;
267  Eigen::VectorXd alphaDDLower_, alphaDDUpper_;
268  Eigen::VectorXd prevAlphaD_;
269  double step_;
270  double damperOff_;
271 };
272 
292 class TASKS_DLLAPI DistanceConstr : public ConstraintFunction<Inequality>
293 {
294 public:
299  DistanceConstr(const std::vector<rbd::MultiBody> & mbs, double step);
300 
328  void addDistanceLimit(const std::vector<rbd::MultiBody> & mbs,
329  int dlId,
330  int r1Index,
331  const std::string & r1BodyName,
332  sch::S_Object * body1,
333  const sva::PTransformd & X_op1_o1,
334  int r2Index,
335  const std::string & r2BodyName,
336  sch::S_Object * body2,
337  const sva::PTransformd & X_op2_o2,
338  double di,
339  double ds,
340  double damping,
341  double dampingOff = 0.,
342  const Eigen::VectorXd & r1Selector = Eigen::VectorXd::Zero(0),
343  const Eigen::VectorXd & r2Selector = Eigen::VectorXd::Zero(0));
344 
351  bool rmDistanceLimit(int dlId);
352 
354  std::size_t nrDistanceLimits() const;
355 
357  void reset();
358 
361 
362  // Constraint
363  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
364 
365  virtual void update(const std::vector<rbd::MultiBody> & mbs,
366  const std::vector<rbd::MultiBodyConfig> & mbcs,
367  const SolverData & data) override;
368 
369  virtual std::string nameInEq() const override;
370  virtual std::string descInEq(const std::vector<rbd::MultiBody> & mbs, int line) override;
371 
372  // In Inequality Constraint
373  virtual int nrInEq() const override;
374  virtual int maxInEq() const override;
375 
376  virtual const Eigen::MatrixXd & AInEq() const override;
377  virtual const Eigen::VectorXd & bInEq() const override;
378 
379 private:
380  struct BodyDistData
381  {
382  BodyDistData(const rbd::MultiBody & mb,
383  int rIndex,
384  const std::string & bodyName,
385  sch::S_Object * hull,
386  const sva::PTransformd & X_op_o,
387  const Eigen::VectorXd & selector);
388 
389  sch::S_Object * hull;
390  rbd::Jacobian jac;
391  sva::PTransformd X_op_o;
392  int rIndex, bIndex;
393  std::string bodyName;
394  Eigen::VectorXd selector;
395  };
396 
397 public:
398  struct DistLimData
399  {
400  enum class DampingType
401  {
402  Hard,
403  Soft,
404  Free
405  };
406  DistLimData(std::vector<BodyDistData> bcds,
407  int dlId,
408  sch::S_Object * body1,
409  sch::S_Object * body2,
410  double di,
411  double ds,
412  double damping,
413  double dampingOff);
414  DistLimData(DistLimData &&) = default;
415  DistLimData(const DistLimData &) = delete;
416  DistLimData & operator=(const DistLimData &) = delete;
418 
419  std::unique_ptr<sch::CD_Pair> pair;
420  double distance;
421  Eigen::Vector3d p1;
422  Eigen::Vector3d p2;
423  Eigen::Vector3d normVecDist;
424  double di, ds;
425  double damping;
426  std::vector<BodyDistData> bodies;
427 
429  double dampingOff;
430  int dlId;
431  };
432 
434  const DistLimData & getDistanceData(int dlId) const;
435 
436 private:
437  double computeDamping(const std::vector<rbd::MultiBody> & mbs,
438  const std::vector<rbd::MultiBodyConfig> & mbcs,
439  const DistLimData & cd,
440  const Eigen::Vector3d & normalVecDist,
441  double dist) const;
442 
443 private:
444  std::vector<DistLimData> dataVec_;
445  double step_;
446  int nrActivated_, totalAlphaD_;
447 
448  Eigen::MatrixXd AInEq_;
449  Eigen::VectorXd bInEq_;
450 
451  Eigen::MatrixXd fullJac_, distJac_;
452 
453  int nrVars_;
454 
455  DistanceConstr(const DistanceConstr &) = delete;
456  DistanceConstr & operator=(const DistanceConstr &) = delete;
457 };
458 
464 class TASKS_DLLAPI CollisionConstr : public DistanceConstr
465 {
466 public:
467  [[deprecated("Use DistanceConstr instead.")]]
468  CollisionConstr(const std::vector<rbd::MultiBody> & mbs, double step);
469 
470  void addCollision(const std::vector<rbd::MultiBody> & mbs,
471  int collId,
472  int r1Index,
473  const std::string & r1BodyName,
474  sch::S_Object * body1,
475  const sva::PTransformd & X_op1_o1,
476  int r2Index,
477  const std::string & r2BodyName,
478  sch::S_Object * body2,
479  const sva::PTransformd & X_op2_o2,
480  double di,
481  double ds,
482  double damping,
483  double dampingOff = 0.,
484  const Eigen::VectorXd & r1Selector = Eigen::VectorXd::Zero(0),
485  const Eigen::VectorXd & r2Selector = Eigen::VectorXd::Zero(0))
486  {
487  addDistanceLimit(mbs, collId, r1Index, r1BodyName, body1, X_op1_o1, r2Index, r2BodyName, body2, X_op2_o2, di, ds,
488  damping, dampingOff, r1Selector, r2Selector);
489  }
490 
491  bool rmCollision(int collId) { return rmDistanceLimit(collId); }
492 
493  std::size_t nrCollisions() const { return nrDistanceLimits(); }
494 
495  void updateNrCollisions() { updateNrDistanceLimits(); }
496 
497  const DistLimData & getCollisionData(int collId) const { return getDistanceData(collId); }
498 };
499 
515 class TASKS_DLLAPI CoMIncPlaneConstr : public ConstraintFunction<Inequality>
516 {
517 public:
523  CoMIncPlaneConstr(const std::vector<rbd::MultiBody> & mbs, int robotIndex, double step);
524 
540  void addPlane(int planeId,
541  const Eigen::Vector3d & normal,
542  double offset,
543  double di,
544  double ds,
545  double damping,
546  double dampingOff = 0.);
547 
548  void addPlane(int planeId,
549  const Eigen::Vector3d & normal,
550  double offset,
551  double di,
552  double ds,
553  double damping,
554  const Eigen::Vector3d & speed,
555  const Eigen::Vector3d & normalDot,
556  double dampingOff = 0.);
557 
564  bool rmPlane(int planeId);
565 
567  std::size_t nrPlanes() const;
568 
570  void reset();
571 
576  inline Eigen::VectorXd & selector() noexcept { return selector_; }
577 
582  inline const Eigen::VectorXd & selector() const noexcept { return selector_; }
583 
586 
587  // Constraint
588  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
589 
590  virtual void update(const std::vector<rbd::MultiBody> & mbs,
591  const std::vector<rbd::MultiBodyConfig> & mbcs,
592  const SolverData & data) override;
593 
594  virtual std::string nameInEq() const override;
595  virtual std::string descInEq(const std::vector<rbd::MultiBody> & mbs, int line) override;
596 
597  // In Inequality Constraint
598  virtual int nrInEq() const override;
599  virtual int maxInEq() const override;
600 
601  virtual const Eigen::MatrixXd & AInEq() const override;
602  virtual const Eigen::VectorXd & bInEq() const override;
603 
604 private:
605  struct PlaneData
606  {
607  enum class DampingType
608  {
609  Hard,
610  Soft,
611  Free
612  };
613  PlaneData(int planeId,
614  const Eigen::Vector3d & normal,
615  double offset,
616  double di,
617  double ds,
618  double damping,
619  double dampingOff,
620  const Eigen::Vector3d & speed,
621  const Eigen::Vector3d & normalDot);
622  Eigen::Vector3d normal;
623  Eigen::Vector3d normalDot;
624  double offset;
625  double dist;
626  double di, ds;
627  double damping;
628  int planeId;
629  DampingType dampingType;
630  double dampingOff;
631  Eigen::Vector3d speed;
632  };
633 
634 private:
635  int robotIndex_, alphaDBegin_;
636  std::vector<PlaneData> dataVec_;
637  double step_;
638  int nrVars_;
639  int nrActivated_;
640  std::vector<std::size_t> activated_;
641 
642  rbd::CoMJacobian jacCoM_;
643  Eigen::VectorXd selector_;
644  Eigen::MatrixXd AInEq_;
645  Eigen::VectorXd bInEq_;
646 };
647 
648 class TASKS_DLLAPI GripperTorqueConstr : public ConstraintFunction<Inequality>
649 {
650 public:
652 
653  void addGripper(const ContactId & cId,
654  double torqueLimit,
655  const Eigen::Vector3d & origin,
656  const Eigen::Vector3d & axis);
657  bool rmGripper(const ContactId & cId);
658  void reset();
659 
660  // Constraint
661  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mb, const SolverData & data) override;
662 
663  virtual void update(const std::vector<rbd::MultiBody> & mb,
664  const std::vector<rbd::MultiBodyConfig> & mbc,
665  const SolverData & data) override;
666 
667  virtual std::string nameInEq() const override;
668  virtual std::string descInEq(const std::vector<rbd::MultiBody> & mb, int line) override;
669 
670  // In Inequality Constraint
671  virtual int maxInEq() const override;
672 
673  virtual const Eigen::MatrixXd & AInEq() const override;
674  virtual const Eigen::VectorXd & bInEq() const override;
675 
676 private:
677  struct GripperData
678  {
679  GripperData(const ContactId & cId, double tl, const Eigen::Vector3d & o, const Eigen::Vector3d & a);
680 
681  ContactId contactId;
682  double torqueLimit;
683  Eigen::Vector3d origin;
684  Eigen::Vector3d axis;
685  };
686 
687 private:
688  std::vector<GripperData> dataVec_;
689 
690  Eigen::MatrixXd AInEq_;
691  Eigen::VectorXd bInEq_;
692 };
693 
706 class TASKS_DLLAPI BoundedSpeedConstr : public ConstraintFunction<GenInequality>
707 {
708 public:
714  BoundedSpeedConstr(const std::vector<rbd::MultiBody> & mbs, int robotIndex, double timeStep);
715 
730  void addBoundedSpeed(const std::vector<rbd::MultiBody> & mbs,
731  const std::string & bodyName,
732  const Eigen::Vector3d & bodyPoint,
733  const Eigen::MatrixXd & dof,
734  const Eigen::VectorXd & speed);
735 
749  void addBoundedSpeed(const std::vector<rbd::MultiBody> & mbs,
750  const std::string & bodyName,
751  const Eigen::Vector3d & bodyPoint,
752  const Eigen::MatrixXd & dof,
753  const Eigen::VectorXd & lowerSpeed,
754  const Eigen::VectorXd & upperSpeed);
755 
762  bool removeBoundedSpeed(const std::string & bodyName);
763 
766 
768  std::size_t nrBoundedSpeeds() const;
769 
772 
773  // Constraint
774  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
775 
776  virtual void update(const std::vector<rbd::MultiBody> & mbs,
777  const std::vector<rbd::MultiBodyConfig> & mbc,
778  const SolverData & data) override;
779 
780  virtual std::string nameGenInEq() const override;
781  virtual std::string descGenInEq(const std::vector<rbd::MultiBody> & mb, int line) override;
782 
783  // Inequality Constraint
784  virtual int maxGenInEq() const override;
785 
786  virtual const Eigen::MatrixXd & AGenInEq() const override;
787  virtual const Eigen::VectorXd & LowerGenInEq() const override;
788  virtual const Eigen::VectorXd & UpperGenInEq() const override;
789 
790 private:
791  struct BoundedSpeedData
792  {
793  BoundedSpeedData(rbd::Jacobian j,
794  const Eigen::MatrixXd & d,
795  const Eigen::VectorXd & ls,
796  const Eigen::VectorXd & us,
797  const std::string & bName)
798  : jac(j), bodyPoint(j.point()), dof(d), lSpeed(ls), uSpeed(us), body(j.jointsPath().back()), bodyName(bName)
799  {
800  }
801 
802  rbd::Jacobian jac;
803  sva::PTransformd bodyPoint;
804  Eigen::MatrixXd dof;
805  Eigen::VectorXd lSpeed, uSpeed;
806  int body;
807  std::string bodyName;
808  };
809 
810 private:
811  void updateNrEq();
812 
813 private:
814  int robotIndex_, alphaDBegin_;
815  std::vector<BoundedSpeedData> cont_;
816 
817  Eigen::MatrixXd fullJac_;
818 
819  Eigen::MatrixXd A_;
820  Eigen::VectorXd lower_, upper_;
821 
822  int nrVars_;
823  double timeStep_;
824 };
825 
832 class TASKS_DLLAPI ImageConstr : public ConstraintFunction<Inequality>
833 {
834 public:
845  ImageConstr(const std::vector<rbd::MultiBody> & mbs,
846  int robotIndex,
847  const std::string & bName,
848  const sva::PTransformd & X_b_gaze,
849  double step,
850  double constrDirection = 1.);
851 
853  ImageConstr(const ImageConstr & rhs);
854 
856  ImageConstr(ImageConstr &&) = default;
857 
860 
863 
872  void setLimits(const Eigen::Vector2d & min,
873  const Eigen::Vector2d & max,
874  const double iPercent,
875  const double sPercent,
876  const double damping,
877  const double dampingOffsetPercent);
878 
885  int addPoint(const Eigen::Vector2d & point2d, const double depthEstimate);
886  int addPoint(const Eigen::Vector3d & point3d);
887 
894  void addPoint(const std::vector<rbd::MultiBody> & mbs,
895  const std::string & bName,
896  const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
897  void reset();
898  void updatePoint(const int pointId, const Eigen::Vector2d & point2d);
899  void updatePoint(const int pointId, const Eigen::Vector2d & point2d, const double depthEstimate);
900  void updatePoint(const int pointId, const Eigen::Vector3d & point3d);
901 
903  const rbd::MultiBodyConfig & mbc,
904  const SolverData & data,
905  const Eigen::Vector2d & point2d,
906  const double depth,
907  rbd::Jacobian & jac,
908  const int bodyIndex,
909  const sva::PTransformd & X_b_p,
910  Eigen::MatrixXd & fullJacobian,
911  Eigen::Vector2d & bCommonTerm);
912 
913  // Constraint
914  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
915 
916  virtual void update(const std::vector<rbd::MultiBody> & mbs,
917  const std::vector<rbd::MultiBodyConfig> & mbcs,
918  const SolverData & data) override;
919 
920  // In Inequality Constraint
921  virtual std::string nameInEq() const override;
922  virtual std::string descInEq(const std::vector<rbd::MultiBody> & mbs, int line) override;
923  virtual int nrInEq() const override;
924  virtual int maxInEq() const override;
925 
926  virtual const Eigen::MatrixXd & AInEq() const override;
927  virtual const Eigen::VectorXd & bInEq() const override;
928 
929 private:
930  struct PointData
931  {
932  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
933  PointData(const Eigen::Vector2d & pt, const double d);
934  Eigen::Vector2d point2d;
935  double depthEstimate;
936  };
937  struct RobotPointData
938  {
939  RobotPointData(const std::string & bName, const sva::PTransformd & X, const rbd::Jacobian & j);
940  std::string bName;
941  sva::PTransformd X_b_p;
942  rbd::Jacobian jac;
943  };
944 
945 private:
946  std::vector<PointData, Eigen::aligned_allocator<PointData>> dataVec_;
947  std::vector<RobotPointData> dataVecRob_;
948  int robotIndex_, bodyIndex_, alphaDBegin_;
949  int nrVars_;
950  double step_, accelFactor_;
951  int nrActivated_;
952 
953  rbd::Jacobian jac_;
954  sva::PTransformd X_b_gaze_;
955  std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_;
956  std::unique_ptr<Eigen::Matrix<double, 6, 1>> surfaceVelocity_;
957  std::unique_ptr<Eigen::Matrix<double, 1, 6>> L_Z_dot_;
958  std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_dot_;
959  std::unique_ptr<Eigen::Vector2d> speed_;
960  std::unique_ptr<Eigen::Vector2d> normalAcc_;
961  Eigen::MatrixXd jacMat_;
962  std::unique_ptr<Eigen::Vector2d> iDistMin_, iDistMax_, sDistMin_, sDistMax_;
963  double damping_, dampingOffset_, ineqInversion_, constrDirection_;
964  Eigen::MatrixXd AInEq_;
965  Eigen::VectorXd bInEq_;
966 };
967 
968 } // namespace qp
969 
970 } // namespace tasks
static PTransform< T > Identity()
Definition: QPConstr.h:707
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
virtual const Eigen::VectorXd & LowerGenInEq() const override
void resetBoundedSpeeds()
Remove all bounded speed constraint.
virtual const Eigen::MatrixXd & AGenInEq() const override
void addBoundedSpeed(const std::vector< rbd::MultiBody > &mbs, const std::string &bodyName, const Eigen::Vector3d &bodyPoint, const Eigen::MatrixXd &dof, const Eigen::VectorXd &lowerSpeed, const Eigen::VectorXd &upperSpeed)
std::size_t nrBoundedSpeeds() const
void updateBoundedSpeeds()
Reallocate A and b matrix.
void addBoundedSpeed(const std::vector< rbd::MultiBody > &mbs, const std::string &bodyName, const Eigen::Vector3d &bodyPoint, const Eigen::MatrixXd &dof, const Eigen::VectorXd &speed)
BoundedSpeedConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, double timeStep)
virtual std::string nameGenInEq() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
virtual std::string descGenInEq(const std::vector< rbd::MultiBody > &mb, int line) override
virtual const Eigen::VectorXd & UpperGenInEq() const override
bool removeBoundedSpeed(const std::string &bodyName)
virtual int maxGenInEq() const override
Definition: QPConstr.h:516
virtual const Eigen::MatrixXd & AInEq() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual int maxInEq() const override
Eigen::VectorXd & selector() noexcept
Definition: QPConstr.h:576
virtual std::string descInEq(const std::vector< rbd::MultiBody > &mbs, int line) override
virtual int nrInEq() const override
virtual const Eigen::VectorXd & bInEq() const override
void addPlane(int planeId, const Eigen::Vector3d &normal, double offset, double di, double ds, double damping, const Eigen::Vector3d &speed, const Eigen::Vector3d &normalDot, double dampingOff=0.)
CoMIncPlaneConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, double step)
const Eigen::VectorXd & selector() const noexcept
Definition: QPConstr.h:582
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
void reset()
Remove all plane.
std::size_t nrPlanes() const
void addPlane(int planeId, const Eigen::Vector3d &normal, double offset, double di, double ds, double damping, double dampingOff=0.)
bool rmPlane(int planeId)
virtual std::string nameInEq() const override
void updateNrPlanes()
Reallocate A and b matrix.
Definition: QPConstr.h:465
void updateNrCollisions()
Definition: QPConstr.h:495
std::size_t nrCollisions() const
Definition: QPConstr.h:493
bool rmCollision(int collId)
Definition: QPConstr.h:491
CollisionConstr(const std::vector< rbd::MultiBody > &mbs, double step)
const DistLimData & getCollisionData(int collId) const
Definition: QPConstr.h:497
void addCollision(const std::vector< rbd::MultiBody > &mbs, int collId, int r1Index, const std::string &r1BodyName, sch::S_Object *body1, const sva::PTransformd &X_op1_o1, int r2Index, const std::string &r2BodyName, sch::S_Object *body2, const sva::PTransformd &X_op2_o2, double di, double ds, double damping, double dampingOff=0., const Eigen::VectorXd &r1Selector=Eigen::VectorXd::Zero(0), const Eigen::VectorXd &r2Selector=Eigen::VectorXd::Zero(0))
Definition: QPConstr.h:470
Definition: QPSolver.h:164
Definition: QPConstr.h:152
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
DamperJointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const QBound &qBound, const AlphaBound &aBound, const AlphaDBound &aDBound, const AlphaDDBound &aDDBound, double interPercent, double securityPercent, double damperOffset, double step)
double computeDamping(double alpha, double dist, double iDist, double sDist)
compute damping that avoid speed jump
double computeDamper(double dist, double iDist, double sDist, double damping)
virtual std::string descBound(const std::vector< rbd::MultiBody > &mbs, int line) override
virtual const Eigen::VectorXd & Upper() const override
virtual const Eigen::VectorXd & Lower() const override
virtual std::string nameBound() const override
DamperJointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const QBound &qBound, const AlphaBound &aBound, const AlphaDBound &aDBound, double interPercent, double securityPercent, double damperOffset, double step)
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
DamperJointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const QBound &qBound, const AlphaBound &aBound, double interPercent, double securityPercent, double damperOffset, double step)
virtual int beginVar() const override
Definition: QPConstr.h:293
virtual const Eigen::VectorXd & bInEq() const override
void updateNrDistanceLimits()
Reallocate A and b matrix.
virtual std::string descInEq(const std::vector< rbd::MultiBody > &mbs, int line) override
std::size_t nrDistanceLimits() const
void addDistanceLimit(const std::vector< rbd::MultiBody > &mbs, int dlId, int r1Index, const std::string &r1BodyName, sch::S_Object *body1, const sva::PTransformd &X_op1_o1, int r2Index, const std::string &r2BodyName, sch::S_Object *body2, const sva::PTransformd &X_op2_o2, double di, double ds, double damping, double dampingOff=0., const Eigen::VectorXd &r1Selector=Eigen::VectorXd::Zero(0), const Eigen::VectorXd &r2Selector=Eigen::VectorXd::Zero(0))
virtual const Eigen::MatrixXd & AInEq() const override
virtual std::string nameInEq() const override
bool rmDistanceLimit(int dlId)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
DistanceConstr(const std::vector< rbd::MultiBody > &mbs, double step)
virtual int nrInEq() const override
void reset()
Remove all distance constraints.
virtual int maxInEq() const override
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
const DistLimData & getDistanceData(int dlId) const
Definition: QPConstr.h:649
virtual std::string descInEq(const std::vector< rbd::MultiBody > &mb, int line) override
virtual const Eigen::MatrixXd & AInEq() const override
void addGripper(const ContactId &cId, double torqueLimit, const Eigen::Vector3d &origin, const Eigen::Vector3d &axis)
virtual const Eigen::VectorXd & bInEq() const override
virtual void update(const std::vector< rbd::MultiBody > &mb, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
bool rmGripper(const ContactId &cId)
virtual int maxInEq() const override
virtual std::string nameInEq() const override
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mb, const SolverData &data) override
Definition: QPConstr.h:833
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
virtual const Eigen::VectorXd & bInEq() const override
void setLimits(const Eigen::Vector2d &min, const Eigen::Vector2d &max, const double iPercent, const double sPercent, const double damping, const double dampingOffsetPercent)
setLimits
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void computeComponents(const rbd::MultiBody &mb, const rbd::MultiBodyConfig &mbc, const SolverData &data, const Eigen::Vector2d &point2d, const double depth, rbd::Jacobian &jac, const int bodyIndex, const sva::PTransformd &X_b_p, Eigen::MatrixXd &fullJacobian, Eigen::Vector2d &bCommonTerm)
ImageConstr(const ImageConstr &rhs)
virtual std::string nameInEq() const override
void addPoint(const std::vector< rbd::MultiBody > &mbs, const std::string &bName, const sva::PTransformd &X_b_p=sva::PTransformd::Identity())
addPoint - overload for adding a self point
void updatePoint(const int pointId, const Eigen::Vector2d &point2d, const double depthEstimate)
void updatePoint(const int pointId, const Eigen::Vector3d &point3d)
ImageConstr & operator=(const ImageConstr &rhs)
virtual std::string descInEq(const std::vector< rbd::MultiBody > &mbs, int line) override
virtual int maxInEq() const override
virtual int nrInEq() const override
ImageConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bName, const sva::PTransformd &X_b_gaze, double step, double constrDirection=1.)
void updatePoint(const int pointId, const Eigen::Vector2d &point2d)
ImageConstr & operator=(ImageConstr &&)=default
int addPoint(const Eigen::Vector2d &point2d, const double depthEstimate)
addPoint
ImageConstr(ImageConstr &&)=default
int addPoint(const Eigen::Vector3d &point3d)
virtual const Eigen::MatrixXd & AInEq() const override
Definition: QPConstr.h:57
JointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, QBound bound, const AlphaDBound &aDBound, double step)
virtual std::string descBound(const std::vector< rbd::MultiBody > &mbs, int line) override
JointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, QBound bound, double step)
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
virtual const Eigen::VectorXd & Lower() const override
JointLimitsConstr(const std::vector< rbd::MultiBody > &mbs, int robotIndex, QBound bound, const AlphaDBound &aDBound, const AlphaDDBound &aDDBound, double step)
virtual std::string nameBound() const override
virtual int beginVar() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual const Eigen::VectorXd & Upper() const override
Definition: QPSolverData.h:28
TASKS_DLLAPI sch::Matrix4x4 tosch(const sva::PTransformd &t)
Convert a sch-core transformation matrix to a sva::PTransformd matrix.
Definition: GenQPUtils.h:19
Definition: Bounds.h:41
Definition: Bounds.h:59
Definition: Bounds.h:77
Definition: Bounds.h:23
Definition: QPContacts.h:50
Definition: QPConstr.h:399
double di
Definition: QPConstr.h:424
DistLimData(std::vector< BodyDistData > bcds, int dlId, sch::S_Object *body1, sch::S_Object *body2, double di, double ds, double damping, double dampingOff)
DistLimData(DistLimData &&)=default
double damping
Definition: QPConstr.h:425
Eigen::Vector3d normVecDist
Definition: QPConstr.h:423
DampingType
Definition: QPConstr.h:401
std::unique_ptr< sch::CD_Pair > pair
Definition: QPConstr.h:419
DampingType dampingType
Definition: QPConstr.h:428
DistLimData(const DistLimData &)=delete
DistLimData & operator=(const DistLimData &)=delete
Eigen::Vector3d p1
Definition: QPConstr.h:421
DistLimData & operator=(DistLimData &&)=default
int dlId
Definition: QPConstr.h:430
double dampingOff
Definition: QPConstr.h:429
std::vector< BodyDistData > bodies
Definition: QPConstr.h:426
Eigen::Vector3d p2
Definition: QPConstr.h:422
double distance
Definition: QPConstr.h:420