1 #ifndef CPP_COLLISION_FCL_FCL_PRIMITIVE_COLLISION_TESTS_H_ 2 #define CPP_COLLISION_FCL_FCL_PRIMITIVE_COLLISION_TESTS_H_ 6 #include <fcl/broadphase/broadphase_dynamic_AABB_tree.h> 7 #include <fcl/math/constants.h> 8 #include <fcl/narrowphase/collision.h> 9 #include <fcl/narrowphase/collision_object.h> 13 #include <Eigen/Dense> 32 namespace fcl_primitive_queries {
48 const fcl::AABB<double> &aabb1 = fcl_obj->getAABB();
50 Eigen::Vector2d min_ = rect.
min();
51 Eigen::Vector2d max_ = rect.
max();
53 fcl::Vector3d min_3d(min_[0], min_[1], 0);
54 fcl::Vector3d max_3d(max_[0], max_[1], 0);
56 fcl::AABB<double> aabb2(min_3d, max_3d);
57 return aabb1.overlap(aabb2);
63 std::shared_ptr<fcl::CollisionGeometry<FCL_PRECISION>>;
66 const Eigen::Vector2d &pos) {
67 return fcl::Transform3<FCL_PRECISION>(fcl::Translation3<FCL_PRECISION>(
68 fcl::Vector3<FCL_PRECISION>(pos.x(), pos.y(), 0)));
72 fcl::CollisionRequest<FCL_PRECISION> collisionRequest(
74 fcl::CollisionResult<FCL_PRECISION> collisionResult;
75 collisionRequest.enable_cost =
false;
77 fcl::collide(&object_A, &object_B, collisionRequest, collisionResult);
78 return collisionResult.isCollision();
85 std::shared_ptr<fcl::CollisionObject<double>> col_obj_1;
89 std::shared_ptr<fcl::CollisionObject<double>> col_obj_2;
94 #if ENABLE_COLLISION_TESTS 102 obj_second.
getParent()->shared_from_this(),
104 #if ENABLE_COLLISION_TESTS_NARROWPHASE 106 obj_second.
getParent()->shared_from_this(),
117 fcl::BroadPhaseCollisionManager<FCL_PRECISION> *mngr;
119 fcl::CollisionResult<FCL_PRECISION> collisionResult;
121 fcl::CollisionRequest<FCL_PRECISION> collisionRequest(
123 collisionRequest.enable_cost =
false;
125 self_data_obstacles1.
request = collisionRequest;
126 std::shared_ptr<fcl::CollisionObject<double>> col_obj_1;
129 mngr->collide(col_obj_1.get(), &self_data_obstacles1,
130 defaultCollisionFunction<FCL_PRECISION>);
131 result = self_data_obstacles1.
result.isCollision();
138 std::vector<std::pair<int, int>> &retlist,
139 std::vector<std::pair<int, int>> *missed_col_naive_in = 0) {
142 fcl::BroadPhaseCollisionManager<FCL_PRECISION> *mngr1;
145 fcl::BroadPhaseCollisionManager<FCL_PRECISION> *mngr2;
148 fcl::CollisionResult<FCL_PRECISION> collisionResult;
154 fcl::CollisionRequest<FCL_PRECISION> collisionRequest(
157 collisionRequest.enable_cost =
false;
159 self_data_obstacles.request = collisionRequest;
161 mngr1->collide(mngr2, &self_data_obstacles,
162 defaultCollisionFunctionOverlap<FCL_PRECISION>);
163 auto res = self_data_obstacles.self_reqData.getRequestResultPairs();
164 for (
auto el : res) {
165 retlist.push_back(el);
171 #if ENABLE_COLLISION_TESTS 182 #if ENABLE_COLLISION_TESTS_NARROWPHASE 192 fcl::BroadPhaseCollisionManager<FCL_PRECISION> *mngr1;
195 fcl::BroadPhaseCollisionManager<FCL_PRECISION> *mngr2;
198 fcl::CollisionResult<FCL_PRECISION> collisionResult;
201 fcl::CollisionRequest<FCL_PRECISION> collisionRequest(
204 collisionRequest.enable_cost =
false;
206 self_data_obstacles.
request = collisionRequest;
208 mngr1->collide(mngr2, &self_data_obstacles,
209 defaultCollisionFunction<FCL_PRECISION>);
210 result = self_data_obstacles.
result.isCollision();
259 const Sphere &sphere_second) {
const ICollisionContainer * getContainer(void) const
const CollisionObject * getParent(void) const
fcl::CollisionResult< S > result
Collision result.
bool fcl_testAABB(CollisionObjectConstPtr obj, const collision::RectangleAABB &rect)
FCL_COLLISION_ENTITY_TYPE
ShapeGroup can contain simple shapes.
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
Eigen::Vector2d min() const
bool run_test_collide(CollisionObjectConstPtr co, const ShapeGroup *sg)
FCL_COLLISION_ENTITY_TYPE get_object_fcl_entity_type(const CollisionObject *obj2)
std::shared_ptr< fcl::CollisionObject< FCL_PRECISION > > getCollisionObject_fcl(void) const
fcl::CollisionRequest< S > request
Collision request.
bool fcl_generic_collisionDetection(const FCLCollisionObject &obj_first, const FCLCollisionObject &obj_second)
bool fcl_collisionDetection(const Point &point, const RectangleAABB &aabb)
bool fcl_collide(const fcl::CollisionObject< FCL_PRECISION > &object_A, const fcl::CollisionObject< FCL_PRECISION > &object_B)
Base prototype for the shape of an obstacle.
int fcl_group_overlap(const FCLCollisionObjectGroup &group_first, const FCLCollisionObjectGroup &group_second, std::vector< std::pair< int, int >> &retlist, std::vector< std::pair< int, int >> *missed_col_naive_in=0)
bool run_test_narrowphase(CollisionObjectConstPtr co, const ShapeGroup *sg)
Collision data stores the collision request and the result given by collision algorithm.
std::shared_ptr< fcl::CollisionGeometry< FCL_PRECISION > > CollisionGeometryPtr_t
Polygon contains Triangles and Vertices.
Eigen::Vector2d max() const
int getManager_fcl(fcl::BroadPhaseCollisionManager< FCL_PRECISION > *&) const
fcl::Transform3< FCL_PRECISION > fcl_get_3d_translation(const Eigen::Vector2d &pos)
const CollisionObject * getParent(void) const