unittest/rnea.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2020 CNRS INRIA
3 //
4 
5 /*
6  * Unittest of the RNE algorithm. The code simply test that the algorithm does
7  * not cause any serious errors. The numerical values are not cross validated
8  * in any way.
9  *
10  */
11 
24 
25 #include <iostream>
26 
27 // #define __SSE3__
28 #include <fenv.h>
29 
30 #ifdef __SSE3__
31  #include <pmmintrin.h>
32 #endif
33 
34 #include <boost/test/unit_test.hpp>
35 #include <boost/utility/binary.hpp>
36 
38 
39 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
40 
42 {
43 #ifdef __SSE3__
44  _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
45 #endif
46  using namespace Eigen;
47  using namespace pinocchio;
48 
51 
52  model.lowerPositionLimit.head<3>().fill(-1.);
53  model.upperPositionLimit.head<3>().fill(1.);
54 
56  data.v[0] = Motion::Zero();
57  data.a[0] = -model.gravity;
58 
59  VectorXd q = randomConfiguration(model);
60  VectorXd v = VectorXd::Random(model.nv);
61  VectorXd a = VectorXd::Random(model.nv);
62 
63 #ifdef NDEBUG
64  const size_t NBT = 10000;
65 #else
66  const size_t NBT = 1;
67  std::cout << "(the time score in debug mode is not relevant) ";
68 #endif
69 
71  timer.tic();
72  SMOOTH(NBT)
73  {
74  rnea(model, data, q, v, a);
75  }
76  timer.toc(std::cout, NBT);
77 }
78 
79 BOOST_AUTO_TEST_CASE(test_nle_vs_rnea)
80 {
81  using namespace Eigen;
82  using namespace pinocchio;
83 
86 
87  model.lowerPositionLimit.head<3>().fill(-1.);
88  model.upperPositionLimit.head<3>().fill(1.);
89 
90  pinocchio::Data data_nle(model);
91  pinocchio::Data data_rnea(model);
92 
93  VectorXd q = randomConfiguration(model);
94  VectorXd v = VectorXd::Random(model.nv);
95 
96  VectorXd tau_nle(VectorXd::Zero(model.nv));
97  VectorXd tau_rnea(VectorXd::Zero(model.nv));
98 
99  // -------
100  q.tail(model.nq - 7).setZero();
101  v.setZero();
102 
103  tau_nle = nonLinearEffects(model, data_nle, q, v);
104  tau_rnea = rnea(model, data_rnea, q, v, VectorXd::Zero(model.nv));
105 
106  BOOST_CHECK(tau_nle.isApprox(tau_rnea, 1e-12));
107 
108  // -------
109  q.tail(model.nq - 7).setZero();
110  v.setOnes();
111 
112  tau_nle = nonLinearEffects(model, data_nle, q, v);
113  tau_rnea = rnea(model, data_rnea, q, v, VectorXd::Zero(model.nv));
114 
115  BOOST_CHECK(tau_nle.isApprox(tau_rnea, 1e-12));
116 
117  // -------
118  q.tail(model.nq - 7).setOnes();
119  v.setOnes();
120 
121  tau_nle = nonLinearEffects(model, data_nle, q, v);
122  tau_rnea = rnea(model, data_rnea, q, v, VectorXd::Zero(model.nv));
123 
124  BOOST_CHECK(tau_nle.isApprox(tau_rnea, 1e-12));
125 
126  // -------
128  v.setRandom();
129 
130  tau_nle = nonLinearEffects(model, data_nle, q, v);
131  tau_rnea = rnea(model, data_rnea, q, v, VectorXd::Zero(model.nv));
132 
133  BOOST_CHECK(tau_nle.isApprox(tau_rnea, 1e-12));
134 }
135 
136 BOOST_AUTO_TEST_CASE(test_rnea_with_fext)
137 {
138  using namespace Eigen;
139  using namespace pinocchio;
140 
141  Model model;
143 
144  model.lowerPositionLimit.head<3>().fill(-1.);
145  model.upperPositionLimit.head<3>().fill(1.);
146 
147  Data data_rnea_fext(model);
148  Data data_rnea(model);
149 
150  VectorXd q = randomConfiguration(model);
151 
152  VectorXd v(VectorXd::Random(model.nv));
153  VectorXd a(VectorXd::Random(model.nv));
154 
155  PINOCCHIO_ALIGNED_STD_VECTOR(Force) fext(model.joints.size(), Force::Zero());
156 
157  JointIndex rf = model.getJointId("rleg6_joint");
158  Force Frf = Force::Random();
159  fext[rf] = Frf;
160  JointIndex lf = model.getJointId("lleg6_joint");
161  Force Flf = Force::Random();
162  fext[lf] = Flf;
163 
164  rnea(model, data_rnea, q, v, a);
165  VectorXd tau_ref(data_rnea.tau);
166  Data::Matrix6x Jrf(Data::Matrix6x::Zero(6, model.nv));
167  computeJointJacobian(model, data_rnea, q, rf, Jrf);
168  tau_ref -= Jrf.transpose() * Frf.toVector();
169 
170  Data::Matrix6x Jlf(Data::Matrix6x::Zero(6, model.nv));
171  computeJointJacobian(model, data_rnea, q, lf, Jlf);
172  tau_ref -= Jlf.transpose() * Flf.toVector();
173 
174  rnea(model, data_rnea_fext, q, v, a, fext);
175 
176  BOOST_CHECK(tau_ref.isApprox(data_rnea_fext.tau));
177 }
178 
179 BOOST_AUTO_TEST_CASE(test_rnea_with_armature)
180 {
181  using namespace Eigen;
182  using namespace pinocchio;
183 
184  Model model;
186  model.armature = VectorXd::Random(model.nv) + VectorXd::Ones(model.nv);
187 
188  model.lowerPositionLimit.head<3>().fill(-1.);
189  model.upperPositionLimit.head<3>().fill(1.);
190 
191  Data data(model);
192  Data data_ref(model);
193 
194  VectorXd q = randomConfiguration(model);
195  VectorXd v(VectorXd::Random(model.nv));
196  VectorXd a(VectorXd::Random(model.nv));
197 
198  crba(model, data_ref, q, Convention::WORLD);
199  data_ref.M.triangularView<StrictlyLower>() =
200  data_ref.M.transpose().triangularView<StrictlyLower>();
201  const VectorXd nle = nonLinearEffects(model, data_ref, q, v);
202 
203  const VectorXd tau_ref = data_ref.M * a + nle;
204 
205  rnea(model, data, q, v, a);
206  BOOST_CHECK(tau_ref.isApprox(data.tau));
207 }
208 
209 BOOST_AUTO_TEST_CASE(test_compute_gravity)
210 {
211  using namespace Eigen;
212  using namespace pinocchio;
213 
214  Model model;
216 
217  model.lowerPositionLimit.head<3>().fill(-1.);
218  model.upperPositionLimit.head<3>().fill(1.);
219 
220  Data data_rnea(model);
221  Data data(model);
222 
223  VectorXd q = randomConfiguration(model);
224 
225  rnea(model, data_rnea, q, VectorXd::Zero(model.nv), VectorXd::Zero(model.nv));
227 
228  BOOST_CHECK(data_rnea.tau.isApprox(data.g));
229 
230  // Compare with Jcom
231  crba(model, data_rnea, q, Convention::WORLD);
232  Data::Matrix3x Jcom = getJacobianComFromCrba(model, data_rnea);
233 
234  VectorXd g_ref(-data_rnea.mass[0] * Jcom.transpose() * Model::gravity981);
235 
236  BOOST_CHECK(g_ref.isApprox(data.g));
237 }
238 
239 BOOST_AUTO_TEST_CASE(test_compute_static_torque)
240 {
241  using namespace Eigen;
242  using namespace pinocchio;
243 
244  Model model;
246 
247  model.lowerPositionLimit.head<3>().fill(-1.);
248  model.upperPositionLimit.head<3>().fill(1.);
249 
250  Data data_rnea(model);
251  Data data(model);
252 
253  VectorXd q = randomConfiguration(model);
254 
255  typedef PINOCCHIO_ALIGNED_STD_VECTOR(Force) ForceVector;
256  ForceVector fext((size_t)model.njoints);
257  for (ForceVector::iterator it = fext.begin(); it != fext.end(); ++it)
258  (*it).setRandom();
259 
260  rnea(model, data_rnea, q, VectorXd::Zero(model.nv), VectorXd::Zero(model.nv), fext);
261  computeStaticTorque(model, data, q, fext);
262 
263  BOOST_CHECK(data_rnea.tau.isApprox(data.tau));
264 
265  // Compare with Jcom + Jacobian of joint
266  crba(model, data_rnea, q, Convention::WORLD);
267  Data::Matrix3x Jcom = getJacobianComFromCrba(model, data_rnea);
268 
269  VectorXd static_torque_ref = -data_rnea.mass[0] * Jcom.transpose() * Model::gravity981;
270  computeJointJacobians(model, data_rnea, q);
271 
272  Data::Matrix6x J_local(6, model.nv);
273  for (JointIndex joint_id = 1; joint_id < (JointIndex)(model.njoints); ++joint_id)
274  {
275  J_local.setZero();
276  getJointJacobian(model, data_rnea, joint_id, LOCAL, J_local);
277  static_torque_ref -= J_local.transpose() * fext[joint_id].toVector();
278  }
279 
280  BOOST_CHECK(static_torque_ref.isApprox(data.tau));
281 }
282 
283 BOOST_AUTO_TEST_CASE(test_compute_coriolis)
284 {
285  using namespace Eigen;
286  using namespace pinocchio;
287 
288  const double prec = Eigen::NumTraits<double>::dummy_precision();
289 
290  Model model;
292 
293  model.lowerPositionLimit.head<3>().fill(-1.);
294  model.upperPositionLimit.head<3>().fill(1.);
295 
296  Data data_ref(model);
297  Data data(model);
298 
299  VectorXd q = randomConfiguration(model);
300 
301  VectorXd v(VectorXd::Random(model.nv));
302  computeCoriolisMatrix(model, data, q, Eigen::VectorXd::Zero(model.nv));
303  BOOST_CHECK(data.C.isZero(prec));
304 
305  model.gravity.setZero();
306  rnea(model, data_ref, q, v, VectorXd::Zero(model.nv));
309 
310  BOOST_CHECK(data.dJ.isApprox(data_ref.dJ));
311  BOOST_CHECK(data.J.isApprox(data_ref.J));
312 
313  VectorXd tau = data.C * v;
314  BOOST_CHECK(tau.isApprox(data_ref.tau, prec));
315 
316  dccrba(model, data_ref, q, v);
317  crba(model, data_ref, q, Convention::WORLD);
318 
319  const Data::Vector3 & com = data_ref.com[0];
320  Motion vcom(data_ref.vcom[0], Data::Vector3::Zero());
321  SE3 cM1(data.oMi[1]);
322  cM1.translation() -= com;
323 
324  BOOST_CHECK((cM1.toDualActionMatrix() * data_ref.M.topRows<6>()).isApprox(data_ref.Ag, prec));
325 
326  Force dh_ref = cM1.act(Force(data_ref.tau.head<6>()));
327  Force dh(data_ref.dAg * v);
328  BOOST_CHECK(dh.isApprox(dh_ref, prec));
329 
330  {
331  Data data_ref(model), data_ref_plus(model);
332  Eigen::MatrixXd dM(data.C + data.C.transpose());
333 
334  const double alpha = 1e-8;
335  Eigen::VectorXd q_plus(model.nq);
336  q_plus = integrate(model, q, alpha * v);
337 
338  crba(model, data_ref, q, Convention::WORLD);
339  data_ref.M.triangularView<Eigen::StrictlyLower>() =
340  data_ref.M.transpose().triangularView<Eigen::StrictlyLower>();
341  crba(model, data_ref_plus, q_plus, Convention::WORLD);
342  data_ref_plus.M.triangularView<Eigen::StrictlyLower>() =
343  data_ref_plus.M.transpose().triangularView<Eigen::StrictlyLower>();
344 
345  Eigen::MatrixXd dM_ref = (data_ref_plus.M - data_ref.M) / alpha;
346  BOOST_CHECK(dM.isApprox(dM_ref, sqrt(alpha)));
347  }
348 }
349 
350 BOOST_AUTO_TEST_CASE(test_rnea_mimic)
351 {
352  for (int i = 0; i < pinocchio::MimicTestCases::N_CASES; i++)
353  {
354  const pinocchio::MimicTestCases mimic_test_case(i);
355  const pinocchio::Model & model_mimic = mimic_test_case.model_mimic;
356  const pinocchio::Model & model_full = mimic_test_case.model_full;
357  const Eigen::MatrixXd & G = mimic_test_case.G;
358 
359  pinocchio::Data data_nle_mimic(model_mimic);
360  pinocchio::Data data_rnea_mimic(model_mimic);
362 
363  Eigen::VectorXd q = pinocchio::randomConfiguration(model_mimic);
364  Eigen::VectorXd v = Eigen::VectorXd::Random(model_mimic.nv);
365  Eigen::VectorXd a = Eigen::VectorXd::Random(model_mimic.nv);
366 
367  Eigen::VectorXd q_full(model_full.nq);
368  Eigen::VectorXd v_full = G * v;
369  Eigen::VectorXd a_full = G * v;
370 
371  mimic_test_case.toFull(q, q_full);
372 
374  data_full.M.triangularView<Eigen::StrictlyLower>() =
375  data_full.M.transpose().triangularView<Eigen::StrictlyLower>();
376  const Eigen::VectorXd nle = pinocchio::nonLinearEffects(model_full, data_full, q_full, v_full);
377 
378  // // Use equation of motion to compute tau from a_reduced
379  Eigen::VectorXd tau_ref = G.transpose() * data_full.M * G * a + (G.transpose() * nle);
380  pinocchio::rnea(model_mimic, data_rnea_mimic, q, v, a);
381  BOOST_CHECK(tau_ref.isApprox(data_rnea_mimic.tau));
382 
383  // NLE
384  pinocchio::Data data_nle(model_mimic);
385  pinocchio::Data data_ref_nle(model_mimic);
386  Eigen::VectorXd tau_ref_nle =
387  pinocchio::rnea(model_mimic, data_ref_nle, q, v, Eigen::VectorXd::Zero(model_mimic.nv));
388  Eigen::VectorXd tau_nle = pinocchio::nonLinearEffects(model_mimic, data_nle, q, v);
389  BOOST_CHECK(tau_nle.isApprox(tau_ref_nle));
390 
391  // Generalized Gravity
392  pinocchio::Data data_ref_gg(model_mimic);
393  pinocchio::Data data_gg(model_mimic);
394  Eigen::VectorXd tau_ref_gg = pinocchio::rnea(
395  model_mimic, data_ref_gg, q, Eigen::VectorXd::Zero(model_mimic.nv),
396  Eigen::VectorXd::Zero(model_mimic.nv));
397  Eigen::VectorXd tau_gg = pinocchio::computeGeneralizedGravity(model_mimic, data_gg, q);
398  BOOST_CHECK(tau_gg.isApprox(tau_ref_gg));
399 
400  // Static Torque
401  typedef PINOCCHIO_ALIGNED_STD_VECTOR(pinocchio::Force) ForceVector;
402  ForceVector fext((size_t)model_mimic.njoints);
403  for (ForceVector::iterator it = fext.begin(); it != fext.end(); ++it)
404  (*it).setRandom();
405 
406  pinocchio::Data data_ref_st(model_mimic);
407  pinocchio::Data data_st(model_mimic);
409  model_mimic, data_ref_st, q, Eigen::VectorXd::Zero(model_mimic.nv),
410  Eigen::VectorXd::Zero(model_mimic.nv), fext);
411  Eigen::VectorXd tau_st = pinocchio::computeStaticTorque(model_mimic, data_gg, q, fext);
412  BOOST_CHECK(tau_st.isApprox(data_ref_st.tau));
413  }
414 }
415 
416 BOOST_AUTO_TEST_SUITE_END()
pinocchio::DataTpl::M
MatrixXs M
The joint space inertia matrix (a square matrix of dim model.nv).
Definition: multibody/data.hpp:199
pinocchio::WORLD
@ WORLD
Definition: multibody/fwd.hpp:48
PinocchioTicToc::toc
double toc()
Definition: timer.hpp:88
fwd.hpp
Eigen
pinocchio::DataTpl
Definition: context/generic.hpp:25
pinocchio::DataTpl::dAg
Matrix6x dAg
Centroidal Momentum Matrix Time Variation.
Definition: multibody/data.hpp:290
pinocchio::DataTpl::mass
std::vector< Scalar > mass
Vector of subtree mass. In other words, mass[j] is the mass of the subtree supported by joint ....
Definition: multibody/data.hpp:458
pinocchio::MimicTestCases::toFull
void toFull(const Eigen::VectorXd &q, Eigen::VectorXd &q_full) const
Definition: model-generator.hpp:241
model.hpp
pinocchio::DataTpl::dJ
Matrix6x dJ
Derivative of the Jacobian with respect to the time.
Definition: multibody/data.hpp:377
pinocchio::SE3
context::SE3 SE3
Definition: spatial/fwd.hpp:59
pinocchio::Convention::WORLD
@ WORLD
inverse-kinematics.i
int i
Definition: inverse-kinematics.py:17
model.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
pinocchio::python::context::Force
ForceTpl< Scalar, Options > Force
Definition: bindings/python/context/generic.hpp:55
mimic_dynamics.a_full
a_full
Definition: mimic_dynamics.py:49
pinocchio::crba
const DataTpl< Scalar, Options, JointCollectionTpl >::MatrixXs & crba(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Convention convention=Convention::LOCAL)
Computes the upper triangular part of the joint space inertia matrix M by using the Composite Rigid B...
pinocchio::computeJointJacobiansTimeVariation
const DataTpl< Scalar, Options, JointCollectionTpl >::Matrix6x & computeJointJacobiansTimeVariation(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Computes the full model Jacobian variations with respect to time. It corresponds to dJ/dt which depen...
pinocchio::MimicTestCases::G
Eigen::MatrixXd G
Definition: model-generator.hpp:134
pinocchio::computeJointJacobians
const DataTpl< Scalar, Options, JointCollectionTpl >::Matrix6x & computeJointJacobians(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q)
Computes the full model Jacobian, i.e. the stack of all motion subspace expressed in the world frame....
pinocchio::MimicTestCases::N_CASES
static const int N_CASES
Definition: model-generator.hpp:128
pinocchio::dccrba
const DataTpl< Scalar, Options, JointCollectionTpl >::Matrix6x & dccrba(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Computes the time derivative of the Centroidal Momentum Matrix according to the current configuration...
pinocchio::buildModels::humanoidRandom
void humanoidRandom(ModelTpl< Scalar, Options, JointCollectionTpl > &model, bool usingFF=true, bool mimic=false)
Create a humanoid kinematic tree with 6-DOF limbs and random joint placements.
pinocchio.shortcuts.nle
nle
Definition: shortcuts.py:14
pinocchio::randomConfiguration
void randomConfiguration(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const Eigen::MatrixBase< ConfigVectorIn1 > &lowerLimits, const Eigen::MatrixBase< ConfigVectorIn2 > &upperLimits, const Eigen::MatrixBase< ReturnType > &qout)
Generate a configuration vector uniformly sampled among provided limits.
Definition: joint-configuration.hpp:315
model-generator.hpp
rnea.hpp
timer.hpp
mimic_dynamics.model_full
model_full
Definition: mimic_dynamics.py:9
anymal-simulation.model
model
Definition: anymal-simulation.py:8
forward-dynamics-derivatives.tau
tau
Definition: forward-dynamics-derivatives.py:25
center-of-mass.hpp
SMOOTH
#define SMOOTH(s)
Definition: timer.hpp:38
joint-configuration.hpp
pinocchio::Force
context::Force Force
Definition: spatial/fwd.hpp:63
reachable-workspace-with-collisions.alpha
float alpha
Definition: reachable-workspace-with-collisions.py:162
pinocchio::DataTpl::Matrix3x
Eigen::Matrix< Scalar, 3, Eigen::Dynamic, Options > Matrix3x
The 3d jacobian type (temporary)
Definition: multibody/data.hpp:94
pinocchio::integrate
void integrate(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v, const Eigen::MatrixBase< ReturnType > &qout)
Integrate a configuration vector for the specified model for a tangent vector during one unit time.
Definition: joint-configuration.hpp:70
mimic_dynamics.v_full
v_full
Definition: mimic_dynamics.py:48
pinocchio::DataTpl::Vector3
Eigen::Matrix< Scalar, 3, 1, Options > Vector3
Definition: multibody/data.hpp:77
pinocchio::computeStaticTorque
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & computeStaticTorque(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const container::aligned_vector< ForceTpl< Scalar, Options >> &fext)
Computes the generalized static torque contribution of the Lagrangian dynamics:
pinocchio::getJointJacobian
void getJointJacobian(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const JointIndex joint_id, const ReferenceFrame reference_frame, const Eigen::MatrixBase< Matrix6Like > &J)
Computes the Jacobian of a specific joint frame expressed in one of the pinocchio::ReferenceFrame opt...
pinocchio::DataTpl::tau
TangentVectorType tau
Vector of joint torques (dim model.nv).
Definition: multibody/data.hpp:173
cartpole.v
v
Definition: cartpole.py:153
data.hpp
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(test_rnea)
Definition: unittest/rnea.cpp:41
pinocchio::MimicTestCases::model_mimic
pinocchio::Model model_mimic
Definition: model-generator.hpp:130
mimic_dynamics.model_mimic
model_mimic
Definition: mimic_dynamics.py:19
pinocchio::DataTpl::Ag
Matrix6x Ag
Centroidal Momentum Matrix.
Definition: multibody/data.hpp:284
pinocchio::nonLinearEffects
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & nonLinearEffects(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Computes the non-linear effects (Corriolis, centrifual and gravitationnal effects),...
q
q
inverse-kinematics-3d.it
int it
Definition: inverse-kinematics-3d.py:17
pinocchio::getJacobianComFromCrba
const DataTpl< Scalar, Options, JointCollectionTpl >::Matrix3x & getJacobianComFromCrba(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data)
Extracts both the jacobian of the center of mass (CoM), the total mass of the system and the CoM posi...
a
Vec3f a
pinocchio::ModelTpl< Scalar >::gravity981
static const Vector3 gravity981
Default 3D gravity vector (=(0,0,-9.81)).
Definition: multibody/model.hpp:217
static-contact-dynamics.tau_rnea
tau_rnea
Definition: static-contact-dynamics.py:176
PinocchioTicToc::US
@ US
Definition: timer.hpp:53
mimic_dynamics.q_full
q_full
Definition: mimic_dynamics.py:46
pinocchio::DataTpl::J
Matrix6x J
Jacobian of joint placements.
Definition: multibody/data.hpp:374
fill
fill
centroidal.hpp
pinocchio::rnea
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & rnea(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType1 > &v, const Eigen::MatrixBase< TangentVectorType2 > &a)
The Recursive Newton-Euler algorithm. It computes the inverse dynamics, aka the joint torques accordi...
mimic_dynamics.G
G
Definition: mimic_dynamics.py:27
pinocchio::MimicTestCases
Definition: model-generator.hpp:125
dcrba.dM
dM
Definition: dcrba.py:452
pinocchio::computeJointJacobian
void computeJointJacobian(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const JointIndex joint_id, const Eigen::MatrixBase< Matrix6Like > &J)
Computes the Jacobian of a specific joint frame expressed in the local frame of the joint and store t...
pinocchio::JointIndex
Index JointIndex
Definition: multibody/fwd.hpp:26
pinocchio::DataTpl::Matrix6x
Eigen::Matrix< Scalar, 6, Eigen::Dynamic, Options > Matrix6x
The 6d jacobian type (temporary)
Definition: multibody/data.hpp:92
mimic_dynamics.data_full
data_full
Definition: mimic_dynamics.py:53
PINOCCHIO_ALIGNED_STD_VECTOR
#define PINOCCHIO_ALIGNED_STD_VECTOR(Type)
Definition: container/aligned-vector.hpp:11
sample-models.hpp
pinocchio::MotionTpl
Definition: context/casadi.hpp:28
append-urdf-model-with-another-model.joint_id
joint_id
Definition: append-urdf-model-with-another-model.py:34
jacobian.hpp
pinocchio::ModelTpl< context::Scalar, context::Options >
pinocchio::MimicTestCases::model_full
pinocchio::Model model_full
Definition: model-generator.hpp:131
pinocchio::computeCoriolisMatrix
const DataTpl< Scalar, Options, JointCollectionTpl >::MatrixXs & computeCoriolisMatrix(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Computes the Coriolis Matrix of the Lagrangian dynamics:
crba.hpp
PinocchioTicToc
Definition: timer.hpp:47
robot-wrapper-viewer.com
com
Definition: robot-wrapper-viewer.py:45
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33
pinocchio::computeGeneralizedGravity
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & computeGeneralizedGravity(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q)
Computes the generalized gravity contribution of the Lagrangian dynamics:
PinocchioTicToc::tic
void tic()
Definition: timer.hpp:82
pinocchio::LOCAL
@ LOCAL
Definition: multibody/fwd.hpp:50


pinocchio
Author(s):
autogenerated on Wed Apr 16 2025 02:41:50