include
fcl
narrowphase
detail
convexity_based_algorithm
epa.h
Go to the documentation of this file.
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2011-2014, Willow Garage, Inc.
5
* Copyright (c) 2014-2016, Open Source Robotics Foundation
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
*
12
* * Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
14
* * Redistributions in binary form must reproduce the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer in the documentation and/or other materials provided
17
* with the distribution.
18
* * Neither the name of Open Source Robotics Foundation nor the names of its
19
* contributors may be used to endorse or promote products derived
20
* from this software without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
* POSSIBILITY OF SUCH DAMAGE.
34
*/
35
38
#ifndef FCL_NARROWPHASE_DETAIL_EPA_H
39
#define FCL_NARROWPHASE_DETAIL_EPA_H
40
41
#include "
fcl/narrowphase/detail/convexity_based_algorithm/gjk.h
"
42
43
namespace
fcl
44
{
45
46
namespace
detail
47
{
48
49
//static const size_t EPA_MAX_FACES = 128;
50
//static const size_t EPA_MAX_VERTICES = 64;
51
//static const S EPA_EPS = 0.000001;
52
//static const size_t EPA_MAX_ITERATIONS = 255;
53
// TODO(JS): remove?
54
56
template
<
typename
S>
57
struct
FCL_EXPORT
EPA
58
{
59
private
:
60
using
SimplexV
=
typename
GJK<S>::SimplexV
;
61
62
struct
SimplexF
63
{
64
Vector3<S>
n
;
65
S
d
;
66
SimplexV
* c[3];
// a face has three vertices
67
SimplexF
* f[3];
// a face has three adjacent faces
68
SimplexF
* l[2];
// the pre and post faces in the list
69
size_t
e[3];
70
size_t
pass
;
71
};
72
73
struct
SimplexList
74
{
75
SimplexF
*
root
;
76
size_t
count
;
77
78
SimplexList
();
79
80
void
append(
SimplexF
* face);
81
82
void
remove(
SimplexF
* face);
83
};
84
85
static
void
bind(
SimplexF
* fa,
size_t
ea,
SimplexF
* fb,
size_t
eb);
86
87
struct
SimplexHorizon
88
{
89
SimplexF
*
cf
;
// current face in the horizon
90
SimplexF
*
ff
;
// first face in the horizon
91
size_t
nf
;
// number of faces in the horizon
92
SimplexHorizon
() : cf(nullptr), ff(nullptr), nf(0) {}
93
};
94
95
private
:
96
unsigned
int
max_face_num
;
97
unsigned
int
max_vertex_num
;
98
unsigned
int
max_iterations
;
99
S
tolerance
;
100
101
public
:
102
103
enum
Status
{
Valid
, Touching, Degenerated, NonConvex, InvalidHull, OutOfFaces, OutOfVertices, AccuracyReached, FallBack, Failed};
104
105
Status
status
;
106
typename
GJK<S>::Simplex
result
;
107
Vector3<S>
normal
;
108
S
depth
;
109
SimplexV
*
sv_store
;
110
SimplexF
*
fc_store
;
111
size_t
nextsv
;
112
SimplexList
hull,
stock
;
113
114
EPA
(
115
unsigned
int
max_face_num_,
116
unsigned
int
max_vertex_num_,
117
unsigned
int
max_iterations_,
118
S tolerance_);
119
120
~
EPA
();
121
122
void
initialize
();
123
124
bool
getEdgeDist(
SimplexF
* face,
SimplexV
* a,
SimplexV
* b, S& dist);
125
126
SimplexF
* newFace(
SimplexV
* a,
SimplexV
* b,
SimplexV
* c,
bool
forced);
127
129
SimplexF
* findBest();
130
131
Status
evaluate(
GJK<S>
& gjk,
const
Vector3<S>
& guess);
132
134
bool
expand(
size_t
pass,
SimplexV
* w,
SimplexF
* f,
size_t
e,
SimplexHorizon
& horizon);
135
};
136
137
using
EPAf
=
EPA<float>
;
138
using
EPAd
=
EPA<double>
;
139
140
}
// namespace detail
141
}
// namespace fcl
142
143
#include "
fcl/narrowphase/detail/convexity_based_algorithm/epa-inl.h
"
144
145
#endif
fcl::detail::EPA::max_iterations
unsigned int max_iterations
Definition:
epa.h:98
fcl::detail::EPA::SimplexF::pass
size_t pass
Definition:
epa.h:70
fcl::detail::EPA::SimplexList::count
size_t count
Definition:
epa.h:76
gjk.h
fcl::detail::EPA
class for EPA algorithm
Definition:
epa.h:57
fcl::detail::EPA::SimplexList
Definition:
epa.h:73
epa-inl.h
fcl::detail::EPA::fc_store
SimplexF * fc_store
Definition:
epa.h:110
fcl::detail::EPA::sv_store
SimplexV * sv_store
Definition:
epa.h:109
fcl::detail::GJK::Simplex
Definition:
gjk.h:62
fcl::detail::EPA::SimplexF::n
Vector3< S > n
Definition:
epa.h:64
fcl::detail::EPA::normal
Vector3< S > normal
Definition:
epa.h:107
fcl::detail::EPA::SimplexList::root
SimplexF * root
Definition:
epa.h:75
fcl::Vector3
Eigen::Matrix< S, 3, 1 > Vector3
Definition:
types.h:70
fcl::detail::EPA::tolerance
S tolerance
Definition:
epa.h:99
fcl::detail::EPA::status
Status status
Definition:
epa.h:105
fcl::detail::EPA::nextsv
size_t nextsv
Definition:
epa.h:111
fcl::detail::EPA::SimplexF::d
S d
Definition:
epa.h:65
fcl::detail::EPA::Valid
@ Valid
Definition:
epa.h:103
fcl::detail::EPA::SimplexHorizon::SimplexHorizon
SimplexHorizon()
Definition:
epa.h:92
fcl::detail::EPA::SimplexHorizon::nf
size_t nf
Definition:
epa.h:91
fcl::detail::EPA::SimplexHorizon
Definition:
epa.h:87
fcl::detail::initialize
template bool initialize(MeshCollisionTraversalNodeOBB< double > &node, const BVHModel< OBB< double >> &model1, const Transform3< double > &tf1, const BVHModel< OBB< double >> &model2, const Transform3< double > &tf2, const CollisionRequest< double > &request, CollisionResult< double > &result)
fcl::detail::GJK::SimplexV
Definition:
gjk.h:54
fcl::detail::EPA::max_vertex_num
unsigned int max_vertex_num
Definition:
epa.h:97
fcl::detail::EPA::SimplexHorizon::ff
SimplexF * ff
Definition:
epa.h:90
fcl::detail::EPA::SimplexHorizon::cf
SimplexF * cf
Definition:
epa.h:89
fcl::detail::EPA::SimplexF
Definition:
epa.h:62
fcl::detail::GJK
class for GJK algorithm
Definition:
gjk.h:52
fcl::detail::EPA::Status
Status
Definition:
epa.h:103
fcl::detail::EPA::SimplexV
typename GJK< S >::SimplexV SimplexV
Definition:
epa.h:60
fcl::detail::EPA::stock
SimplexList stock
Definition:
epa.h:112
fcl::detail::EPA::max_face_num
unsigned int max_face_num
Definition:
epa.h:96
fcl::detail::EPA::result
GJK< S >::Simplex result
Definition:
epa.h:106
fcl::detail::EPA::depth
S depth
Definition:
epa.h:108
fcl
Main namespace.
Definition:
broadphase_bruteforce-inl.h:45
fcl
Author(s):
autogenerated on Tue Dec 5 2023 03:40:48