Search
Explorer.py
utils.py
data
t1f-exploration.py
Explorer.mapping()
Explorer.planning()
Explorer.path_following()
planning()
ControllerReactive
ControllerReactive.py
Planner
Planner.py
Mapper
Mapper.py
Frontiers
Frontiers.py
Autonomous mobile robotic exploration is a complex problem with relatively challenging implementation using a multi-thread environment. For the frontier-based exploration, the particular building blocks for path planning, mapping, and frontiers extractions have been developed in the corresponding tasks t1c-plan, t1d-map, and t1e-frontiers, respectively. Besides, the plan to navigate the robot towards the not yet explored part of the environment can be executed by the reactive path follower implemented in t1b-react.
The provided sources in t1f-exploration.zip include an example implementation of the multi-thread applications, albeit it can be eventually adjusted as needed.
The main task is to implement the decision-making strategy, that is, to determine the next navigation goal (plan) in the function planning() of the Explorer class. Therefore, the whole application logic is encapsulated in the ExplorerBase class to make the problem approachable. There are three main threads of Explorer with an additional thread for visualization (in ExplorerBase) and one more thread of the HexapodRobot. These threads run at a different rate as it is unnecessary to run planning and visualization at high frequency.
Explorer
ExplorerBase
HexapodRobot
Due to a multi-thread setup, it is desirable to utilize exclusive access to the shared data structures realized by the shared variables of the base class ExplorerBase, which is sufficient for the implementation of the task.
Three functions need to be implemented for the working autonomous exploration. The first is mapping(), a direct utilization of the of t1d-map with laser scan fusion into a grid map. Since it is shared with the planning thread and visualization, the access is protected by the mutex_gridmap. The second is planning() that consists of the following steps
mapping()
mutex_gridmap
The path following thread is a variant of the reactive obstacle avoidance t1b-react, where we need to address handling plans provided by the planning thread. Thus, we need to set a new goal location when a new plan is prepared.
The provided sources represent a basic implementation of the exploration, which is working but is neither very reliable nor robust. The limitations and possible improvements are as follows.
The provided default implementation has several issues and drawbacks that can result in less robust and reliable autonomous exploration missions. The main issues with the possible solutions are the following.
A more demanding possible further extensions are as follows.