Collision Checker
fcl_collision_checker.h
Go to the documentation of this file.
1 #ifndef CPP_COLLISION_FCL_FCL_COLLISION_CHECKER_H_
2 #define CPP_COLLISION_FCL_FCL_COLLISION_CHECKER_H_
3 
5 
6 #include <sstream>
7 #include <vector>
8 
10 
12 
14 
15 #include <fcl/broadphase/broadphase_dynamic_AABB_tree.h>
19 
21 
22 namespace collision {
23 class CollisionChecker;
24 
25 namespace solvers {
26 namespace solverFCL {
28  public:
29  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
31 
33  void windowQuery_helper(const RectangleAABB &aabb,
34  ICollisionChecker &ret) const;
35  bool collideHelper(CollisionObjectConstPtr co, int *collision_time,
36  std::vector<CollisionObjectConstPtr> *obstacles,
37  int max_obstacles = -1, bool ungroup_shape_groups = false,
38  bool ungroup_TV_obstacles = false) const;
39 
40  private:
41  ICollisionChecker &m_cc;
42 
43  enum CollisionRequestType {
44  collisionRequestBoolean = 0,
45  collisionRequestListOfObstacles = 1,
46  collisionRequestWindowQuery = 2
47 
48  };
49 
50  void invalidateParentMap(void);
51  void setUpParentMap(void) const;
52 
53  void invalidateStaticObstaclesManager(void);
54  void setUpStaticObstaclesManager(void) const;
55 
56  int set_up_dynamic_obstacles(int simulation_cur_time_idx_) const;
57  int register_dynamic_obstacle(const FCLCollisionObjectGroup *obj) const;
58  int register_dynamic_obstacle(const FCLCollisionObject *obj) const;
59 
60  int addCollisionObject_fcl(const FCLCollisionObject *co);
61  int addCollisionObject_fcl(const FCLCollisionObjectGroup *co);
62  void addCollisionObject_fcl(const TimeVariantCollisionObject *tvobj);
63 
64  bool collide_fcl(const FCLCollisionObject *col_obj_ptr,
65  int &time_of_collision,
67  bool collide_fcl(const FCLCollisionObjectGroup *col_obj_group,
68  int &time_of_collision,
70 
71  bool collide_fcl(const FCLCollisionObjectGroup *,
72  int &time_of_collision) const;
73  bool collide_fcl(const FCLCollisionObject *col_obj_ptr,
74  int &time_of_collision) const;
75 
76  bool collide_fcl(const TimeVariantCollisionObject *tvobj,
77  int &time_of_collision) const;
78  bool collide_fcl(const TimeVariantCollisionObject *tvobj,
79  int &time_of_collision,
81 
82  template <class T>
83  bool collide_fcl_helper_simulate_static_subject(
84  T col_entity, int &time_of_collision,
85  CollisionRequestType reqType = collisionRequestBoolean,
86  CollisionRequestData *reqData = 0) const;
87  bool collide_fcl_helper_sim_TV_subject(
88  const TimeVariantCollisionObject &tvobj, int &time_of_collision,
89  CollisionRequestType reqType, CollisionRequestData *reqData) const;
90  template <class T>
91  bool collide_fcl_helper_dynamic_obstaclesEx(
92  T col_entity, int sim_cur_time_idx, bool &result,
93  CollisionRequestType reqType, CollisionRequestData *reqData) const;
94  template <class T>
95  bool collide_fcl_helper_dynamic_obstacles(T col_entity,
96  int sim_cur_time_idx) const;
97  template <class T>
98  bool collide_fcl_helper_static_obstaclesEx(
99  T col_entity, bool &result, CollisionRequestType reqType,
100  CollisionRequestData *reqData) const;
101 
102  template <class T>
103  bool collide_fcl_helper_static_obstacles(T col_entity) const;
104 
105  private:
106  mutable std::unordered_map<const CollisionObject *,
107  std::list<CollisionObjectConstPtr>>
108  parent_map;
109  mutable fcl::DynamicAABBTreeCollisionManager<FCL_PRECISION> static_obstacles_;
110  mutable fcl::DynamicAABBTreeCollisionManager<FCL_PRECISION>
111  dynamic_obstacles_;
112  std::vector<CollisionObjectConstPtr> tv_objects_;
113  mutable int simulation_time_start_idx_;
114  mutable int simulation_time_end_idx_;
115  mutable int simulation_dynamic_;
116  mutable bool static_obstacles_manager_valid;
117  mutable bool parent_map_valid;
118 
119  mutable bool windowQueryDone;
120 };
121 } // namespace solverFCL
122 } // namespace solvers
123 } // namespace collision
124 
125 #endif /* CPP_COLLISION_FCL_FCL_COLLISION_CHECKER_H_ */
TimeVariantCollisionObject can contain a different CollisionObject or ShapeGroup at each time step...
bool collideHelper(CollisionObjectConstPtr co, int *collision_time, std::vector< CollisionObjectConstPtr > *obstacles, int max_obstacles=-1, bool ungroup_shape_groups=false, bool ungroup_TV_obstacles=false) const
void windowQuery_helper(const RectangleAABB &aabb, ICollisionChecker &ret) const
EIGEN_MAKE_ALIGNED_OPERATOR_NEW FCLCollisionChecker(ICollisionChecker &cc)
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
Axis-aligned rectangle.
External interface to a CollisionChecker (with or without an acceleration structure) ...
Base class for CollisionObjects and some of their groups.