Coordination of 3 Car-like Robots

Lisa A. Laane
Laane@cs.stanford.edu
Stanford, California

March 22, 1997

Project Description

The goal of this project is plan paths for 3 car-like robots that satisfy non-holonomic constraints.


Motion Planning Examples


Note that all of these examples have been stripped to contain paths of short length.

A holonomic planner

To plan a holonomic path, I first computed C-Obstacles for each of the obstacles and a rotating robot. The C-Obstacles were represented in discretized form in a 3-d bitmap. Given a goal, the NF2 potential field was computed. Best-first search was used to determine a path from a start point to the goal. An example of a holonomic path can be seen in the movie Holonomic.

Modifications and Observations

One of the biggest problems I encountered with implementing NF2 was the time it takes to calculate exact distances from an obstacle to a point. To improve running time, I computed approximation of NF2. The technique used involved sweeping over each level of the bitmap in 8 directions (horizontally in both directions, vertically in both directions, and in both directions along the diagonals). In each sweep, when an obstacle was found, the distances from the obstacle were computed for the steps "behind" the obstacle in the sweep. The distances were computed by incrementing a count (1 in the horizontal and vertical directions; sqrt(2) in the diagonal) and assigning the count until the cutoff was reached. The minimum distance found in all sweeps was used as the final distance. A typical sweep over an obstacle would result in the "distances" shown below. 0's represent the obstacle, and s2 is used to abbreviate sqrt(2).
    5s2 4s2 3s2  3   3   3   3  3s2 4s2 5s2 6s2
    4s2 3s2 2s2  2   2   2   2  2s2 3s2 4s2 5s2
    3s2 2s2  s2  1   1   1   1   s2 2s2 3s2 4s2
     3   2   1   0   0   0   0   1   2   3   4
     3   2   1   0   0   0   0   1   2   3   4
     3   2   1   0   0   0   0   1   2   3   4
     3   2   1   0   0   0   0   1   2   3   4
    3s2 2s3  s2  1   1   1   1   s2 2s2 3s2 4s2
    4s2 3s2 2s2  2   2   2   2  2s2 3s2 4s2 5s2
    5s2 4s2 3s2  2   2   2   2  3s2 4s2 5s2 6s2

Although this is only an approximation of the distances true NF2 would use, I could detect no difference between paths produced with true distances and these approximated ones. The speedup seems to warrant using the approximate version.

I encountered a different problem with best-first search suggested in the traditional NF2 algorithm. Here, the prioritization of configurations is only based on the values from the potential field. Since this heuristic does not take into account the length of the path computed, many paths produced were far from optimal. The performance was greatly improved by taking into consideration the path length when considering the next best step. The difference in results is shown in Figure 1 a and b below.

Figure a.
Prioritization by potential only.
Figure b.
Prioritization with path length.


A non-holonomic planner

The holonomic paths computed were used to compute non-holonomic paths using Reeds and Shepp curves. The shortest curve was found between end points of the path. If the discretizion of the curve showed that collisions occurred, curves were attempted from the start to midpoint and midpoint to start. The path was recursively split in this way until a path was found. A movie of a non-holonomic path can be seen in NonHolonomic.

Modifications and Observations

To implement these paths, I use the Reeds and Shepp curve code provided by Professor Latombe. I encountered one very serious problem. Often, the shortest curve between two consecutive configurations of the holonomic path still produces collisions. In order to continue searching for a path, I interpolated between the consecutive configurations. Even so, some paths could not be computed since at some point, due to limited precision, the configurations cannot distinguished. In these cases, I tried to simply approximate by entering the point at which failure occurred, but this method lead to ugly solutions where the paths did not look non-holonomic. Problems where maneuvering space was very tight had the most problems.

Coordinating paths

To coordinate paths, I first computed the non-holonomic paths for all 3 robots. Next, I built a coordination space representing the time points in the paths where collisions between robots occurred. To find collision points, I took pairs of robots, treating one robot as the obstacle,and the other as a moving robot. By rotating the resulting C-Obstacles as necessary, I could determine whether an collision occurred between pairs of robots at any configuration. Next, I constructed 3 2-d bitmaps showing the collisions between pairs of robots. These bitmaps are the projections of the 3-d collision space. From these bitmaps, I constructed a 3-d bitmap which showed where collisions occurred. I used this 3-d bitmap as the basis for a new NF2 search which specified the coordination of the paths. See the movies 3Car1, 3Car2 and 3Car3 for examples.

Modifications and Observations

This coordination scheme is very limited, since it cannot handle cases where one robot must move out of the way of another. Since the paths are predetermined, and only the rates at which each robot moves along its path can be controlled, problems requiring complex coordination cannot be solved. A combination of this method and a prioritization method would help a great deal. On the other hand, the simple method is very fast and works for most cases.

I made another interesting discovery since my original NF2 planner allowed either movement toward or away from the goal. In terms of path coordination, this equates to letting robots move forward OR backward along their paths! This actually allows for much more freedom, and many difficult problems can be solved in this way even though they could not with a forward-only planner. An early example of such coordination between holonomic paths can be seen in the movie FrontBack. Since a car is allowed to move in reverse as well as forward, I allowed for backtracking in the path coordination in the final version of the project.


Source Code


Many thanks to Steve LaValle for a great class.
Comments? Send to: Laane@cs.stanford.edu