timings-impulse-dynamics.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2025 CNRS INRIA
3 //
4 
5 #include "model-fixture.hpp"
6 
20 
21 #include <benchmark/benchmark.h>
22 
23 #include <iostream>
24 
26 {
27  void SetUp(benchmark::State & st)
28  {
30 
31  const std::string RF = "RLEG_LINK6";
32  const auto RF_id = model.frames[model.getFrameId(RF)].parentJoint;
33  const std::string LF = "LLEG_LINK6";
34  const auto LF_id = model.frames[model.getFrameId(LF)].parentJoint;
35 
36  ci_RF_6D = std::make_unique<pinocchio::RigidConstraintModel>(
38  ci_LF_6D = std::make_unique<pinocchio::RigidConstraintModel>(
40 
42 
43  contact_models_6D.clear();
44  contact_models_6D.push_back(*ci_RF_6D);
45 
46  contact_data_6D.clear();
47  contact_data_6D.push_back(pinocchio::RigidConstraintData(*ci_RF_6D));
48 
50 
51  contact_models_6D6D.clear();
52  contact_models_6D6D.push_back(*ci_RF_6D);
53  contact_models_6D6D.push_back(*ci_LF_6D);
54 
55  contact_data_6D6D.clear();
56  contact_data_6D6D.push_back(pinocchio::RigidConstraintData(*ci_RF_6D));
57  contact_data_6D6D.push_back(pinocchio::RigidConstraintData(*ci_LF_6D));
58 
60 
61  r_coeff = (Eigen::ArrayXd::Random(1)[0] + 1.) / 2.;
62 
64  prox_settings.mu = 1e8;
65  }
66 
67  void TearDown(benchmark::State & st)
68  {
70  }
71 
72  std::unique_ptr<pinocchio::RigidConstraintModel> ci_RF_6D;
73  std::unique_ptr<pinocchio::RigidConstraintModel> ci_LF_6D;
74 
81 
85 
86  double r_coeff;
87 
89 };
90 
91 static void CustomArguments(benchmark::internal::Benchmark * b)
92 {
93  b->MinWarmUpTime(3.);
94 }
95 
96 // IMPULSE_DYNAMICS_EMPTY
97 
99  const pinocchio::Model & model,
101  const Eigen::VectorXd & q,
102  const Eigen::VectorXd & v,
105  double r_coeff,
107 {
110 }
111 BENCHMARK_DEFINE_F(ContactFixture, IMPULSE_DYNAMICS_EMPTY)(benchmark::State & st)
112 {
113  pinocchio::initConstraintDynamics(model, data, contact_models_empty);
114  for (auto _ : st)
115  {
117  model, data, q, v, contact_models_empty, contact_data_empty, r_coeff, prox_settings);
118  }
119 }
120 BENCHMARK_REGISTER_F(ContactFixture, IMPULSE_DYNAMICS_EMPTY)->Apply(CustomArguments);
121 
122 // IMPULSE_DYNAMICS_6D
123 
124 BENCHMARK_DEFINE_F(ContactFixture, IMPULSE_DYNAMICS_6D)(benchmark::State & st)
125 {
126  pinocchio::initConstraintDynamics(model, data, contact_models_6D);
127  for (auto _ : st)
128  {
130  model, data, q, v, contact_models_6D, contact_data_6D, r_coeff, prox_settings);
131  }
132 }
133 BENCHMARK_REGISTER_F(ContactFixture, IMPULSE_DYNAMICS_6D)->Apply(CustomArguments);
134 
135 // IMPULSE_DYNAMICS_6D6D
136 
137 BENCHMARK_DEFINE_F(ContactFixture, IMPULSE_DYNAMICS_6D6D)(benchmark::State & st)
138 {
139  pinocchio::initConstraintDynamics(model, data, contact_models_6D6D);
140  for (auto _ : st)
141  {
143  model, data, q, v, contact_models_6D6D, contact_data_6D6D, r_coeff, prox_settings);
144  }
145 }
146 BENCHMARK_REGISTER_F(ContactFixture, IMPULSE_DYNAMICS_6D6D)->Apply(CustomArguments);
147 
frames.hpp
pinocchio::ModelTpl::frames
FrameVector frames
Vector of operational frames registered on the model.
Definition: multibody/model.hpp:193
pinocchio::DataTpl
Definition: context/generic.hpp:25
PINOCCHIO_DONT_INLINE
#define PINOCCHIO_DONT_INLINE
Function attribute to forbid inlining. This is a compiler hint that can be not respected.
Definition: include/pinocchio/macros.hpp:53
pinocchio::ProximalSettingsTpl::mu
Scalar mu
Regularization parameter of the proximal algorithm.
Definition: algorithm/proximal.hpp:95
ModelFixture::model
pinocchio::Model model
Definition: model-fixture.hpp:79
ModelFixture::TearDown
void TearDown(benchmark::State &)
Definition: model-fixture.hpp:51
ModelFixture
Definition: model-fixture.hpp:37
ContactFixture::contact_chol_6D
pinocchio::ContactCholeskyDecomposition contact_chol_6D
Definition: timings-constrained-dynamics-derivatives.cpp:73
contact-cholesky.contact_data
list contact_data
Definition: contact-cholesky.py:33
BENCHMARK_DEFINE_F
BENCHMARK_DEFINE_F(ContactFixture, IMPULSE_DYNAMICS_EMPTY)(benchmark
Definition: timings-impulse-dynamics.cpp:111
kinematics.hpp
rnea-derivatives.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
ContactFixture::TearDown
void TearDown(benchmark::State &st)
Definition: timings-impulse-dynamics.cpp:67
PINOCCHIO_BENCHMARK_MAIN
PINOCCHIO_BENCHMARK_MAIN()
impulseDynamicsCall
static PINOCCHIO_DONT_INLINE void impulseDynamicsCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintModel) &contact_models, PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData) &contact_data, double r_coeff, const pinocchio::ProximalSettings &prox_settings)
Definition: timings-impulse-dynamics.cpp:98
pinocchio::CONTACT_6D
@ CONTACT_6D
Point contact model.
Definition: algorithm/contact-info.hpp:22
rnea.hpp
aba-derivatives.hpp
bindings_dynamics.r_coeff
float r_coeff
Definition: bindings_dynamics.py:10
b
Vec3f b
ModelFixture::SetUp
void SetUp(benchmark::State &)
Definition: model-fixture.hpp:39
aba.hpp
anymal-simulation.model
model
Definition: anymal-simulation.py:8
joint-configuration.hpp
pinocchio::ProximalSettingsTpl
Structure containing all the settings parameters for the proximal algorithms.
Definition: algorithm/fwd.hpp:13
ContactFixture::contact_chol_empty
pinocchio::ContactCholeskyDecomposition contact_chol_empty
Definition: timings-constrained-dynamics-derivatives.cpp:72
pinocchio::RigidConstraintModelTpl
Definition: algorithm/constraints/fwd.hpp:14
ContactFixture::ci_RF_6D
std::unique_ptr< pinocchio::RigidConstraintModel > ci_RF_6D
Definition: timings-constrained-dynamics-derivatives.cpp:62
model-fixture.hpp
pinocchio::ModelTpl::getFrameId
FrameIndex getFrameId(const std::string &name, const FrameType &type=(FrameType)(JOINT|FIXED_JOINT|BODY|OP_FRAME|SENSOR)) const
Returns the index of a frame given by its name.
urdf.hpp
pinocchio::RigidConstraintDataTpl
Definition: algorithm/constraints/fwd.hpp:16
cartpole.v
v
Definition: cartpole.py:153
pinocchio::initConstraintDynamics
void initConstraintDynamics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const std::vector< RigidConstraintModelTpl< Scalar, Options >, Allocator > &contact_models)
Init the forward dynamics data according to the contact information contained in contact_models.
ContactFixture::r_coeff
double r_coeff
Definition: timings-impulse-dynamics-derivatives.cpp:79
inverse-dynamics._
_
Definition: inverse-dynamics.py:22
ContactFixture
Definition: timings-constrained-dynamics-derivatives.cpp:20
q
q
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR
#define PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(T)
Definition: container/aligned-vector.hpp:13
cholesky.hpp
ContactFixture::prox_settings
pinocchio::ProximalSettings prox_settings
Definition: timings-contact-dynamics.cpp:90
CustomArguments
static void CustomArguments(benchmark::internal::Benchmark *b)
Definition: timings-impulse-dynamics.cpp:91
impulse-dynamics.hpp
pinocchio::ContactCholeskyDecomposition
ContactCholeskyDecompositionTpl< context::Scalar, context::Options > ContactCholeskyDecomposition
Definition: algorithm/fwd.hpp:17
pinocchio::ProximalSettingsTpl::max_iter
int max_iter
Maximal number of iterations.
Definition: algorithm/proximal.hpp:98
kinematics-derivatives.hpp
ContactFixture::contact_chol_6D6D
pinocchio::ContactCholeskyDecomposition contact_chol_6D6D
Definition: timings-constrained-dynamics-derivatives.cpp:74
pinocchio::impulseDynamics
const PINOCCHIO_DEPRECATED DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & impulseDynamics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v_before, const Eigen::MatrixBase< ConstraintMatrixType > &J, const Scalar r_coeff=0., const Scalar inv_damping=0.)
Compute the impulse dynamics with contact constraints. Internally, pinocchio::crba is called.
contact-cholesky.contact_models
list contact_models
Definition: contact-cholesky.py:22
pinocchio::ContactCholeskyDecompositionTpl< context::Scalar, context::Options >
sample-models.hpp
pinocchio::ModelTpl< context::Scalar, context::Options >
BENCHMARK_REGISTER_F
BENCHMARK_REGISTER_F(ContactFixture, IMPULSE_DYNAMICS_EMPTY) -> Apply(CustomArguments)
ContactFixture::PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintModel) contact_models_empty
simulation-closed-kinematic-chains.prox_settings
prox_settings
Definition: simulation-closed-kinematic-chains.py:158
ContactFixture::SetUp
void SetUp(benchmark::State &st)
Definition: timings-impulse-dynamics.cpp:27
crba.hpp
ContactFixture::ci_LF_6D
std::unique_ptr< pinocchio::RigidConstraintModel > ci_LF_6D
Definition: timings-constrained-dynamics-derivatives.cpp:63
pinocchio::LOCAL
@ LOCAL
Definition: multibody/fwd.hpp:50


pinocchio
Author(s):
autogenerated on Thu Apr 10 2025 02:42:22