Figure 5.25 presents an outline of the basic preprocessing phase, and Figure 5.26 illustrates the algorithm. As seen throughout this chapter, the algorithm utilizes a uniform, dense sequence . In each iteration, the algorithm must check whether . If , then it must continue to iterate until a collision-free sample is obtained. Once , then in line 4 it is inserted as a vertex of . The next step is to try to connect to some nearby vertices, , of . Each connection is attempted by the CONNECT function, which is a typical LPM (local planning method) from Section 5.4.1. In most implementations, this simply tests the shortest path between and . Experimentally, it seems most efficient to use the multi-resolution, van der Corput-based method described at the end of Section 5.3.4 [379]. Instead of the shortest path, it is possible to use more sophisticated connection methods, such as the bidirectional algorithm in Figure 5.24. If the path is collision-free, then CONNECT returns TRUE.

The same_component condition in line 6 checks to make sure
and are in different components of before wasting
time on collision checking. This ensures that every time a connection
is made, the number of connected components of is decreased. This
can be implemented very efficiently (near constant time) using the
previously mentioned *union-find algorithm*
[243,823]. In some implementations this step
may be ignored, especially if it is important to generate multiple,
alternative solutions. For example, it may be desirable to generate
solution paths from different homotopy classes. In this case the
condition (**not** .same_component(
)) is replaced
with .vertex_degree() , for some fixed (e.g., K = 15).

Steven M LaValle 2020-08-14