Momentum.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 // include
8 #include <vector>
9 // SpaceVecAlg
10 #include <rbdyn/config.hh>
11 
12 #include <SpaceVecAlg/SpaceVecAlg>
13 
14 #include <vector>
15 
16 namespace rbd
17 {
18 class MultiBody;
19 struct MultiBodyConfig;
20 struct Block;
21 using Blocks = std::vector<Block>;
22 class Jacobian;
23 
32 RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentum(const MultiBody & mb,
33  const MultiBodyConfig & mbc,
34  const Eigen::Vector3d & com);
35 
44 RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentumDot(const MultiBody & mb,
45  const MultiBodyConfig & mbc,
46  const Eigen::Vector3d & com,
47  const Eigen::Vector3d & comDot);
48 
53 class RBDYN_DLLAPI CentroidalMomentumMatrix
54 {
55 public:
57 
64  CentroidalMomentumMatrix(const MultiBody & mb, std::vector<double> weight);
65 
66 public:
73  void computeMatrix(const MultiBody & mb, const MultiBodyConfig & mbc, const Eigen::Vector3d & com);
74 
82  void computeMatrixDot(const MultiBody & mb,
83  const MultiBodyConfig & mbc,
84  const Eigen::Vector3d & com,
85  const Eigen::Vector3d & comDot);
86 
92  void computeMatrixAndMatrixDot(const MultiBody & mb,
93  const MultiBodyConfig & mbc,
94  const Eigen::Vector3d & com,
95  const Eigen::Vector3d & comDot);
96 
98  const Eigen::MatrixXd & matrix() const;
99 
101  const Eigen::MatrixXd & matrixDot() const;
102 
110  sva::ForceVecd momentum(const MultiBody & mb, const MultiBodyConfig & mbc, const Eigen::Vector3d & com) const;
111 
122  sva::ForceVecd normalMomentumDot(const MultiBody & mb,
123  const MultiBodyConfig & mbc,
124  const Eigen::Vector3d & com,
125  const Eigen::Vector3d & comDot);
126 
138  sva::ForceVecd normalMomentumDot(const MultiBody & mb,
139  const MultiBodyConfig & mbc,
140  const Eigen::Vector3d & com,
141  const Eigen::Vector3d & comDot,
142  const std::vector<sva::MotionVecd> & normalAccB) const;
143 
144  // safe version for python binding
145 
149  void sComputeMatrix(const MultiBody & mb, const MultiBodyConfig & mbc, const Eigen::Vector3d & com);
150 
154  void sComputeMatrixDot(const MultiBody & mb,
155  const MultiBodyConfig & mbc,
156  const Eigen::Vector3d & com,
157  const Eigen::Vector3d & comDot);
158 
162  void sComputeMatrixAndMatrixDot(const MultiBody & mb,
163  const MultiBodyConfig & mbc,
164  const Eigen::Vector3d & com,
165  const Eigen::Vector3d & comDot);
166 
170  sva::ForceVecd sMomentum(const MultiBody & mb, const MultiBodyConfig & mbc, const Eigen::Vector3d & com) const;
171 
175  sva::ForceVecd sNormalMomentumDot(const MultiBody & mb,
176  const MultiBodyConfig & mbc,
177  const Eigen::Vector3d & com,
178  const Eigen::Vector3d & comDot);
179 
183  sva::ForceVecd sNormalMomentumDot(const MultiBody & mb,
184  const MultiBodyConfig & mbc,
185  const Eigen::Vector3d & com,
186  const Eigen::Vector3d & comDot,
187  const std::vector<sva::MotionVecd> & normalAccB) const;
188 
189 private:
190  void init(const rbd::MultiBody & mb);
191 
192 private:
193  Eigen::MatrixXd cmMat_;
194  Eigen::MatrixXd cmMatDot_;
195 
196  std::vector<Jacobian> jacVec_;
197  std::vector<Blocks> blocksVec_;
198  std::vector<Eigen::MatrixXd> jacWork_;
199  std::vector<double> bodiesWeight_;
200  std::vector<sva::MotionVecd> normalAcc_;
201 };
202 
203 // safe version for python binding
204 
210 RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentum(const MultiBody & mb,
211  const MultiBodyConfig & mbc,
212  const Eigen::Vector3d & com);
213 
219 RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentumDot(const MultiBody & mb,
220  const MultiBodyConfig & mbc,
221  const Eigen::Vector3d & com,
222  const Eigen::Vector3d & comDot);
223 
224 } // namespace rbd
rbd::sComputeCentroidalMomentum
RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
rbd::MultiBody
Definition: MultiBody.h:29
rbd::Blocks
std::vector< Block > Blocks
Definition: Jacobian.h:33
rbd
Definition: common.h:20
rbd::MultiBodyConfig
Definition: MultiBodyConfig.h:23
rbd::computeCentroidalMomentum
RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
rbd::sComputeCentroidalMomentumDot
RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
rbd::CentroidalMomentumMatrix
Definition: Momentum.h:53
rbd::computeCentroidalMomentumDot
RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
Compute the time derivative of centroidal momentum at the CoM frame.