This paper describes an algorithm for path planning of a car-like mobile robot constrained by its position on a plane and its degree of rotation. This algorithm uses the combination of previously developed algorithms along with some slight additions to produce a faster path planning algorithm.  This algorithm is composed of three steps.  The first step finds a path ignoring the nonholonomic constraints.  The second step then applies the nonholonomic constraints to the obtained path.  The third step then optimizes and smooths out the path.

The holonomic planner is implemented by first dividing the three dimensional configuration space (x, y, theta) into a grid.  It then uses best-first stearch to find a path through this grid using a potential field value at each cell as the heuristic function.  A number of different tricks are used to speed up this algorithm such as using potential functions based on control points.  Using two such control points, the search can then be done over the two dimensional workspace.  [Actually, it is only the computation of components of the potential function that are done in the two dimensional workspace.]  The computation of the two potential fields can further be sped up by assuming the two potentials are the same everywhere except near the goal.  The collision checking algorithm can be sped up by computing all the occupied cells before the path planner begins in a three dimensional bitmap.  Then collision checking can be done by referring directly to that bitmap.  Also by marking attained configurations as the search proceeds and storing the leaves of the search in a directly accessible, ordered, finite data structure further speeds up the search process.

The nonholonomic planner takes the path and tries to substitute a nonholonomic path from the start configuration to the goal configuration if the path needs substituting (does not follow the nonholonomic constraints).  [Actually, by assumption the holonomic path does not conform to the nonholonomic constraints.]  It does this by using a bunch of pre-defined RS curves.  If a substitution can not be found, then the path is broken in half and the nonholonomic planner is used on each half.  Because the holonomic planner considers only grid cells in which a collision does not occur for it and all its neighbors, the nonholonomic planner is more efficient because the obstacles are not as close (constraining).  The optimizer then randomly selects the two configurations on the path and tries to join them by the shortest RS curve, subdividing recursively if necessary.  [Actually, it would then just pick two more random configurations.]  This is then repeated for a given amount of time.  The optimization algorithm can also decide that the obtained path is no good (too many reversals) in which case the whole path planning process is done in reverse (from goal to start).