Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2.1.1 Coverage Planners

Authors
Affiliations
Delft University of Technology
Delft University of Technology
Updated: 02 Oct 2026

This section presents the algorithms employed for the discovery of portable objects. While a comprehensive technical analysis of these algorithms is beyond the scope of this work, they are described with sufficient detail to enable understanding of their application within our framework. For in-depth technical details and formal derivations, the reader is referred to the original publications cited herein. To demonstrate the different navigators, a costmap of the Pulse Breakout room is used. This map was obtained during testing of the coverage methods. Furthermore, Nav2 Macenski et al., 2020 is used for low-level motion planning and execution as well as real-time control and costmap generation.

Initial costmap of the Pulse Breakout room used to evaluate the coverage planners.

Figure 1:Initial costmap of the Pulse Breakout room used to evaluate the coverage planners.

Source

Preprocessing

Before the map can be used to plan a path, a common preprocessing algorithm can be abstracted. Coverage path planners generally use either a binary map of the free space (free = 1, occupied = 0) or the polygons constructed from the boundaries of the free space.

The input to the algorithm can be any 2D image displaying the free and occupied pixels. In this case, the input is the costmap directly. First, the costmap is thresholded to create a binary costmap, which is the first output.

Binary costmap generated by thresholding the Nav2 costmap into free and occupied space.

Figure 2:Binary costmap generated by thresholding the Nav2 costmap into free and occupied space.

Then, using this binary costmap, the contours are extracted (Figure 3).

Contours extracted from the binary costmap representing the boundaries of free space.

Figure 3:Contours extracted from the binary costmap representing the boundaries of free space.

Morphology-Based Skeleton Path Planner

The first implemented method, based on the work of Becoy et al., 2025, Niu et al., 2025, derives a coverage path from the morphological skeleton of the free space. See the algorithm below.

Input: Occupancy grid M\mathcal{M}, robot start position p0∈R2\mathbf{p}_0 \in \mathbb{R}^2
Output: Ordered waypoint segments P=[P1,P2,…,Pk]\mathcal{P} = [P_1, P_2, \ldots, P_k]


  1. B←B \leftarrow threshold(M\mathcal{M}, lethal_threshold)

  2. Extract contours from BB, group by containment into polygon groups GpolyG_{poly}

  3. For each polygon group g∈Gpolyg \in G_{poly}:

    1. S←S \leftarrow medialAxis(BB)     (skimage skeletonize)

    2. W←W \leftarrow skeletonToWorldCoords(SS)

    3. Ggraph←G_{graph} \leftarrow buildKDTreeGraph(WW, radius =rpath= r_{path})

    4. bridgeDisconnectedComponents(GgraphG_{graph})

    5. L←L \leftarrow findLeafNodes(GgraphG_{graph})     (nodes with degree 1)

    6. v←v \leftarrow nearestLeaf(p0\mathbf{p}_0, LL)

    7. Q←[v]\mathcal{Q} \leftarrow [v], Vvisited←∅\quad V_{visited} \leftarrow \emptyset

    8. While Vvisited≠LV_{visited} \neq L:

      1. Vvisited←Vvisited∪{v}V_{visited} \leftarrow V_{visited} \cup \{v\}

      2. r←r \leftarrow nearestLeafByGraphDistance(vv, L∖VvisitedL \setminus V_{visited}, GgraphG_{graph})

      3. π←\pi \leftarrow shortestPath(vv, rr, GgraphG_{graph})

      4. append π\pi to Q\mathcal{Q}

      5. v←rv \leftarrow r

    9. Pi←[W[u]  ∀ u∈Q]P_i \leftarrow [W[u] \;\forall\, u \in \mathcal{Q}]

    10. append PiP_i to P\mathcal{P}, set p0←Pi[last]\mathbf{p}_0 \leftarrow P_i[\text{last}]

  4. sanitiseWaypoints(P\mathcal{P}, M\mathcal{M})

  5. Return P\mathcal{P}


The free space is extracted using the methods discussed in the previous section. The polygons are used and converted to a binary map so as not to produce too many branches for the robot to navigate through. This map is then skeletonized to extract waypoints, see Figure 4.

Morphological skeleton extracted from the free-space representation of the environment.

Figure 4:Morphological skeleton extracted from the free-space representation of the environment.

Once the waypoints are obtained, a graph is constructed and leaf nodes are extracted. In the graph, leaf nodes are defined by their single connection to the rest of the skeleton; these are treated as endpoints of the path.

Leaf nodes identified on the skeleton graph. These nodes represent endpoints used during path generation.

Figure 5:Leaf nodes identified on the skeleton graph. These nodes represent endpoints used during path generation.

Finally, starting from the leaf node closest to the robot, the full path is planned by recursively tracing the graph from the current leaf node to the nearest unvisited leaf node. Use the slider below to visualize the full path.

Source
Loading...
Loading...

A demonstration of the robot mapping a space.

Grid-Based Spanning-Tree Planner

Secondly, a grid-based spanning-tree algorithm is used to plan a full coverage path over the map. This planner is based on the work of Gabriely & Rimon, 2001.

