hasauino / rrt_exploration_tutorials

This package provides launch files for Gazebo simulation needed to test the rrt_exploration package
http://wiki.ros.org/rrt_exploration/Tutorials
101 stars 39 forks source link

About the parameters #6

Closed StanSmooth closed 5 years ago

StanSmooth commented 6 years ago

Hi hasauino, Could you give us some precisions about the different parameters we can use with your package ? I have some difficulties to understand the use of "~hysteresis_gain", "~hysteresis_gain", and "info-multiplier" parameters. Moreover, do you have some advice to use correctly this parameters in order to use efficiently several robots ?

Once again, thank you for your work !

hasauino commented 6 years ago

Hello StanSmooth, Both of these parameters are used for the robot task allocator node (the assigner node). The assigner node allocates points using a market based approach (many papers adopt this approach). For each robot in the team, a revenue record is calculated where it contains all possible target points (exploration targets, or frontier points) and the expected revenue from exploring those points.

Revenue = (info-multiplier)x(Information gain) - (Navigation cost) Information gain: amount of unknown area surrounding a frontier point. Navigation cost: in our implementation, it is simply the distance between current robot position and the frontier point. info-multiplier: it serves as a weight to give more importance to the information gained over the navigation cost. It is needed because both quantities do not have the same order of magnitude (you cannot compare the unknown area (info gain) and the distance (nav. cost), they do not have the same units).

The hysteresis gain is used in the calculation of the information gain. For a single robot, in order to avoid hysteresis (a robot being assigned different points located far from each other), the information gain is multiplied by the "hysteresis gain" for all the points that are close to the robot within a radius of "hysteresis_rad". Note that the hysteresis gain must be set larger than 1. By doing so, a robot is more biased to continue exploring the region surrounding him (I'm assuming a robot is a male :p).

In the case of multiple robots, it is used in two cases; 1) for available robots and 2) for busy robots (when there is no available robot). (a robot is busy if he is currently heading toward an assigned point).

Case 1: same purpose used for singe robot.

Case 2: when all robots are busy executing their assigned point, the hysteresis gain is used on all the points that are near to the i) robot current position AND ii) the position of the current assigned point.

As a result, higher hysteresis gain makes robot more likely to continue exploring what they have been assigned and less likely to switch to a different point. (a very high hysteresis gain, may be bad, because robots will continue exploring current point even if there is a point with a much higher revenue).

Hysteresis radius is in meters, things that affect the choice of its value are the laser range, map size and so on. I chose it based on my set up, and kept changing it until I was satisfied with the performance of the assigner. I think the default values are OK.

Here is the paper we published (discusses only single robot): Autonomous robotic exploration based on multiple rapidly-exploring randomized trees