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