Loading...
Searching...
No Matches
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
16namespace rbd
17{
18class MultiBody;
19struct MultiBodyConfig;
20struct Block;
21using Blocks = std::vector<Block>;
22class Jacobian;
23
32RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentum(const MultiBody & mb,
33 const MultiBodyConfig & mbc,
34 const Eigen::Vector3d & com);
35
44RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentumDot(const MultiBody & mb,
45 const MultiBodyConfig & mbc,
46 const Eigen::Vector3d & com,
47 const Eigen::Vector3d & comDot);
48
53class RBDYN_DLLAPI CentroidalMomentumMatrix
54{
55public:
57
64 CentroidalMomentumMatrix(const MultiBody & mb, std::vector<double> weight);
65
66public:
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
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
155 const MultiBodyConfig & mbc,
156 const Eigen::Vector3d & com,
157 const Eigen::Vector3d & comDot);
158
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
189private:
190 void init(const rbd::MultiBody & mb);
191
192private:
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
210RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentum(const MultiBody & mb,
211 const MultiBodyConfig & mbc,
212 const Eigen::Vector3d & com);
213
219RBDYN_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
Definition Momentum.h:54
void computeMatrix(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
sva::ForceVecd normalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
sva::ForceVecd momentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com) const
sva::ForceVecd sMomentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com) const
void sComputeMatrixDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
CentroidalMomentumMatrix(const MultiBody &mb, std::vector< double > weight)
const Eigen::MatrixXd & matrix() const
sva::ForceVecd normalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot, const std::vector< sva::MotionVecd > &normalAccB) const
void computeMatrixAndMatrixDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
CentroidalMomentumMatrix(const MultiBody &mb)
void sComputeMatrixAndMatrixDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
sva::ForceVecd sNormalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot, const std::vector< sva::MotionVecd > &normalAccB) const
sva::ForceVecd sNormalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
void computeMatrixDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
void sComputeMatrix(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
const Eigen::MatrixXd & matrixDot() const
Definition MultiBody.h:30
Definition common.h:21
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.
RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
std::vector< Block > Blocks
Definition Jacobian.h:33
RBDYN_DLLAPI sva::ForceVecd computeCentroidalMomentum(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com)
RBDYN_DLLAPI sva::ForceVecd sComputeCentroidalMomentumDot(const MultiBody &mb, const MultiBodyConfig &mbc, const Eigen::Vector3d &com, const Eigen::Vector3d &comDot)
Definition MultiBodyConfig.h:24