laurimi / ase_exploration

Planning for robotic exploration based on forward simulation
BSD 3-Clause "New" or "Revised" License
85 stars 33 forks source link
decision-making exploration monte-carlo planner robotics

Forward-simulation based planning for robotic exploration

The software contained in the ase_exploration package is a ROS integrated planner for robotic exploration tasks, taking as input data from various costmaps and outputting new exploration targets for the robot. To execute the exploration task, this software uses move_base. In order to use this software, you will need to have properly configured move_base to run on your robot.

The planner software uses layers of costmaps to track free, occupied, and unknown space. Based on this information, it will sample possible trajectories and sensor readings, and iteratively improve the trajectories to maximize the mutual information of the map and future observations. Based on a few heuristic rules, the planner detects whether the robot might be stuck or if the local trajectories it has sampled are not very informative. If this happens, the planner will instead apply classical frontier-based exploration to select the next exploration target, and afterwards again resumes planning via forward simulation of local trajectories. For technical details on the approach, please refer to the publication listed below.

The basic interface is through ROS actions - as long as an request for exploration provided in the form of an action is active, the planner will keep producing new exploration targets. The process is stopped when an error occurs, or when the user cancels the action. The software will pass any exploration targets it computes to move_base via a move_base_msgs::MoveBaseAction type action.

Video and publication

Click the link below to view a video showing the software in action: Planning for robotic exploration based on forward simulation

Further details are available in our journal paper on the subject. If you use this code in an academic context, please cite the paper:

Mikko Lauri, Risto Ritala. Planning for robotic exploration based on forward simulation, Robotics and Autonomous Systems, Vol 83, (2016), pp. 15-31, DOI: 10.1016/j.robot.2016.06.008

A preprint version is also available on arXiv.

BiBTeX:

@article{Lauri2016planning,
  author  = {Mikko Lauri and Risto Ritala}, 
  title   = {Planning for robotic exploration based on forward simulation},
  journal = {Robotics and Autonomous Systems},
  year    = 2016,
  volume  = 83,
  pages   = {15 - 31},
  doi     = {10.1016/j.robot.2016.06.008}
}

Acknowledgment

As implementation of the fallback exploration strategy based on classical frontier exploration, we apply Paul Bovbel's frontier_exploration package. This package also in part inspired the implementation our planner.

Installation

The code is hosted on GitHub. The package has been tested to work with ROS Indigo, running on Ubuntu 14.04, using gcc 4.8.4 as compiler. To build, simply clone this repository to your catkin workspace src directory, and run catkin_make in the workspace main directory.

For improved performance, this package uses OpenMP for evaluating trajectories in parallel. C++11 features are used in the code, and support is required from the compiler.

Simulator demo: Turtlebot exploring an environment

You can test the exploration planner by running it using simulator. Here, we apply mostly standard settings from the turtlebot_stage package. To run the demo, you need to install the dependencies:

sudo apt-get install ros-indigo-turtlebot-simulator ros-indigo-frontier-exploration ros-indigo-turtlebot-navigation

Before continuing, make sure you have sourced setup.bash of the catkin workspace you installed the exploration package in, do this as follows (changing the path appropriately)

source ~/catkin_ws/devel/setup.bash

Now run the main launch file:

roslaunch ase_exploration simulator_exploration.launch

The simulator will now start, along with other nodes and an rviz visualization.

Finally, start the action client to send an exploration command to the robot. This command must be run in a terminal window where setup.bash of the catkin workspace you installed the exploration package in has been sourced.

rosrun actionlib axclient.py /exploration

Click on "Send", and the simulated Turtlebot will start exploring the environment.

ROS Node details: ase_exploration_planner_node

1. Actions provided

This node provides an implementation of the SimpleActionServer for the ExploreAction type defined in this package. This action is provided with the name exploration. Your best bet to get started is probably to use actionlib's axclient to send an action request to start exploration: rosrun actionlib axclient.py /exploration.

ExploreAction

ExploreAction is very simple. It has an empty goal definition, and an empty result definition, and as feedback will output the current exploration target produced by the planner. Once the user gives the node a exploration task through this action, the planner will produce exploration targets until an error occurs or the user cancels the action.

2. Actions called

The exploration targets produced by the planner are sent as navigation goals to move_base. This is handled by a SimpleActionClient calling an move_base_msgs::MoveBaseAction on the topic move_base.

3. Services required

This node requires and calls two services from the frontier_exploration package. They are:

In practice you will need to launch an instance of frontier_exploration and set its parameters according to the behaviour you want in case this exploration node has to fallback to using frontier exploration. The ase_exploration_node will call services from frontier_exploration as required.

4. Subscribed topics

The node requires two types of maps as input in order to work: a costmap describing where the robot is allowed to and not allowed to plan paths, and a global map describing the current information the robot has about the environment. For the cost map, we need to subscribe both to the costmap itself and any possible updates to it, as described in the following.

5. Published topics

6. Parameters

These parameters can be set at node startup. The planner behaviour control parameters set the thresholds for when the planner will think that the robot is stuck or that local trajectories are not informative. In case these thresholds are triggered, the planner will fall back to a frontier exploration for selecting the next target and then resume planning via local trajectories.

Frame ids

A TF transform must be available between map_frame_id and base_frame_id.

Planner behaviour control

Robot dynamics model limits

Only trajectories respecting these limits will be sampled by the planner.

7. Parameters (dynamically reconfigurable)

From the following parameters, the most important ones to set to correspond to your system are those controlling the simulated laser range finder. The parameters listed below can also be reconfigured dynamically during runtime using dynamic_reconfigure.

Planning algorithm settings

Planning settings and constraints

Simulated laser scanner parameters

The node samples observations via raytracing with a simulated laser range finder assuming a map hypothesis consistent with the current costmaps. These observation samples are applied to evaluate the trajectories. The simulated laser parameters can be controlled through these parameters.

8. Tips on improving computational performance

The planning method is computationally intensive. To improve computation speed, you can primarily try to to decrease the length of trajectories by lowering horizon, decreasing the number of particles num_particles, or the number of samples used in evaluation via schedule_a and schedule_b, or by decreasing the resolution of the simulated laser by lowering the maximum range laser_max_dist_m or making the resolution laser_angle_step larger.

9. Limitations

The software has been written assuming a robot in a planar environment, specifically a Turtlebot-like robot platform. Possible robot trajectories are sampled under this assumption. If your robot is not even barely correspond to these assumptions, the dynamics model should be replaced by one suitable for your robot.

The software currently works on 2D occupancy grid maps and costmaps. Although there are no plans to extend the software beyond this I have attempted to write the code to enable extensions.