It is a ROS package that implements frontier-based approach to explore unknown environment. The algorithm emploied single robot. It uses occupancy girds as a map representation.The packgae only has one ROS nodes:
- frontier planner node
Note: This package was written to accomplish a engineering project. For solve the problem that clean robot travels in large-scale environment(e.g. super mall)
The package has been tested on ROS Melodic, it should work on other distributions like Kinetic. The following requirements are needed before installing the package:
1- You should have installed a ROS distribution (kinetic or later. Recommended is either melodic or kinetic).
2- Created a workspace.
3- Installed the "gmapping" ROS package: you can do that by typing the following command in the terminal:
$ sudo apt-get install ros-melodic-gmapping4- Install ROS navigation stack. You can do that with the following command (assuming in melodic):
$ sudo apt-get install ros-melodic-navigation6-You should have/install the following local planner module or use your own local planner:
$ sudo apt-get install ros-melodic-eband-local-plannerDownload the package and place it inside the /src folder in your workspace. And then compile using catkin_make.
This package provides an exploration strategy for single robot. However, for it to work, you should have set your robots ready using the navigation stack.
- "/map": The global map(nav_msgs::OccupancyGrid)
- "/frontier": All frontier cells (PointArray)
- "/centroids": All centroids(PointArray)
- "/inflated_map": The Inflated map of raw map(nav_msgs::OccupancyGrid)
- "/move_base/goal": The current goal using move_base action(move_base_msgs::MoveBaseActionGoal)
- "obstacle_inflation": (float) inflation radius(meter)
- "map_revolution": (float) global map revolution
- "cmd_topic": (string) the robot received velocity topic
- "robot_base_frame": (string) robot base frame_id
- "goal_tolerance": The tolerance for arriving current goal(meter)
- "obstacle_tolerance":if robot's distance to nearest obstacle less than this value, the robot won't rotate
- "rotate_speed": (float) the robot rotate speed
The move_base_node node, which brings up the navigation stack on the robot, must be running. This package generates target exploration goals, the robot must be able to receive these points and move. Additionally, each robot must have a global and local cost maps. All of these are proivded from the move_base_node.
This package(frontier_exploration) uses gmapping slam by default, you can change gmapping to your slam (like cartographer or hector) with the nav_msgs::OccupancyGrid output
$ source {path_to_your_workspace}$ roslaunch frontier_exploration frontier_exploration.launchThe exploration action will start at launching node. In addition, you can change different gazebo world in world dir.