collision.hpp
Go to the documentation of this file.
1 /*********************************************************************
2  * BSD 3-Clause License
3  *
4  * Copyright (c) 2020 Northwestern University
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * * Redistributions of source code must retain the above copyright notice, this
11  * list of conditions and the following disclaimer.
12  *
13  * * Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * * Neither the name of the copyright holder nor the names of its
18  * contributors may be used to endorse or promote products derived from
19  * this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *********************************************************************/
38 #ifndef COLLISION_HPP
39 #define COLLISION_HPP
40 
41 #include <utility>
42 #include <unordered_map>
43 #include <tuple>
44 #include <limits>
45 #include <armadillo>
46 
48 
49 namespace ergodic_exploration
50 {
51 using arma::vec;
52 using std::tuple;
53 
55 enum class CollisionMsg
56 {
57  crash,
58  obstacle,
59  none
60 };
61 
64 {
73  CollisionConfig(int rb, int rc, int rm, int cx, int cy)
74  : r_bnd(rb), r_col(rc), r_max(rm), cx(cx), cy(cy), dx(0), dy(0), sqrd_obs(-1)
75  {
76  }
77 
78  const int r_bnd, r_col, r_max; // bounding , collision, and max search radii
79  const int cx, cy; // circle center
80  int dx, dy; // displacement from circle center to obstacle
81  int sqrd_obs; // squared distance circle center to obstacle
82 };
83 
85 class Collision
86 {
87 public:
95  Collision(double boundary_radius, double search_radius, double obstacle_threshold,
96  double occupied_threshold);
97 
106  tuple<CollisionMsg, double> minDistance(const GridMap& grid, const vec& pose) const;
107 
116  tuple<CollisionMsg, vec> minDirection(const GridMap& grid, const vec& pose) const;
117 
124  bool collisionCheck(const GridMap& grid, const vec& pose) const;
125 
127  double totalPadding() const;
128 
129 private:
136  bool search(CollisionConfig& cfg, const GridMap& grid) const;
137 
146  bool bresenhamCircle(CollisionConfig& cfg, const GridMap& grid, int r) const;
147 
156  bool checkCell(CollisionConfig& cfg, const GridMap& grid, unsigned int cj,
157  unsigned int ci) const;
158 
159 private:
160  double boundary_radius_; // circular radius around robot
161  double search_radius_; // search radius for obstacles
162  double obstacle_threshold_; // collision distance threshold
163  double occupied_threshold_; // probaility cell is occupied
164 };
165 } // namespace ergodic_exploration
166 #endif
ergodic_exploration::Collision::occupied_threshold_
double occupied_threshold_
Definition: collision.hpp:163
ergodic_exploration::Collision::totalPadding
double totalPadding() const
Return the distance from robot center to collision boundary.
Definition: collision.cpp:143
ergodic_exploration::CollisionConfig
Collision detection parameters.
Definition: collision.hpp:63
ergodic_exploration::Collision::minDirection
tuple< CollisionMsg, vec > minDirection(const GridMap &grid, const vec &pose) const
Compose displacement vector from closest obstacle to robot.
Definition: collision.cpp:95
ergodic_exploration::CollisionConfig::r_max
const int r_max
Definition: collision.hpp:78
ergodic_exploration::Collision::bresenhamCircle
bool bresenhamCircle(CollisionConfig &cfg, const GridMap &grid, int r) const
Bresenham's circle algorithm.
Definition: collision.cpp:166
ergodic_exploration::Collision::search_radius_
double search_radius_
Definition: collision.hpp:161
ergodic_exploration::CollisionConfig::dx
int dx
Definition: collision.hpp:80
ergodic_exploration::Collision::Collision
Collision(double boundary_radius, double search_radius, double obstacle_threshold, double occupied_threshold)
Constructor.
Definition: collision.cpp:46
ergodic_exploration::CollisionMsg
CollisionMsg
State of the collision detector.
Definition: collision.hpp:55
ergodic_exploration::CollisionConfig::r_bnd
const int r_bnd
Definition: collision.hpp:78
ergodic_exploration::Collision::boundary_radius_
double boundary_radius_
Definition: collision.hpp:160
ergodic_exploration
Definition: basis.hpp:43
ergodic_exploration::GridMap
Constructs an 2D grid.
Definition: grid.hpp:79
ergodic_exploration::CollisionMsg::obstacle
@ obstacle
ergodic_exploration::CollisionConfig::cx
const int cx
Definition: collision.hpp:79
ergodic_exploration::CollisionConfig::dy
int dy
Definition: collision.hpp:80
ergodic_exploration::CollisionConfig::cy
const int cy
Definition: collision.hpp:79
ergodic_exploration::CollisionConfig::CollisionConfig
CollisionConfig(int rb, int rc, int rm, int cx, int cy)
Constructor.
Definition: collision.hpp:73
ergodic_exploration::CollisionMsg::none
@ none
grid.hpp
2D grid represented in row major order
ergodic_exploration::CollisionConfig::r_col
const int r_col
Definition: collision.hpp:78
ergodic_exploration::Collision::obstacle_threshold_
double obstacle_threshold_
Definition: collision.hpp:162
ergodic_exploration::Collision::checkCell
bool checkCell(CollisionConfig &cfg, const GridMap &grid, unsigned int cj, unsigned int ci) const
Check if cell is an obstacle.
Definition: collision.cpp:216
ergodic_exploration::Collision::collisionCheck
bool collisionCheck(const GridMap &grid, const vec &pose) const
Check if the given state is a collision.
Definition: collision.cpp:126
ergodic_exploration::CollisionMsg::crash
@ crash
ergodic_exploration::Collision::minDistance
tuple< CollisionMsg, double > minDistance(const GridMap &grid, const vec &pose) const
Compose distance to closest obstacle.
Definition: collision.cpp:65
ergodic_exploration::CollisionConfig::sqrd_obs
int sqrd_obs
Definition: collision.hpp:81
ergodic_exploration::Collision::search
bool search(CollisionConfig &cfg, const GridMap &grid) const
Find occupied cells between collision boundary and max search radius.
Definition: collision.cpp:148
ergodic_exploration::Collision
2D collision detection
Definition: collision.hpp:85


ergodic_exploration
Author(s): bostoncleek
autogenerated on Wed Mar 2 2022 00:17:13