FD.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 // std
9 #include <vector>
10 
11 // Eigen
12 #include <Eigen/Core>
13 
14 // SpaceVecAlg
15 #include <rbdyn/config.hh>
16 
17 #include <SpaceVecAlg/SpaceVecAlg>
18 
19 namespace rbd
20 {
21 class MultiBody;
22 struct MultiBodyConfig;
23 
27 class RBDYN_DLLAPI ForwardDynamics
28 {
29 public:
32  ForwardDynamics(const MultiBody & mb);
33 
41  void forwardDynamics(const MultiBody & mb, MultiBodyConfig & mbc);
42 
48  void computeH(const MultiBody & mb, const MultiBodyConfig & mbc);
49 
56  void computeC(const MultiBody & mb, const MultiBodyConfig & mbc);
57 
59  const Eigen::MatrixXd & H() const
60  {
61  return H_;
62  }
63 
65  const Eigen::VectorXd & C() const
66  {
67  return C_;
68  }
69 
71  const std::vector<sva::RBInertiad> & inertiaSubTree() const
72  {
73  return I_st_;
74  }
75 
76  // safe version for python binding
77 
81  void sForwardDynamics(const MultiBody & mb, MultiBodyConfig & mbc);
82 
86  void sComputeH(const MultiBody & mb, const MultiBodyConfig & mbc);
87 
91  void sComputeC(const MultiBody & mb, const MultiBodyConfig & mbc);
92 
93 private:
94  Eigen::MatrixXd H_;
95  Eigen::VectorXd C_;
96 
97  // H computation
98  std::vector<sva::RBInertiad> I_st_;
99  std::vector<Eigen::Matrix<double, 6, Eigen::Dynamic>> F_;
100 
101  // C computation
102  std::vector<sva::MotionVecd> acc_;
103  std::vector<sva::ForceVecd> f_;
104 
105  // torque computation
106  Eigen::VectorXd tmpFd_;
107 
108  std::vector<int> dofPos_;
109 
110  Eigen::LDLT<Eigen::MatrixXd> ldlt_;
111 };
112 
113 } // namespace rbd
rbd::ForwardDynamics::H
const Eigen::MatrixXd & H() const
Definition: FD.h:59
rbd::ForwardDynamics::inertiaSubTree
const std::vector< sva::RBInertiad > & inertiaSubTree() const
Definition: FD.h:71
rbd::MultiBody
Definition: MultiBody.h:29
rbd::ForwardDynamics::C
const Eigen::VectorXd & C() const
Definition: FD.h:65
rbd
Definition: common.h:20
rbd::ForwardDynamics::ForwardDynamics
ForwardDynamics()
Definition: FD.h:30
rbd::MultiBodyConfig
Definition: MultiBodyConfig.h:23
rbd::ForwardDynamics
Definition: FD.h:27