Christopher Just
This project began as an attempt to combine two projects and two disciplines - motion planning and virtual reality. The goal was to create a virtual environment in which a user could manipulate obstacles in 3D, and then test the ability of different robots to perform a simple task. The task chosen is to pick up a block of cargo and deliver it to a target. This task has several major complications:
Path planning is done in a 4D configuration space. The robots are able to translate freely in x, y, and z coordinates, but can only rotate on their vertical axis (y, in the cave environment). While this limitation was included mainly for reasons of performance, it is reasonable based on the models of the robots, which include helicopters and flying-saucerish hovercraft. Such vehicles are typically only capable of a small amount of rotation on their other axes, with effects on their movement that would be troublesome to emulate.
There are some minor problems with the paths generated by the algorithm:

The environment is a 12' x 12' x 9' cube, the same size as the ICEMT C2 device. A number of rectangular blocks are placed in the center of the floor, which the user can position to create obstacles. These blocks can also be scaled to create walls, ceilings, etc.
The cargo - a small blue block - and the target marker can also be placed anywhere in space.

The picture above shows two of the robot models. Of course, the representations used in path planning are much simpler than the graphic models, but are worth considering. The representation of the helicopter robot is made up of two polyhedrons. The body is a rectangular solid, while the rotors are represented by a thin octagonal body. In addition, the cargo, if present, is an additional square shape descending from the body. The reference point for configuration space, and center of rotation, is located just below the center of the blades.
The lucky coincidence works like this: all obstacle blocks in the environment have sides that rise vertically, and flat tops and bottoms. This restriction grew out of the difficulty of dealing with yaw and roll when using the CAVE library's simulator mode. Coincidentally, similar restrictions apply to the robots themselves. The 2D configuration-space algorithm can be modified to generate 3D configuration space with these restrictions simply by figuring out the amount of vertical clearance necessary above and below each obstacle for each component of the robot. The algorithm is discretized along the theta dimension, using steps of 2 degrees, to create the full 4D configuration space.
In the picture below, a cross-section of the configuration space is displayed (the user can change the height of the cross-section by raising and lowering his hand). Cobst is drawn in red and blue; the rotation is that of the robot in its current orientation. If you look closely, you can see several polygons drawn around each physical obstacle. Each of the two parts of the robot creates a different polygon, with different vertical sizes and positions.

The robot has several goals, which it deals with one at a time. The first is to find its way to a point just above the cargo object. The second is to take the cargo to a point just above the target marker. In each case it does this by creating a randomized roadmap.
The roadmap is created by
scattering points randomly through the 4D configuration space and
connecting them where possible. Points can be connected if:
Points representing the robot's current position and its current goal position are added to the roadmap, and then it is searched as an undirected graph. The current implementation uses a simple breadth-first search, which is guaranteed to produce a solution with a minimal number of links (not neccessarily the shortest physical distance).
If the graph search fails, the roadmap is expanded and the search repeated. The robot will go through a certain number of iterations of expansion and search before surrendering.
In the picture above, the roadmap that the robot used to travel from its point of origin (just above the red-and-green target marker) to the cargo is displayed in green and yellow. The color variation indicates the amount of rotation for each point.
Performance-wise, the results were quite pleasing. Thanks in part to the trick found in generating Cobst, the overall time for generating the C-space, the roadmap, and a path to the goal is typically 1 to 3 seconds on an SGI Octane. While this still suggests that the path-planning should be spun into a separate process before being used in a fully immersive environment, it's certainly good enough to create a sense of interactivity between user and robots.
There are other issues in the program needing to be addressed that are not strictly issues of path planning. These include: