Collision Checker
trajectory_queries.cc
Go to the documentation of this file.
3 
7 
9 
11 
12 namespace collision {
13 
14 namespace detail {
15 using namespace accelerators;
16 
18  if (traj_length_ < 2) return 0;
19  invalidateAABBs();
20  for (int traj_ind = 0; traj_ind < num_traj_; traj_ind++) {
21  auto read_iterator = rectangles_.begin() + traj_ind * traj_length_;
22  auto write_iterator = read_iterator;
23  for (int timestep = 0; timestep < traj_length_ - 1; timestep++) {
24  auto obb_cur = *read_iterator;
25  auto obb_next = *(read_iterator + 1);
26 
27  if (timestep == traj_length_ - 2) {
28  *(write_iterator + 1) = *write_iterator =
30  } else {
31  *write_iterator++ =
33  read_iterator++;
34  }
35  }
36  }
37  return 0;
38 }
39 
40 namespace trajectory_queries {
41 
44  int& min_time_step, int& max_time_step) {
45  min_time_step = traj_in[0]->time_start_idx();
46  max_time_step = traj_in[0]->time_end_idx();
47 
48  for (auto el : traj_in) {
49  min_time_step = std::min(min_time_step, el->time_start_idx());
50  max_time_step = std::max(max_time_step, el->time_end_idx());
51  }
52 }
56  obsts_in,
57  int& min_time_step_traj, int& max_time_step_traj, int& min_time_step_obst,
58  int& max_time_step_obst) {
59  get_time_step_bounds(traj_in, min_time_step_traj, max_time_step_traj);
60  get_time_step_bounds(obsts_in, min_time_step_obst, max_time_step_obst);
61  min_time_step_traj = std::max(min_time_step_traj, min_time_step_obst);
62  max_time_step_traj = std::min(max_time_step_traj, max_time_step_obst);
63 }
64 
66  int time_step,
68  trajectory_list,
70  for (auto el : trajectory_list) {
72  const_cast<collision::CollisionObject*>(
73  el->getObstacleAtTimePtr(time_step));
74  if (obj_cur) {
75  switch (obj_cur->getCollisionObjectClass()) {
77  shapes_out.push_back(obj_cur);
78  break;
80  for (auto shape :
81  (static_cast<collision::ShapeGroup*>(obj_cur))->unpack()) {
82  shapes_out.push_back(const_cast<collision::Shape*>(shape.get()));
83  }
84  break;
85  default:
86  throw;
87  }
88  }
89  }
90 }
91 
92 template <class T>
94  T& obstacles_container,
96  obsts_in,
98  if (obsts_in.size() + 2 != result.size()) return -1;
99 
100  std::fill(result.begin(), result.end(), -1);
101  int min_time_step = -1, max_time_step = -1;
102  get_time_step_bounds(obsts_in, min_time_step, max_time_step);
103  aligned_vector<bool> done(obsts_in.size());
104 
105  for (int cur_time_step = min_time_step; cur_time_step <= max_time_step;
106  cur_time_step++) {
107  for (int cur_obst = 0; cur_obst < obsts_in.size(); cur_obst++) {
108  if (!done[cur_obst]) {
109  auto cur_obj = obsts_in[cur_obst]->getObstacleAtTimePtr(cur_time_step);
110  if (cur_obj && obstacles_container.checkCollision(cur_obj, req))
111 
112  {
113  done[cur_obst] = true;
114  result[cur_obst] = cur_time_step;
115  }
116  }
117  }
118  }
119  result[obsts_in.size()] = (obstacles_container.numcands());
120  result[obsts_in.size() + 1] = (obstacles_container.numchecks());
121  return 0;
122 }
123 
126  const collision::ShapeGroup& obj,
128  ContainerSettings sett;
129  sett.num_cells = treq.num_cells;
132  collision::AABB bounds;
133  int orientation = 0;
134  getBestGridOrientationAndBounds(&obj, bounds, orientation);
135  if (!treq.auto_orientation) orientation = 0;
136  if (orientation == 0) {
137  ContainerGrid<HorizontalGrid> obstacles_grid(&obj, &bounds, sett);
138 
142  creq.test_obb_bbox = true;
143  return trajectories_collision_staticobst_helper(obstacles_grid, traj_in,
144  creq, result);
145  } else {
146  bounds.swapAxes();
148  ContainerGrid<VerticalGrid> obstacles_grid(&obj, &bounds, sett);
151  creq.test_obb_bbox = true;
152  return trajectories_collision_staticobst_helper(obstacles_grid, traj_in,
153  creq, result);
154  }
155 }
156 
157 template <class T>
159  bool enable_verification, aligned_vector<bool>& done, T& obstacles_grid,
160  int cur_time_step, int& numcands_global, int& numchecks_global,
161  aligned_vector<int>& result,
163  obsts_in) {
164  for (int cur_obst = 0; cur_obst < obsts_in.size(); cur_obst++) {
166  creq.enable_verification = enable_verification;
167  creq.test_obb_bbox = false;
168  if (!done[cur_obst]) {
169  auto cur_obj = obsts_in[cur_obst]->getObstacleAtTimePtr(cur_time_step);
170  if (cur_obj && obstacles_grid.checkCollision(cur_obj, creq)) {
171  done[cur_obst] = true;
172  result[cur_obst] = cur_time_step;
173  }
174  }
175  }
176  numcands_global += obstacles_grid.numcands();
177  numchecks_global += obstacles_grid.numchecks();
178  return 0;
179 }
180 
184  obsts_scenario,
186  int numcol_cc = 0;
187  int numcands_global = 0;
188  int numchecks_global = 0;
189 
190  int min_time_step_traj = -1, max_time_step_traj = -1;
191  int min_time_step_obst = -1, max_time_step_obst = -1;
192  get_time_step_bounds(traj_in, obsts_scenario, min_time_step_traj,
193  max_time_step_traj, min_time_step_obst,
194  max_time_step_obst);
195 
196  aligned_vector<bool> done(traj_in.size());
197  std::fill(result.begin(), result.end(), -1);
199 
200  for (int cur_time_step = min_time_step_traj;
201  cur_time_step <= max_time_step_traj; cur_time_step++) {
202  col_objs_tvobst.clear();
203 
204  retrieve_shapes_from_trajectories(cur_time_step, obsts_scenario,
205  col_objs_tvobst);
206 
207  if (col_objs_tvobst.size() == 0) continue;
208 
210  collision::AABB bounds;
211  int orientation = 0;
212  getBestGridOrientationAndBounds(col_objs_tvobst, bounds, orientation);
213 
214  if (orientation == 0) {
215  ContainerSettings sett;
216  sett.num_cells = treq.num_cells;
217  ContainerGrid<HorizontalGrid> obstacles_grid(col_objs_tvobst, &bounds,
218  sett);
219 
221 
223  treq.enable_verification, done, obstacles_grid, cur_time_step,
224  numcands_global, numchecks_global, result, traj_in);
225 
226  } else {
227  ContainerSettings sett;
228  sett.num_cells = treq.num_cells;
229  bounds.swapAxes();
230  ContainerGrid<VerticalGrid> obstacles_grid(col_objs_tvobst, &bounds,
231  sett);
232 
234 
236  treq.enable_verification, done, obstacles_grid, cur_time_step,
237  numcands_global, numchecks_global, result, traj_in);
238  }
239  }
240  result[traj_in.size()] = numcands_global;
241  result[traj_in.size() + 1] = numchecks_global;
242 
243  return 0;
244 }
245 
246 template <typename T>
248  bool enable_verification, aligned_vector<int>& result,
250  obsts_in,
252  obsts_scenario,
253  const ContainerSettings& sett) {
254  int numcol_cc = 0;
255  int numcands_global = 0;
256  int numchecks_global = 0;
257 
258  int min_time_step_traj = -1, max_time_step_traj = -1;
259  int min_time_step_obst = -1, max_time_step_obst = -1;
260  get_time_step_bounds(obsts_in, obsts_scenario, min_time_step_traj,
261  max_time_step_traj, min_time_step_obst,
262  max_time_step_obst);
263 
264  aligned_vector<bool> done(obsts_in.size());
265  std::fill(result.begin(), result.end(), -1);
266 
268 
269  for (int cur_time_step = min_time_step_traj;
270  cur_time_step <= max_time_step_traj; cur_time_step++) {
271  col_objs_tvobst.clear();
272 
273  retrieve_shapes_from_trajectories(cur_time_step, obsts_scenario,
274  col_objs_tvobst);
275 
277  T obstacles_grid(col_objs_tvobst, sett);
278 
280 
282  creq.enable_verification = enable_verification;
283  creq.test_obb_bbox = false;
284  for (int cur_obst = 0; cur_obst < obsts_in.size(); cur_obst++) {
285  if (!done[cur_obst]) {
286  auto cur_obj = obsts_in[cur_obst]->getObstacleAtTimePtr(cur_time_step);
287  if (cur_obj && obstacles_grid.checkCollision(cur_obj, creq)) {
288  done[cur_obst] = true;
289  result[cur_obst] = cur_time_step;
290  }
291  }
292  }
293  numcands_global += obstacles_grid.numcands();
294  numchecks_global += obstacles_grid.numchecks();
295  }
296 
297  result[obsts_in.size()] = numcands_global;
298  result[obsts_in.size() + 1] = numchecks_global;
299 
300  return 0;
301 }
302 
306  obsts_scenario,
308  ContainerSettings sett;
309 
310  return trajectories_collision_dynamic_helper<ContainerBox2D>(
311  treq.enable_verification, result, traj_in, obsts_scenario, sett);
312 }
313 
317  obsts_scenario,
319  ContainerSettings sett;
321  sett.fcl_num_buckets = treq.fcl_num_buckets;
322  sett.num_cells = treq.num_cells;
323 
324  return trajectories_collision_dynamic_helper<ContainerFCL>(
325  treq.enable_verification, result, traj_in, obsts_scenario, sett);
326 }
327 
330  const collision::ShapeGroup& obj,
332 
333 {
335  ContainerSettings sett;
336  sett.num_cells = treq.num_cells;
337  sett.fcl_num_buckets = treq.fcl_num_buckets;
339  ContainerFCL obstacles_cont(&obj, sett);
340 
342 
345  creq.test_obb_bbox = false;
346 
347  return trajectories_collision_staticobst_helper(obstacles_cont, traj_in, creq,
348  result);
349 }
350 
353  const collision::ShapeGroup& obj,
355  int min_time_step = -1, max_time_step = -1;
356  get_time_step_bounds(traj_in, min_time_step, max_time_step);
357  aligned_vector<bool> done(traj_in.size());
358 
359  std::fill(result.begin(), result.end(), -1);
361  collision::AABB bounds;
362  int orientation = 0;
363 
364  getBestGridOrientationAndBounds(&obj, bounds, orientation);
365  ContainerSettings sett;
366  sett.num_cells = treq.num_cells;
367  ContainerGrid<HorizontalGrid> obstacles_grid(&obj, &bounds, sett);
368 
369  std::vector<collision::BoostPolygon*> polygons_vec;
370 
371  for (auto poly : obj.unpack()) {
372  auto poly_obj = poly.get();
373  if (poly_obj->getCollisionObjectType() == collision::OBJ_TYPE_POLYGON) {
374  polygons_vec.push_back(static_cast<collision::BoostPolygon*>(
376  ->getCollisionObject_boost()
377  .get()));
378  } else {
379  throw std::invalid_argument(
380  "the shape group for enclosure checks can contain only "
381  "collision::Polygon objects");
382  }
383  }
384 
386 
387  for (int cur_time_step = min_time_step; cur_time_step <= max_time_step;
388  cur_time_step++) {
389  for (int cur_obst = 0; cur_obst < traj_in.size(); cur_obst++) {
390  if (!done[cur_obst]) {
391  auto cur_obj = traj_in[cur_obst]->getObstacleAtTimePtr(cur_time_step);
392 
393  if (cur_obj) {
395  switch (cur_obj->getCollisionObjectType()) {
397 
398  {
401  static_cast<const collision::RectangleOBB*>(cur_obj));
403  } break;
405 
406  {
409  static_cast<const collision::RectangleAABB*>(cur_obj));
411  } break;
412  default:
413  throw std::invalid_argument(
414  "the trajectory for polygon enclosure checks can consist "
415  "only of OBB or AABB boxes");
416  break;
417  }
418 
419  collision::AABB aabb = getAABB(cur_obj);
420 
421  bool bRes = false;
422  boost_polygon_enclosure_grid(obstacles_grid, polygons_vec, aabb,
423  (collision::BoostPolygon*)&bp1, bRes);
424 
425  if (!bRes) {
426  done[cur_obst] = true;
427  result[cur_obst] = cur_time_step;
428  }
429  }
430  }
431  }
432  }
433  result[traj_in.size()] = obstacles_grid.numcands();
434  result[traj_in.size() + 1] = obstacles_grid.numchecks();
435  return 0;
436 }
437 
440  const collision::ShapeGroup& obj,
443  ContainerSettings sett;
444  ContainerBox2D obstacles_cont(&obj, sett);
445 
447 
450  creq.test_obb_bbox = false;
451 
452  return trajectories_collision_staticobst_helper(obstacles_cont, traj_in, creq,
453  result);
454 }
455 } // namespace trajectory_queries
456 } // namespace detail
457 namespace trajectory_queries {
458 using namespace detail::trajectory_queries;
461  trajectories_in,
463  dynamic_obstacles,
464  TrajectoryQueryResult& res, const TrajectoryRequest& treq) {
465  auto request =
466  static_cast<const collision::TrajectoryRequestCollisionTime&>(treq);
467  aligned_vector<int>* result =
468  static_cast<collision::TrajectoryQueryResultCollisionTime&>(res).result;
469  if (!result) return -1;
470  switch (request.broadphase_class) {
471  case BC_UNIFORMGRID:
473  trajectories_in, dynamic_obstacles, request, *result);
474  break;
475  case BC_FCL:
477  trajectories_in, dynamic_obstacles, request, *result);
478  break;
479  case BC_BOX2D:
481  trajectories_in, dynamic_obstacles, request, *result);
482  break;
483  default:
484  throw;
485  }
486  return -1;
487 }
488 
491  trajectories_in,
492  const collision::ShapeGroup& static_obstacles, TrajectoryQueryResult& res,
493  const TrajectoryRequest& treq) {
494  auto request =
495  static_cast<const collision::TrajectoryRequestCollisionTime&>(treq);
496  aligned_vector<int>* result =
497  static_cast<collision::TrajectoryQueryResultCollisionTime&>(res).result;
498  if (!result) return -1;
499 
500  switch (request.broadphase_class) {
501  case BC_UNIFORMGRID:
503  trajectories_in, static_obstacles, request, *result);
504  break;
505  case BC_FCL:
507  trajectories_in, static_obstacles, request, *result);
508  break;
509  case BC_BOX2D:
511  trajectories_in, static_obstacles, request, *result);
512  break;
513  default:
514  throw;
515  }
516  return -1;
517 }
520  trajectories_in,
521  const collision::ShapeGroup& polygons, TrajectoryQueryResult& res,
522  const TrajectoryRequest& treq) {
523  auto request =
524  static_cast<const collision::TrajectoryRequestCollisionTime&>(treq);
525  aligned_vector<int>* result =
526  static_cast<collision::TrajectoryQueryResultCollisionTime&>(res).result;
527  if (!result) return -1;
528 
529  switch (request.broadphase_class) {
530  case BC_UNIFORMGRID:
532  trajectories_in, polygons, request, *result);
533  break;
534  default:
535  throw;
536  }
537  return -1;
538 }
539 
552 
553  obj_new = new_obj;
554 
555  auto new_obj_ptr = obj_new.get();
556 
557  auto time_start_idx_ = obj_old->time_start_idx();
558  auto time_end_idx_ = obj_old->time_end_idx();
559 
560  if (time_end_idx_ - time_start_idx_ <= 0) return 0;
561  for (int i = time_start_idx_; i <= time_end_idx_; i++) {
564  if (i == time_end_idx_) {
565  first = obj_old->getObstacleAtTime(i - 1);
566  second = obj_old->getObstacleAtTime(i);
567  } else {
568  first = obj_old->getObstacleAtTime(i);
569  second = obj_old->getObstacleAtTime(i + 1);
570  }
571 
572  if (!first || !second) {
573  return -1;
574  }
575 
576  CollisionObjectConstPtr element_new;
577  element_new =
578  geometry_queries::ccd_merge_entities(first.get(), second.get());
579  if (!element_new) {
580  return -1;
581  } else {
582  new_obj->appendObstacle(element_new);
583  }
584  }
585  obj_new = new_obj;
586  return 0;
587 }
588 
589 namespace deprecated {
590 
608  const RectangleOBB& pos1,
609  const RectangleOBB& pos2,
610  bool& res) {
611  if (boost_ccd_convex_hull_collision(sg, pos1, pos2, res))
612  return 1;
613  else
614  return 0;
615 }
616 
633  const RectangleOBB& pos1,
634  const RectangleOBB& pos2,
635  bool& res) {
636  if (boost_ccd_obb_sum_collision(sg, pos1, pos2, res))
637  return 1;
638  else
639  return 0;
640 }
641 
659  const ShapeGroup& sg, const RectangleOBB& pos1, const RectangleOBB& pos2,
660  bool& res) {
661  if (boost_ccd_convex_hull_polygon_enclosure(sg, pos1, pos2, res))
662  return 1;
663  else
664  return 0;
665 }
666 
683  const ShapeGroup& sg, const RectangleOBB& pos1, const RectangleOBB& pos2,
684  bool& res) {
685  if (boost_ccd_obb_sum_polygon_enclosure(sg, pos1, pos2, res))
686  return 1;
687  else
688  return 0;
689 }
690 
691 } // namespace deprecated
692 
693 } // namespace trajectory_queries
694 } // namespace collision
Oriented rectangle.
Definition: rectangle_obb.h:19
#define TIMER_START(x)
Definition: application.h:47
std::vector< T, boost::alignment::aligned_allocator< T, 16 > > aligned_vector
Definition: declarations.h:9
int boost_ccd_obb_sum_collision(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
int getBestGridOrientationAndBounds(const ShapeGroup *sg_ptr, AABB &bounds, int &orientation)
TimeVariantCollisionObject can contain a different CollisionObject or ShapeGroup at each time step...
int boost_ccd_convex_hull_polygon_enclosure(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
int trajectories_collision_dynamic_helper(bool enable_verification, aligned_vector< int > &result, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_scenario, const ContainerSettings &sett)
std::size_t ccd_trajectory_test_polygon_enclosure_obb_sum(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
Checks if the over-approximative OBB box (OBB sum hull) for the two given OBB boxes boxes is enclosed...
int trajectories_enclosure_polygons_static_grid(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const collision::ShapeGroup &obj, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
int trajectories_collision_time_dynamic_obstacles(const aligned_vector< const collision::TimeVariantCollisionObject *> &trajectories_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &dynamic_obstacles, TrajectoryQueryResult &res, const TrajectoryRequest &treq)
int trajectories_collision_staticobst_grid(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const collision::ShapeGroup &obj, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
virtual CollisionObjectClass getCollisionObjectClass() const
std::vector< ShapeConstPtr > unpack() const
Returns Vector of all shapes contained inside the ShapeGroup.
Definition: shape_group.cc:187
OBB merge_obbs(const OBB &obb1, const OBB &obb2)
void retrieve_shapes_from_trajectories(int time_step, const aligned_vector< const collision::TimeVariantCollisionObject *> &trajectory_list, aligned_vector< collision::CollisionObject *> &shapes_out)
std::size_t ccd_trajectory_test_polygon_enclosure_chull(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
Checks if the convex hull of the Boolean union of two given OBB boxes is enclosed within the ShapeGro...
ShapeGroup can contain simple shapes.
Definition: shape_group.h:33
RectangleOBBConstPtr ccd_merge_entities(const RectangleOBB *first, const RectangleOBB *second)
int boost_ccd_convex_hull_collision(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
Checks if the convex hull of the Boolean union of two given OBB boxes collides with any of the ShapeG...
AABB getAABB(const CollisionObject *obj)
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
int trajectory_preprocess_obb_sum(const TimeVariantCollisionObject *obj_old, TimeVariantCollisionObjectPtr &obj_new)
Preprocesses a TimeVariantCollisionObject for continuous collision detection using OBB sum hull for t...
int boost_polygon_enclosure_grid(T &grid, std::vector< BoostPolygon *> polygons, AABB &aabb, const BoostPolygon *obj_poly, bool &res)
std::size_t ccd_trajectory_test_collision_chull(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
Checks if the convex hull of the Boolean union of two given OBB boxes collides with any of the ShapeG...
int trajectories_enclosure_time_polygons_static(const aligned_vector< const collision::TimeVariantCollisionObject *> &trajectories_in, const collision::ShapeGroup &polygons, TrajectoryQueryResult &res, const TrajectoryRequest &treq)
const BoostCollisionObject * get_boost_object_ptr(const CollisionObject *obj)
Definition: boost_helpers.h:10
int trajectories_collision_dynamic_grid_helper(bool enable_verification, aligned_vector< bool > &done, T &obstacles_grid, int cur_time_step, int &numcands_global, int &numchecks_global, aligned_vector< int > &result, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_in)
int trajectories_collision_time_static_obstacles(const aligned_vector< const collision::TimeVariantCollisionObject *> &trajectories_in, const collision::ShapeGroup &static_obstacles, TrajectoryQueryResult &res, const TrajectoryRequest &treq)
int trajectories_collision_staticobst_box2d(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const collision::ShapeGroup &obj, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
int orientation(Point p, Point q, Point r)
#define TIMER_grid_build
Definition: application.h:33
int boost_ccd_obb_sum_polygon_enclosure(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
#define TIMER_STOP(x)
Definition: application.h:48
CollisionObjectConstPtr getObstacleAtTime(int time_idx) const
#define TIMER_poly_build
Definition: application.h:39
int trajectories_collision_dynamic_fcl(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_scenario, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
std::size_t ccd_trajectory_test_collision_obb_sum(const ShapeGroup &sg, const RectangleOBB &pos1, const RectangleOBB &pos2, bool &res)
Checks if the over-approximative OBB box (OBB sum hull) for the two given OBB boxes collides with any...
int trajectories_collision_staticobst_helper(T &obstacles_container, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_in, ContainerCollisionRequest req, aligned_vector< int > &result)
Base class for CollisionObjects and some of their groups.
int trajectories_collision_staticobst_fcl(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const collision::ShapeGroup &obj, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
int trajectories_collision_dynamic_box2d(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_scenario, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)
void swapAxes(void)
Definition: aabb.h:33
void get_time_step_bounds(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_in, int &min_time_step_traj, int &max_time_step_traj, int &min_time_step_obst, int &max_time_step_obst)
BoostPolygon allows to use boost.Geometry functions for Polygon objects.
std::shared_ptr< TimeVariantCollisionObject > TimeVariantCollisionObjectPtr
int trajectories_collision_dynamic_grid(const aligned_vector< const collision::TimeVariantCollisionObject *> &traj_in, const aligned_vector< const collision::TimeVariantCollisionObject *> &obsts_scenario, const TrajectoryRequestCollisionTime &treq, aligned_vector< int > &result)