Input: Occupancy grid M\mathcal{M}, robot start position p0∈R2\mathbf{p}_0 \in \mathbb{R}^2, scale s=0.06s = 0.06
Output: Ordered waypoint segments P=[P1,P2,…,Pk]\mathcal{P} = [P_1, P_2, \ldots, P_k]


  1. B←B \leftarrow threshold(M\mathcal{M}, lethal_threshold)

  2. Bdown←B_{down} \leftarrow resize(BB, scale =s= s, interpolation == NEAREST)

  3. G←G \leftarrow gridGraph(BdownB_{down})     (4-connected)

  4. Remove all edges (u,v)(u, v) where Bdown[u]=0B_{down}[u] = 0 or Bdown[v]=0B_{down}[v] = 0

  5. T←∅T \leftarrow \emptyset

  6. For each connected component C∈G\mathcal{C} \in G:

    1. T←T∪T \leftarrow T \cup DFS_tree(C\mathcal{C})

  7. For each edge (u,v)∈T(u, v) \in T:     (edge subdivision)

    1. m←u+v2m \leftarrow \frac{u + v}{2}

    2. replace (u,v)(u, v) with edges (u,m)(u, m) and (m,v)(m, v)

  8. Pperim←0H×WP_{perim} \leftarrow \mathbf{0}^{H \times W}, r←⌊14s⌋\quad r \leftarrow \lfloor \frac{1}{4s} \rfloor

  9. For each node p∈Tp \in T:

    1. pimg←p+0.5sp_{img} \leftarrow \frac{p + 0.5}{s}

    2. drawFilledRect(PperimP_{perim}, centre =pimg= p_{img}, halfsize =r= r)

  10. C←\mathcal{C} \leftarrow findContours(PperimP_{perim}, RETR_EXTERNAL)

  11. For each contour c∈Cc \in \mathcal{C}:

    1. W←W \leftarrow pixelToWorld(cc)

    2. If ∣W∣<2|W| < 2: skip

    3. idx←arg⁡min⁡i∥W[i]−p0∥2idx \leftarrow \arg\min_i \|W[i] - \mathbf{p}_0\|_2

    4. Pi←[W[idx],…,W[−1],W[0],…,W[idx−1]]P_i \leftarrow [W[idx], \ldots, W[-1], W[0], \ldots, W[idx-1]]

    5. append PiP_i to P\mathcal{P}, set p0←Pi[last]\mathbf{p}_0 \leftarrow P_i[\text{last}]

  12. sanitiseWaypoints(P\mathcal{P}, M\mathcal{M})

  13. Return P\mathcal{P}


Unlike the skeleton planner, this planner uses the binary costmap directly. The binary costmap is further discretized to a grid whose resolution is a fraction of that of the original costmap (Figure 7).

Downsampled free-space grid used to construct the spanning tree graph.

Figure 7:Downsampled free-space grid used to construct the spanning tree graph.

A depth-first search (DFS) is conducted over the free cells, from which sparse waypoints are created.

Depth-first search spanning tree generated over the free-space grid.

Figure 8:Depth-first search spanning tree generated over the free-space grid.

A black image with the same resolution as the original costmap is then created, and white squares with half the cell width are placed in the center of each cell and between adjacent cells. Waypoints are created from the contours of this tree. These waypoints represent a circumnavigation around the DFS tree.

Coverage waypoints generated by tracing the contour around the spanning tree structure.

Figure 9:Coverage waypoints generated by tracing the contour around the spanning tree structure.

A segment from this circumnavigation is then removed from the path

Source
Loading...
Loading...

A lab cleanup robot must not blindly follow waypoints. If it does, it might collide with obstacles near the map boundary or collide with moving objects.
Nav2 implements several low-level real-time trajectory planners that plan inside the live-updating costmap Macenski et al., 2023. They handle how the waypoints are followed and how much influence the map ought to have on the generated trajectory. The system described in this section implements an MPPI controller Williams et al., 2017 due to its superior performance in highly dynamic environments, such as labs where students or other people frequently walk Elbouhy et al., 2024. Other planners that were considered include DWB (Dynamic Window Approach Behavior-based) Thrun et al., 1997 and RPP (Regulated Pure Pursuit) Macenski et al., 2023.

References
  1. Macenski, S., Martín, F., White, R., & Ginés Clavero, J. (2020). The Marathon 2: A Navigation System. 2020 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). https://github.com/ros-planning/navigation2
  2. Becoy, A. J., Khomenko, K., Peternel, L., & Rajan, R. T. (2025). Autonomous navigation of quadrupeds using coverage path planning with morphological skeleton maps. Frontiers in Robotics and AI, Volume 12-2025. 10.3389/frobt.2025.1601862
  3. Niu, H., Ji, X., Zhang, L., Wen, F., Ying, R., & Liu, P. (2025). A Skeleton-Based Topological Planner for Exploration in Complex Unknown Environments. https://arxiv.org/abs/2412.13664
  4. Gabriely, Y., & Rimon, E. (2001). Spanning-tree based coverage of continuous areas by a mobile robot. Proceedings 2001 ICRA. IEEE International Conference on Robotics and Automation (Cat. No.01CH37164), 2, 1927–1933 vol.2. 10.1109/ROBOT.2001.932890
  5. Macenski, S., Moore, T., Lu, D. V., Merzlyakov, A., & Ferguson, M. (2023). From the desks of ROS maintainers: A survey of modern & capable mobile robotics algorithms in the robot operating system 2. Robotics and Autonomous Systems, 168, 104493. 10.1016/j.robot.2023.104493
  6. Williams, G., Aldrich, A., & Theodorou, E. A. (2017). Model Predictive Path Integral Control: From Theory to Parallel Computation. Journal of Guidance, Control, and Dynamics, 40(2), 344–357.
  7. Elbouhy, S. M., Adamanov, A., Braun, P. M., & Rose, H. W. (2024). Comparative Analysis of Local Trajectory Planning Algorithms in ROS2. Hamburg University of Technology.
  8. Thrun, S., Fox, D., & Burgard, W. (1997). The dynamic window approach to collision avoidance. IEEE Robotics & Automation Magazine, 4(1), 23–33.
  9. Macenski, S., Singh, S., Martin, F., & Ginés Clavero, J. (2023). Regulated Pure Pursuit for Robot Path Tracking. Autonomous Robots, 47(6), 685–694. 10.1007/s10514-023-10097-6