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  {
299  int posInDof, dof;
300  };
301 
302 public:
303  JointsSelector(const std::vector<rbd::MultiBody> & mbs,
304  int robotIndex,
305  HighLevelTask * hl,
306  const std::vector<std::string> & selectedJointsName,
307  const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {});
308 
309  const std::vector<SelectedData> selectedJoints() const { return selectedJoints_; }
310 
311  virtual int dim() override;
312  virtual void update(const std::vector<rbd::MultiBody> & mbs,
313  const std::vector<rbd::MultiBodyConfig> & mbcs,
314  const SolverData & data) override;
315 
316  virtual const Eigen::MatrixXd & jac() const override;
317  virtual const Eigen::VectorXd & eval() const override;
318  virtual const Eigen::VectorXd & speed() const override;
319  virtual const Eigen::VectorXd & normalAcc() const override;
320 
321 private:
322  Eigen::MatrixXd jac_;
323  std::vector<SelectedData> selectedJoints_;
324  HighLevelTask * hl_;
325 };
326 
328 {
330  JointStiffness(const std::string & jName, double stif) : jointName(jName), stiffness(stif) {}
331 
332  std::string jointName;
333  double stiffness;
334 };
335 
337 {
339  JointGains(const std::string & jName, double stif) : jointName(jName), stiffness(stif)
340  { damping = 2. * std::sqrt(stif); }
341 
342  JointGains(const std::string & jName, double stif, double damp) : jointName(jName), stiffness(stif), damping(damp) {}
343 
344  std::string jointName;
346 };
347 
348 class TASKS_DLLAPI TorqueTask : public Task
349 {
350 public:
351  TorqueTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const TorqueBound & tb, double weight);
352 
353  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
354  int robotIndex,
355  const TorqueBound & tb,
356  const Eigen::VectorXd & jointSelect,
357  double weight);
358 
359  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
360  int robotIndex,
361  const TorqueBound & tb,
362  const std::string & efName,
363  double weight);
364 
365  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
366  int robotIndex,
367  const TorqueBound & tb,
368  const TorqueDBound & tdb,
369  double dt,
370  double weight);
371 
372  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
373  int robotIndex,
374  const TorqueBound & tb,
375  const TorqueDBound & tdb,
376  double dt,
377  const Eigen::VectorXd & jointSelect,
378  double weight);
379 
380  TorqueTask(const std::vector<rbd::MultiBody> & mbs,
381  int robotIndex,
382  const TorqueBound & tb,
383  const TorqueDBound & tdb,
384  double dt,
385  const std::string & efName,
386  double weight);
387 
388  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
389  virtual void update(const std::vector<rbd::MultiBody> & mbs,
390  const std::vector<rbd::MultiBodyConfig> & mbcs,
391  const SolverData & data) override;
392 
393  virtual std::pair<int, int> begin() const override { return std::make_pair(0, 0); }
394 
395  virtual const Eigen::MatrixXd & Q() const override { return Q_; }
396 
397  virtual const Eigen::VectorXd & C() const override { return C_; }
398 
399  virtual const Eigen::VectorXd & jointSelect() const { return jointSelector_; }
400 
401 private:
402  int robotIndex_;
403  int alphaDBegin_, lambdaBegin_;
404  MotionConstr motionConstr;
405  Eigen::VectorXd jointSelector_;
406  Eigen::MatrixXd Q_;
407  Eigen::VectorXd C_;
408 };
409 
410 class TASKS_DLLAPI PostureTask : public Task
411 {
412 public:
413  PostureTask(const std::vector<rbd::MultiBody> & mbs,
414  int robotIndex,
415  std::vector<std::vector<double>> q,
416  double stiffness,
417  double weight);
418 
419  tasks::PostureTask & task() { return pt_; }
420 
421  void posture(std::vector<std::vector<double>> q) { pt_.posture(q); }
422 
423  const std::vector<std::vector<double>> posture() const { return pt_.posture(); }
424 
425  double stiffness() const { return stiffness_; }
426 
427  double damping() const { return damping_; }
428 
429  void stiffness(double stiffness);
430 
431  void gains(double stiffness);
432  void gains(double stiffness, double damping);
433 
434  void jointsStiffness(const std::vector<rbd::MultiBody> & mbs, const std::vector<JointStiffness> & jsv);
435 
436  void jointsGains(const std::vector<rbd::MultiBody> & mbs, const std::vector<JointGains> & jgv);
437 
438  virtual std::pair<int, int> begin() const override { return std::make_pair(alphaDBegin_, alphaDBegin_); }
439 
440  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
441  virtual void update(const std::vector<rbd::MultiBody> & mbs,
442  const std::vector<rbd::MultiBodyConfig> & mbcs,
443  const SolverData & data) override;
444 
445  virtual const Eigen::MatrixXd & Q() const override;
446  virtual const Eigen::VectorXd & C() const override;
447 
448  const Eigen::VectorXd & eval() const;
449 
450  inline void refVel(const Eigen::VectorXd & refVel) noexcept { refVel_ = refVel; }
451  inline const Eigen::VectorXd & refVel() const noexcept { return refVel_; }
452  inline void refAccel(const Eigen::VectorXd & refAccel) noexcept
453  {
454  assert(refAccel.size() == refAccel_.size());
455  refAccel_ = refAccel;
456  }
457  inline const Eigen::VectorXd & refAccel() const noexcept { return refAccel_; }
458 
459  inline const Eigen::VectorXd & dimWeight() const noexcept { return dimWeight_; }
460 
461  inline void dimWeight(const Eigen::VectorXd & dimW) noexcept
462  {
463  assert(dimW.size() == dimWeight_.size());
464  dimWeight_ = dimW;
465  }
466 
467 private:
468  struct JointData
469  {
470  double stiffness, damping;
471  int start, size;
472  };
473 
474 private:
475  tasks::PostureTask pt_;
476 
477  double stiffness_;
478  double damping_;
479  int robotIndex_, alphaDBegin_;
480 
481  std::vector<JointData> jointDatas_;
482 
483  Eigen::MatrixXd Q_;
484  Eigen::VectorXd C_;
485  Eigen::VectorXd alphaVec_;
486  Eigen::VectorXd refVel_, refAccel_;
487  Eigen::VectorXd dimWeight_;
488 };
489 
490 class TASKS_DLLAPI PositionTask : public HighLevelTask
491 {
492 public:
493  PositionTask(const std::vector<rbd::MultiBody> & mbs,
494  int robotIndex,
495  const std::string & bodyName,
496  const Eigen::Vector3d & pos,
497  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
498 
499  tasks::PositionTask & task() { return pt_; }
500 
501  void position(const Eigen::Vector3d & pos) { pt_.position(pos); }
502 
503  const Eigen::Vector3d & position() const { return pt_.position(); }
504 
505  void bodyPoint(const Eigen::Vector3d & point) { pt_.bodyPoint(point); }
506 
507  const Eigen::Vector3d & bodyPoint() const { return pt_.bodyPoint(); }
508 
509  virtual int dim() override;
510  virtual void update(const std::vector<rbd::MultiBody> & mb,
511  const std::vector<rbd::MultiBodyConfig> & mbc,
512  const SolverData & data) override;
513 
514  virtual const Eigen::MatrixXd & jac() const override;
515  virtual const Eigen::VectorXd & eval() const override;
516  virtual const Eigen::VectorXd & speed() const override;
517  virtual const Eigen::VectorXd & normalAcc() const override;
518 
519 private:
521  int robotIndex_;
522 };
523 
524 class TASKS_DLLAPI OrientationTask : public HighLevelTask
525 {
526 public:
527  OrientationTask(const std::vector<rbd::MultiBody> & mbs,
528  int robodIndex,
529  const std::string & bodyName,
530  const Eigen::Quaterniond & ori);
531  OrientationTask(const std::vector<rbd::MultiBody> & mbs,
532  int robodIndex,
533  const std::string & bodyName,
534  const Eigen::Matrix3d & ori);
535 
536  tasks::OrientationTask & task() { return ot_; }
537 
538  void orientation(const Eigen::Quaterniond & ori) { ot_.orientation(ori); }
539 
540  void orientation(const Eigen::Matrix3d & ori) { ot_.orientation(ori); }
541 
542  const Eigen::Matrix3d & orientation() const { return ot_.orientation(); }
543 
544  virtual int dim() override;
545  virtual void update(const std::vector<rbd::MultiBody> & mbs,
546  const std::vector<rbd::MultiBodyConfig> & mbcs,
547  const SolverData & data) override;
548 
549  virtual const Eigen::MatrixXd & jac() const override;
550  virtual const Eigen::VectorXd & eval() const override;
551  virtual const Eigen::VectorXd & speed() const override;
552  virtual const Eigen::VectorXd & normalAcc() const override;
553 
554 private:
556  int robotIndex_;
557 };
558 
559 template<typename transform_task_t>
561 {
562 public:
563  TransformTaskCommon(const std::vector<rbd::MultiBody> & mbs,
564  int robotIndex,
565  const std::string & bodyName,
566  const sva::PTransformd & X_0_t,
567  const sva::PTransformd & X_b_p = sva::PTransformd::Identity())
568  : tt_(mbs[robotIndex], bodyName, X_0_t, X_b_p), robotIndex_(robotIndex)
569  {
570  }
571 
572  transform_task_t & task() { return tt_; }
573 
574  void target(const sva::PTransformd & X_0_t) { tt_.target(X_0_t); }
575 
576  const sva::PTransformd & target() const { return tt_.target(); }
577 
578  void X_b_p(const sva::PTransformd & X_b_p) { tt_.X_b_p(X_b_p); }
579 
580  const sva::PTransformd & X_b_p() const { return tt_.X_b_p(); }
581 
582  virtual int dim() override { return 6; }
583 
584  virtual const Eigen::MatrixXd & jac() const override { return tt_.jac(); }
585 
586  virtual const Eigen::VectorXd & eval() const override { return tt_.eval(); }
587 
588  virtual const Eigen::VectorXd & speed() const override { return tt_.speed(); }
589 
590  virtual const Eigen::VectorXd & normalAcc() const override { return tt_.normalAcc(); }
591 
592 protected:
593  transform_task_t tt_;
595 };
596 
598 class TASKS_DLLAPI SurfaceTransformTask : public TransformTaskCommon<tasks::SurfaceTransformTask>
599 {
600 public:
601  SurfaceTransformTask(const std::vector<rbd::MultiBody> & mbs,
602  int robotIndex,
603  const std::string & bodyName,
604  const sva::PTransformd & X_0_t,
605  const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
606 
607  virtual void update(const std::vector<rbd::MultiBody> & mb,
608  const std::vector<rbd::MultiBodyConfig> & mbc,
609  const SolverData & data) override;
610 };
611 
613 class TASKS_DLLAPI TransformTask : public TransformTaskCommon<tasks::TransformTask>
614 {
615 public:
616  TransformTask(const std::vector<rbd::MultiBody> & mbs,
617  int robotIndex,
618  const std::string & bodyName,
619  const sva::PTransformd & X_0_t,
620  const sva::PTransformd & X_b_p = sva::PTransformd::Identity(),
621  const Eigen::Matrix3d & E_0_c = Eigen::Matrix3d::Identity());
622 
623  void E_0_c(const Eigen::Matrix3d & E_0_c);
624  const Eigen::Matrix3d & E_0_c() const;
625 
626  virtual void update(const std::vector<rbd::MultiBody> & mb,
627  const std::vector<rbd::MultiBodyConfig> & mbc,
628  const SolverData & data) override;
629 };
630 
631 class TASKS_DLLAPI SurfaceOrientationTask : public HighLevelTask
632 {
633 public:
634  SurfaceOrientationTask(const std::vector<rbd::MultiBody> & mbs,
635  int robodIndex,
636  const std::string & bodyName,
637  const Eigen::Quaterniond & ori,
638  const sva::PTransformd & X_b_s);
639  SurfaceOrientationTask(const std::vector<rbd::MultiBody> & mbs,
640  int robodIndex,
641  const std::string & bodyName,
642  const Eigen::Matrix3d & ori,
643  const sva::PTransformd & X_b_s);
644 
646 
647  void orientation(const Eigen::Quaterniond & ori) { ot_.orientation(ori); }
648 
649  void orientation(const Eigen::Matrix3d & ori) { ot_.orientation(ori); }
650 
651  const Eigen::Matrix3d & orientation() const { return ot_.orientation(); }
652 
653  virtual int dim() override;
654  virtual void update(const std::vector<rbd::MultiBody> & mbs,
655  const std::vector<rbd::MultiBodyConfig> & mbcs,
656  const SolverData & data) override;
657 
658  virtual const Eigen::MatrixXd & jac() const override;
659  virtual const Eigen::VectorXd & eval() const override;
660  virtual const Eigen::VectorXd & speed() const override;
661  virtual const Eigen::VectorXd & normalAcc() const override;
662 
663 private:
665  int robotIndex_;
666 };
667 
668 class TASKS_DLLAPI GazeTask : public HighLevelTask
669 {
670 public:
671  GazeTask(const std::vector<rbd::MultiBody> & mbs,
672  int robotIndex,
673  const std::string & bodyName,
674  const Eigen::Vector2d & point2d,
675  double depthEstimate,
676  const sva::PTransformd & X_b_gaze,
677  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
678  GazeTask(const std::vector<rbd::MultiBody> & mbs,
679  int robotIndex,
680  const std::string & bodyName,
681  const Eigen::Vector3d & point3d,
682  const sva::PTransformd & X_b_gaze,
683  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
684 
685  tasks::GazeTask & task() { return gazet_; }
686 
687  void error(const Eigen::Vector2d & point2d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero())
688  { gazet_.error(point2d, point2d_ref); }
689 
690  void error(const Eigen::Vector3d & point3d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero())
691  { gazet_.error(point3d, point2d_ref); }
692 
693  virtual int dim() override;
694  virtual void update(const std::vector<rbd::MultiBody> & mbs,
695  const std::vector<rbd::MultiBodyConfig> & mbcs,
696  const SolverData & data) override;
697 
698  virtual const Eigen::MatrixXd & jac() const override;
699  virtual const Eigen::VectorXd & eval() const override;
700  virtual const Eigen::VectorXd & speed() const override;
701  virtual const Eigen::VectorXd & normalAcc() const override;
702 
703 private:
704  tasks::GazeTask gazet_;
705  int robotIndex_;
706 };
707 
708 class TASKS_DLLAPI PositionBasedVisServoTask : public HighLevelTask
709 {
710 public:
711  PositionBasedVisServoTask(const std::vector<rbd::MultiBody> & mbs,
712  int robotIndex,
713  const std::string & bodyName,
714  const sva::PTransformd & X_t_s,
715  const sva::PTransformd & X_b_s = sva::PTransformd::Identity());
716 
717  tasks::PositionBasedVisServoTask & task() { return pbvst_; }
718 
719  void error(const sva::PTransformd & X_t_s) { pbvst_.error(X_t_s); }
720 
721  virtual int dim() override;
722  virtual void update(const std::vector<rbd::MultiBody> & mbs,
723  const std::vector<rbd::MultiBodyConfig> & mbcs,
724  const SolverData & data) override;
725 
726  virtual const Eigen::MatrixXd & jac() const override;
727  virtual const Eigen::VectorXd & eval() const override;
728  virtual const Eigen::VectorXd & speed() const override;
729  virtual const Eigen::VectorXd & normalAcc() const override;
730 
731 private:
733  int robotIndex_;
734 };
735 
736 class TASKS_DLLAPI CoMTask : public HighLevelTask
737 {
738 public:
739  CoMTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const Eigen::Vector3d & com);
740  CoMTask(const std::vector<rbd::MultiBody> & mbs,
741  int robotIndex,
742  const Eigen::Vector3d & com,
743  std::vector<double> weight);
744 
745  tasks::CoMTask & task() { return ct_; }
746 
747  void com(const Eigen::Vector3d & com) { ct_.com(com); }
748 
749  const Eigen::Vector3d & com() const { return ct_.com(); }
750 
751  const Eigen::Vector3d & actual() const { return ct_.actual(); }
752 
753  void updateInertialParameters(const std::vector<rbd::MultiBody> & mbs);
754 
755  virtual int dim() override;
756  virtual void update(const std::vector<rbd::MultiBody> & mbs,
757  const std::vector<rbd::MultiBodyConfig> & mbcs,
758  const SolverData & data) override;
759 
760  virtual const Eigen::MatrixXd & jac() const override;
761  virtual const Eigen::VectorXd & eval() const override;
762  virtual const Eigen::VectorXd & speed() const override;
763  virtual const Eigen::VectorXd & normalAcc() const override;
764 
765 private:
766  tasks::CoMTask ct_;
767  int robotIndex_;
768 };
769 
770 class TASKS_DLLAPI MultiCoMTask : public Task
771 {
772 public:
773  MultiCoMTask(const std::vector<rbd::MultiBody> & mb,
774  std::vector<int> robotIndexes,
775  const Eigen::Vector3d & com,
776  double stiffness,
777  double weight);
778  MultiCoMTask(const std::vector<rbd::MultiBody> & mb,
779  std::vector<int> robotIndexes,
780  const Eigen::Vector3d & com,
781  double stiffness,
782  const Eigen::Vector3d & dimWeight,
783  double weight);
784 
785  tasks::MultiCoMTask & task() { return mct_; }
786 
787  void com(const Eigen::Vector3d & com) { mct_.com(com); }
788 
789  const Eigen::Vector3d com() const { return mct_.com(); }
790 
791  void updateInertialParameters(const std::vector<rbd::MultiBody> & mbs);
792 
793  double stiffness() const { return stiffness_; }
794 
795  void stiffness(double stiffness);
796 
797  void dimWeight(const Eigen::Vector3d & dim);
798 
799  const Eigen::Vector3d & dimWeight() const { return dimWeight_; }
800 
801  virtual std::pair<int, int> begin() const override { return {alphaDBegin_, alphaDBegin_}; }
802 
803  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
804  virtual void update(const std::vector<rbd::MultiBody> & mbs,
805  const std::vector<rbd::MultiBodyConfig> & mbcs,
806  const SolverData & data) override;
807 
808  virtual const Eigen::MatrixXd & Q() const override;
809  virtual const Eigen::VectorXd & C() const override;
810 
811  const Eigen::VectorXd & eval() const;
812  const Eigen::VectorXd & speed() const;
813 
814 private:
815  void init(const std::vector<rbd::MultiBody> & mbs);
816 
817 private:
818  int alphaDBegin_;
819  double stiffness_, stiffnessSqrt_;
820  Eigen::Vector3d dimWeight_;
821  std::vector<int> posInQ_;
822  tasks::MultiCoMTask mct_;
823  Eigen::MatrixXd Q_;
824  Eigen::VectorXd C_;
825  Eigen::Vector3d CSum_;
826  // cache
827  Eigen::MatrixXd preQ_;
828 };
829 
830 class TASKS_DLLAPI MultiRobotTransformTask : public Task
831 {
832 public:
833  MultiRobotTransformTask(const std::vector<rbd::MultiBody> & mbs,
834  int r1Index,
835  int r2Index,
836  const std::string & r1BodyName,
837  const std::string & r2BodyName,
838  const sva::PTransformd & X_r1b_r1s,
839  const sva::PTransformd & X_r2b_r2s,
840  double stiffness,
841  double weight);
842 
843  tasks::MultiRobotTransformTask & task() { return mrtt_; }
844 
845  void X_r1b_r1s(const sva::PTransformd & X_r1b_r1s);
846  const sva::PTransformd & X_r1b_r1s() const;
847 
848  void X_r2b_r2s(const sva::PTransformd & X_r2b_r2s);
849  const sva::PTransformd & X_r2b_r2s() const;
850 
851  double stiffness() const { return stiffness_; }
852 
853  void stiffness(double stiffness);
854 
855  void dimWeight(const Eigen::Vector6d & dim);
856 
857  const Eigen::VectorXd & dimWeight() const { return dimWeight_; }
858 
859  virtual std::pair<int, int> begin() const override { return {alphaDBegin_, alphaDBegin_}; }
860 
861  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
862  virtual void update(const std::vector<rbd::MultiBody> & mbs,
863  const std::vector<rbd::MultiBodyConfig> & mbcs,
864  const SolverData & data) override;
865 
866  virtual const Eigen::MatrixXd & Q() const override;
867  virtual const Eigen::VectorXd & C() const override;
868 
869  const Eigen::VectorXd & eval() const;
870  const Eigen::VectorXd & speed() const;
871 
872 private:
873  int alphaDBegin_;
874  double stiffness_, stiffnessSqrt_;
875  Eigen::VectorXd dimWeight_;
876  std::vector<int> posInQ_, robotIndexes_;
878  Eigen::MatrixXd Q_;
879  Eigen::VectorXd C_;
880  Eigen::VectorXd CSum_;
881  // cache
882  Eigen::MatrixXd preQ_;
883 };
884 
885 class TASKS_DLLAPI MomentumTask : public HighLevelTask
886 {
887 public:
888  MomentumTask(const std::vector<rbd::MultiBody> & mbs, int robotIndex, const sva::ForceVecd & mom);
889 
890  tasks::MomentumTask & task() { return momt_; }
891 
892  void momentum(const sva::ForceVecd & mom) { momt_.momentum(mom); }
893 
894  const sva::ForceVecd momentum() const { return momt_.momentum(); }
895 
896  virtual int dim() override;
897  virtual void update(const std::vector<rbd::MultiBody> & mb,
898  const std::vector<rbd::MultiBodyConfig> & mbc,
899  const SolverData & data) override;
900 
901  virtual const Eigen::MatrixXd & jac() const override;
902  virtual const Eigen::VectorXd & eval() const override;
903  virtual const Eigen::VectorXd & speed() const override;
904  virtual const Eigen::VectorXd & normalAcc() const override;
905 
906 private:
907  tasks::MomentumTask momt_;
908  int robotIndex_;
909 };
910 
911 class TASKS_DLLAPI ContactTask : public Task
912 {
913 public:
914  ContactTask(ContactId contactId, double stiffness, double weight)
915  : Task(weight), contactId_(contactId), begin_(0), stiffness_(stiffness), stiffnessSqrt_(2 * std::sqrt(stiffness)),
916  conesJac_(), error_(Eigen::Vector3d::Zero()), errorD_(Eigen::Vector3d::Zero()), Q_(), C_()
917  {
918  }
919 
920  virtual std::pair<int, int> begin() const override { return std::make_pair(begin_, begin_); }
921 
922  void error(const Eigen::Vector3d & error);
923  void errorD(const Eigen::Vector3d & errorD);
924 
925  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
926  virtual void update(const std::vector<rbd::MultiBody> & mbs,
927  const std::vector<rbd::MultiBodyConfig> & mbcs,
928  const SolverData & data) override;
929 
930  virtual const Eigen::MatrixXd & Q() const override;
931  virtual const Eigen::VectorXd & C() const override;
932 
933 private:
934  ContactId contactId_;
935  int begin_;
936 
937  double stiffness_, stiffnessSqrt_;
938  Eigen::MatrixXd conesJac_;
939  Eigen::Vector3d error_, errorD_;
940 
941  Eigen::MatrixXd Q_;
942  Eigen::VectorXd C_;
943 };
944 
945 class TASKS_DLLAPI GripperTorqueTask : public Task
946 {
947 public:
948  GripperTorqueTask(ContactId contactId, const Eigen::Vector3d & origin, const Eigen::Vector3d & axis, double weight)
949  : Task(weight), contactId_(contactId), origin_(origin), axis_(axis), begin_(0), Q_(), C_()
950  {
951  }
952 
953  virtual std::pair<int, int> begin() const override { return std::make_pair(begin_, begin_); }
954 
955  virtual void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const SolverData & data) override;
956  virtual void update(const std::vector<rbd::MultiBody> & mbs,
957  const std::vector<rbd::MultiBodyConfig> & mbcs,
958  const SolverData & data) override;
959 
960  virtual const Eigen::MatrixXd & Q() const override;
961  virtual const Eigen::VectorXd & C() const override;
962 
963 private:
964  ContactId contactId_;
965  Eigen::Vector3d origin_;
966  Eigen::Vector3d axis_;
967  int begin_;
968 
969  Eigen::MatrixXd Q_;
970  Eigen::VectorXd C_;
971 };
972 
973 class TASKS_DLLAPI LinVelocityTask : public HighLevelTask
974 {
975 public:
976  LinVelocityTask(const std::vector<rbd::MultiBody> & mbs,
977  int robotIndex,
978  const std::string & bodyName,
979  const Eigen::Vector3d & vel,
980  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
981 
982  tasks::LinVelocityTask & task() { return pt_; }
983 
984  void velocity(const Eigen::Vector3d & s) { pt_.velocity(s); }
985 
986  const Eigen::Vector3d & velocity() const { return pt_.velocity(); }
987 
988  void bodyPoint(const Eigen::Vector3d & point) { pt_.bodyPoint(point); }
989 
990  const Eigen::Vector3d & bodyPoint() const { return pt_.bodyPoint(); }
991 
992  virtual int dim() override;
993  virtual void update(const std::vector<rbd::MultiBody> & mbs,
994  const std::vector<rbd::MultiBodyConfig> & mbcs,
995  const SolverData & data) override;
996 
997  virtual const Eigen::MatrixXd & jac() const override;
998  virtual const Eigen::VectorXd & eval() const override;
999  virtual const Eigen::VectorXd & speed() const override;
1000  virtual const Eigen::VectorXd & normalAcc() const override;
1001 
1002 private:
1004  int robotIndex_;
1005 };
1006 
1007 class TASKS_DLLAPI OrientationTrackingTask : public HighLevelTask
1008 {
1009 public:
1010  OrientationTrackingTask(const std::vector<rbd::MultiBody> & mbs,
1011  int robotIndex,
1012  const std::string & bodyName,
1013  const Eigen::Vector3d & bodyPoint,
1014  const Eigen::Vector3d & bodyAxis,
1015  const std::vector<std::string> & trackingJointsName,
1016  const Eigen::Vector3d & trackedPoint);
1017 
1019 
1020  void trackedPoint(const Eigen::Vector3d & tp) { ott_.trackedPoint(tp); }
1021 
1022  const Eigen::Vector3d & trackedPoint() const { return ott_.trackedPoint(); }
1023 
1024  void bodyPoint(const Eigen::Vector3d & bp) { ott_.bodyPoint(bp); }
1025 
1026  const Eigen::Vector3d & bodyPoint() const { return ott_.bodyPoint(); }
1027 
1028  void bodyAxis(const Eigen::Vector3d & ba) { ott_.bodyAxis(ba); }
1029 
1030  const Eigen::Vector3d & bodyAxis() const { return ott_.bodyAxis(); }
1031 
1032  virtual int dim() override;
1033  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1034  const std::vector<rbd::MultiBodyConfig> & mbcs,
1035  const SolverData & data) override;
1036 
1037  virtual const Eigen::MatrixXd & jac() const override;
1038  virtual const Eigen::VectorXd & eval() const override;
1039  virtual const Eigen::VectorXd & speed() const override;
1040  virtual const Eigen::VectorXd & normalAcc() const override;
1041 
1042 private:
1043  int robotIndex_;
1045  Eigen::VectorXd alphaVec_;
1046  Eigen::VectorXd speed_, normalAcc_;
1047 };
1048 
1049 class TASKS_DLLAPI RelativeDistTask : public HighLevelTask
1050 {
1051 public:
1052  RelativeDistTask(const std::vector<rbd::MultiBody> & mbs,
1053  const int rIndex,
1054  const double timestep,
1057  const Eigen::Vector3d & u1 = Eigen::Vector3d::Zero(),
1058  const Eigen::Vector3d & u2 = Eigen::Vector3d::Zero());
1059 
1060  tasks::RelativeDistTask & task() { return rdt_; }
1061 
1062  void robotPoint(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & point)
1063  {
1064  int bIndex = mb.bodyIndexByName(bName);
1065  rdt_.robotPoint(bIndex, point);
1066  }
1067  void envPoint(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & point)
1068  {
1069  int bIndex = mb.bodyIndexByName(bName);
1070  rdt_.envPoint(bIndex, point);
1071  }
1072  void vector(const rbd::MultiBody & mb, const std::string & bName, const Eigen::Vector3d & u)
1073  {
1074  int bIndex = mb.bodyIndexByName(bName);
1075  rdt_.vector(bIndex, u);
1076  }
1077 
1078  virtual int dim() override;
1079  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1080  const std::vector<rbd::MultiBodyConfig> & mbcs,
1081  const SolverData & data) override;
1082 
1083  virtual const Eigen::MatrixXd & jac() const override;
1084  virtual const Eigen::VectorXd & eval() const override;
1085  virtual const Eigen::VectorXd & speed() const override;
1086  virtual const Eigen::VectorXd & normalAcc() const override;
1087 
1088 private:
1089  int rIndex_;
1091 };
1092 
1093 class TASKS_DLLAPI VectorOrientationTask : public HighLevelTask
1094 {
1095 public:
1096  VectorOrientationTask(const std::vector<rbd::MultiBody> & mbs,
1097  int robotIndex,
1098  const std::string & bodyName,
1099  const Eigen::Vector3d & bodyVector,
1100  const Eigen::Vector3d & targetVector);
1101 
1102  tasks::VectorOrientationTask & task() { return vot_; }
1103  void bodyVector(const Eigen::Vector3d & vector) { vot_.bodyVector(vector); }
1104  const Eigen::Vector3d & bodyVector() const { return vot_.bodyVector(); }
1105  void target(const Eigen::Vector3d & vector) { vot_.target(vector); }
1106  const Eigen::Vector3d & target() const { return vot_.target(); }
1107  const Eigen::Vector3d & actual() const { return vot_.actual(); }
1108 
1109  virtual int dim() override;
1110  virtual void update(const std::vector<rbd::MultiBody> & mbs,
1111  const std::vector<rbd::MultiBodyConfig> & mbcs,
1112  const SolverData & data) override;
1113 
1114  virtual const Eigen::MatrixXd & jac() const override;
1115  virtual const Eigen::VectorXd & eval() const override;
1116  virtual const Eigen::VectorXd & speed() const override;
1117  virtual const Eigen::VectorXd & normalAcc() const override;
1118 
1119 private:
1121  int robotIndex_;
1122 };
1123 
1124 } // namespace qp
1125 
1126 } // namespace tasks
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:737
void com(const Eigen::Vector3d &com)
Definition: QPTasks.h:747
virtual const Eigen::VectorXd & eval() const override
const Eigen::Vector3d & com() const
Definition: QPTasks.h:749
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:751
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:745
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:912
ContactTask(ContactId contactId, double stiffness, double weight)
Definition: QPTasks.h:914
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:920
void error(const Eigen::Vector3d &error)
virtual const Eigen::MatrixXd & Q() const override
Definition: QPTasks.h:669
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:687
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:690
tasks::GazeTask & task()
Definition: QPTasks.h:685
virtual const Eigen::MatrixXd & jac() const override
Definition: QPTasks.h:946
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:953
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:948
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:309
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:974
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
const Eigen::Vector3d & bodyPoint() const
Definition: QPTasks.h:990
virtual const Eigen::MatrixXd & jac() const override
virtual int dim() override
const Eigen::Vector3d & velocity() const
Definition: QPTasks.h:986
tasks::LinVelocityTask & task()
Definition: QPTasks.h:982
void velocity(const Eigen::Vector3d &s)
Definition: QPTasks.h:984
void bodyPoint(const Eigen::Vector3d &point)
Definition: QPTasks.h:988
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:886
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & normalAcc() const override
const sva::ForceVecd momentum() const
Definition: QPTasks.h:894
virtual int dim() override
tasks::MomentumTask & task()
Definition: QPTasks.h:890
void momentum(const sva::ForceVecd &mom)
Definition: QPTasks.h:892
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:771
void updateInertialParameters(const std::vector< rbd::MultiBody > &mbs)
void com(const Eigen::Vector3d &com)
Definition: QPTasks.h:787
virtual const Eigen::MatrixXd & Q() const override
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:801
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:785
const Eigen::Vector3d com() const
Definition: QPTasks.h:789
double stiffness() const
Definition: QPTasks.h:793
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:799
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:831
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:859
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:857
double stiffness() const
Definition: QPTasks.h:851
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:843
const sva::PTransformd & X_r2b_r2s() const
Definition: QPTasks.h:525
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:542
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:538
void orientation(const Eigen::Matrix3d &ori)
Definition: QPTasks.h:540
virtual const Eigen::MatrixXd & jac() const override
tasks::OrientationTask & task()
Definition: QPTasks.h:536
virtual const Eigen::VectorXd & normalAcc() const override
Definition: QPTasks.h:1008
virtual const Eigen::VectorXd & normalAcc() const override
void trackedPoint(const Eigen::Vector3d &tp)
Definition: QPTasks.h:1020
const Eigen::Vector3d & bodyPoint() const
Definition: QPTasks.h:1026
const Eigen::Vector3d & trackedPoint() const
Definition: QPTasks.h:1022
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:1028
const Eigen::Vector3d & bodyAxis() const
Definition: QPTasks.h:1030
virtual const Eigen::VectorXd & speed() const override
void bodyPoint(const Eigen::Vector3d &bp)
Definition: QPTasks.h:1024
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:1018
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:709
tasks::PositionBasedVisServoTask & task()
Definition: QPTasks.h:717
void error(const sva::PTransformd &X_t_s)
Definition: QPTasks.h:719
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:491
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:507
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:505
tasks::PositionTask & task()
Definition: QPTasks.h:499
const Eigen::Vector3d & position() const
Definition: QPTasks.h:503
virtual int dim() override
void position(const Eigen::Vector3d &pos)
Definition: QPTasks.h:501
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:411
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:457
void gains(double stiffness, double damping)
void dimWeight(const Eigen::VectorXd &dimW) noexcept
Definition: QPTasks.h:461
void stiffness(double stiffness)
const std::vector< std::vector< double > > posture() const
Definition: QPTasks.h:423
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:450
double stiffness() const
Definition: QPTasks.h:425
tasks::PostureTask & task()
Definition: QPTasks.h:419
virtual const Eigen::VectorXd & C() const override
const Eigen::VectorXd & dimWeight() const noexcept
Definition: QPTasks.h:459
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:421
virtual std::pair< int, int > begin() const override
Definition: QPTasks.h:438
void refAccel(const Eigen::VectorXd &refAccel) noexcept
Definition: QPTasks.h:452
const Eigen::VectorXd & eval() const
void jointsStiffness(const std::vector< rbd::MultiBody > &mbs, const std::vector< JointStiffness > &jsv)
double damping() const
Definition: QPTasks.h:427
const Eigen::VectorXd & refVel() const noexcept
Definition: QPTasks.h:451
Definition: QPTasks.h:1050
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:1067
virtual const Eigen::VectorXd & speed() const override
tasks::RelativeDistTask & task()
Definition: QPTasks.h:1060
virtual const Eigen::VectorXd & eval() const override
void vector(const rbd::MultiBody &mb, const std::string &bName, const Eigen::Vector3d &u)
Definition: QPTasks.h:1072
virtual const Eigen::MatrixXd & jac() const override
void robotPoint(const rbd::MultiBody &mb, const std::string &bName, const Eigen::Vector3d &point)
Definition: QPTasks.h:1062
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:632
virtual const Eigen::VectorXd & eval() const override
virtual const Eigen::VectorXd & speed() const override
const Eigen::Matrix3d & orientation() const
Definition: QPTasks.h:651
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:647
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:645
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:649
virtual const Eigen::MatrixXd & jac() const override
TransformTask in surface frame.
Definition: QPTasks.h:599
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:349
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:399
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:393
virtual const Eigen::MatrixXd & Q() const override
Definition: QPTasks.h:395
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:397
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:561
const sva::PTransformd & target() const
Definition: QPTasks.h:576
transform_task_t & task()
Definition: QPTasks.h:572
virtual const Eigen::VectorXd & normalAcc() const override
Definition: QPTasks.h:590
transform_task_t tt_
Definition: QPTasks.h:593
virtual const Eigen::VectorXd & eval() const override
Definition: QPTasks.h:586
const sva::PTransformd & X_b_p() const
Definition: QPTasks.h:580
virtual const Eigen::VectorXd & speed() const override
Definition: QPTasks.h:588
int robotIndex_
Definition: QPTasks.h:594
void X_b_p(const sva::PTransformd &X_b_p)
Definition: QPTasks.h:578
virtual const Eigen::MatrixXd & jac() const override
Definition: QPTasks.h:584
virtual int dim() override
Definition: QPTasks.h:582
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:563
void target(const sva::PTransformd &X_0_t)
Definition: QPTasks.h:574
TransformTask in world or user frame.
Definition: QPTasks.h:614
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:1094
void bodyVector(const Eigen::Vector3d &vector)
Definition: QPTasks.h:1103
virtual const Eigen::VectorXd & eval() const override
const Eigen::Vector3d & target() const
Definition: QPTasks.h:1106
void target(const Eigen::Vector3d &vector)
Definition: QPTasks.h:1105
virtual const Eigen::VectorXd & normalAcc() const override
const Eigen::Vector3d & actual() const
Definition: QPTasks.h:1107
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:1102
const Eigen::Vector3d & bodyVector() const
Definition: QPTasks.h:1104
virtual const Eigen::VectorXd & speed() const override
virtual const Eigen::MatrixXd & jac() const override
Definition: GenQPSolver.h:21
Definition: GenQPUtils.h:19
Definition: Bounds.h:95
Definition: Bounds.h:113
Definition: QPContacts.h:50
Definition: QPTasks.h:337
std::string jointName
Definition: QPTasks.h:344
JointGains(const std::string &jName, double stif)
Definition: QPTasks.h:339
double damping
Definition: QPTasks.h:345
JointGains(const std::string &jName, double stif, double damp)
Definition: QPTasks.h:342
double stiffness
Definition: QPTasks.h:345
JointGains()
Definition: QPTasks.h:338
Definition: QPTasks.h:328
JointStiffness(const std::string &jName, double stif)
Definition: QPTasks.h:330
JointStiffness()
Definition: QPTasks.h:329
std::string jointName
Definition: QPTasks.h:332
double stiffness
Definition: QPTasks.h:333
int dof
Definition: QPTasks.h:299