12 #include <tasks/config.hh>
14 #include <RBDyn/CoM.h>
15 #include <RBDyn/Jacobian.h>
16 #include <RBDyn/Momentum.h>
17 #include <RBDyn/VisServo.h>
26 struct MultiBodyConfig;
36 const std::string & bodyName,
37 const Eigen::Vector3d & pos,
38 const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
40 void position(
const Eigen::Vector3d & pos);
41 const Eigen::Vector3d & position()
const;
43 void bodyPoint(
const Eigen::Vector3d & point);
44 const Eigen::Vector3d & bodyPoint()
const;
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);
52 const Eigen::VectorXd & eval()
const;
53 const Eigen::VectorXd & speed()
const;
54 const Eigen::VectorXd & normalAcc()
const;
56 const Eigen::MatrixXd & jac()
const;
57 const Eigen::MatrixXd & jacDot()
const;
61 sva::PTransformd point_;
65 Eigen::VectorXd eval_;
66 Eigen::VectorXd speed_;
67 Eigen::VectorXd normalAcc_;
68 Eigen::MatrixXd jacMat_;
69 Eigen::MatrixXd jacDotMat_;
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);
78 void orientation(
const Eigen::Quaterniond & ori);
79 void orientation(
const Eigen::Matrix3d & ori);
80 const Eigen::Matrix3d & orientation()
const;
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);
88 const Eigen::VectorXd & eval()
const;
89 const Eigen::VectorXd & speed()
const;
90 const Eigen::VectorXd & normalAcc()
const;
92 const Eigen::MatrixXd & jac()
const;
93 const Eigen::MatrixXd & jacDot()
const;
100 Eigen::VectorXd eval_;
101 Eigen::VectorXd speed_;
102 Eigen::VectorXd normalAcc_;
103 Eigen::MatrixXd jacMat_;
104 Eigen::MatrixXd jacDotMat_;
111 const std::string & bodyName,
112 const sva::PTransformd & X_0_t,
113 const sva::PTransformd & X_b_p);
115 void target(
const sva::PTransformd & X_0_t);
116 const sva::PTransformd & target()
const;
118 void X_b_p(
const sva::PTransformd & X_b_p);
119 const sva::PTransformd & X_b_p()
const;
121 const Eigen::VectorXd & eval()
const;
122 const Eigen::VectorXd & speed()
const;
123 const Eigen::VectorXd & normalAcc()
const;
125 const Eigen::MatrixXd & jac()
const;
146 const std::string & bodyName,
147 const sva::PTransformd & X_0_t,
148 const sva::PTransformd & X_b_p = sva::PTransformd::Identity());
150 void update(
const rbd::MultiBody & mb,
151 const rbd::MultiBodyConfig & mbc,
152 const std::vector<sva::MotionVecd> & normalAccB);
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());
173 void E_0_c(
const Eigen::Matrix3d & E_0_c);
174 const Eigen::Matrix3d & E_0_c()
const;
176 void update(
const rbd::MultiBody & mb,
177 const rbd::MultiBodyConfig & mbc,
178 const std::vector<sva::MotionVecd> & normalAccB);
181 Eigen::Matrix3d E_0_c_;
190 const std::string & r1BodyName,
191 const std::string & r2BodyName,
192 const sva::PTransformd & X_r1b_r1s,
193 const sva::PTransformd & X_r2b_r2s);
198 void X_r1b_r1s(
const sva::PTransformd & X_r1b_r1s);
199 const sva::PTransformd & X_r1b_r1s()
const;
201 void X_r2b_r2s(
const sva::PTransformd & X_r2b_r2s);
202 const sva::PTransformd & X_r2b_r2s()
const;
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);
208 const Eigen::VectorXd & eval()
const;
209 const Eigen::VectorXd & speed()
const;
210 const Eigen::VectorXd & normalAcc()
const;
212 const Eigen::MatrixXd & jac(
int index)
const;
215 int r1Index_, r2Index_;
216 int r1BodyIndex_, r2BodyIndex_;
217 sva::PTransformd X_r1b_r1s_, X_r2b_r2s_;
218 rbd::Jacobian jacR1B_, jacR2B_;
220 Eigen::VectorXd eval_;
221 Eigen::VectorXd speed_;
222 Eigen::VectorXd normalAcc_;
223 Eigen::MatrixXd jacMat1_, jacMat2_;
224 std::vector<Eigen::MatrixXd> fullJacMat_;
231 const std::string & bodyName,
232 const Eigen::Quaterniond & ori,
233 const sva::PTransformd & X_b_s);
235 const std::string & bodyName,
236 const Eigen::Matrix3d & ori,
237 const sva::PTransformd & X_b_s);
239 void orientation(
const Eigen::Quaterniond & ori);
240 void orientation(
const Eigen::Matrix3d & ori);
241 const Eigen::Matrix3d & orientation()
const;
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);
249 const Eigen::VectorXd & eval()
const;
250 const Eigen::VectorXd & speed()
const;
251 const Eigen::VectorXd & normalAcc()
const;
253 const Eigen::MatrixXd & jac()
const;
254 const Eigen::MatrixXd & jacDot()
const;
257 Eigen::Matrix3d ori_;
260 sva::PTransformd X_b_s_;
262 Eigen::VectorXd eval_;
263 Eigen::VectorXd speed_;
264 Eigen::VectorXd normalAcc_;
265 Eigen::MatrixXd jacMat_;
266 Eigen::MatrixXd jacDotMat_;
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());
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());
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());
295 void update(
const rbd::MultiBody & mb,
296 const rbd::MultiBodyConfig & mbc,
297 const std::vector<sva::MotionVecd> & normalAccB);
299 const Eigen::VectorXd & eval()
const;
300 const Eigen::VectorXd & speed()
const;
301 const Eigen::VectorXd & normalAcc()
const;
303 const Eigen::MatrixXd & jac()
const;
304 const Eigen::MatrixXd & jacDot()
const;
307 std::unique_ptr<Eigen::Vector2d> point2d_;
308 std::unique_ptr<Eigen::Vector2d> point2d_ref_;
309 double depthEstimate_;
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_;
318 Eigen::VectorXd eval_;
319 Eigen::VectorXd speed_;
320 Eigen::VectorXd normalAcc_;
321 Eigen::MatrixXd jacMat_;
322 Eigen::MatrixXd jacDotMat_;
329 const std::string & bodyName,
330 const sva::PTransformd & X_t_s,
331 const sva::PTransformd & X_b_s);
341 void error(
const sva::PTransformd & X_t_s);
343 void update(
const rbd::MultiBody & mb,
344 const rbd::MultiBodyConfig & mbc,
345 const std::vector<sva::MotionVecd> & normalAccB);
347 const Eigen::VectorXd & eval()
const;
348 const Eigen::VectorXd & speed()
const;
349 const Eigen::VectorXd & normalAcc()
const;
351 const Eigen::MatrixXd & jac()
const;
352 const Eigen::MatrixXd & jacDot()
const;
355 sva::PTransformd X_t_s_;
356 sva::PTransformd X_b_s_;
358 Eigen::Vector3d axis_;
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_;
366 Eigen::VectorXd eval_;
367 Eigen::VectorXd speed_;
368 Eigen::VectorXd normalAcc_;
369 Eigen::MatrixXd jacMat_;
370 Eigen::MatrixXd jacDotMat_;
376 PostureTask(
const rbd::MultiBody & mb, std::vector<std::vector<double>> q);
378 void posture(std::vector<std::vector<double>> q);
379 const std::vector<std::vector<double>> posture()
const;
381 void update(
const rbd::MultiBody & mb,
const rbd::MultiBodyConfig & mbc);
382 void updateDot(
const rbd::MultiBody & mb,
const rbd::MultiBodyConfig & mbc);
384 const Eigen::VectorXd & eval()
const;
385 const Eigen::MatrixXd & jac()
const;
386 const Eigen::MatrixXd & jacDot()
const;
389 std::vector<std::vector<double>> q_;
391 Eigen::VectorXd eval_;
392 Eigen::MatrixXd jacMat_;
393 Eigen::MatrixXd jacDotMat_;
399 CoMTask(
const rbd::MultiBody & mb,
const Eigen::Vector3d & com);
400 CoMTask(
const rbd::MultiBody & mb,
const Eigen::Vector3d & com, std::vector<double> weight);
402 void com(
const Eigen::Vector3d & com);
403 const Eigen::Vector3d & com()
const;
404 const Eigen::Vector3d & actual()
const;
406 void updateInertialParameters(
const rbd::MultiBody & mb);
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);
415 const Eigen::VectorXd & eval()
const;
416 const Eigen::VectorXd & speed()
const;
417 const Eigen::VectorXd & normalAcc()
const;
419 const Eigen::MatrixXd & jac()
const;
420 const Eigen::MatrixXd & jacDot()
const;
423 Eigen::Vector3d com_;
424 Eigen::Vector3d actual_;
425 rbd::CoMJacobian jac_;
427 Eigen::VectorXd eval_;
428 Eigen::VectorXd speed_;
429 Eigen::VectorXd normalAcc_;
430 Eigen::MatrixXd jacMat_;
431 Eigen::MatrixXd jacDotMat_;
437 MultiCoMTask(
const std::vector<rbd::MultiBody> & mbs, std::vector<int> robotIndexes,
const Eigen::Vector3d & com);
439 const std::vector<int> & robotIndexes()
const;
441 void com(
const Eigen::Vector3d & com);
442 const Eigen::Vector3d com()
const;
444 void updateInertialParameters(
const std::vector<rbd::MultiBody> & mbs);
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);
455 const Eigen::VectorXd & eval()
const;
456 const Eigen::VectorXd & speed()
const;
457 const Eigen::VectorXd & normalAcc()
const;
459 const Eigen::MatrixXd & jac(
int index)
const;
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);
467 void computeRobotsWeight(
const std::vector<rbd::MultiBody> & mbs);
470 Eigen::Vector3d com_;
471 std::vector<int> robotIndexes_;
472 std::vector<double> robotsWeight_;
473 std::vector<rbd::CoMJacobian> jac_;
475 Eigen::VectorXd eval_;
476 Eigen::VectorXd speed_;
477 Eigen::VectorXd normalAcc_;
478 std::vector<Eigen::MatrixXd> jacMat_;
484 MomentumTask(
const rbd::MultiBody & mb,
const sva::ForceVecd mom);
486 void momentum(
const sva::ForceVecd & mom);
487 const sva::ForceVecd momentum()
const;
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);
495 const Eigen::VectorXd & eval()
const;
496 const Eigen::VectorXd & speed()
const;
497 const Eigen::VectorXd & normalAcc()
const;
499 const Eigen::MatrixXd & jac()
const;
500 const Eigen::MatrixXd & jacDot()
const;
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_;
516 const std::string & bodyName,
517 const Eigen::Vector3d & vel,
518 const Eigen::Vector3d & bodyPoint = Eigen::Vector3d::Zero());
520 void velocity(
const Eigen::Vector3d & s);
521 const Eigen::Vector3d & velocity()
const;
523 void bodyPoint(
const Eigen::Vector3d & point);
524 const Eigen::Vector3d & bodyPoint()
const;
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);
532 const Eigen::VectorXd & eval()
const;
533 const Eigen::VectorXd & speed()
const;
534 const Eigen::VectorXd & normalAcc()
const;
536 const Eigen::MatrixXd & jac()
const;
537 const Eigen::MatrixXd & jacDot()
const;
540 Eigen::Vector3d vel_;
541 sva::PTransformd point_;
545 Eigen::VectorXd eval_;
546 Eigen::VectorXd speed_;
547 Eigen::VectorXd normalAcc_;
548 Eigen::MatrixXd jacMat_;
549 Eigen::MatrixXd jacDotMat_;
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);
562 void trackedPoint(
const Eigen::Vector3d & tp);
563 const Eigen::Vector3d & trackedPoint()
const;
565 void bodyPoint(
const Eigen::Vector3d & bp);
566 const Eigen::Vector3d & bodyPoint()
const;
568 void bodyAxis(
const Eigen::Vector3d & ba);
569 const Eigen::Vector3d & bodyAxis()
const;
571 void update(
const rbd::MultiBody & mb,
const rbd::MultiBodyConfig & mbc);
572 void updateDot(
const rbd::MultiBody & mb,
const rbd::MultiBodyConfig & mbc);
574 virtual const Eigen::MatrixXd & jac()
const;
575 virtual const Eigen::MatrixXd & jacDot()
const;
576 virtual const Eigen::VectorXd & eval()
const;
579 void zeroJacobian(Eigen::MatrixXd & jac)
const;
583 sva::PTransformd bodyPoint_;
584 Eigen::Vector3d bodyAxis_;
585 std::vector<int> zeroJacIndex_;
586 Eigen::Vector3d trackedPoint_;
589 Eigen::VectorXd eval_;
590 Eigen::MatrixXd shortJacMat_;
591 Eigen::MatrixXd jacMat_;
592 Eigen::MatrixXd jacDotMat_;
599 typedef std::tuple<std::string, Eigen::Vector3d, Eigen::Vector3d>
rbInfo;
603 const double timestep,
606 const Eigen::Vector3d & u1 = Eigen::Vector3d::Zero(),
607 const Eigen::Vector3d & u2 = Eigen::Vector3d::Zero());
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);
613 void update(
const rbd::MultiBody & mb,
614 const rbd::MultiBodyConfig & mbc,
615 const std::vector<sva::MotionVecd> & normalAccB);
617 const Eigen::VectorXd & eval()
const;
618 const Eigen::VectorXd & speed()
const;
619 const Eigen::VectorXd & normalAcc()
const;
621 const Eigen::MatrixXd & jac()
const;
624 struct RelativeBodiesInfo
626 RelativeBodiesInfo() {}
628 RelativeBodiesInfo(
const rbd::MultiBody & mb,
const rbInfo & rbi,
const Eigen::Vector3d & fixedVector);
631 Eigen::Vector3d r_b1_p, r_0_b2p, n;
634 Eigen::Vector3d offn;
641 Eigen::VectorXd eval_;
642 Eigen::VectorXd speed_;
643 Eigen::VectorXd normalAcc_;
644 Eigen::MatrixXd jacMat_;
646 RelativeBodiesInfo rbInfo_[2];
653 const std::string & bodyName,
654 const Eigen::Vector3d & bodyVector,
655 const Eigen::Vector3d & targetVector);
657 void update(
const rbd::MultiBody & mb,
658 const rbd::MultiBodyConfig & mbc,
659 const std::vector<sva::MotionVecd> & normalAccB);
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;
667 const Eigen::VectorXd & eval()
const;
668 const Eigen::VectorXd & speed()
const;
669 const Eigen::VectorXd & normalAcc()
const;
671 const Eigen::MatrixXd & jac()
const;
674 Eigen::Matrix3d skewMatrix(
const Eigen::Vector3d & v);
677 Eigen::Vector3d actualVector_, bodyVector_, targetVector_;
681 Eigen::VectorXd eval_;
682 Eigen::VectorXd speed_;
683 Eigen::VectorXd normalAcc_;
684 Eigen::MatrixXd jacMat_;