Tasks.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 // Eigen
9 #include <Eigen/Core>
10 
11 // RBDyn
12 #include <tasks/config.hh>
13 
14 #include <RBDyn/CoM.h>
15 #include <RBDyn/Jacobian.h>
16 #include <RBDyn/Momentum.h>
17 #include <RBDyn/VisServo.h>
18 
19 #include <memory>
20 
21 // forward declarations
22 // RBDyn
23 namespace rbd
24 {
25 class MultiBody;
26 struct MultiBodyConfig;
27 } // namespace rbd
28 
29 namespace tasks
30 {
31 
32 class TASKS_DLLAPI PositionTask
33 {
34 public:
35  PositionTask(const rbd::MultiBody & mb,
36  const std::string & bodyName,
37  const Eigen::Vector3d & pos,
38  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
39 
40  void position(const Eigen::Vector3d & pos);
41  const Eigen::Vector3d & position() const;
42 
43  void bodyPoint(const Eigen::Vector3d & point);
44  const Eigen::Vector3d & bodyPoint() const;
45 
46  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
47  void update(const rbd::MultiBody & mb,
48  const rbd::MultiBodyConfig & mbc,
49  const std::vector<sva::MotionVecd> & normalAccB);
50  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
51 
52  const Eigen::VectorXd & eval() const;
53  const Eigen::VectorXd & speed() const;
54  const Eigen::VectorXd & normalAcc() const;
55 
56  const Eigen::MatrixXd & jac() const;
57  const Eigen::MatrixXd & jacDot() const;
58 
59 private:
60  Eigen::Vector3d pos_;
61  sva::PTransformd point_;
62  int bodyIndex_;
63  rbd::Jacobian jac_;
64 
65  Eigen::VectorXd eval_;
66  Eigen::VectorXd speed_;
67  Eigen::VectorXd normalAcc_;
68  Eigen::MatrixXd jacMat_;
69  Eigen::MatrixXd jacDotMat_;
70 };
71 
72 class TASKS_DLLAPI OrientationTask
73 {
74 public:
75  OrientationTask(const rbd::MultiBody & mb, const std::string & bodyName, const Eigen::Quaterniond & ori);
76  OrientationTask(const rbd::MultiBody & mb, const std::string & bodyName, const Eigen::Matrix3d & ori);
77 
78  void orientation(const Eigen::Quaterniond & ori);
79  void orientation(const Eigen::Matrix3d & ori);
80  const Eigen::Matrix3d & orientation() const;
81 
82  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
83  void update(const rbd::MultiBody & mb,
84  const rbd::MultiBodyConfig & mbc,
85  const std::vector<sva::MotionVecd> & normalAccB);
86  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
87 
88  const Eigen::VectorXd & eval() const;
89  const Eigen::VectorXd & speed() const;
90  const Eigen::VectorXd & normalAcc() const;
91 
92  const Eigen::MatrixXd & jac() const;
93  const Eigen::MatrixXd & jacDot() const;
94 
95 private:
96  Eigen::Matrix3d ori_;
97  int bodyIndex_;
98  rbd::Jacobian jac_;
99 
100  Eigen::VectorXd eval_;
101  Eigen::VectorXd speed_;
102  Eigen::VectorXd normalAcc_;
103  Eigen::MatrixXd jacMat_;
104  Eigen::MatrixXd jacDotMat_;
105 };
106 
107 class TASKS_DLLAPI TransformTaskCommon
108 {
109 public:
110  TransformTaskCommon(const rbd::MultiBody & mb,
111  const std::string & bodyName,
112  const sva::PTransformd & X_0_t,
113  const sva::PTransformd & X_b_p);
114 
115  void target(const sva::PTransformd & X_0_t);
116  const sva::PTransformd & target() const;
117 
118  void X_b_p(const sva::PTransformd & X_b_p);
119  const sva::PTransformd & X_b_p() const;
120 
121  const Eigen::VectorXd & eval() const;
122  const Eigen::VectorXd & speed() const;
123  const Eigen::VectorXd & normalAcc() const;
124 
125  const Eigen::MatrixXd & jac() const;
126 
127 protected:
128  sva::PTransformd X_0_t_;
129  sva::PTransformd X_b_p_;
131  rbd::Jacobian jac_;
132 
133  Eigen::VectorXd eval_;
134  Eigen::VectorXd speed_;
135  Eigen::VectorXd normalAcc_;
136  Eigen::MatrixXd jacMat_;
137 };
138 
139 class TASKS_DLLAPI SurfaceTransformTask : public TransformTaskCommon
140 {
141 public:
145  SurfaceTransformTask(const rbd::MultiBody & mb,
146  const std::string & bodyName,
147  const sva::PTransformd & X_0_t,
148  const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
149 
150  void update(const rbd::MultiBody & mb,
151  const rbd::MultiBodyConfig & mbc,
152  const std::vector<sva::MotionVecd> & normalAccB);
153 
154 protected:
155  Eigen::MatrixXd jacMatTmp_;
156 };
157 
158 class TASKS_DLLAPI TransformTask : public TransformTaskCommon
159 {
160 public:
167  TransformTask(const rbd::MultiBody & mb,
168  const std::string & bodyName,
169  const sva::PTransformd & X_0_t,
170  const sva::PTransformd & X_b_p = sva::PTransformd::Identity(),
171  const Eigen::Matrix3d & E_0_c = Eigen::Matrix3d::Identity());
172 
173  void E_0_c(const Eigen::Matrix3d & E_0_c);
174  const Eigen::Matrix3d & E_0_c() const;
175 
176  void update(const rbd::MultiBody & mb,
177  const rbd::MultiBodyConfig & mbc,
178  const std::vector<sva::MotionVecd> & normalAccB);
179 
180 private:
181  Eigen::Matrix3d E_0_c_;
182 };
183 
184 class TASKS_DLLAPI MultiRobotTransformTask
185 {
186 public:
187  MultiRobotTransformTask(const std::vector<rbd::MultiBody> & mbs,
188  int r1Index,
189  int r2Index,
190  const std::string & r1BodyName,
191  const std::string & r2BodyName,
192  const sva::PTransformd & X_r1b_r1s,
193  const sva::PTransformd & X_r2b_r2s);
194 
195  int r1Index() const;
196  int r2Index() const;
197 
198  void X_r1b_r1s(const sva::PTransformd & X_r1b_r1s);
199  const sva::PTransformd & X_r1b_r1s() const;
200 
201  void X_r2b_r2s(const sva::PTransformd & X_r2b_r2s);
202  const sva::PTransformd & X_r2b_r2s() const;
203 
204  void update(const std::vector<rbd::MultiBody> & mbs,
205  const std::vector<rbd::MultiBodyConfig> & mbcs,
206  const std::vector<std::vector<sva::MotionVecd>> & normalAccB);
207 
208  const Eigen::VectorXd & eval() const;
209  const Eigen::VectorXd & speed() const;
210  const Eigen::VectorXd & normalAcc() const;
211 
212  const Eigen::MatrixXd & jac(int index) const;
213 
214 private:
215  int r1Index_, r2Index_;
216  int r1BodyIndex_, r2BodyIndex_;
217  sva::PTransformd X_r1b_r1s_, X_r2b_r2s_;
218  rbd::Jacobian jacR1B_, jacR2B_;
219 
220  Eigen::VectorXd eval_;
221  Eigen::VectorXd speed_;
222  Eigen::VectorXd normalAcc_;
223  Eigen::MatrixXd jacMat1_, jacMat2_;
224  std::vector<Eigen::MatrixXd> fullJacMat_;
225 };
226 
227 class TASKS_DLLAPI SurfaceOrientationTask
228 {
229 public:
230  SurfaceOrientationTask(const rbd::MultiBody & mb,
231  const std::string & bodyName,
232  const Eigen::Quaterniond & ori,
233  const sva::PTransformd & X_b_s);
234  SurfaceOrientationTask(const rbd::MultiBody & mb,
235  const std::string & bodyName,
236  const Eigen::Matrix3d & ori,
237  const sva::PTransformd & X_b_s);
238 
239  void orientation(const Eigen::Quaterniond & ori);
240  void orientation(const Eigen::Matrix3d & ori);
241  const Eigen::Matrix3d & orientation() const;
242 
243  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
244  void update(const rbd::MultiBody & mb,
245  const rbd::MultiBodyConfig & mbc,
246  const std::vector<sva::MotionVecd> & normalAccB);
247  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
248 
249  const Eigen::VectorXd & eval() const;
250  const Eigen::VectorXd & speed() const;
251  const Eigen::VectorXd & normalAcc() const;
252 
253  const Eigen::MatrixXd & jac() const;
254  const Eigen::MatrixXd & jacDot() const;
255 
256 private:
257  Eigen::Matrix3d ori_;
258  int bodyIndex_;
259  rbd::Jacobian jac_;
260  sva::PTransformd X_b_s_;
261 
262  Eigen::VectorXd eval_;
263  Eigen::VectorXd speed_;
264  Eigen::VectorXd normalAcc_;
265  Eigen::MatrixXd jacMat_;
266  Eigen::MatrixXd jacDotMat_;
267 };
268 
269 class TASKS_DLLAPI GazeTask
270 {
271 public:
272  GazeTask(const rbd::MultiBody & mb,
273  const std::string & bodyName,
274  const Eigen::Vector2d & point2d,
275  double depthEstimate,
276  const sva::PTransformd & X_b_gaze,
277  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
278  GazeTask(const rbd::MultiBody & mb,
279  const std::string & bodyName,
280  const Eigen::Vector3d & point3d,
281  const sva::PTransformd & X_b_gaze,
282  const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
283 
284  GazeTask(const GazeTask & rhs);
285 
286  GazeTask(GazeTask &&) = default;
287 
288  GazeTask & operator=(const GazeTask & rhs);
289 
290  GazeTask & operator=(GazeTask &&) = default;
291 
292  void error(const Eigen::Vector2d & point2d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
293  void error(const Eigen::Vector3d & point3d, const Eigen::Vector2d & point2d_ref = Eigen::Vector2d::Zero());
294 
295  void update(const rbd::MultiBody & mb,
296  const rbd::MultiBodyConfig & mbc,
297  const std::vector<sva::MotionVecd> & normalAccB);
298 
299  const Eigen::VectorXd & eval() const;
300  const Eigen::VectorXd & speed() const;
301  const Eigen::VectorXd & normalAcc() const;
302 
303  const Eigen::MatrixXd & jac() const;
304  const Eigen::MatrixXd & jacDot() const;
305 
306 private:
307  std::unique_ptr<Eigen::Vector2d> point2d_;
308  std::unique_ptr<Eigen::Vector2d> point2d_ref_;
309  double depthEstimate_;
310  int bodyIndex_;
311  rbd::Jacobian jac_;
312  sva::PTransformd X_b_gaze_;
313  std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_;
314  std::unique_ptr<Eigen::Matrix<double, 6, 1>> surfaceVelocity_;
315  std::unique_ptr<Eigen::Matrix<double, 1, 6>> L_Z_dot_;
316  std::unique_ptr<Eigen::Matrix<double, 2, 6>> L_img_dot_;
317 
318  Eigen::VectorXd eval_;
319  Eigen::VectorXd speed_;
320  Eigen::VectorXd normalAcc_;
321  Eigen::MatrixXd jacMat_;
322  Eigen::MatrixXd jacDotMat_;
323 };
324 
325 class TASKS_DLLAPI PositionBasedVisServoTask
326 {
327 public:
328  PositionBasedVisServoTask(const rbd::MultiBody & mb,
329  const std::string & bodyName,
330  const sva::PTransformd & X_t_s,
331  const sva::PTransformd & X_b_s);
332 
334 
336 
337  PositionBasedVisServoTask & operator=(const PositionBasedVisServoTask & rhs);
338 
339  PositionBasedVisServoTask & operator=(PositionBasedVisServoTask &&) = default;
340 
341  void error(const sva::PTransformd & X_t_s);
342 
343  void update(const rbd::MultiBody & mb,
344  const rbd::MultiBodyConfig & mbc,
345  const std::vector<sva::MotionVecd> & normalAccB);
346 
347  const Eigen::VectorXd & eval() const;
348  const Eigen::VectorXd & speed() const;
349  const Eigen::VectorXd & normalAcc() const;
350 
351  const Eigen::MatrixXd & jac() const;
352  const Eigen::MatrixXd & jacDot() const;
353 
354 private:
355  sva::PTransformd X_t_s_;
356  sva::PTransformd X_b_s_;
357  double angle_;
358  Eigen::Vector3d axis_;
359  int bodyIndex_;
360  rbd::Jacobian jac_;
361  std::unique_ptr<Eigen::Matrix<double, 6, 6>> L_pbvs_;
362  std::unique_ptr<Eigen::Matrix<double, 6, 1>> surfaceVelocity_;
363  Eigen::Matrix3d omegaSkew_;
364  std::unique_ptr<Eigen::Matrix<double, 6, 6>> L_pbvs_dot_;
365 
366  Eigen::VectorXd eval_;
367  Eigen::VectorXd speed_;
368  Eigen::VectorXd normalAcc_;
369  Eigen::MatrixXd jacMat_;
370  Eigen::MatrixXd jacDotMat_;
371 };
372 
373 class TASKS_DLLAPI PostureTask
374 {
375 public:
376  PostureTask(const rbd::MultiBody & mb, std::vector<std::vector<double>> q);
377 
378  void posture(std::vector<std::vector<double>> q);
379  const std::vector<std::vector<double>> posture() const;
380 
381  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
382  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
383 
384  const Eigen::VectorXd & eval() const;
385  const Eigen::MatrixXd & jac() const;
386  const Eigen::MatrixXd & jacDot() const;
387 
388 private:
389  std::vector<std::vector<double>> q_;
390 
391  Eigen::VectorXd eval_;
392  Eigen::MatrixXd jacMat_;
393  Eigen::MatrixXd jacDotMat_;
394 };
395 
396 class TASKS_DLLAPI CoMTask
397 {
398 public:
399  CoMTask(const rbd::MultiBody & mb, const Eigen::Vector3d & com);
400  CoMTask(const rbd::MultiBody & mb, const Eigen::Vector3d & com, std::vector<double> weight);
401 
402  void com(const Eigen::Vector3d & com);
403  const Eigen::Vector3d & com() const;
404  const Eigen::Vector3d & actual() const;
405 
406  void updateInertialParameters(const rbd::MultiBody & mb);
407 
408  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
409  void update(const rbd::MultiBody & mb,
410  const rbd::MultiBodyConfig & mbc,
411  const Eigen::Vector3d & com,
412  const std::vector<sva::MotionVecd> & normalAccB);
413  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
414 
415  const Eigen::VectorXd & eval() const;
416  const Eigen::VectorXd & speed() const;
417  const Eigen::VectorXd & normalAcc() const;
418 
419  const Eigen::MatrixXd & jac() const;
420  const Eigen::MatrixXd & jacDot() const;
421 
422 private:
423  Eigen::Vector3d com_;
424  Eigen::Vector3d actual_;
425  rbd::CoMJacobian jac_;
426 
427  Eigen::VectorXd eval_;
428  Eigen::VectorXd speed_;
429  Eigen::VectorXd normalAcc_;
430  Eigen::MatrixXd jacMat_;
431  Eigen::MatrixXd jacDotMat_;
432 };
433 
434 class TASKS_DLLAPI MultiCoMTask
435 {
436 public:
437  MultiCoMTask(const std::vector<rbd::MultiBody> & mbs, std::vector<int> robotIndexes, const Eigen::Vector3d & com);
438 
439  const std::vector<int> & robotIndexes() const;
440 
441  void com(const Eigen::Vector3d & com);
442  const Eigen::Vector3d com() const;
443 
444  void updateInertialParameters(const std::vector<rbd::MultiBody> & mbs);
445 
446  void update(const std::vector<rbd::MultiBody> & mbs, const std::vector<rbd::MultiBodyConfig> & mbcs);
447  void update(const std::vector<rbd::MultiBody> & mbs,
448  const std::vector<rbd::MultiBodyConfig> & mbcs,
449  const std::vector<std::vector<sva::MotionVecd>> & normalAccB);
450  void update(const std::vector<rbd::MultiBody> & mbs,
451  const std::vector<rbd::MultiBodyConfig> & mbcs,
452  const std::vector<Eigen::Vector3d> & coms,
453  const std::vector<std::vector<sva::MotionVecd>> & normalAccB);
454 
455  const Eigen::VectorXd & eval() const;
456  const Eigen::VectorXd & speed() const;
457  const Eigen::VectorXd & normalAcc() const;
458 
459  const Eigen::MatrixXd & jac(int index) const;
460 
461 private:
462  void update(const std::vector<rbd::MultiBody> & mbs,
463  const std::vector<rbd::MultiBodyConfig> & mbcs,
464  const std::vector<std::vector<sva::MotionVecd>> & normalAccB,
465  const Eigen::Vector3d & multiCoM);
466 
467  void computeRobotsWeight(const std::vector<rbd::MultiBody> & mbs);
468 
469 private:
470  Eigen::Vector3d com_;
471  std::vector<int> robotIndexes_;
472  std::vector<double> robotsWeight_;
473  std::vector<rbd::CoMJacobian> jac_;
474 
475  Eigen::VectorXd eval_;
476  Eigen::VectorXd speed_;
477  Eigen::VectorXd normalAcc_;
478  std::vector<Eigen::MatrixXd> jacMat_;
479 };
480 
481 class TASKS_DLLAPI MomentumTask
482 {
483 public:
484  MomentumTask(const rbd::MultiBody & mb, const sva::ForceVecd mom);
485 
486  void momentum(const sva::ForceVecd & mom);
487  const sva::ForceVecd momentum() const;
488 
489  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
490  void update(const rbd::MultiBody & mb,
491  const rbd::MultiBodyConfig & mbc,
492  const std::vector<sva::MotionVecd> & normalAccB);
493  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
494 
495  const Eigen::VectorXd & eval() const;
496  const Eigen::VectorXd & speed() const;
497  const Eigen::VectorXd & normalAcc() const;
498 
499  const Eigen::MatrixXd & jac() const;
500  const Eigen::MatrixXd & jacDot() const;
501 
502 private:
503  sva::ForceVecd momentum_;
504  rbd::CentroidalMomentumMatrix momentumMatrix_;
505  Eigen::VectorXd eval_;
506  Eigen::VectorXd speed_;
507  Eigen::VectorXd normalAcc_;
508  Eigen::MatrixXd jacMat_;
509  Eigen::MatrixXd jacDotMat_;
510 };
511 
512 class TASKS_DLLAPI LinVelocityTask
513 {
514 public:
515  LinVelocityTask(const rbd::MultiBody & mb,
516  const std::string & bodyName,
517  const Eigen::Vector3d & vel,
518  const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
519 
520  void velocity(const Eigen::Vector3d & s);
521  const Eigen::Vector3d & velocity() const;
522 
523  void bodyPoint(const Eigen::Vector3d & point);
524  const Eigen::Vector3d & bodyPoint() const;
525 
526  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
527  void update(const rbd::MultiBody & mb,
528  const rbd::MultiBodyConfig & mbc,
529  const std::vector<sva::MotionVecd> & normalAccB);
530  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
531 
532  const Eigen::VectorXd & eval() const;
533  const Eigen::VectorXd & speed() const;
534  const Eigen::VectorXd & normalAcc() const;
535 
536  const Eigen::MatrixXd & jac() const;
537  const Eigen::MatrixXd & jacDot() const;
538 
539 private:
540  Eigen::Vector3d vel_;
541  sva::PTransformd point_;
542  int bodyIndex_;
543  rbd::Jacobian jac_;
544 
545  Eigen::VectorXd eval_;
546  Eigen::VectorXd speed_;
547  Eigen::VectorXd normalAcc_;
548  Eigen::MatrixXd jacMat_;
549  Eigen::MatrixXd jacDotMat_;
550 };
551 
552 class TASKS_DLLAPI OrientationTrackingTask
553 {
554 public:
555  OrientationTrackingTask(const rbd::MultiBody & mb,
556  const std::string & bodyName,
557  const Eigen::Vector3d & bodyPoint,
558  const Eigen::Vector3d & bodyAxis,
559  const std::vector<std::string> & trackingJointsName,
560  const Eigen::Vector3d & trackedPoint);
561 
562  void trackedPoint(const Eigen::Vector3d & tp);
563  const Eigen::Vector3d & trackedPoint() const;
564 
565  void bodyPoint(const Eigen::Vector3d & bp);
566  const Eigen::Vector3d & bodyPoint() const;
567 
568  void bodyAxis(const Eigen::Vector3d & ba);
569  const Eigen::Vector3d & bodyAxis() const;
570 
571  void update(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
572  void updateDot(const rbd::MultiBody & mb, const rbd::MultiBodyConfig & mbc);
573 
574  virtual const Eigen::MatrixXd & jac() const;
575  virtual const Eigen::MatrixXd & jacDot() const;
576  virtual const Eigen::VectorXd & eval() const;
577 
578 private:
579  void zeroJacobian(Eigen::MatrixXd & jac) const;
580 
581 private:
582  int bodyIndex_;
583  sva::PTransformd bodyPoint_;
584  Eigen::Vector3d bodyAxis_;
585  std::vector<int> zeroJacIndex_;
586  Eigen::Vector3d trackedPoint_;
587  rbd::Jacobian jac_;
588 
589  Eigen::VectorXd eval_;
590  Eigen::MatrixXd shortJacMat_;
591  Eigen::MatrixXd jacMat_;
592  Eigen::MatrixXd jacDotMat_;
593 };
594 
595 class TASKS_DLLAPI RelativeDistTask
596 {
597 public:
598  // Give information on 1 body (bodyName, r_b1_p, r_0_b2p)
599  typedef std::tuple<std::string, Eigen::Vector3d, Eigen::Vector3d> rbInfo;
600 
601 public:
602  RelativeDistTask(const rbd::MultiBody & mb,
603  const double timestep,
604  const rbInfo & rbi1,
605  const rbInfo & rbi2,
606  const Eigen::Vector3d & u1 = Eigen::Vector3d::Zero(),
607  const Eigen::Vector3d & u2 = Eigen::Vector3d::Zero());
608 
609  void robotPoint(const int bIndex, const Eigen::Vector3d & point);
610  void envPoint(const int bIndex, const Eigen::Vector3d & point);
611  void vector(const int bIndex, const Eigen::Vector3d & u);
612 
613  void update(const rbd::MultiBody & mb,
614  const rbd::MultiBodyConfig & mbc,
615  const std::vector<sva::MotionVecd> & normalAccB);
616 
617  const Eigen::VectorXd & eval() const;
618  const Eigen::VectorXd & speed() const;
619  const Eigen::VectorXd & normalAcc() const;
620 
621  const Eigen::MatrixXd & jac() const;
622 
623 private:
624  struct RelativeBodiesInfo
625  {
626  RelativeBodiesInfo() {}
627 
628  RelativeBodiesInfo(const rbd::MultiBody & mb, const rbInfo & rbi, const Eigen::Vector3d & fixedVector);
629 
630  int b1Index;
631  Eigen::Vector3d r_b1_p, r_0_b2p, n;
632  rbd::Jacobian jac;
633  Eigen::Vector3d u;
634  Eigen::Vector3d offn;
635  };
636 
637 private:
638  double timestep_;
639  bool isVectorFixed_;
640 
641  Eigen::VectorXd eval_;
642  Eigen::VectorXd speed_;
643  Eigen::VectorXd normalAcc_;
644  Eigen::MatrixXd jacMat_;
645 
646  RelativeBodiesInfo rbInfo_[2];
647 };
648 
649 class TASKS_DLLAPI VectorOrientationTask
650 {
651 public:
652  VectorOrientationTask(const rbd::MultiBody & mb,
653  const std::string & bodyName,
654  const Eigen::Vector3d & bodyVector,
655  const Eigen::Vector3d & targetVector);
656 
657  void update(const rbd::MultiBody & mb,
658  const rbd::MultiBodyConfig & mbc,
659  const std::vector<sva::MotionVecd> & normalAccB);
660 
661  void bodyVector(const Eigen::Vector3d & vector);
662  const Eigen::Vector3d & bodyVector() const;
663  void target(const Eigen::Vector3d & vector);
664  const Eigen::Vector3d & target() const;
665  const Eigen::Vector3d & actual() const;
666 
667  const Eigen::VectorXd & eval() const;
668  const Eigen::VectorXd & speed() const;
669  const Eigen::VectorXd & normalAcc() const;
670 
671  const Eigen::MatrixXd & jac() const;
672 
673 private:
674  Eigen::Matrix3d skewMatrix(const Eigen::Vector3d & v);
675 
676 private:
677  Eigen::Vector3d actualVector_, bodyVector_, targetVector_;
678  int bodyIndex_;
679  rbd::Jacobian jac_;
680 
681  Eigen::VectorXd eval_;
682  Eigen::VectorXd speed_;
683  Eigen::VectorXd normalAcc_;
684  Eigen::MatrixXd jacMat_;
685 };
686 
687 } // namespace tasks
tasks::TransformTaskCommon::X_0_t_
sva::PTransformd X_0_t_
Definition: Tasks.h:128
tasks::GazeTask
Definition: Tasks.h:269
tasks::TransformTask
Definition: Tasks.h:158
tasks::PositionTask
Definition: Tasks.h:32
tasks::TransformTaskCommon::eval_
Eigen::VectorXd eval_
Definition: Tasks.h:133
tasks::CoMTask
Definition: Tasks.h:396
tasks::OrientationTask
Definition: Tasks.h:72
tasks::OrientationTrackingTask
Definition: Tasks.h:552
tasks::LinVelocityTask
Definition: Tasks.h:512
tasks::TransformTaskCommon::speed_
Eigen::VectorXd speed_
Definition: Tasks.h:134
tasks::SurfaceTransformTask::jacMatTmp_
Eigen::MatrixXd jacMatTmp_
Definition: Tasks.h:155
tasks::MultiRobotTransformTask
Definition: Tasks.h:184
tasks::TransformTaskCommon::jac_
rbd::Jacobian jac_
Definition: Tasks.h:131
tasks::RelativeDistTask
Definition: Tasks.h:595
rbd
Definition: GenQPSolver.h:20
tasks::PostureTask
Definition: Tasks.h:373
tasks::MultiCoMTask
Definition: Tasks.h:434
tasks::TransformTaskCommon::bodyIndex_
int bodyIndex_
Definition: Tasks.h:130
tasks::TransformTaskCommon
Definition: Tasks.h:107
tasks::TransformTaskCommon::normalAcc_
Eigen::VectorXd normalAcc_
Definition: Tasks.h:135
tasks::SurfaceTransformTask
Definition: Tasks.h:139
tasks::PositionBasedVisServoTask
Definition: Tasks.h:325
tasks::VectorOrientationTask
Definition: Tasks.h:649
tasks::RelativeDistTask::rbInfo
std::tuple< std::string, Eigen::Vector3d, Eigen::Vector3d > rbInfo
Definition: Tasks.h:599
tasks::TransformTaskCommon::jacMat_
Eigen::MatrixXd jacMat_
Definition: Tasks.h:136
tasks::TransformTaskCommon::X_b_p_
sva::PTransformd X_b_p_
Definition: Tasks.h:129
tasks::SurfaceOrientationTask
Definition: Tasks.h:227
tasks
Definition: GenQPUtils.h:18
tasks::MomentumTask
Definition: Tasks.h:481