Tasks  1.9.1
QPTasks.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2022 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 #include <cassert>
9 // std
10 #include <array>
11 
12 // Eigen
13 #include <Eigen/Core>
14 
15 // Tasks
16 #include "QPMotionConstr.h"
17 #include "QPSolver.h"
18 #include "Tasks.h"
19 
20 // forward declaration
21 // RBDyn
22 namespace rbd
23 {
24 class MultiBody;
25 struct MultiBodyConfig;
26 } // namespace rbd
27 
28 namespace tasks
29 {
30 
31 namespace qp
32 {
33 
34 class TASKS_DLLAPI SetPointTaskCommon : public Task
35 {
36 public:
37  SetPointTaskCommon(const std::vector<rbd::MultiBody> & mbs, int robotIndex, HighLevelTask * hlTask, double weight);
38  SetPointTaskCommon(const std::vector<rbd::MultiBody> & mbs,
39  int robotIndex,
40  HighLevelTask * hlTask,
41  const Eigen::VectorXd & dimWeight,
42  double weight);
43 
44  virtual std::pair<int, int> begin() const override { return std::make_pair(alphaDBegin_, alphaDBegin_); }
45 
46  void dimWeight(const Eigen::VectorXd & dim);
47 
48  const Eigen::VectorXd & dimWeight() const { return dimWeight_; }
49 
50  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
51 
52  virtual const Eigen::MatrixXd & Q() const override;
53  virtual const Eigen::VectorXd & C() const override;
54 
55 protected:
56  void computeQC(Eigen::VectorXd & error);
57 
58 protected:
60  Eigen::VectorXd error_;
61 
62 private:
63  Eigen::VectorXd dimWeight_;
64  int robotIndex_, alphaDBegin_;
65 
66  Eigen::MatrixXd Q_;
67  Eigen::VectorXd C_;
68  // cache
69  Eigen::MatrixXd preQ_;
70  Eigen::VectorXd preC_;
71 };
72 
73 class TASKS_DLLAPI SetPointTask : public SetPointTaskCommon
74 {
75 public:
76  SetPointTask(const std::vector<rbd::MultiBody> & mbs,
77  int robotIndex,
78  HighLevelTask * hlTask,
79  double stiffness,
80  double weight);
81 
82  SetPointTask(const std::vector<rbd::MultiBody> & mbs,
83  int robotIndex,
84  HighLevelTask * hlTask,
85  double stiffness,
86  const Eigen::VectorXd & dimWeight,
87  double weight);
88 
89  double stiffness() const { return stiffness_; }
90 
91  void stiffness(double stiffness);
92 
93  virtual void update(const std::vector<rbd::MultiBody> & mbs,
94  const std::vector<rbd::MultiBodyConfig> & mbcs,
95  const SolverData & data) override;
96 
97 private:
98  double stiffness_, stiffnessSqrt_;
99 };
100 
101 class TASKS_DLLAPI TrackingTask : public SetPointTaskCommon
102 {
103 public:
104  TrackingTask(const std::vector<rbd::MultiBody> & mbs,
105  int robotIndex,
106  HighLevelTask * hlTask,
107  double gainPos,
108  double gainVel,
109  double weight);
110 
111  TrackingTask(const std::vector<rbd::MultiBody> & mbs,
112  int robotIndex,
113  HighLevelTask * hlTask,
114  double gainPos,
115  double gainVel,
116  const Eigen::VectorXd & dimWeight,
117  double weight);
118 
119  void setGains(double gainPos, double gainVel);
120 
121  void errorPos(const Eigen::VectorXd & errorPos);
122  void errorVel(const Eigen::VectorXd & errorVel);
123  void refAccel(const Eigen::VectorXd & refAccel);
124 
125  virtual void update(const std::vector<rbd::MultiBody> & mbs,
126  const std::vector<rbd::MultiBodyConfig> & mbcs,
127  const SolverData & data) override;
128 
129 private:
130  double gainPos_, gainVel_;
131  Eigen::VectorXd errorPos_, errorVel_, refAccel_;
132 };
133 
134 class TASKS_DLLAPI TrajectoryTask : public SetPointTaskCommon
135 {
136 public:
137  TrajectoryTask(const std::vector<rbd::MultiBody> & mbs,
138  int robotIndex,
139  HighLevelTask * hlTask,
140  double gainPos,
141  double gainVel,
142  double weight);
143 
144  TrajectoryTask(const std::vector<rbd::MultiBody> & mbs,
145  int robotIndex,
146  HighLevelTask * hlTask,
147  double gainPos,
148  double gainVel,
149  const Eigen::VectorXd & dimWeight,
150  double weight);
151 
152  void setGains(double gainPos, double gainVel);
153  void setGains(const Eigen::VectorXd & stiffness, const Eigen::VectorXd & damping);
154  void stiffness(double gainPos);
155  void stiffness(const Eigen::VectorXd & stiffness);
156  const Eigen::VectorXd & stiffness() const;
157  void damping(double gainVel);
158  void damping(const Eigen::VectorXd & damping);
159  const Eigen::VectorXd & damping() const;
160 
161  void refVel(const Eigen::VectorXd & refVel);
162  const Eigen::VectorXd & refVel() const;
163  void refAccel(const Eigen::VectorXd & refAccel);
164  const Eigen::VectorXd & refAccel() const;
165 
166  void update(const std::vector<rbd::MultiBody> & mbs,
167  const std::vector<rbd::MultiBodyConfig> & mbcs,
168  const SolverData & data) override;
169 
170 private:
171  Eigen::VectorXd stiffness_, damping_;
172  Eigen::VectorXd refVel_, refAccel_;
173 };
174 
176 class TASKS_DLLAPI PIDTask : public SetPointTaskCommon
177 {
178 public:
179  PIDTask(const std::vector<rbd::MultiBody> & mbs,
180  int robotIndex,
181  HighLevelTask * hlTask,
182  double P,
183  double I,
184  double D,
185  double weight);
186 
187  PIDTask(const std::vector<rbd::MultiBody> & mbs,
188  int robotIndex,
189  HighLevelTask * hlTask,
190  double P,
191  double I,
192  double D,
193  const Eigen::VectorXd & dimWeight,
194  double weight);
195 
196  double P() const;
197  void P(double p);
198  double I() const;
199  void I(double i);
200  double D() const;
201  void D(double d);
202 
203  void error(const Eigen::VectorXd & err);
204  void errorD(const Eigen::VectorXd & errD);
205  void errorI(const Eigen::VectorXd & errI);
206 
207  virtual void update(const std::vector<rbd::MultiBody> & mbs,
208  const std::vector<rbd::MultiBodyConfig> & mbcs,
209  const SolverData & data) override;
210 
211 private:
212  double P_, I_, D_;
213  Eigen::VectorXd error_, errorD_, errorI_;
214 };
215 
216 class TASKS_DLLAPI TargetObjectiveTask : public Task
217 {
218 public:
219  TargetObjectiveTask(const std::vector<rbd::MultiBody> & mbs,
220  int robotIndex,
221  HighLevelTask * hlTask,
222  double timeStep,
223  double duration,
224  const Eigen::VectorXd & objDot,
225  double weight);
226 
227  TargetObjectiveTask(const std::vector<rbd::MultiBody> & mbs,
228  int robotIndex,
229  HighLevelTask * hlTask,
230  double timeStep,
231  double duration,
232  const Eigen::VectorXd & objDot,
233  const Eigen::VectorXd & dimWeight,
234  double weight);
235 
236  double duration() const;
237  void duration(double d);
238 
239  int iter() const { return iter_; }
240  void iter(int i) { iter_ = i; }
241 
242  int nrIter() const { return nrIter_; }
243  void nrIter(int i) { nrIter_ = i; }
244 
245  const Eigen::VectorXd & objDot() const { return objDot_; }
246  void objDot(const Eigen::VectorXd & o) { objDot_ = o; }
247 
248  const Eigen::VectorXd & dimWeight() const { return dimWeight_; }
249  void dimWeight(const Eigen::VectorXd & o) { dimWeight_ = o; }
250 
251  const Eigen::VectorXd & phi() const { return phi_; }
252  const Eigen::VectorXd & psi() const { return psi_; }
253 
254  virtual std::pair<int, int> begin() const override { return std::make_pair(alphaDBegin_, alphaDBegin_); }
255 
256  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
257  virtual void update(const std::vector<rbd::MultiBody> & mbs,
258  const std::vector<rbd::MultiBodyConfig> & mbcs,
259  const SolverData & data) override;
260 
261  virtual const Eigen::MatrixXd & Q() const override;
262  virtual const Eigen::VectorXd & C() const override;
263 
264 private:
265  HighLevelTask * hlTask_;
266 
267  int iter_, nrIter_;
268  double dt_;
269  Eigen::VectorXd objDot_;
270  Eigen::VectorXd dimWeight_;
271  int robotIndex_, alphaDBegin_;
272 
273  Eigen::VectorXd phi_, psi_;
274 
275  Eigen::MatrixXd Q_;
276  Eigen::VectorXd C_;
277  // cache
278  Eigen::MatrixXd preQ_;
279  Eigen::VectorXd CVecSum_, preC_;
280 };
281 
282 class TASKS_DLLAPI JointsSelector : public HighLevelTask
283 {
284 public:
285  static JointsSelector ActiveJoints(const std::vector<rbd::MultiBody> & mbs,
286  int robotIndex,
287  HighLevelTask * hl,
288  const std::vector<std::string> & activeJointsName,
289  const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {});
290  static JointsSelector UnactiveJoints(const std::vector<rbd::MultiBody> & mbs,
291  int robotIndex,
292  HighLevelTask * hl,
293  const std::vector<std::string> & unactiveJointsName,
294  const std::map<std::string, std::vector<std::array<int, 2>>> & unactiveDofs = {});
295 
296 public:
298  { int posInDof, dof; };
299 
300 public:
301  JointsSelector(const std::vector<rbd::MultiBody> & mbs,
302  int robotIndex,
303  HighLevelTask * hl,
304  const std::vector<std::string> & selectedJointsName,
305  const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {});
306 
307  const std::vector<SelectedData> selectedJoints() const { return selectedJoints_; }
308 
309  virtual int dim() override;
310  virtual void update(const std::vector<rbd::MultiBody> & mbs,
311  const std::vector<rbd::MultiBodyConfig> & mbcs,
312  const SolverData & data) override;
313 
314  virtual const Eigen::MatrixXd & jac() const override;
315  virtual const Eigen::VectorXd & eval() const override;
316  virtual const Eigen::VectorXd & speed() const override;
317  virtual const Eigen::VectorXd & normalAcc() const override;
318 
319 private:
320  Eigen::MatrixXd jac_;
321  std::vector<SelectedData> selectedJoints_;
322  HighLevelTask * hl_;
323 };
324 
326 {
328  JointStiffness(const std::string & jName, double stif) : jointName(jName), stiffness(stif) {}
329 
330  std::string jointName;
331  double stiffness;
332 };
333 
335 {
337  JointGains(const std::string & jName, double stif) : jointName(jName), stiffness(stif)
338  { damping = 2. * std::sqrt(stif); }
339 
340  JointGains(const std::string & jName, double stif, double damp) : jointName(jName), stiffness(stif), damping(damp) {}
341 
342  std::string jointName;
344 };
345 
346 class TASKS_DLLAPI TorqueTask : public Task
347 {
348 public:
349  TorqueTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const TorqueBound & tb, double weight);
350 
351  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
352  int robotIndex,
353  const TorqueBound & tb,
354  const Eigen::VectorXd & jointSelect,
355  double weight);
356 
357  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
358  int robotIndex,
359  const TorqueBound & tb,
360  const std::string & efName,
361  double weight);
362 
363  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
364  int robotIndex,
365  const TorqueBound & tb,
366  const TorqueDBound & tdb,
367  double dt,
368  double weight);
369 
370  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
371  int robotIndex,
372  const TorqueBound & tb,
373  const TorqueDBound & tdb,
374  double dt,
375  const Eigen::VectorXd & jointSelect,
376  double weight);
377 
378  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
379  int robotIndex,
380  const TorqueBound & tb,
381  const TorqueDBound & tdb,
382  double dt,
383  const std::string & efName,
384  double weight);
385 
386  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
387  virtual void update(const std::vector<rbd::MultiBody> & mbs,
388  const std::vector<rbd::MultiBodyConfig> & mbcs,
389  const SolverData & data) override;
390 
391  virtual std::pair<int, int> begin() const override { return std::make_pair(0, 0); }
392 
393  virtual const Eigen::MatrixXd & Q() const override { return Q_; }
394 
395  virtual const Eigen::VectorXd & C() const override { return C_; }
396 
397  virtual const Eigen::VectorXd & jointSelect() const { return jointSelector_; }
398 
399 private:
400  int robotIndex_;
401  int alphaDBegin_, lambdaBegin_;
402  MotionConstr motionConstr;
403  Eigen::VectorXd jointSelector_;
404  Eigen::MatrixXd Q_;
405  Eigen::VectorXd C_;
406 };
407 
408 class TASKS_DLLAPI PostureTask : public Task
409 {
410 public:
411  PostureTask(const std::vector<rbd::MultiBody> & mbs,
412  int robotIndex,
413  std::vector<std::vector<double>> q,
414  double stiffness,
415  double weight);
416 
417  tasks::PostureTask & task() { return pt_; }
418 
419  void posture(std::vector<std::vector<double>> q) { pt_.posture(q); }
420 
421  const std::vector<std::vector<double>> posture() const { return pt_.posture(); }
422 
423  double stiffness() const { return stiffness_; }
424 
425  double damping() const { return damping_; }
426 
427  void stiffness(double stiffness);
428 
429  void gains(double stiffness);
430  void gains(double stiffness, double damping);
431 
432  void jointsStiffness(const std::vector<rbd::MultiBody> & mbs, const std::vector<JointStiffness> & jsv);
433 
434  void jointsGains(const std::vector<rbd::MultiBody> & mbs, const std::vector<JointGains> & jgv);
435 
436  virtual std::pair<int, int> begin() const override { return std::make_pair(alphaDBegin_, alphaDBegin_); }
437 
438  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
439  virtual void update(const std::vector<rbd::MultiBody> & mbs,
440  const std::vector<rbd::MultiBodyConfig> & mbcs,
441  const SolverData & data) override;
442 
443  virtual const Eigen::MatrixXd & Q() const override;
444  virtual const Eigen::VectorXd & C() const override;
445 
446  const Eigen::VectorXd & eval() const;
447 
448  inline void refVel(const Eigen::VectorXd & refVel) noexcept { refVel_ = refVel; }
449  inline const Eigen::VectorXd & refVel() const noexcept { return refVel_; }
450  inline void refAccel(const Eigen::VectorXd & refAccel) noexcept
451  {
452  assert(refAccel.size() == refAccel_.size());
453  refAccel_ = refAccel;
454  }
455  inline const Eigen::VectorXd & refAccel() const noexcept { return refAccel_; }
456 
457  inline const Eigen::VectorXd & dimWeight() const noexcept { return dimWeight_; }
458 
459  inline void dimWeight(const Eigen::VectorXd & dimW) noexcept
460  {
461  assert(dimW.size() == dimWeight_.size());
462  dimWeight_ = dimW;
463  }
464 
465 private:
466  struct JointData
467  {
468  double stiffness, damping;
469  int start, size;
470  };
471 
472 private:
473  tasks::PostureTask pt_;
474 
475  double stiffness_;
476  double damping_;
477  int robotIndex_, alphaDBegin_;
478 
479  std::vector<JointData> jointDatas_;
480 
481  Eigen::MatrixXd Q_;
482  Eigen::VectorXd C_;
483  Eigen::VectorXd alphaVec_;
484  Eigen::VectorXd refVel_, refAccel_;
485  Eigen::VectorXd dimWeight_;
486 };
487 
488 class TASKS_DLLAPI PositionTask : public HighLevelTask
489 {
490 public:
491  PositionTask(const std::vector<rbd::MultiBody> & mbs,
492  int robotIndex,
493  const std::string & bodyName,
494  const Eigen::Vector3d & pos,
495  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
496 
497  tasks::PositionTask & task() { return pt_; }
498 
499  void position(const Eigen::Vector3d & pos) { pt_.position(pos); }
500 
501  const Eigen::Vector3d & position() const { return pt_.position(); }
502 
503  void bodyPoint(const Eigen::Vector3d & point) { pt_.bodyPoint(point); }
504 
505  const Eigen::Vector3d & bodyPoint() const { return pt_.bodyPoint(); }
506 
507  virtual int dim() override;
508  virtual void update(const std::vector<rbd::MultiBody> & mb,
509  const std::vector<rbd::MultiBodyConfig> & mbc,
510  const SolverData & data) override;
511 
512  virtual const Eigen::MatrixXd & jac() const override;
513  virtual const Eigen::VectorXd & eval() const override;
514  virtual const Eigen::VectorXd & speed() const override;
515  virtual const Eigen::VectorXd & normalAcc() const override;
516 
517 private:
519  int robotIndex_;
520 };
521 
522 class TASKS_DLLAPI OrientationTask : public HighLevelTask
523 {
524 public:
525  OrientationTask(const std::vector<rbd::MultiBody> & mbs,
526  int robodIndex,
527  const std::string & bodyName,
528  const Eigen::Quaterniond & ori);
529  OrientationTask(const std::vector<rbd::MultiBody> & mbs,
530  int robodIndex,
531  const std::string & bodyName,
532  const Eigen::Matrix3d & ori);
533 
534  tasks::OrientationTask & task() { return ot_; }
535 
536  void orientation(const Eigen::Quaterniond & ori) { ot_.orientation(ori); }
537 
538  void orientation(const Eigen::Matrix3d & ori) { ot_.orientation(ori); }
539 
540  const Eigen::Matrix3d & orientation() const { return ot_.orientation(); }
541 
542  virtual int dim() override;
543  virtual void update(const std::vector<rbd::MultiBody> & mbs,
544  const std::vector<rbd::MultiBodyConfig> & mbcs,
545  const SolverData & data) override;
546 
547  virtual const Eigen::MatrixXd & jac() const override;
548  virtual const Eigen::VectorXd & eval() const override;
549  virtual const Eigen::VectorXd & speed() const override;
550  virtual const Eigen::VectorXd & normalAcc() const override;
551 
552 private:
554  int robotIndex_;
555 };
556 
557 template<typename transform_task_t>
559 {
560 public:
561  TransformTaskCommon(const std::vector<rbd::MultiBody> & mbs,
562  int robotIndex,
563  const std::string & bodyName,
564  const sva::PTransformd & X_0_t,
566  : tt_(mbs[robotIndex], bodyName, X_0_t, X_b_p), robotIndex_(robotIndex)
567  {
568  }
569 
570  transform_task_t & task() { return tt_; }
571 
572  void target(const sva::PTransformd & X_0_t) { tt_.target(X_0_t); }
573 
574  const sva::PTransformd & target() const { return tt_.target(); }
575 
576  void X_b_p(const sva::PTransformd & X_b_p) { tt_.X_b_p(X_b_p); }
577 
578  const sva::PTransformd & X_b_p() const { return tt_.X_b_p(); }
579 
580  virtual int dim() override { return 6; }
581 
582  virtual const Eigen::MatrixXd & jac() const override { return tt_.jac(); }
583 
584  virtual const Eigen::VectorXd & eval() const override { return tt_.eval(); }
585 
586  virtual const Eigen::VectorXd & speed() const override { return tt_.speed(); }
587 
588  virtual const Eigen::VectorXd & normalAcc() const override { return tt_.normalAcc(); }
589 
590 protected:
591  transform_task_t tt_;
593 };
594 
596 class TASKS_DLLAPI SurfaceTransformTask : public TransformTaskCommon<tasks::SurfaceTransformTask>
597 {
598 public:
599  SurfaceTransformTask(const std::vector<rbd::MultiBody> & mbs,
600  int robotIndex,
601  const std::string & bodyName,
602  const sva::PTransformd & X_0_t,
603  const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
604 
605  virtual void update(const std::vector<rbd::MultiBody> & mb,
606  const std::vector<rbd::MultiBodyConfig> & mbc,
607  const SolverData & data) override;
608 };
609 
611 class TASKS_DLLAPI TransformTask : public TransformTaskCommon<tasks::TransformTask>
612 {
613 public:
614  TransformTask(const std::vector<rbd::MultiBody> & mbs,
615  int robotIndex,
616  const std::string & bodyName,
617  const sva::PTransformd & X_0_t,
619  const Eigen::Matrix3d & E_0_c = Eigen::Matrix3d::Identity());
620 
621  void E_0_c(const Eigen::Matrix3d & E_0_c);
622  const Eigen::Matrix3d & E_0_c() const;
623 
624  virtual void update(const std::vector<rbd::MultiBody> & mb,
625  const std::vector<rbd::MultiBodyConfig> & mbc,
626  const SolverData & data) override;
627 };
628 
629 class TASKS_DLLAPI SurfaceOrientationTask : public HighLevelTask
630 {
631 public:
632  SurfaceOrientationTask(const std::vector<rbd::MultiBody> & mbs,
633  int robodIndex,
634  const std::string & bodyName,
635  const Eigen::Quaterniond & ori,
636  const sva::PTransformd & X_b_s);
637  SurfaceOrientationTask(const std::vector<rbd::MultiBody> & mbs,
638  int robodIndex,
639  const std::string & bodyName,
640  const Eigen::Matrix3d & ori,
641  const sva::PTransformd & X_b_s);
642 
644 
645  void orientation(const Eigen::Quaterniond & ori) { ot_.orientation(ori); }
646 
647  void orientation(const Eigen::Matrix3d & ori) { ot_.orientation(ori); }
648 
649  const Eigen::Matrix3d & orientation() const { return ot_.orientation(); }
650 
651  virtual int dim() override;
652  virtual void update(const std::vector<rbd::MultiBody> & mbs,
653  const std::vector<rbd::MultiBodyConfig> & mbcs,
654  const SolverData & data) override;
655 
656  virtual const Eigen::MatrixXd & jac() const override;
657  virtual const Eigen::VectorXd & eval() const override;
658  virtual const Eigen::VectorXd & speed() const override;
659  virtual const Eigen::VectorXd & normalAcc() const override;
660 
661 private:
663  int robotIndex_;
664 };
665 
666 class TASKS_DLLAPI GazeTask : public HighLevelTask
667 {
668 public:
669  GazeTask(const std::vector<rbd::MultiBody> & mbs,
670  int robotIndex,
671  const std::string & bodyName,
672  const Eigen::Vector2d & point2d,
673  double depthEstimate,
674  const sva::PTransformd & X_b_gaze,
675  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
676  GazeTask(const std::vector<rbd::MultiBody> & mbs,
677  int robotIndex,
678  const std::string & bodyName,
679  const Eigen::Vector3d & point3d,
680  const sva::PTransformd & X_b_gaze,
681  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
682 
683  tasks::GazeTask & task() { return gazet_; }
684 
685  void error(const Eigen::Vector2d & point2d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero())
686  { gazet_.error(point2d, point2d_ref); }
687 
688  void error(const Eigen::Vector3d & point3d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero())
689  { gazet_.error(point3d, point2d_ref); }
690 
691  virtual int dim() override;
692  virtual void update(const std::vector<rbd::MultiBody> & mbs,
693  const std::vector<rbd::MultiBodyConfig> & mbcs,
694  const SolverData & data) override;
695 
696  virtual const Eigen::MatrixXd & jac() const override;
697  virtual const Eigen::VectorXd & eval() const override;
698  virtual const Eigen::VectorXd & speed() const override;
699  virtual const Eigen::VectorXd & normalAcc() const override;
700 
701 private:
702  tasks::GazeTask gazet_;
703  int robotIndex_;
704 };
705 
706 class TASKS_DLLAPI PositionBasedVisServoTask : public HighLevelTask
707 {
708 public:
709  PositionBasedVisServoTask(const std::vector<rbd::MultiBody> & mbs,
710  int robotIndex,
711  const std::string & bodyName,
712  const sva::PTransformd & X_t_s,
713  const sva::PTransformd & X_b_s = sva::PTransformd::Identity());
714 
715  tasks::PositionBasedVisServoTask & task() { return pbvst_; }
716 
717  void error(const sva::PTransformd & X_t_s) { pbvst_.error(X_t_s); }
718 
719  virtual int dim() override;
720  virtual void update(const std::vector<rbd::MultiBody> & mbs,
721  const std::vector<rbd::MultiBodyConfig> & mbcs,
722  const SolverData & data) override;
723 
724  virtual const Eigen::MatrixXd & jac() const override;
725  virtual const Eigen::VectorXd & eval() const override;
726  virtual const Eigen::VectorXd & speed() const override;
727  virtual const Eigen::VectorXd & normalAcc() const override;
728 
729 private:
731  int robotIndex_;
732 };
733 
734 class TASKS_DLLAPI CoMTask : public HighLevelTask
735 {
736 public:
737  CoMTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const Eigen::Vector3d & com);
738  CoMTask(const std::vector<rbd::MultiBody> & mbs,
739  int robotIndex,
740  const Eigen::Vector3d & com,
741  std::vector<double> weight);
742 
743  tasks::CoMTask & task() { return ct_; }
744 
745  void com(const Eigen::Vector3d & com) { ct_.com(com); }
746 
747  const Eigen::Vector3d & com() const { return ct_.com(); }
748 
749  const Eigen::Vector3d & actual() const { return ct_.actual(); }
750 
751  void updateInertialParameters(const std::vector<rbd::MultiBody> & mbs);
752 
753  virtual int dim() override;
754  virtual void update(const std::vector<rbd::MultiBody> & mbs,
755  const std::vector<rbd::MultiBodyConfig> & mbcs,
756  const SolverData & data) override;
757 
758  virtual const Eigen::MatrixXd & jac() const override;
759  virtual const Eigen::VectorXd & eval() const override;
760  virtual const Eigen::VectorXd & speed() const override;
761  virtual const Eigen::VectorXd & normalAcc() const override;
762 
763 private:
764  tasks::CoMTask ct_;
765  int robotIndex_;
766 };
767 
768 class TASKS_DLLAPI MultiCoMTask : public Task
769 {
770 public:
771  MultiCoMTask(const std::vector<rbd::MultiBody> & mb,
772  std::vector<int> robotIndexes,
773  const Eigen::Vector3d & com,
774  double stiffness,
775  double weight);
776  MultiCoMTask(const std::vector<rbd::MultiBody> & mb,
777  std::vector<int> robotIndexes,
778  const Eigen::Vector3d & com,
779  double stiffness,
780  const Eigen::Vector3d & dimWeight,
781  double weight);
782 
783  tasks::MultiCoMTask & task() { return mct_; }
784 
785  void com(const Eigen::Vector3d & com) { mct_.com(com); }
786 
787  const Eigen::Vector3d com() const { return mct_.com(); }
788 
789  void updateInertialParameters(const std::vector<rbd::MultiBody> & mbs);
790 
791  double stiffness() const { return stiffness_; }
792 
793  void stiffness(double stiffness);
794 
795  void dimWeight(const Eigen::Vector3d & dim);
796 
797  const Eigen::Vector3d & dimWeight() const { return dimWeight_; }
798 
799  virtual std::pair<int, int> begin() const override { return {alphaDBegin_, alphaDBegin_}; }
800 
801  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
802  virtual void update(const std::vector<rbd::MultiBody> & mbs,
803  const std::vector<rbd::MultiBodyConfig> & mbcs,
804  const SolverData & data) override;
805 
806  virtual const Eigen::MatrixXd & Q() const override;
807  virtual const Eigen::VectorXd & C() const override;
808 
809  const Eigen::VectorXd & eval() const;
810  const Eigen::VectorXd & speed() const;
811 
812 private:
813  void init(const std::vector<rbd::MultiBody> & mbs);
814 
815 private:
816  int alphaDBegin_;
817  double stiffness_, stiffnessSqrt_;
818  Eigen::Vector3d dimWeight_;
819  std::vector<int> posInQ_;
820  tasks::MultiCoMTask mct_;
821  Eigen::MatrixXd Q_;
822  Eigen::VectorXd C_;
823  Eigen::Vector3d CSum_;
824  // cache
825  Eigen::MatrixXd preQ_;
826 };
827 
828 class TASKS_DLLAPI MultiRobotTransformTask : public Task
829 {
830 public:
831  MultiRobotTransformTask(const std::vector<rbd::MultiBody> & mbs,
832  int r1Index,
833  int r2Index,
834  const std::string & r1BodyName,
835  const std::string & r2BodyName,
836  const sva::PTransformd & X_r1b_r1s,
837  const sva::PTransformd & X_r2b_r2s,
838  double stiffness,
839  double weight);
840 
841  tasks::MultiRobotTransformTask & task() { return mrtt_; }
842 
843  void X_r1b_r1s(const sva::PTransformd & X_r1b_r1s);
844  const sva::PTransformd & X_r1b_r1s() const;
845 
846  void X_r2b_r2s(const sva::PTransformd & X_r2b_r2s);
847  const sva::PTransformd & X_r2b_r2s() const;
848 
849  double stiffness() const { return stiffness_; }
850 
851  void stiffness(double stiffness);
852 
853  void dimWeight(const Eigen::Vector6d & dim);
854 
855  const Eigen::VectorXd & dimWeight() const { return dimWeight_; }
856 
857  virtual std::pair<int, int> begin() const override { return {alphaDBegin_, alphaDBegin_}; }
858 
859  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
860  virtual void update(const std::vector<rbd::MultiBody> & mbs,
861  const std::vector<rbd::MultiBodyConfig> & mbcs,
862  const SolverData & data) override;
863 
864  virtual const Eigen::MatrixXd & Q() const override;
865  virtual const Eigen::VectorXd & C() const override;
866 
867  const Eigen::VectorXd & eval() const;
868  const Eigen::VectorXd & speed() const;
869 
870 private:
871  int alphaDBegin_;
872  double stiffness_, stiffnessSqrt_;
873  Eigen::VectorXd dimWeight_;
874  std::vector<int> posInQ_, robotIndexes_;
876  Eigen::MatrixXd Q_;
877  Eigen::VectorXd C_;
878  Eigen::VectorXd CSum_;
879  // cache
880  Eigen::MatrixXd preQ_;
881 };
882 
883 class TASKS_DLLAPI MomentumTask : public HighLevelTask
884 {
885 public:
886  MomentumTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const sva::ForceVecd & mom);
887 
888  tasks::MomentumTask & task() { return momt_; }
889 
890  void momentum(const sva::ForceVecd & mom) { momt_.momentum(mom); }
891 
892  const sva::ForceVecd momentum() const { return momt_.momentum(); }
893 
894  virtual int dim() override;
895  virtual void update(const std::vector<rbd::MultiBody> & mb,
896  const std::vector<rbd::MultiBodyConfig> & mbc,
897  const SolverData & data) override;
898 
899  virtual const Eigen::MatrixXd & jac() const override;
900  virtual const Eigen::VectorXd & eval() const override;
901  virtual const Eigen::VectorXd & speed() const override;
902  virtual const Eigen::VectorXd & normalAcc() const override;
903 
904 private:
905  tasks::MomentumTask momt_;
906  int robotIndex_;
907 };
908 
909 class TASKS_DLLAPI ContactTask : public Task
910 {
911 public:
912  ContactTask(ContactId contactId, double stiffness, double weight)
913  : Task(weight), contactId_(contactId), begin_(0), stiffness_(stiffness), stiffnessSqrt_(2 * std::sqrt(stiffness)),
914  conesJac_(), error_(Eigen::Vector3d::Zero()), errorD_(Eigen::Vector3d::Zero()), Q_(), C_()
915  {
916  }
917 
918  virtual std::pair<int, int> begin() const override { return std::make_pair(begin_, begin_); }
919 
920  void error(const Eigen::Vector3d & error);
921  void errorD(const Eigen::Vector3d & errorD);
922 
923  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
924  virtual void update(const std::vector<rbd::MultiBody> & mbs,
925  const std::vector<rbd::MultiBodyConfig> & mbcs,
926  const SolverData & data) override;
927 
928  virtual const Eigen::MatrixXd & Q() const override;
929  virtual const Eigen::VectorXd & C() const override;
930 
931 private:
932  ContactId contactId_;
933  int begin_;
934 
935  double stiffness_, stiffnessSqrt_;
936  Eigen::MatrixXd conesJac_;
937  Eigen::Vector3d error_, errorD_;
938 
939  Eigen::MatrixXd Q_;
940  Eigen::VectorXd C_;
941 };
942 
943 class TASKS_DLLAPI GripperTorqueTask : public Task
944 {
945 public:
946  GripperTorqueTask(ContactId contactId, const Eigen::Vector3d & origin, const Eigen::Vector3d & axis, double weight)
947  : Task(weight), contactId_(contactId), origin_(origin), axis_(axis), begin_(0), Q_(), C_()
948  {
949  }
950 
951  virtual std::pair<int, int> begin() const override { return std::make_pair(begin_, begin_); }
952 
953  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
954  virtual void update(const std::vector<rbd::MultiBody> & mbs,
955  const std::vector<rbd::MultiBodyConfig> & mbcs,
956  const SolverData & data) override;
957 
958  virtual const Eigen::MatrixXd & Q() const override;
959  virtual const Eigen::VectorXd & C() const override;
960 
961 private:
962  ContactId contactId_;
963  Eigen::Vector3d origin_;
964  Eigen::Vector3d axis_;
965  int begin_;
966 
967  Eigen::MatrixXd Q_;
968  Eigen::VectorXd C_;
969 };
970 
971 class TASKS_DLLAPI LinVelocityTask : public HighLevelTask
972 {
973 public:
974  LinVelocityTask(const std::vector<rbd::MultiBody> & mbs,
975  int robotIndex,
976  const std::string & bodyName,
977  const Eigen::Vector3d & vel,
978  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
979 
980  tasks::LinVelocityTask & task() { return pt_; }
981 
982  void velocity(const Eigen::Vector3d & s) { pt_.velocity(s); }
983 
984  const Eigen::Vector3d & velocity() const { return pt_.velocity(); }
985 
986  void bodyPoint(const Eigen::Vector3d & point) { pt_.bodyPoint(point); }
987 
988  const Eigen::Vector3d & bodyPoint() const { return pt_.bodyPoint(); }
989 
990  virtual int dim() override;
991  virtual void update(const std::vector<rbd::MultiBody> & mbs,
992  const std::vector<rbd::MultiBodyConfig> & mbcs,
993  const SolverData & data) override;
994 
995  virtual const Eigen::MatrixXd & jac() const override;
996  virtual const Eigen::VectorXd & eval() const override;
997  virtual const Eigen::VectorXd & speed() const override;
998  virtual const Eigen::VectorXd & normalAcc() const override;
999 
1000 private:
1002  int robotIndex_;
1003 };
1004 
1005 class TASKS_DLLAPI OrientationTrackingTask : public HighLevelTask
1006 {
1007 public:
1008  OrientationTrackingTask(const std::vector<rbd::MultiBody> & mbs,
1009  int robotIndex,
1010  const std::string & bodyName,
1011  const Eigen::Vector3d & bodyPoint,
1012  const Eigen::Vector3d & bodyAxis,
1013  const std::vector<std::string> & trackingJointsName,
1014  const Eigen::Vector3d & trackedPoint);
1015 
1017 
1018  void trackedPoint(const Eigen::Vector3d & tp) { ott_.trackedPoint(tp); }
1019 
1020  const Eigen::Vector3d & trackedPoint() const { return ott_.trackedPoint(); }
1021 
1022  void bodyPoint(const Eigen::Vector3d & bp) { ott_.bodyPoint(bp); }
1023 
1024  const Eigen::Vector3d & bodyPoint() const { return ott_.bodyPoint(); }
1025 
1026  void bodyAxis(const Eigen::Vector3d & ba) { ott_.bodyAxis(ba); }
1027 
1028  const Eigen::Vector3d & bodyAxis() const { return ott_.bodyAxis(); }
1029 
1030  virtual int dim() override;
1031  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1032  const std::vector<rbd::MultiBodyConfig> & mbcs,
1033  const SolverData & data) override;
1034 
1035  virtual const Eigen::MatrixXd & jac() const override;
1036  virtual const Eigen::VectorXd & eval() const override;
1037  virtual const Eigen::VectorXd & speed() const override;
1038  virtual const Eigen::VectorXd & normalAcc() const override;
1039 
1040 private:
1041  int robotIndex_;
1043  Eigen::VectorXd alphaVec_;
1044  Eigen::VectorXd speed_, normalAcc_;
1045 };
1046 
1047 class TASKS_DLLAPI RelativeDistTask : public HighLevelTask
1048 {
1049 public:
1050  RelativeDistTask(const std::vector<rbd::MultiBody> & mbs,
1051  const int rIndex,
1052  const double timestep,
1055  const Eigen::Vector3d & u1 = Eigen::Vector3d::Zero(),
1056  const Eigen::Vector3d & u2 = Eigen::Vector3d::Zero());
1057 
1058  tasks::RelativeDistTask & task() { return rdt_; }
1059 
1060  void robotPoint(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & point)
1061  {
1062  int bIndex = mb.bodyIndexByName(bName);
1063  rdt_.robotPoint(bIndex, point);
1064  }
1065  void envPoint(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & point)
1066  {
1067  int bIndex = mb.bodyIndexByName(bName);
1068  rdt_.envPoint(bIndex, point);
1069  }
1070  void vector(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & u)
1071  {
1072  int bIndex = mb.bodyIndexByName(bName);
1073  rdt_.vector(bIndex, u);
1074  }
1075 
1076  virtual int dim() override;
1077  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1078  const std::vector<rbd::MultiBodyConfig> & mbcs,
1079  const SolverData & data) override;
1080 
1081  virtual const Eigen::MatrixXd & jac() const override;
1082  virtual const Eigen::VectorXd & eval() const override;
1083  virtual const Eigen::VectorXd & speed() const override;
1084  virtual const Eigen::VectorXd & normalAcc() const override;
1085 
1086 private:
1087  int rIndex_;
1089 };
1090 
1091 class TASKS_DLLAPI VectorOrientationTask : public HighLevelTask
1092 {
1093 public:
1094  VectorOrientationTask(const std::vector<rbd::MultiBody> & mbs,
1095  int robotIndex,
1096  const std::string & bodyName,
1097  const Eigen::Vector3d & bodyVector,
1098  const Eigen::Vector3d & targetVector);
1099 
1100  tasks::VectorOrientationTask & task() { return vot_; }
1101  void bodyVector(const Eigen::Vector3d & vector) { vot_.bodyVector(vector); }
1102  const Eigen::Vector3d & bodyVector() const { return vot_.bodyVector(); }
1103  void target(const Eigen::Vector3d & vector) { vot_.target(vector); }
1104  const Eigen::Vector3d & target() const { return vot_.target(); }
1105  const Eigen::Vector3d & actual() const { return vot_.actual(); }
1106 
1107  virtual int dim() override;
1108  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1109  const std::vector<rbd::MultiBodyConfig> & mbcs,
1110  const SolverData & data) override;
1111 
1112  virtual const Eigen::MatrixXd & jac() const override;
1113  virtual const Eigen::VectorXd & eval() const override;
1114  virtual const Eigen::VectorXd & speed() const override;
1115  virtual const Eigen::VectorXd & normalAcc() const override;
1116 
1117 private:
1119  int robotIndex_;
1120 };
1121 
1122 } // namespace qp
1123 
1124 } // namespace tasks
int bodyIndexByName(const std::string &name) const
static PTransform< T > Identity()
Definition: Tasks.h:397
Definition: Tasks.h:270
Definition: Tasks.h:513
Definition: Tasks.h:482
Definition: Tasks.h:435
Definition: Tasks.h:185
Definition: Tasks.h:73
Definition: Tasks.h:553
Definition: Tasks.h:326
Definition: Tasks.h:33
Definition: Tasks.h:374
Definition: Tasks.h:596
std::tuple< std::string, Eigen::Vector3d, Eigen::Vector3d > rbInfo
Definition: Tasks.h:599
Definition: Tasks.h:228
Definition: Tasks.h:650
Definition: QPTasks.h:735
void com(const Eigen::Vector3d &com)
Definition: QPTasks.h:745
virtual const Eigen::VectorXd & eval() const override
const Eigen::Vector3d & com() const
Definition: QPTasks.h:747
virtual const Eigen::MatrixXd & jac() const override
CoMTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const Eigen::Vector3d &com)
const Eigen::Vector3d & actual() const
Definition: QPTasks.h:749
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
CoMTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const Eigen::Vector3d &com, std::vector< double > weight)
tasks::CoMTask & task()
Definition: QPTasks.h:743
void updateInertialParameters(const std::vector< rbd::MultiBody > &mbs)
virtual const Eigen::VectorXd & normalAcc() const override
virtual int dim() override
virtual const Eigen::VectorXd & speed() const override
Definition: QPTasks.h:910
ContactTask(ContactId contactId, double stiffness, double weight)
Definition: QPTasks.h:912
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
void errorD(const Eigen::Vector3d &errorD)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual const Eigen::VectorXd & C() const override
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:918
void error(const Eigen::Vector3d &error)
virtual const Eigen::MatrixXd & Q() const override
Definition: QPTasks.h:667
GazeTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector2d &point2d, double depthEstimate, const sva::PTransformd &X_b_gaze, const Eigen::Vector2d &point2d_ref=Eigen::Vector2d::Zero())
GazeTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector3d &point3d, const sva::PTransformd &X_b_gaze, const Eigen::Vector2d &point2d_ref=Eigen::Vector2d::Zero())
virtual int dim() override
void error(const Eigen::Vector2d &point2d, const Eigen::Vector2d &point2d_ref=Eigen::Vector2d::Zero())
Definition: QPTasks.h:685
virtual const Eigen::VectorXd & normalAcc() const override
virtual const Eigen::VectorXd & eval() 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 & speed() const override
void error(const Eigen::Vector3d &point3d, const Eigen::Vector2d &point2d_ref=Eigen::Vector2d::Zero())
Definition: QPTasks.h:688
tasks::GazeTask & task()
Definition: QPTasks.h:683
virtual const Eigen::MatrixXd & jac() const override
Definition: QPTasks.h:944
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:951
virtual const Eigen::VectorXd & C() const override
virtual const Eigen::MatrixXd & Q() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
GripperTorqueTask(ContactId contactId, const Eigen::Vector3d &origin, const Eigen::Vector3d &axis, double weight)
Definition: QPTasks.h:946
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
Definition: QPSolver.h:303
Definition: QPTasks.h:283
virtual const Eigen::VectorXd & normalAcc() const override
virtual const Eigen::VectorXd & eval() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
static JointsSelector UnactiveJoints(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hl, const std::vector< std::string > &unactiveJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &unactiveDofs={})
const std::vector< SelectedData > selectedJoints() const
Definition: QPTasks.h:307
virtual const Eigen::VectorXd & speed() const override
virtual const Eigen::MatrixXd & jac() const override
JointsSelector(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hl, const std::vector< std::string > &selectedJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={})
virtual int dim() override
static JointsSelector ActiveJoints(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hl, const std::vector< std::string > &activeJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={})
Definition: QPTasks.h:972
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
const Eigen::Vector3d & bodyPoint() const
Definition: QPTasks.h:988
virtual const Eigen::MatrixXd & jac() const override
virtual int dim() override
const Eigen::Vector3d & velocity() const
Definition: QPTasks.h:984
tasks::LinVelocityTask & task()
Definition: QPTasks.h:980
void velocity(const Eigen::Vector3d &s)
Definition: QPTasks.h:982
void bodyPoint(const Eigen::Vector3d &point)
Definition: QPTasks.h:986
virtual const Eigen::VectorXd & normalAcc() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
LinVelocityTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector3d &vel, const Eigen::Vector3d &bodyPoint=Eigen::Vector3d::Zero())
Definition: QPTasks.h:884
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & normalAcc() const override
const sva::ForceVecd momentum() const
Definition: QPTasks.h:892
virtual int dim() override
tasks::MomentumTask & task()
Definition: QPTasks.h:888
void momentum(const sva::ForceVecd &mom)
Definition: QPTasks.h:890
virtual void update(const std::vector< rbd::MultiBody > &mb, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
virtual const Eigen::MatrixXd & jac() const override
virtual const Eigen::VectorXd & speed() const override
MomentumTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const sva::ForceVecd &mom)
Definition: QPMotionConstr.h:123
Definition: QPTasks.h:769
void updateInertialParameters(const std::vector< rbd::MultiBody > &mbs)
void com(const Eigen::Vector3d &com)
Definition: QPTasks.h:785
virtual const Eigen::MatrixXd & Q() const override
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:799
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void stiffness(double stiffness)
MultiCoMTask(const std::vector< rbd::MultiBody > &mb, std::vector< int > robotIndexes, const Eigen::Vector3d &com, double stiffness, double weight)
tasks::MultiCoMTask & task()
Definition: QPTasks.h:783
const Eigen::Vector3d com() const
Definition: QPTasks.h:787
double stiffness() const
Definition: QPTasks.h:791
const Eigen::VectorXd & eval() const
void dimWeight(const Eigen::Vector3d &dim)
virtual const Eigen::VectorXd & C() const override
const Eigen::Vector3d & dimWeight() const
Definition: QPTasks.h:797
MultiCoMTask(const std::vector< rbd::MultiBody > &mb, std::vector< int > robotIndexes, const Eigen::Vector3d &com, double stiffness, const Eigen::Vector3d &dimWeight, double weight)
const Eigen::VectorXd & speed() const
Definition: QPTasks.h:829
const sva::PTransformd & X_r1b_r1s() const
void dimWeight(const Eigen::Vector6d &dim)
void X_r1b_r1s(const sva::PTransformd &X_r1b_r1s)
MultiRobotTransformTask(const std::vector< rbd::MultiBody > &mbs, int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, const sva::PTransformd &X_r1b_r1s, const sva::PTransformd &X_r2b_r2s, double stiffness, double weight)
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:857
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void X_r2b_r2s(const sva::PTransformd &X_r2b_r2s)
const Eigen::VectorXd & dimWeight() const
Definition: QPTasks.h:855
double stiffness() const
Definition: QPTasks.h:849
const Eigen::VectorXd & eval() const
void stiffness(double stiffness)
virtual const Eigen::VectorXd & C() const override
const Eigen::VectorXd & speed() const
virtual const Eigen::MatrixXd & Q() const override
tasks::MultiRobotTransformTask & task()
Definition: QPTasks.h:841
const sva::PTransformd & X_r2b_r2s() const
Definition: QPTasks.h:523
OrientationTask(const std::vector< rbd::MultiBody > &mbs, int robodIndex, const std::string &bodyName, const Eigen::Matrix3d &ori)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
const Eigen::Matrix3d & orientation() const
Definition: QPTasks.h:540
virtual const Eigen::VectorXd & speed() const override
virtual int dim() override
virtual const Eigen::VectorXd & eval() const override
OrientationTask(const std::vector< rbd::MultiBody > &mbs, int robodIndex, const std::string &bodyName, const Eigen::Quaterniond &ori)
void orientation(const Eigen::Quaterniond &ori)
Definition: QPTasks.h:536
void orientation(const Eigen::Matrix3d &ori)
Definition: QPTasks.h:538
virtual const Eigen::MatrixXd & jac() const override
tasks::OrientationTask & task()
Definition: QPTasks.h:534
virtual const Eigen::VectorXd & normalAcc() const override
Definition: QPTasks.h:1006
virtual const Eigen::VectorXd & normalAcc() const override
void trackedPoint(const Eigen::Vector3d &tp)
Definition: QPTasks.h:1018
const Eigen::Vector3d & bodyPoint() const
Definition: QPTasks.h:1024
const Eigen::Vector3d & trackedPoint() const
Definition: QPTasks.h:1020
virtual const Eigen::VectorXd & eval() const override
OrientationTrackingTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector3d &bodyPoint, const Eigen::Vector3d &bodyAxis, const std::vector< std::string > &trackingJointsName, const Eigen::Vector3d &trackedPoint)
void bodyAxis(const Eigen::Vector3d &ba)
Definition: QPTasks.h:1026
const Eigen::Vector3d & bodyAxis() const
Definition: QPTasks.h:1028
virtual const Eigen::VectorXd & speed() const override
void bodyPoint(const Eigen::Vector3d &bp)
Definition: QPTasks.h:1022
virtual int dim() override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual const Eigen::MatrixXd & jac() const override
tasks::OrientationTrackingTask & task()
Definition: QPTasks.h:1016
Definition: QPTasks.h:177
void errorI(const Eigen::VectorXd &errI)
double I() const
void error(const Eigen::VectorXd &err)
PIDTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double P, double I, double D, double weight)
void P(double p)
double P() const
PIDTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double P, double I, double D, const Eigen::VectorXd &dimWeight, double weight)
void D(double d)
void I(double i)
void errorD(const Eigen::VectorXd &errD)
double D() const
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
Definition: QPTasks.h:707
tasks::PositionBasedVisServoTask & task()
Definition: QPTasks.h:715
void error(const sva::PTransformd &X_t_s)
Definition: QPTasks.h:717
PositionBasedVisServoTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const sva::PTransformd &X_t_s, const sva::PTransformd &X_b_s=sva::PTransformd::Identity())
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual const Eigen::MatrixXd & jac() const override
virtual const Eigen::VectorXd & normalAcc() const override
Definition: QPTasks.h:489
virtual void update(const std::vector< rbd::MultiBody > &mb, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
const Eigen::Vector3d & bodyPoint() const
Definition: QPTasks.h:505
PositionTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector3d &pos, const Eigen::Vector3d &bodyPoint=Eigen::Vector3d::Zero())
void bodyPoint(const Eigen::Vector3d &point)
Definition: QPTasks.h:503
tasks::PositionTask & task()
Definition: QPTasks.h:497
const Eigen::Vector3d & position() const
Definition: QPTasks.h:501
virtual int dim() override
void position(const Eigen::Vector3d &pos)
Definition: QPTasks.h:499
virtual const Eigen::MatrixXd & jac() const override
virtual const Eigen::VectorXd & normalAcc() const override
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
Definition: QPTasks.h:409
PostureTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, std::vector< std::vector< double >> q, double stiffness, double weight)
const Eigen::VectorXd & refAccel() const noexcept
Definition: QPTasks.h:455
void gains(double stiffness, double damping)
void dimWeight(const Eigen::VectorXd &dimW) noexcept
Definition: QPTasks.h:459
void stiffness(double stiffness)
const std::vector< std::vector< double > > posture() const
Definition: QPTasks.h:421
void jointsGains(const std::vector< rbd::MultiBody > &mbs, const std::vector< JointGains > &jgv)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual const Eigen::MatrixXd & Q() const override
void refVel(const Eigen::VectorXd &refVel) noexcept
Definition: QPTasks.h:448
double stiffness() const
Definition: QPTasks.h:423
tasks::PostureTask & task()
Definition: QPTasks.h:417
virtual const Eigen::VectorXd & C() const override
const Eigen::VectorXd & dimWeight() const noexcept
Definition: QPTasks.h:457
void gains(double stiffness)
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
void posture(std::vector< std::vector< double >> q)
Definition: QPTasks.h:419
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:436
void refAccel(const Eigen::VectorXd &refAccel) noexcept
Definition: QPTasks.h:450
const Eigen::VectorXd & eval() const
void jointsStiffness(const std::vector< rbd::MultiBody > &mbs, const std::vector< JointStiffness > &jsv)
double damping() const
Definition: QPTasks.h:425
const Eigen::VectorXd & refVel() const noexcept
Definition: QPTasks.h:449
Definition: QPTasks.h:1048
virtual int dim() override
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void envPoint(const rbd::MultiBody &mb, const std::string &bName, const Eigen::Vector3d &point)
Definition: QPTasks.h:1065
virtual const Eigen::VectorXd & speed() const override
tasks::RelativeDistTask & task()
Definition: QPTasks.h:1058
virtual const Eigen::VectorXd & eval() const override
void vector(const rbd::MultiBody &mb, const std::string &bName, const Eigen::Vector3d &u)
Definition: QPTasks.h:1070
virtual const Eigen::MatrixXd & jac() const override
void robotPoint(const rbd::MultiBody &mb, const std::string &bName, const Eigen::Vector3d &point)
Definition: QPTasks.h:1060
virtual const Eigen::VectorXd & normalAcc() const override
RelativeDistTask(const std::vector< rbd::MultiBody > &mbs, const int rIndex, const double timestep, tasks::RelativeDistTask::rbInfo &rbi1, tasks::RelativeDistTask::rbInfo &rbi2, const Eigen::Vector3d &u1=Eigen::Vector3d::Zero(), const Eigen::Vector3d &u2=Eigen::Vector3d::Zero())
Definition: QPTasks.h:35
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:44
const Eigen::VectorXd & dimWeight() const
Definition: QPTasks.h:48
Eigen::VectorXd error_
Definition: QPTasks.h:60
void dimWeight(const Eigen::VectorXd &dim)
virtual const Eigen::MatrixXd & Q() const override
virtual const Eigen::VectorXd & C() const override
HighLevelTask * hlTask_
Definition: QPTasks.h:59
SetPointTaskCommon(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double weight)
SetPointTaskCommon(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, const Eigen::VectorXd &dimWeight, double weight)
void computeQC(Eigen::VectorXd &error)
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
Definition: QPTasks.h:74
SetPointTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double stiffness, double weight)
void stiffness(double stiffness)
double stiffness() const
Definition: QPTasks.h:89
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
SetPointTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double stiffness, const Eigen::VectorXd &dimWeight, double weight)
Definition: QPSolverData.h:28
Definition: QPTasks.h:630
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
const Eigen::Matrix3d & orientation() const
Definition: QPTasks.h:649
virtual int dim() override
SurfaceOrientationTask(const std::vector< rbd::MultiBody > &mbs, int robodIndex, const std::string &bodyName, const Eigen::Matrix3d &ori, const sva::PTransformd &X_b_s)
virtual const Eigen::VectorXd & normalAcc() const override
void orientation(const Eigen::Quaterniond &ori)
Definition: QPTasks.h:645
SurfaceOrientationTask(const std::vector< rbd::MultiBody > &mbs, int robodIndex, const std::string &bodyName, const Eigen::Quaterniond &ori, const sva::PTransformd &X_b_s)
tasks::SurfaceOrientationTask & task()
Definition: QPTasks.h:643
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void orientation(const Eigen::Matrix3d &ori)
Definition: QPTasks.h:647
virtual const Eigen::MatrixXd & jac() const override
TransformTask in surface frame.
Definition: QPTasks.h:597
virtual void update(const std::vector< rbd::MultiBody > &mb, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
SurfaceTransformTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const sva::PTransformd &X_0_t, const sva::PTransformd &X_b_p=sva::PTransformd::Identity())
Definition: QPTasks.h:217
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
void iter(int i)
Definition: QPTasks.h:240
int nrIter() const
Definition: QPTasks.h:242
int iter() const
Definition: QPTasks.h:239
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
TargetObjectiveTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double timeStep, double duration, const Eigen::VectorXd &objDot, double weight)
virtual const Eigen::VectorXd & C() const override
TargetObjectiveTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double timeStep, double duration, const Eigen::VectorXd &objDot, const Eigen::VectorXd &dimWeight, double weight)
const Eigen::VectorXd & psi() const
Definition: QPTasks.h:252
void dimWeight(const Eigen::VectorXd &o)
Definition: QPTasks.h:249
virtual const Eigen::MatrixXd & Q() const override
void objDot(const Eigen::VectorXd &o)
Definition: QPTasks.h:246
const Eigen::VectorXd & dimWeight() const
Definition: QPTasks.h:248
void nrIter(int i)
Definition: QPTasks.h:243
const Eigen::VectorXd & objDot() const
Definition: QPTasks.h:245
const Eigen::VectorXd & phi() const
Definition: QPTasks.h:251
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:254
Definition: QPSolver.h:279
Definition: QPTasks.h:347
virtual void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const SolverData &data) override
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, const Eigen::VectorXd &jointSelect, double weight)
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, double weight)
virtual const Eigen::VectorXd & jointSelect() const
Definition: QPTasks.h:397
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, const TorqueDBound &tdb, double dt, const Eigen::VectorXd &jointSelect, double weight)
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, const TorqueDBound &tdb, double dt, const std::string &efName, double weight)
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:391
virtual const Eigen::MatrixXd & Q() const override
Definition: QPTasks.h:393
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, const std::string &efName, double weight)
TorqueTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const TorqueBound &tb, const TorqueDBound &tdb, double dt, double weight)
virtual const Eigen::VectorXd & C() const override
Definition: QPTasks.h:395
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
Definition: QPTasks.h:102
void refAccel(const Eigen::VectorXd &refAccel)
void errorPos(const Eigen::VectorXd &errorPos)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
void errorVel(const Eigen::VectorXd &errorVel)
TrackingTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double gainPos, double gainVel, const Eigen::VectorXd &dimWeight, double weight)
void setGains(double gainPos, double gainVel)
TrackingTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double gainPos, double gainVel, double weight)
Definition: QPTasks.h:135
const Eigen::VectorXd & damping() const
void damping(const Eigen::VectorXd &damping)
void stiffness(const Eigen::VectorXd &stiffness)
void stiffness(double gainPos)
const Eigen::VectorXd & refAccel() const
void setGains(const Eigen::VectorXd &stiffness, const Eigen::VectorXd &damping)
const Eigen::VectorXd & stiffness() const
TrajectoryTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double gainPos, double gainVel, double weight)
void setGains(double gainPos, double gainVel)
void damping(double gainVel)
void refAccel(const Eigen::VectorXd &refAccel)
TrajectoryTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, HighLevelTask *hlTask, double gainPos, double gainVel, const Eigen::VectorXd &dimWeight, double weight)
void refVel(const Eigen::VectorXd &refVel)
void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
const Eigen::VectorXd & refVel() const
Definition: QPTasks.h:559
const sva::PTransformd & target() const
Definition: QPTasks.h:574
transform_task_t & task()
Definition: QPTasks.h:570
virtual const Eigen::VectorXd & normalAcc() const override
Definition: QPTasks.h:588
transform_task_t tt_
Definition: QPTasks.h:591
virtual const Eigen::VectorXd & eval() const override
Definition: QPTasks.h:584
const sva::PTransformd & X_b_p() const
Definition: QPTasks.h:578
virtual const Eigen::VectorXd & speed() const override
Definition: QPTasks.h:586
int robotIndex_
Definition: QPTasks.h:592
void X_b_p(const sva::PTransformd &X_b_p)
Definition: QPTasks.h:576
virtual const Eigen::MatrixXd & jac() const override
Definition: QPTasks.h:582
virtual int dim() override
Definition: QPTasks.h:580
TransformTaskCommon(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const sva::PTransformd &X_0_t, const sva::PTransformd &X_b_p=sva::PTransformd::Identity())
Definition: QPTasks.h:561
void target(const sva::PTransformd &X_0_t)
Definition: QPTasks.h:572
TransformTask in world or user frame.
Definition: QPTasks.h:612
const Eigen::Matrix3d & E_0_c() const
virtual void update(const std::vector< rbd::MultiBody > &mb, const std::vector< rbd::MultiBodyConfig > &mbc, const SolverData &data) override
void E_0_c(const Eigen::Matrix3d &E_0_c)
TransformTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const sva::PTransformd &X_0_t, const sva::PTransformd &X_b_p=sva::PTransformd::Identity(), const Eigen::Matrix3d &E_0_c=Eigen::Matrix3d::Identity())
Definition: QPTasks.h:1092
void bodyVector(const Eigen::Vector3d &vector)
Definition: QPTasks.h:1101
virtual const Eigen::VectorXd & eval() const override
const Eigen::Vector3d & target() const
Definition: QPTasks.h:1104
void target(const Eigen::Vector3d &vector)
Definition: QPTasks.h:1103
virtual const Eigen::VectorXd & normalAcc() const override
const Eigen::Vector3d & actual() const
Definition: QPTasks.h:1105
VectorOrientationTask(const std::vector< rbd::MultiBody > &mbs, int robotIndex, const std::string &bodyName, const Eigen::Vector3d &bodyVector, const Eigen::Vector3d &targetVector)
virtual void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const SolverData &data) override
virtual int dim() override
tasks::VectorOrientationTask & task()
Definition: QPTasks.h:1100
const Eigen::Vector3d & bodyVector() const
Definition: QPTasks.h:1102
virtual const Eigen::VectorXd & speed() const override
virtual const Eigen::MatrixXd & jac() const override
Vector6< double > Vector6d
constexpr T sqrt(T x)
Definition: GenQPUtils.h:19
Definition: Bounds.h:95
Definition: Bounds.h:113
Definition: QPContacts.h:50
Definition: QPTasks.h:335
std::string jointName
Definition: QPTasks.h:342
JointGains(const std::string &jName, double stif)
Definition: QPTasks.h:337
double damping
Definition: QPTasks.h:343
JointGains(const std::string &jName, double stif, double damp)
Definition: QPTasks.h:340
double stiffness
Definition: QPTasks.h:343
JointGains()
Definition: QPTasks.h:336
Definition: QPTasks.h:326
JointStiffness(const std::string &jName, double stif)
Definition: QPTasks.h:328
JointStiffness()
Definition: QPTasks.h:327
std::string jointName
Definition: QPTasks.h:330
double stiffness
Definition: QPTasks.h:331
int dof
Definition: QPTasks.h:298