Classes | |
class | EasyCostmap |
An instantiation of the Costmap class that simply populates the grid from an image. More... | |
Typedefs | |
using | PoseList = std::vector< nav_2d_msgs::Pose2DStamped > |
Functions | |
bool | checkOccupiedPathCoverage (nav_core2::GlobalPlanner &planner, const PoseList &start_cells, const PoseList &goal_cells, const std::string &test_name, bool check_exception_type=true, bool verbose=false, bool quit_early=true, bool invalid_starts=true) |
Check if the appropriate exception is thrown when attempting to plan to or from an occupied cell. More... | |
bool | checkOutOfBoundsPathCoverage (nav_core2::GlobalPlanner &planner, const PoseList &start_cells, const PoseList &goal_cells, const std::string &test_name, bool check_exception_type=true, bool verbose=false, bool quit_early=true, bool invalid_starts=true) |
Check if the appropriate exception is thrown when attempting to plan to or from a pose off the costmap. More... | |
bool | checkValidPathCoverage (nav_core2::GlobalPlanner &planner, const PoseList &free_cells, bool verbose=false, bool quit_early=true) |
Check if a path exists between every pair of free_cells. More... | |
PoseList | createPosesOutsideCostmap (const nav_core2::Costmap &costmap) |
Create a list of poses that are outside the costmap's bounds. More... | |
void | groupCells (const nav_core2::Costmap &costmap, PoseList &free_cells, PoseList &occupied_cells, bool include_edges=true) |
Populate two lists of poses from a costmap. one with all the free cells, the other with all the occupied cells. More... | |
bool | hasCompleteCoverage (nav_core2::GlobalPlanner &planner, const nav_core2::Costmap &costmap, int max_failure_cases=10, bool check_exception_type=true, bool verbose=false, bool quit_early=true) |
Run a bunch of tests, assuming there is a valid path from any free cell to any other free cell. More... | |
bool | hasNoPaths (nav_core2::GlobalPlanner &planner, const nav_core2::Costmap &costmap, bool check_exception_type=true, bool verbose=false, bool quit_early=true) |
Run a bunch of tests, assuming there are no valid paths from any free cell to any other free cell. More... | |
bool | many_map_test_suite (nav_core2::GlobalPlanner &planner, TFListenerPtr tf, const std::string &planner_name, const std::string &maps_list_filename="package://global_planner_tests/config/standard_tests.yaml", bool check_exception_type=true, bool verbose=false, bool quit_early=true) |
Run a collection of global_planner_tests on the provided maps. More... | |
bool | planExists (nav_core2::GlobalPlanner &planner, nav_2d_msgs::Pose2DStamped start, nav_2d_msgs::Pose2DStamped goal) |
Simple check to see if a plan exists. Returns a boolean instead of returning path or throwing an exception. More... | |
std::string | resolve_filename (const std::string &filename) |
Replace a package:// prefix with the actual path to the given package. More... | |
PoseList | subsetPoseList (const PoseList &cells, unsigned int num_cells) |
Create a new list of poses from cells that is num_cells long. More... | |
using global_planner_tests::PoseList = typedef std::vector<nav_2d_msgs::Pose2DStamped> |
Definition at line 46 of file global_planner_tests.h.
bool global_planner_tests::checkOccupiedPathCoverage | ( | nav_core2::GlobalPlanner & | planner, |
const PoseList & | start_cells, | ||
const PoseList & | goal_cells, | ||
const std::string & | test_name, | ||
bool | check_exception_type = true , |
||
bool | verbose = false , |
||
bool | quit_early = true , |
||
bool | invalid_starts = true |
||
) |
Check if the appropriate exception is thrown when attempting to plan to or from an occupied cell.
This attempts plans from every start_cell to every goal_cell. We want to test three different modes
In the first case, the start cell is invalid (invalid_starts=true) and we expect OccupiedStartException to be thrown In the second, the goal cell is invalid (invalid_starts=false) and we expect OccupiedGoalException In the third, both are invalid, so we don't check the precise exception type (check_exception_type=false)
planner | The planner |
start_cells | poses to try to plan from |
goal_cells | poses to try to plan to |
test_name | name of this test configuration for verbose printing |
check_exception_type | If true, requires that OccupiedStartException/OccupiedGoalException thrown appropriately |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
invalid_starts | Whether the start poses are invalid. Otherwise its the goals |
Definition at line 167 of file global_planner_tests.cpp.
bool global_planner_tests::checkOutOfBoundsPathCoverage | ( | nav_core2::GlobalPlanner & | planner, |
const PoseList & | start_cells, | ||
const PoseList & | goal_cells, | ||
const std::string & | test_name, | ||
bool | check_exception_type = true , |
||
bool | verbose = false , |
||
bool | quit_early = true , |
||
bool | invalid_starts = true |
||
) |
Check if the appropriate exception is thrown when attempting to plan to or from a pose off the costmap.
This attempts plans from every start_cell to every goal_cell. We want to test three different modes
In the first case, the start cell is invalid (invalid_starts=true) and we expect StartBoundsException to be thrown In the second, the goal cell is invalid (invalid_starts=false) and we expect GoalBoundsException In the third, both are invalid, so we don't check the precise exception type (check_exception_type=false)
planner | The planner |
start_cells | poses to try to plan from |
goal_cells | poses to try to plan to |
test_name | name of this test configuration for verbose printing |
check_exception_type | If true, requires that StartBoundsException/GoalBoundsException thrown appropriately |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
invalid_starts | Whether the start poses are invalid. Otherwise its the goals |
Definition at line 224 of file global_planner_tests.cpp.
bool global_planner_tests::checkValidPathCoverage | ( | nav_core2::GlobalPlanner & | planner, |
const PoseList & | free_cells, | ||
bool | verbose = false , |
||
bool | quit_early = true |
||
) |
Check if a path exists between every pair of free_cells.
planner | The planner |
free_cells | List of poses to check |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
Definition at line 137 of file global_planner_tests.cpp.
PoseList global_planner_tests::createPosesOutsideCostmap | ( | const nav_core2::Costmap & | costmap | ) |
Create a list of poses that are outside the costmap's bounds.
costmap | Source of the bounds data |
Definition at line 69 of file global_planner_tests.cpp.
void global_planner_tests::groupCells | ( | const nav_core2::Costmap & | costmap, |
PoseList & | free_cells, | ||
PoseList & | occupied_cells, | ||
bool | include_edges = true |
||
) |
Populate two lists of poses from a costmap. one with all the free cells, the other with all the occupied cells.
costmap | Source of the cells |
free_cells | Output parameter with one pose in every free cell of the costmap |
occupied_cells | Output parameter with one pose in every occupied cell of the costmap |
include_edges | True if you want to include the cells on the border of the costmap |
For simplicity, the edge cells are ignored, meaning planners need not implement robust boundary checking
Definition at line 42 of file global_planner_tests.cpp.
bool global_planner_tests::hasCompleteCoverage | ( | nav_core2::GlobalPlanner & | planner, |
const nav_core2::Costmap & | costmap, | ||
int | max_failure_cases = 10 , |
||
bool | check_exception_type = true , |
||
bool | verbose = false , |
||
bool | quit_early = true |
||
) |
Run a bunch of tests, assuming there is a valid path from any free cell to any other free cell.
Calls checkValidPathCoverage(), checkOccupiedPathCoverage() and checkOutOfBoundsPathCoverage()
The first checks if there is a path between every set of free cells. It's likely a bit of overkill to check for the exceptions getting thrown for every combination of free/occupied/OutOfBounds cells. Hence, for the latter two, we limit our tests to a subset of the poses. If N=max_failure_cases, we check between combinations of N free cells, N occupied cells and 4 OutOfBounds cells.
We also allow for none of the tests to check the exact exception type in case you want to use this to test a nav_core planner with the nav_core_adapter (which just throws the generic PlannerException whenever path planning fails)
planner | The planner |
costmap | Costmap to get poses from |
max_failure_cases | Number of poses to limit our lists to when checking for path planning failures |
check_exception_type | If true, requires the correct exception thrown |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
Definition at line 282 of file global_planner_tests.cpp.
bool global_planner_tests::hasNoPaths | ( | nav_core2::GlobalPlanner & | planner, |
const nav_core2::Costmap & | costmap, | ||
bool | check_exception_type = true , |
||
bool | verbose = false , |
||
bool | quit_early = true |
||
) |
Run a bunch of tests, assuming there are no valid paths from any free cell to any other free cell.
planner | The planner |
costmap | Costmap to get poses from |
check_exception_type | If true, requires the correct exception thrown |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
Definition at line 345 of file global_planner_tests.cpp.
bool global_planner_tests::many_map_test_suite | ( | nav_core2::GlobalPlanner & | planner, |
TFListenerPtr | tf, | ||
const std::string & | planner_name, | ||
const std::string & | maps_list_filename = "package://global_planner_tests/config/standard_tests.yaml" , |
||
bool | check_exception_type = true , |
||
bool | verbose = false , |
||
bool | quit_early = true |
||
) |
Run a collection of global_planner_tests on the provided maps.
planner | The planner |
tf | Used when initializing the planner |
planner_name | Used when initializing the planner |
maps_list_filename | Filename to load the list of provided maps from |
check_exception_type | If true, requires the correct exception thrown |
verbose | If true, will print statistics at the end |
quit_early | Will stop running tests once there is one failure |
Definition at line 45 of file many_map_test_suite.cpp.
bool global_planner_tests::planExists | ( | nav_core2::GlobalPlanner & | planner, |
nav_2d_msgs::Pose2DStamped | start, | ||
nav_2d_msgs::Pose2DStamped | goal | ||
) |
Simple check to see if a plan exists. Returns a boolean instead of returning path or throwing an exception.
planner | The planner |
start | Starting pose |
goal | Goal pose |
Definition at line 124 of file global_planner_tests.cpp.
std::string global_planner_tests::resolve_filename | ( | const std::string & | filename | ) |
Replace a package:// prefix with the actual path to the given package.
This is a quick dirty way to resolve package names to strings. The alternative is resource_retriever, but that returns a file object as opposed to the updated filename.
filename | input file path |
Create a new list of poses from cells that is num_cells long.
cells | Source list of cells |
num_cells | Number of cells that should be in the return list |
Definition at line 90 of file global_planner_tests.cpp.