10 #include <Eigen/StdVector>
13 #include <RBDyn/CoM.h>
14 #include <RBDyn/Jacobian.h>
17 #include <sch/Matrix/SCH_Types.h>
44 TASKS_DLLAPI sch::Matrix4x4
tosch(
const sva::PTransformd & t);
98 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
99 const std::vector<rbd::MultiBodyConfig> & mbcs,
103 virtual std::string
descBound(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
108 virtual const Eigen::VectorXd &
Lower()
const override;
109 virtual const Eigen::VectorXd &
Upper()
const override;
112 int robotIndex_, alphaDBegin_, alphaDOffset_;
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_;
169 double securityPercent,
189 double securityPercent,
212 double securityPercent,
219 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
220 const std::vector<rbd::MultiBodyConfig> & mbcs,
224 virtual std::string
descBound(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
229 virtual const Eigen::VectorXd &
Lower()
const override;
230 virtual const Eigen::VectorXd &
Upper()
const override;
234 double computeDamper(
double dist,
double iDist,
double sDist,
double damping);
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.),
253 double minVel, maxVel;
262 int robotIndex_, alphaDBegin_;
263 std::vector<DampData> data_;
265 Eigen::VectorXd lower_, upper_;
266 Eigen::VectorXd alphaDLower_, alphaDUpper_;
267 Eigen::VectorXd alphaDDLower_, alphaDDUpper_;
268 Eigen::VectorXd prevAlphaD_;
327 const std::string & r1BodyName,
328 sch::S_Object * body1,
329 const sva::PTransformd & X_op1_o1,
331 const std::string & r2BodyName,
332 sch::S_Object * body2,
333 const sva::PTransformd & X_op2_o2,
337 double dampingOff = 0.,
338 const Eigen::VectorXd & r1Selector = Eigen::VectorXd::Zero(0),
339 const Eigen::VectorXd & r2Selector = Eigen::VectorXd::Zero(0));
361 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
362 const std::vector<rbd::MultiBodyConfig> & mbcs,
366 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
372 virtual const Eigen::MatrixXd &
AInEq()
const override;
373 virtual const Eigen::VectorXd &
bInEq()
const override;
378 BodyCollData(
const rbd::MultiBody & mb,
380 const std::string & bodyName,
381 sch::S_Object * hull,
382 const sva::PTransformd & X_op_o,
383 const Eigen::VectorXd & selector);
385 sch::S_Object * hull;
387 sva::PTransformd X_op_o;
389 std::string bodyName;
390 Eigen::VectorXd selector;
395 enum class DampingType
401 CollData(std::vector<BodyCollData> bcds,
403 sch::S_Object * body1,
404 sch::S_Object * body2,
409 CollData(CollData &&) =
default;
410 CollData(
const CollData &) =
delete;
411 CollData & operator=(
const CollData &) =
delete;
412 CollData & operator=(CollData &&) =
default;
414 std::unique_ptr<sch::CD_Pair> pair;
418 Eigen::Vector3d normVecDist;
421 std::vector<BodyCollData> bodies;
423 DampingType dampingType;
433 double computeDamping(
const std::vector<rbd::MultiBody> & mbs,
434 const std::vector<rbd::MultiBodyConfig> & mbcs,
436 const Eigen::Vector3d & normalVecDist,
440 std::vector<CollData> dataVec_;
442 int nrActivated_, totalAlphaD_;
444 Eigen::MatrixXd AInEq_;
445 Eigen::VectorXd bInEq_;
447 Eigen::MatrixXd fullJac_, distJac_;
496 const Eigen::Vector3d & normal,
501 double dampingOff = 0.);
504 const Eigen::Vector3d & normal,
509 const Eigen::Vector3d & speed,
510 const Eigen::Vector3d & normalDot,
511 double dampingOff = 0.);
531 inline Eigen::VectorXd &
selector() noexcept {
return selector_; }
537 inline const Eigen::VectorXd &
selector() const noexcept {
return selector_; }
545 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
546 const std::vector<rbd::MultiBodyConfig> & mbcs,
550 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
556 virtual const Eigen::MatrixXd &
AInEq()
const override;
557 virtual const Eigen::VectorXd &
bInEq()
const override;
562 enum class DampingType
568 PlaneData(
int planeId,
569 const Eigen::Vector3d & normal,
575 const Eigen::Vector3d & speed,
576 const Eigen::Vector3d & normalDot);
577 Eigen::Vector3d normal;
578 Eigen::Vector3d normalDot;
584 DampingType dampingType;
586 Eigen::Vector3d speed;
590 int robotIndex_, alphaDBegin_;
591 std::vector<PlaneData> dataVec_;
595 std::vector<std::size_t> activated_;
597 rbd::CoMJacobian jacCoM_;
598 Eigen::VectorXd selector_;
599 Eigen::MatrixXd AInEq_;
600 Eigen::VectorXd bInEq_;
610 const Eigen::Vector3d & origin,
611 const Eigen::Vector3d & axis);
618 virtual void update(
const std::vector<rbd::MultiBody> & mb,
619 const std::vector<rbd::MultiBodyConfig> & mbc,
623 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mb,
int line)
override;
628 virtual const Eigen::MatrixXd &
AInEq()
const override;
629 virtual const Eigen::VectorXd &
bInEq()
const override;
634 GripperData(
const ContactId & cId,
double tl,
const Eigen::Vector3d & o,
const Eigen::Vector3d & a);
638 Eigen::Vector3d origin;
639 Eigen::Vector3d axis;
643 std::vector<GripperData> dataVec_;
645 Eigen::MatrixXd AInEq_;
646 Eigen::VectorXd bInEq_;
686 const std::string & bodyName,
687 const Eigen::Vector3d & bodyPoint,
688 const Eigen::MatrixXd & dof,
689 const Eigen::VectorXd & speed);
705 const std::string & bodyName,
706 const Eigen::Vector3d & bodyPoint,
707 const Eigen::MatrixXd & dof,
708 const Eigen::VectorXd & lowerSpeed,
709 const Eigen::VectorXd & upperSpeed);
731 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
732 const std::vector<rbd::MultiBodyConfig> & mbc,
736 virtual std::string
descGenInEq(
const std::vector<rbd::MultiBody> & mb,
int line)
override;
741 virtual const Eigen::MatrixXd &
AGenInEq()
const override;
746 struct BoundedSpeedData
748 BoundedSpeedData(rbd::Jacobian j,
749 const Eigen::MatrixXd & d,
750 const Eigen::VectorXd & ls,
751 const Eigen::VectorXd & us,
752 const std::string & bName)
753 : jac(j), bodyPoint(j.point()), dof(d), lSpeed(ls), uSpeed(us), body(j.jointsPath().back()), bodyName(bName)
758 sva::PTransformd bodyPoint;
760 Eigen::VectorXd lSpeed, uSpeed;
762 std::string bodyName;
769 int robotIndex_, alphaDBegin_;
770 std::vector<BoundedSpeedData> cont_;
772 Eigen::MatrixXd fullJac_;
775 Eigen::VectorXd lower_, upper_;
802 const std::string & bName,
803 const sva::PTransformd & X_b_gaze,
805 double constrDirection = 1.);
828 const Eigen::Vector2d & max,
829 const double iPercent,
830 const double sPercent,
831 const double damping,
832 const double dampingOffsetPercent);
840 int addPoint(
const Eigen::Vector2d & point2d,
const double depthEstimate);
849 void addPoint(
const std::vector<rbd::MultiBody> & mbs,
850 const std::string & bName,
851 const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
853 void updatePoint(
const int pointId,
const Eigen::Vector2d & point2d);
854 void updatePoint(
const int pointId,
const Eigen::Vector2d & point2d,
const double depthEstimate);
855 void updatePoint(
const int pointId,
const Eigen::Vector3d & point3d);
858 const rbd::MultiBodyConfig & mbc,
860 const Eigen::Vector2d & point2d,
864 const sva::PTransformd & X_b_p,
865 Eigen::MatrixXd & fullJacobian,
866 Eigen::Vector2d & bCommonTerm);
871 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
872 const std::vector<rbd::MultiBodyConfig> & mbcs,
877 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
881 virtual const Eigen::MatrixXd &
AInEq()
const override;
882 virtual const Eigen::VectorXd &
bInEq()
const override;
887 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
888 PointData(
const Eigen::Vector2d & pt,
const double d);
889 Eigen::Vector2d point2d;
890 double depthEstimate;
892 struct RobotPointData
894 RobotPointData(
const std::string & bName,
const sva::PTransformd & X,
const rbd::Jacobian & j);
896 sva::PTransformd X_b_p;
901 std::vector<PointData, Eigen::aligned_allocator<PointData>> dataVec_;
902 std::vector<RobotPointData> dataVecRob_;
903 int robotIndex_, bodyIndex_, alphaDBegin_;
905 double step_, accelFactor_;
909 sva::PTransformd X_b_gaze_;
910 std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_;
911 std::unique_ptr<Eigen::Matrix<double, 6, 1>> surfaceVelocity_;
912 std::unique_ptr<Eigen::Matrix<double, 1, 6>> L_Z_dot_;
913 std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_dot_;
914 std::unique_ptr<Eigen::Vector2d> speed_;
915 std::unique_ptr<Eigen::Vector2d> normalAcc_;
916 Eigen::MatrixXd jacMat_;
917 std::unique_ptr<Eigen::Vector2d> iDistMin_, iDistMax_, sDistMin_, sDistMax_;
918 double damping_, dampingOffset_, ineqInversion_, constrDirection_;
919 Eigen::MatrixXd AInEq_;
920 Eigen::VectorXd bInEq_;
Definition: QPConstr.h:662
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:471
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:531
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:537
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:289
void updateNrCollisions()
Reallocate A and b matrix.
virtual int nrInEq() const override
virtual const Eigen::VectorXd & bInEq() const override
virtual std::string descInEq(const std::vector< rbd::MultiBody > &mbs, int line) override
virtual const Eigen::MatrixXd & AInEq() const override
std::size_t nrCollisions() const
bool rmCollision(int collId)
CollisionConstr(const std::vector< rbd::MultiBody > &mbs, double step)
virtual std::string nameInEq() const override
void reset()
Remove all collision constraints.
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))
virtual int maxInEq() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
const CollData & getCollisionData(int collId) const
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
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:604
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:788
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
Definition: QPConstr.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