-
Notifications
You must be signed in to change notification settings - Fork 427
/
Copy pathexpose-collision.cpp
114 lines (95 loc) · 4.59 KB
/
expose-collision.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//
// Copyright (c) 2024 INRIA
//
#include "pinocchio/fwd.hpp"
#include "pinocchio/bindings/python/utils/std-aligned-vector.hpp"
#include "pinocchio/bindings/python/collision/geometry-functors.hpp"
#include "pinocchio/bindings/python/collision/collision.hpp"
#include "pinocchio/collision/collision.hpp"
#include "pinocchio/collision/distance.hpp"
#include <Eigen/Core>
namespace pinocchio
{
namespace python
{
template<
typename Scalar,
int Options,
template<typename, int> class JointCollectionTpl,
typename ConfigVectorType>
static std::size_t computeDistances_proxy(
const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
DataTpl<Scalar, Options, JointCollectionTpl> & data,
const GeometryModel & geom_model,
GeometryData & geom_data,
const Eigen::MatrixBase<ConfigVectorType> & q)
{
return computeDistances(model, data, geom_model, geom_data, q);
}
void exposeCollision()
{
using namespace Eigen;
bp::register_ptr_to_python<std::shared_ptr<hpp::fcl::CollisionGeometry const>>();
bp::class_<ComputeCollision>(
"ComputeCollision", "Collision function between two geometry objects.\n\n", bp::no_init)
.def(GeometryFunctorPythonVisitor<ComputeCollision>());
StdAlignedVectorPythonVisitor<ComputeCollision>::expose("StdVec_ComputeCollision");
bp::class_<ComputeDistance>(
"ComputeDistance", "Distance function between two geometry objects.\n\n", bp::no_init)
.def(GeometryFunctorPythonVisitor<ComputeDistance>());
StdAlignedVectorPythonVisitor<ComputeDistance>::expose("StdVec_ComputeDistance");
bp::def(
"computeCollision",
static_cast<bool (*)(
const GeometryModel &, GeometryData &, const PairIndex, fcl::CollisionRequest &)>(
computeCollision),
bp::args("geometry_model", "geometry_data", "pair_index", "collision_request"),
"Check if the collision objects of a collision pair for a given Geometry Model and "
"Data are in collision.\n"
"The collision pair is given by the two index of the collision objects.");
bp::def(
"computeCollision",
static_cast<bool (*)(const GeometryModel &, GeometryData &, const PairIndex)>(
computeCollision),
bp::args("geometry_model", "geometry_data", "pair_index"),
"Check if the collision objects of a collision pair for a given Geometry Model and "
"Data are in collision.\n"
"The collision pair is given by the two index of the collision objects.");
bp::def(
"computeCollisions",
(bool (*)(const GeometryModel &, GeometryData &, const bool))&computeCollisions,
(bp::arg("geometry_model"), bp::arg("geometry_data"),
bp::arg("stop_at_first_collision") = false),
"Determine if all collision pairs are effectively in collision or not.");
bp::def(
"computeCollisions", &computeCollisions<double, 0, JointCollectionDefaultTpl, VectorXd>,
(bp::arg("model"), bp::arg("data"), bp::arg("geometry_model"), bp::arg("geometry_data"),
bp::arg("q"), bp::arg("stop_at_first_collision") = false),
"Update the geometry for a given configuration and "
"determine if all collision pairs are effectively in collision or not.");
bp::def(
"computeDistance", &computeDistance,
bp::args("geometry_model", "geometry_data", "pair_index"),
"Compute the distance between the two geometry objects of a given collision pair for "
"a GeometryModel and associated GeometryData.",
bp::with_custodian_and_ward_postcall<
0, 2, bp::return_value_policy<bp::reference_existing_object>>());
bp::def(
"computeDistances",
(std::size_t (*)(const GeometryModel &, GeometryData &))&computeDistances,
bp::args("geometry_model", "geometry_data"),
"Compute the distance between each collision pair for a given GeometryModel and "
"associated GeometryData.");
bp::def(
"computeDistances", &computeDistances_proxy<double, 0, JointCollectionDefaultTpl, VectorXd>,
bp::args("model", "data", "geometry_model", "geometry_data", "q"),
"Update the geometry for a given configuration and "
"compute the distance between each collision pair");
bp::def(
"computeBodyRadius", &computeBodyRadius<double, 0, JointCollectionDefaultTpl>,
bp::args("model", "geometry_model", "geometry_data"),
"Compute the radius of the geometry volumes attached to every joints.");
exposeBroadphase();
}
} // namespace python
} // namespace pinocchio