timings-geometry.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2025 CNRS INRIA
3 //
4 
5 #include "model-fixture.hpp"
6 
10 #ifdef PINOCCHIO_WITH_HPP_FCL
12 #endif // PINOCCHIO_WITH_HPP_FCL
16 
17 #include <iostream>
18 
19 static void CustomArguments(benchmark::internal::Benchmark * b)
20 {
21  b->MinWarmUpTime(3.);
22 }
23 
24 struct GeometryFixture : benchmark::Fixture
25 {
26  void SetUp(benchmark::State &)
27  {
28  model = MODEL;
32 
33  const Eigen::VectorXd qmax = Eigen::VectorXd::Ones(model.nq);
34  q = randomConfiguration(model, -qmax, qmax);
35  v = Eigen::VectorXd::Random(model.nv);
36  a = Eigen::VectorXd::Random(model.nv);
37  }
38 
39  void TearDown(benchmark::State &)
40  {
41  }
42 
47 
48  Eigen::VectorXd q;
49  Eigen::VectorXd v;
50  Eigen::VectorXd a;
51 
54 
55  static void GlobalSetUp(const ExtraArgs &)
56  {
57  std::string romeo_filename =
59  + std::string("/example-robot-data/robots/romeo_description/urdf/romeo_small.urdf");
60  std::vector<std::string> package_dirs;
62 
66 
67  std::cout << "nq = " << MODEL.nq << std::endl;
68  std::cout << "nv = " << MODEL.nv << std::endl;
69  std::cout << "name = " << MODEL.name << std::endl;
70  std::cout << "--" << std::endl;
71  }
72 };
75 
76 // FORWARD_KINEMATICS_Q
77 
79  const pinocchio::Model & model, pinocchio::Data & data, const Eigen::VectorXd & q)
80 {
82 }
83 BENCHMARK_DEFINE_F(GeometryFixture, FORWARD_KINEMATICS_Q)(benchmark::State & st)
84 {
85  for (auto _ : st)
86  {
88  }
89 }
90 BENCHMARK_REGISTER_F(GeometryFixture, FORWARD_KINEMATICS_Q)->Apply(CustomArguments);
91 
92 // UPDATE_GEOMETRY_PLACEMENTS
93 
95  const pinocchio::Model & model,
97  const pinocchio::GeometryModel & geometry_model,
98  pinocchio::GeometryData & geometry_data,
99  const Eigen::VectorXd & q)
100 {
101  pinocchio::updateGeometryPlacements(model, data, geometry_model, geometry_data, q);
102 }
103 BENCHMARK_DEFINE_F(GeometryFixture, UPDATE_GEOMETRY_PLACEMENTS)(benchmark::State & st)
104 {
105  for (auto _ : st)
106  {
107  updateGeometryPlacementsCall(model, data, geometry_model, geometry_data, q);
108  }
109 }
110 BENCHMARK_REGISTER_F(GeometryFixture, UPDATE_GEOMETRY_PLACEMENTS)->Apply(CustomArguments);
111 
112 #ifdef PINOCCHIO_WITH_HPP_FCL
113 
114 struct CollisionFixture : GeometryFixture
115 {
116  void SetUp(benchmark::State & st)
117  {
119  }
120 
121  void TearDown(benchmark::State & st)
122  {
124  }
125 
126  static void GlobalSetUp(const ExtraArgs & extra_args)
127  {
128  GeometryFixture::GlobalSetUp(extra_args);
129  GEOMETRY_MODEL.addAllCollisionPairs();
130  }
131 };
132 
133 // UPDATE_PLACEMENTS_AND_COMPUTE_COLLISIONS
134 
135 PINOCCHIO_DONT_INLINE static void computeCollisionCall(
136  const pinocchio::GeometryModel & geometry_model,
137  pinocchio::GeometryData & geometry_data,
138  size_t index)
139 {
140  computeCollision(geometry_model, geometry_data, index);
141 }
142 BENCHMARK_DEFINE_F(CollisionFixture, UPDATE_PLACEMENTS_AND_COMPUTE_COLLISIONS)(
143  benchmark::State & st)
144 {
145  for (auto _ : st)
146  {
147  updateGeometryPlacementsCall(model, data, geometry_model, geometry_data, q);
148  for (size_t i = 0; i < geometry_model.collisionPairs.size(); ++i)
149  {
150  computeCollisionCall(geometry_model, geometry_data, i);
151  }
152  }
153 }
154 BENCHMARK_REGISTER_F(CollisionFixture, UPDATE_PLACEMENTS_AND_COMPUTE_COLLISIONS)
155  ->Apply(CustomArguments);
156 
157 // COMPUTE_COLLISIONS
158 
159 PINOCCHIO_DONT_INLINE static void computeCollisionsCall(
160  const pinocchio::GeometryModel & geometry_model, pinocchio::GeometryData & geometry_data)
161 {
162  pinocchio::computeCollisions(geometry_model, geometry_data, true);
163 }
164 BENCHMARK_DEFINE_F(CollisionFixture, COMPUTE_COLLISIONS)(benchmark::State & st)
165 {
166  for (auto _ : st)
167  {
168  computeCollisionsCall(geometry_model, geometry_data);
169  }
170 }
171 BENCHMARK_REGISTER_F(CollisionFixture, COMPUTE_COLLISIONS)->Apply(CustomArguments);
172 
173 // COMPUTE_DISTANCES
174 
175 PINOCCHIO_DONT_INLINE static void computeDistancesCall(
176  const pinocchio::Model & model,
178  const pinocchio::GeometryModel & geometry_model,
179  pinocchio::GeometryData & geometry_data,
180  const Eigen::VectorXd & q)
181 {
182  pinocchio::computeDistances(model, data, geometry_model, geometry_data, q);
183 }
184 BENCHMARK_DEFINE_F(CollisionFixture, COMPUTE_DISTANCES)(benchmark::State & st)
185 {
186  for (auto _ : st)
187  {
188  computeDistancesCall(model, data, geometry_model, geometry_data, q);
189  }
190 }
191 BENCHMARK_REGISTER_F(CollisionFixture, COMPUTE_DISTANCES)->Apply(CustomArguments);
192 
193 #endif // #ifdef PINOCCHIO_WITH_HPP_FCL
194 
195 #ifdef PINOCCHIO_WITH_HPP_FCL
196 PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP(CollisionFixture::GlobalSetUp);
197 #else
199 #endif
GeometryFixture::model
pinocchio::Model model
Definition: timings-geometry.cpp:43
pinocchio::DataTpl
Definition: context/generic.hpp:25
BENCHMARK_DEFINE_F
BENCHMARK_DEFINE_F(GeometryFixture, FORWARD_KINEMATICS_Q)(benchmark
Definition: timings-geometry.cpp:83
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::forwardKinematics
void forwardKinematics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q)
Update the joint placements according to the current joint configuration.
pinocchio::computeCollisions
bool computeCollisions(BroadPhaseManagerBase< BroadPhaseManagerDerived > &broadphase_manager, CollisionCallBackBase *callback)
Calls computeCollision for every active pairs of GeometryData. This function assumes that updateGeome...
Definition: broadphase.hpp:34
pinocchio::updateGeometryPlacements
void updateGeometryPlacements(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const GeometryModel &geom_model, GeometryData &geom_data, const Eigen::MatrixBase< ConfigVectorType > &q)
Apply a forward kinematics and update the placement of the geometry objects.
GeometryFixture::geometry_data
pinocchio::GeometryData geometry_data
Definition: timings-geometry.cpp:46
GeometryFixture::MODEL
static pinocchio::Model MODEL
Definition: timings-geometry.cpp:52
inverse-kinematics.i
int i
Definition: inverse-kinematics.py:17
kinematics.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
GeometryFixture::geometry_model
pinocchio::GeometryModel geometry_model
Definition: timings-geometry.cpp:45
CustomArguments
static void CustomArguments(benchmark::internal::Benchmark *b)
Definition: timings-geometry.cpp:19
GeometryFixture::data
pinocchio::Data data
Definition: timings-geometry.cpp:44
pinocchio::JointModelFreeFlyerTpl
Definition: multibody/joint/fwd.hpp:110
pinocchio::GeometryData
Definition: multibody/geometry.hpp:241
pinocchio::ModelTpl::name
std::string name
Model name.
Definition: multibody/model.hpp:220
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
collision.hpp
b
Vec3f b
GeometryFixture::SetUp
void SetUp(benchmark::State &)
Definition: timings-geometry.cpp:26
anymal-simulation.model
model
Definition: anymal-simulation.py:8
joint-configuration.hpp
geometry.hpp
updateGeometryPlacementsCall
static PINOCCHIO_DONT_INLINE void updateGeometryPlacementsCall(const pinocchio::Model &model, pinocchio::Data &data, const pinocchio::GeometryModel &geometry_model, pinocchio::GeometryData &geometry_data, const Eigen::VectorXd &q)
Definition: timings-geometry.cpp:94
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP(GeometryFixture::GlobalSetUp)
model-fixture.hpp
pinocchio::Data
DataTpl< context::Scalar, context::Options > Data
Definition: multibody/fwd.hpp:34
append-urdf-model-with-another-model.package_dirs
package_dirs
Definition: append-urdf-model-with-another-model.py:20
urdf.hpp
BENCHMARK_REGISTER_F
BENCHMARK_REGISTER_F(GeometryFixture, FORWARD_KINEMATICS_Q) -> Apply(CustomArguments)
geometry.hpp
pinocchio::computeCollision
bool computeCollision(const GeometryModel &geom_model, GeometryData &geom_data, const PairIndex pair_id, fcl::CollisionRequest &collision_request)
Compute the collision status between a SINGLE collision pair. The result is store in the collisionRes...
GeometryFixture::q
Eigen::VectorXd q
Definition: timings-geometry.cpp:48
pinocchio::computeDistances
std::size_t computeDistances(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const GeometryModel &geom_model, GeometryData &geom_data)
GeometryFixture::v
Eigen::VectorXd v
Definition: timings-geometry.cpp:49
pinocchio::urdf::buildGeom
GeometryModel & buildGeom(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const std::string &filename, const GeometryType type, GeometryModel &geom_model, const std::vector< std::string > &package_paths=std::vector< std::string >(), ::hpp::fcl::MeshLoaderPtr mesh_loader=::hpp::fcl::MeshLoaderPtr())
Build The GeometryModel from a URDF file. Search for meshes in the directories specified by the user ...
inverse-dynamics._
_
Definition: inverse-dynamics.py:22
q
q
GeometryFixture
Definition: timings-geometry.cpp:24
GeometryFixture::a
Eigen::VectorXd a
Definition: timings-geometry.cpp:50
forwardKinematicsQCall
static PINOCCHIO_DONT_INLINE void forwardKinematicsQCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q)
Definition: timings-geometry.cpp:78
pinocchio::ModelTpl::nv
int nv
Dimension of the velocity vector space.
Definition: multibody/model.hpp:101
GeometryFixture::TearDown
void TearDown(benchmark::State &)
Definition: timings-geometry.cpp:39
pinocchio::GeometryModel
Definition: multibody/geometry.hpp:54
pinocchio::COLLISION
@ COLLISION
Definition: multibody/geometry-object.hpp:27
sample-models.hpp
pinocchio::ModelTpl
Definition: context/generic.hpp:20
GeometryFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &)
Definition: timings-geometry.cpp:55
pinocchio::ModelTpl::nq
int nq
Dimension of the configuration vector representation.
Definition: multibody/model.hpp:98
ExtraArgs
Store custom command line arguments.
Definition: model-fixture.hpp:24
PINOCCHIO_MODEL_DIR
#define PINOCCHIO_MODEL_DIR
Definition: build-reduced-model.cpp:11
pinocchio::urdf::buildModel
ModelTpl< Scalar, Options, JointCollectionTpl > & buildModel(const std::string &filename, const typename ModelTpl< Scalar, Options, JointCollectionTpl >::JointModel &rootJoint, const std::string &rootJointName, ModelTpl< Scalar, Options, JointCollectionTpl > &model, const bool verbose=false, const bool mimic=false)
Build the model from a URDF file with a particular joint as root of the model tree inside the model g...
GeometryFixture::GEOMETRY_MODEL
static pinocchio::GeometryModel GEOMETRY_MODEL
Definition: timings-geometry.cpp:53


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