hpp-fcl  3.0.0
HPP fork of FCL -- The Flexible Collision Library
collision_data.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2021 INRIA
3 //
4 
5 #ifndef HPP_FCL_SERIALIZATION_COLLISION_DATA_H
6 #define HPP_FCL_SERIALIZATION_COLLISION_DATA_H
7 
10 
11 namespace boost {
12 namespace serialization {
13 
14 template <class Archive>
15 void save(Archive& ar, const hpp::fcl::Contact& contact,
16  const unsigned int /*version*/) {
17  ar& make_nvp("b1", contact.b1);
18  ar& make_nvp("b2", contact.b2);
19  ar& make_nvp("normal", contact.normal);
20  ar& make_nvp("nearest_points", contact.nearest_points);
21  ar& make_nvp("pos", contact.pos);
22  ar& make_nvp("penetration_depth", contact.penetration_depth);
23 }
24 
25 template <class Archive>
26 void load(Archive& ar, hpp::fcl::Contact& contact,
27  const unsigned int /*version*/) {
28  ar >> make_nvp("b1", contact.b1);
29  ar >> make_nvp("b2", contact.b2);
30  ar >> make_nvp("normal", contact.normal);
31  std::array<hpp::fcl::Vec3f, 2> nearest_points;
32  ar >> make_nvp("nearest_points", nearest_points);
33  contact.nearest_points[0] = nearest_points[0];
34  contact.nearest_points[1] = nearest_points[1];
35  ar >> make_nvp("pos", contact.pos);
36  ar >> make_nvp("penetration_depth", contact.penetration_depth);
37  contact.o1 = NULL;
38  contact.o2 = NULL;
39 }
40 
42 
43 template <class Archive>
44 void serialize(Archive& ar, hpp::fcl::QueryRequest& query_request,
45  const unsigned int /*version*/) {
46  ar& make_nvp("gjk_initial_guess", query_request.gjk_initial_guess);
47  // TODO: use gjk_initial_guess instead
50  ar& make_nvp("enable_cached_gjk_guess",
51  query_request.enable_cached_gjk_guess);
53  ar& make_nvp("cached_gjk_guess", query_request.cached_gjk_guess);
54  ar& make_nvp("cached_support_func_guess",
55  query_request.cached_support_func_guess);
56  ar& make_nvp("gjk_max_iterations", query_request.gjk_max_iterations);
57  ar& make_nvp("gjk_tolerance", query_request.gjk_tolerance);
58  ar& make_nvp("gjk_variant", query_request.gjk_variant);
59  ar& make_nvp("gjk_convergence_criterion",
60  query_request.gjk_convergence_criterion);
61  ar& make_nvp("gjk_convergence_criterion_type",
62  query_request.gjk_convergence_criterion_type);
63  ar& make_nvp("epa_max_iterations", query_request.epa_max_iterations);
64  ar& make_nvp("epa_tolerance", query_request.epa_tolerance);
65  ar& make_nvp("collision_distance_threshold",
66  query_request.collision_distance_threshold);
67  ar& make_nvp("enable_timings", query_request.enable_timings);
68 }
69 
70 template <class Archive>
71 void serialize(Archive& ar, hpp::fcl::QueryResult& query_result,
72  const unsigned int /*version*/) {
73  ar& make_nvp("cached_gjk_guess", query_result.cached_gjk_guess);
74  ar& make_nvp("cached_support_func_guess",
75  query_result.cached_support_func_guess);
76 }
77 
78 template <class Archive>
79 void serialize(Archive& ar, hpp::fcl::CollisionRequest& collision_request,
80  const unsigned int /*version*/) {
81  ar& make_nvp("base",
82  boost::serialization::base_object<hpp::fcl::QueryRequest>(
83  collision_request));
84  ar& make_nvp("num_max_contacts", collision_request.num_max_contacts);
85  ar& make_nvp("enable_contact", collision_request.enable_contact);
88  ar& make_nvp("enable_distance_lower_bound",
89  collision_request.enable_distance_lower_bound);
91  ar& make_nvp("security_margin", collision_request.security_margin);
92  ar& make_nvp("break_distance", collision_request.break_distance);
93  ar& make_nvp("distance_upper_bound", collision_request.distance_upper_bound);
94 }
95 
96 template <class Archive>
97 void save(Archive& ar, const hpp::fcl::CollisionResult& collision_result,
98  const unsigned int /*version*/) {
99  ar& make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
100  collision_result));
101  ar& make_nvp("contacts", collision_result.getContacts());
102  ar& make_nvp("distance_lower_bound", collision_result.distance_lower_bound);
103  ar& make_nvp("nearest_points", collision_result.nearest_points);
104  ar& make_nvp("normal", collision_result.normal);
105 }
106 
107 template <class Archive>
108 void load(Archive& ar, hpp::fcl::CollisionResult& collision_result,
109  const unsigned int /*version*/) {
110  ar >>
111  make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
112  collision_result));
113  std::vector<hpp::fcl::Contact> contacts;
114  ar >> make_nvp("contacts", contacts);
115  collision_result.clear();
116  for (size_t k = 0; k < contacts.size(); ++k)
117  collision_result.addContact(contacts[k]);
118  ar >> make_nvp("distance_lower_bound", collision_result.distance_lower_bound);
119  std::array<hpp::fcl::Vec3f, 2> nearest_points;
120  ar >> make_nvp("nearest_points", nearest_points);
121  collision_result.nearest_points[0] = nearest_points[0];
122  collision_result.nearest_points[1] = nearest_points[1];
123  ar >> make_nvp("normal", collision_result.normal);
124 }
125 
127 
128 template <class Archive>
129 void serialize(Archive& ar, hpp::fcl::DistanceRequest& distance_request,
130  const unsigned int /*version*/) {
131  ar& make_nvp("base",
132  boost::serialization::base_object<hpp::fcl::QueryRequest>(
133  distance_request));
136  ar& make_nvp("enable_nearest_points", distance_request.enable_nearest_points);
138  ar& make_nvp("enable_signed_distance",
139  distance_request.enable_signed_distance);
140  ar& make_nvp("rel_err", distance_request.rel_err);
141  ar& make_nvp("abs_err", distance_request.abs_err);
142 }
143 
144 template <class Archive>
145 void save(Archive& ar, const hpp::fcl::DistanceResult& distance_result,
146  const unsigned int /*version*/) {
147  ar& make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
148  distance_result));
149  ar& make_nvp("min_distance", distance_result.min_distance);
150  ar& make_nvp("nearest_points", distance_result.nearest_points);
151  ar& make_nvp("normal", distance_result.normal);
152  ar& make_nvp("b1", distance_result.b1);
153  ar& make_nvp("b2", distance_result.b2);
154 }
155 
156 template <class Archive>
157 void load(Archive& ar, hpp::fcl::DistanceResult& distance_result,
158  const unsigned int /*version*/) {
159  ar >>
160  make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
161  distance_result));
162  ar >> make_nvp("min_distance", distance_result.min_distance);
163  std::array<hpp::fcl::Vec3f, 2> nearest_points;
164  ar >> make_nvp("nearest_points", nearest_points);
165  distance_result.nearest_points[0] = nearest_points[0];
166  distance_result.nearest_points[1] = nearest_points[1];
167  ar >> make_nvp("normal", distance_result.normal);
168  ar >> make_nvp("b1", distance_result.b1);
169  ar >> make_nvp("b2", distance_result.b2);
170  distance_result.o1 = NULL;
171  distance_result.o2 = NULL;
172 }
173 
175 
176 } // namespace serialization
177 } // namespace boost
178 
183 
184 #endif // ifndef HPP_FCL_SERIALIZATION_COLLISION_DATA_H
#define HPP_FCL_SERIALIZATION_DECLARE_EXPORT(T)
Definition: fwd.h:30
#define HPP_FCL_SERIALIZATION_SPLIT(Type)
Definition: fwd.h:24
#define HPP_FCL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS
Definition: fwd.hh:122
#define HPP_FCL_COMPILER_DIAGNOSTIC_PUSH
Definition: fwd.hh:120
#define HPP_FCL_COMPILER_DIAGNOSTIC_POP
Definition: fwd.hh:121
void save(Archive &ar, const hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: BV_splitter.h:30
void load(Archive &ar, hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: BV_splitter.h:44
void serialize(Archive &ar, hpp::fcl::AABB &aabb, const unsigned int)
Definition: AABB.h:15
Definition: AABB.h:11
Main namespace.
Definition: broadphase_bruteforce.h:44
request to the collision algorithm
Definition: collision_data.h:312
size_t num_max_contacts
The maximum number of contacts that can be returned.
Definition: collision_data.h:314
bool enable_distance_lower_bound
Whether a lower bound on distance is returned when objects are disjoint.
Definition: collision_data.h:322
FCL_REAL distance_upper_bound
Distance above which GJK solver makes an early stopping. GJK stops searching for the closest points w...
Definition: collision_data.h:341
FCL_REAL security_margin
Distance below which objects are considered in collision. See Collision.
Definition: collision_data.h:329
bool enable_contact
whether the contact information (normal, penetration depth and contact position) will return.
Definition: collision_data.h:318
FCL_REAL break_distance
Distance below which bounding volumes are broken down. See Collision.
Definition: collision_data.h:333
collision result
Definition: collision_data.h:391
std::array< Vec3f, 2 > nearest_points
nearest points. A CollisionResult can have multiple contacts. The nearest points in CollisionResults ...
Definition: collision_data.h:415
void clear()
clear the results obtained
Definition: collision_data.h:483
void addContact(const Contact &c)
add one contact into result structure
Definition: collision_data.h:431
Vec3f normal
normal associated to nearest_points. Same as CollisionResult::nearest_points but for the normal.
Definition: collision_data.h:406
void getContacts(std::vector< Contact > &contacts_) const
get all the contacts
Definition: collision_data.h:475
FCL_REAL distance_lower_bound
Definition: collision_data.h:402
Contact information returned by collision.
Definition: collision_data.h:59
FCL_REAL penetration_depth
penetration depth
Definition: collision_data.h:106
std::array< Vec3f, 2 > nearest_points
nearest points associated to this contact.
Definition: collision_data.h:100
Vec3f pos
contact position, in world space
Definition: collision_data.h:103
int b1
contact primitive in object 1 if object 1 is mesh or point cloud, it is the triangle or point id if o...
Definition: collision_data.h:70
int b2
contact primitive in object 2 if object 2 is mesh or point cloud, it is the triangle or point id if o...
Definition: collision_data.h:76
const CollisionGeometry * o2
collision object 2
Definition: collision_data.h:64
const CollisionGeometry * o1
collision object 1
Definition: collision_data.h:61
Vec3f normal
contact normal, pointing from o1 to o2. The normal defined as the normalized separation vector: norma...
Definition: collision_data.h:89
request to the distance computation
Definition: collision_data.h:987
bool enable_nearest_points
whether to return the nearest points. Nearest points are always computed and are the points of the sh...
Definition: collision_data.h:998
bool enable_signed_distance
whether to compute the penetration depth when objects are in collision. Turning this off can save com...
Definition: collision_data.h:1012
FCL_REAL rel_err
error threshold for approximate distance
Definition: collision_data.h:1015
FCL_REAL abs_err
Definition: collision_data.h:1016
distance result
Definition: collision_data.h:1053
const CollisionGeometry * o2
collision object 2
Definition: collision_data.h:1073
std::array< Vec3f, 2 > nearest_points
nearest points. See CollisionResult::nearest_points.
Definition: collision_data.h:1067
Vec3f normal
normal.
Definition: collision_data.h:1063
const CollisionGeometry * o1
collision object 1
Definition: collision_data.h:1070
int b2
information about the nearest point in object 2 if object 2 is mesh or point cloud,...
Definition: collision_data.h:1085
int b1
information about the nearest point in object 1 if object 1 is mesh or point cloud,...
Definition: collision_data.h:1079
FCL_REAL min_distance
minimum distance between two objects. If two objects are in collision and DistanceRequest::enable_sig...
Definition: collision_data.h:1060
base class for all query requests
Definition: collision_data.h:171
GJKVariant gjk_variant
whether to enable the Nesterov accleration of GJK
Definition: collision_data.h:196
Vec3f cached_gjk_guess
the gjk initial guess set by user
Definition: collision_data.h:181
GJKInitialGuess gjk_initial_guess
Definition: collision_data.h:173
GJKConvergenceCriterion gjk_convergence_criterion
convergence criterion used to stop GJK
Definition: collision_data.h:199
size_t gjk_max_iterations
maximum iteration for the GJK algorithm
Definition: collision_data.h:187
support_func_guess_t cached_support_func_guess
the support function initial guess set by user
Definition: collision_data.h:184
FCL_REAL gjk_tolerance
tolerance for the GJK algorithm. Note: This tolerance determines the precision on the estimated dista...
Definition: collision_data.h:193
size_t epa_max_iterations
max number of iterations for EPA
Definition: collision_data.h:205
bool enable_timings
enable timings when performing collision/distance request
Definition: collision_data.h:215
FCL_REAL epa_tolerance
tolerance for EPA. Note: This tolerance determines the precision on the estimated distance between tw...
Definition: collision_data.h:212
bool enable_cached_gjk_guess
whether enable gjk initial guess @Deprecated Use gjk_initial_guess instead
Definition: collision_data.h:178
FCL_REAL collision_distance_threshold
threshold below which a collision is considered.
Definition: collision_data.h:218
GJKConvergenceCriterionType gjk_convergence_criterion_type
convergence criterion used to stop GJK
Definition: collision_data.h:202
base class for all query results
Definition: collision_data.h:276
support_func_guess_t cached_support_func_guess
stores the last support function vertex index, when relevant.
Definition: collision_data.h:281
Vec3f cached_gjk_guess
stores the last GJK ray when relevant.
Definition: collision_data.h:278