A recently developed feature for the REEM humanoid robots is autonomous exploration.

The exploration system enables the robot to move around an unknown environment and create a map of the place without human intervention. Once the map has been created, REEM is able to localize itself in the map and navigate to any reachable goal.

How does it work?

The exploration module receives the map from the SLAM (Simultaneous Localization and Mapping) algorithm, checks which places in the map it can reach by inflating the obstacles and detects frontiers (boundaries between the known and the unknown part of the map).

By moving to frontiers, the robot will end up exploring the available space

[Yamauchi97]. However, rather than moving just to the nearest frontier cell in the grid (map), nearby cells are clustered and a cost function is evaluated to choose the best destination (taking into account cluster size, distance from current position, among others). The re-evaluation of the goal position is done several times per second, since that reduces exploration time [AQH13].

The code also implements blacklisting of unreachable positions, to avoid the robot getting stuck.

[Yamauchi97] Brian Yamauchi. A Frontier-Based Approach for Autonomous Exploration.[AQH13] Francesco Amigoni, Alberto Quattrini Li, Dirk Holz. Evaluating the Impact of Perception and Decision Timing on Autonomous Robotic Exploration.

Integration with the robot

The exploration process can be started and paused at any time, via an action interface. Additionally, other nodes can continue sending goals to move_base (path planning module): the exploration will pause until the goal is completed and resume from there (this allows semi-autonomous exploration, with an operator providing some guidance).

Several options (such as the inflation radius or the smallest area to leave unexplored) can be changed on the fly using the dynamic reconfigure interface. Moreover, the inner workings of the exploration module can be explored through visualizations in RViz. When used with a REEM humanoid service robot, a graphical user interface for Android and support for virtual obstacles is also available.

Code is now available at: https://github.com/pal-robotics/pal_2dnav

Siegfried-A Gevatter.