10 #include <Eigen/StdVector>
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_;
331 const std::string & r1BodyName,
335 const std::string & r2BodyName,
341 double dampingOff = 0.,
342 const Eigen::VectorXd & r1Selector = Eigen::VectorXd::Zero(0),
343 const Eigen::VectorXd & r2Selector = Eigen::VectorXd::Zero(0));
365 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
366 const std::vector<rbd::MultiBodyConfig> & mbcs,
370 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
376 virtual const Eigen::MatrixXd &
AInEq()
const override;
377 virtual const Eigen::VectorXd &
bInEq()
const override;
384 const std::string & bodyName,
387 const Eigen::VectorXd & selector);
393 std::string bodyName;
394 Eigen::VectorXd selector;
419 std::unique_ptr<sch::CD_Pair>
pair;
437 double computeDamping(
const std::vector<rbd::MultiBody> & mbs,
438 const std::vector<rbd::MultiBodyConfig> & mbcs,
440 const Eigen::Vector3d & normalVecDist,
444 std::vector<DistLimData> dataVec_;
446 int nrActivated_, totalAlphaD_;
448 Eigen::MatrixXd AInEq_;
449 Eigen::VectorXd bInEq_;
451 Eigen::MatrixXd fullJac_, distJac_;
467 [[deprecated(
"Use DistanceConstr instead.")]]
473 const std::string & r1BodyName,
477 const std::string & r2BodyName,
483 double dampingOff = 0.,
484 const Eigen::VectorXd & r1Selector = Eigen::VectorXd::Zero(0),
485 const Eigen::VectorXd & r2Selector = Eigen::VectorXd::Zero(0))
487 addDistanceLimit(mbs, collId, r1Index, r1BodyName, body1, X_op1_o1, r2Index, r2BodyName, body2, X_op2_o2, di, ds,
488 damping, dampingOff, r1Selector, r2Selector);
541 const Eigen::Vector3d & normal,
546 double dampingOff = 0.);
549 const Eigen::Vector3d & normal,
554 const Eigen::Vector3d & speed,
555 const Eigen::Vector3d & normalDot,
556 double dampingOff = 0.);
576 inline Eigen::VectorXd &
selector() noexcept {
return selector_; }
582 inline const Eigen::VectorXd &
selector() const noexcept {
return selector_; }
590 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
591 const std::vector<rbd::MultiBodyConfig> & mbcs,
595 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
601 virtual const Eigen::MatrixXd &
AInEq()
const override;
602 virtual const Eigen::VectorXd &
bInEq()
const override;
607 enum class DampingType
613 PlaneData(
int planeId,
614 const Eigen::Vector3d & normal,
620 const Eigen::Vector3d & speed,
621 const Eigen::Vector3d & normalDot);
622 Eigen::Vector3d normal;
623 Eigen::Vector3d normalDot;
629 DampingType dampingType;
631 Eigen::Vector3d speed;
635 int robotIndex_, alphaDBegin_;
636 std::vector<PlaneData> dataVec_;
640 std::vector<std::size_t> activated_;
643 Eigen::VectorXd selector_;
644 Eigen::MatrixXd AInEq_;
645 Eigen::VectorXd bInEq_;
655 const Eigen::Vector3d & origin,
656 const Eigen::Vector3d & axis);
663 virtual void update(
const std::vector<rbd::MultiBody> & mb,
664 const std::vector<rbd::MultiBodyConfig> & mbc,
668 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mb,
int line)
override;
673 virtual const Eigen::MatrixXd &
AInEq()
const override;
674 virtual const Eigen::VectorXd &
bInEq()
const override;
679 GripperData(
const ContactId & cId,
double tl,
const Eigen::Vector3d & o,
const Eigen::Vector3d & a);
683 Eigen::Vector3d origin;
684 Eigen::Vector3d axis;
688 std::vector<GripperData> dataVec_;
690 Eigen::MatrixXd AInEq_;
691 Eigen::VectorXd bInEq_;
731 const std::string & bodyName,
732 const Eigen::Vector3d & bodyPoint,
733 const Eigen::MatrixXd & dof,
734 const Eigen::VectorXd & speed);
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);
776 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
777 const std::vector<rbd::MultiBodyConfig> & mbc,
781 virtual std::string
descGenInEq(
const std::vector<rbd::MultiBody> & mb,
int line)
override;
786 virtual const Eigen::MatrixXd &
AGenInEq()
const override;
791 struct BoundedSpeedData
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)
805 Eigen::VectorXd lSpeed, uSpeed;
807 std::string bodyName;
814 int robotIndex_, alphaDBegin_;
815 std::vector<BoundedSpeedData> cont_;
817 Eigen::MatrixXd fullJac_;
820 Eigen::VectorXd lower_, upper_;
847 const std::string & bName,
850 double constrDirection = 1.);
873 const Eigen::Vector2d & max,
874 const double iPercent,
875 const double sPercent,
876 const double damping,
877 const double dampingOffsetPercent);
885 int addPoint(
const Eigen::Vector2d & point2d,
const double depthEstimate);
894 void addPoint(
const std::vector<rbd::MultiBody> & mbs,
895 const std::string & bName,
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);
905 const Eigen::Vector2d & point2d,
910 Eigen::MatrixXd & fullJacobian,
911 Eigen::Vector2d & bCommonTerm);
916 virtual void update(
const std::vector<rbd::MultiBody> & mbs,
917 const std::vector<rbd::MultiBodyConfig> & mbcs,
922 virtual std::string
descInEq(
const std::vector<rbd::MultiBody> & mbs,
int line)
override;
926 virtual const Eigen::MatrixXd &
AInEq()
const override;
927 virtual const Eigen::VectorXd &
bInEq()
const override;
932 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
933 PointData(
const Eigen::Vector2d & pt,
const double d);
934 Eigen::Vector2d point2d;
935 double depthEstimate;
937 struct RobotPointData
946 std::vector<PointData, Eigen::aligned_allocator<PointData>> dataVec_;
947 std::vector<RobotPointData> dataVecRob_;
948 int robotIndex_, bodyIndex_, alphaDBegin_;
950 double step_, accelFactor_;
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_;
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: 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