diff --git a/nav2_smac_planner/include/nav2_smac_planner/collision_checker.hpp b/nav2_smac_planner/include/nav2_smac_planner/collision_checker.hpp index 7057cac5014..e6520f4bd26 100644 --- a/nav2_smac_planner/include/nav2_smac_planner/collision_checker.hpp +++ b/nav2_smac_planner/include/nav2_smac_planner/collision_checker.hpp @@ -100,6 +100,16 @@ class GridCollisionChecker return angles_; } +private: + /** + * @brief Check if value outside the range + * @param min Minimum value of the range + * @param max Maximum value of the range + * @param value the value to check if it is within the range + * @return boolean if in range or not + */ + bool outsideRange(const unsigned int & max, const float & value); + protected: std::vector oriented_footprints_; nav2_costmap_2d::Footprint unoriented_footprint_; diff --git a/nav2_smac_planner/src/collision_checker.cpp b/nav2_smac_planner/src/collision_checker.cpp index b267259c9cf..c0cbfb98fa7 100644 --- a/nav2_smac_planner/src/collision_checker.cpp +++ b/nav2_smac_planner/src/collision_checker.cpp @@ -86,6 +86,13 @@ bool GridCollisionChecker::inCollision( const float & angle_bin, const bool & traverse_unknown) { + // Check to make sure cell is inside the map + if (outsideRange(costmap_->getSizeInCellsX(), x) || + outsideRange(costmap_->getSizeInCellsY(), y)) + { + return false; + } + // Assumes setFootprint already set double wx, wy; costmap_->mapToWorld(static_cast(x), static_cast(y), wx, wy); @@ -164,4 +171,9 @@ float GridCollisionChecker::getCost() return static_cast(footprint_cost_); } +bool GridCollisionChecker::outsideRange(const unsigned int & max, const float & value) +{ + return value < 0.0f || value > max; +} + } // namespace nav2_smac_planner