The inspiration for Robot PlayGround was a desire on the part of the developer to combine two disciplines, virtual reality(VR) and motion strategies, into a single project. Because Robot PlayGround was designed to be the final project in two classes, it has two separate goals. For VR, it had to be highly interactive and graphically interesting. For motion strategies, it had to efficiently calculate paths for a robot with movement in four dimensions (translating freely in space, and turning about its vertical axis).
Inside of the environment are numerous objects: a robot, a cargo block, a target, and several obstacles. Using a glove supported by the CAVE library, the user can pick up objects by touching them with a closed hand. The object moves with the user's hand as long as the hand is closed. Objects may be placed anywhere in the environment, and may be rotated about their vertical axes by turning the hand.
There is no physics modeling for objects when the user moves them. An object released in midair will not fall, and objects can be positioned so that they intersect each other. It was decided that obstacles were easier to position if they could intersect, but a future release may disallow intersections with targets, cargos, and robots, as this can confuse the motion planning algorithms.

The obstacle blocks are pink rectangular objects. Initially, ten blocks are placed in the same position at the center of the floor. In addition to being positioned by the user, they can also be scaled to create different sized objects. To scale an obstacle, the user touches it with the first finger of the gloved hand extended. The user can then push and pull on the sides of the obstacle, changing its size. Changing the hand gesture ends the scaling operation.

The cargo object is a small blue block, initially floating in space near one corner of the environment. The target is more visually interesting: a series of concentric circles that pulse red and green. The cargo and target both support the standard grab and move operation, but have no other interactive features.

The robots themselves are the most complex objects in the environment, both visually and interactively. Because of the unusual movement characteristics of the path planning algorithms, it was decided to use helicopters and other hovering machines as models. One model is a traditional-looking helicopter. Another version of Robot PlayGround uses a model that more resembles a flying saucer, which seems to be the most natural looking (the helicopter has an unfortunate tendency to fly backwards).
The robots support several interactions in addition to the usual grab and move. Touching them with the first finger extended toggles them on and off. Touching them with two fingers extended toggles the display of additional information related to the path planning algorithm. This includes displaying the roadmap and a slice of the robot's configuration space (see the Implementation section for a detailed explanation of this mode).
The robots also include status lights to relay basic information to the user. These lights are the top of the flying saucer robot and the canopy windows of the helicopter robot. The lights are red when the robot is off, green when it is on and following a path, and blue when it is working to find a path.
The usual loop of actions for a user in the Robot PlayGround environment is to position the obstacles, target, and cargo as desired and then start up the robot to see if it can find its way around. However, it is also possible to change the environment while the robot is moving - repositioning blocks, or even moving the robot if it gets stuck. The robot ignores objects that are being carried by the user, but when they are set down again the robot will adjust its course to compensate.
In order to maximize performance and keep the user interface as simple as possible, Robot PlayGround places certain restrictions on object geometry. The key restriction is that the surfaces of objects must be either horizontal (parallel to the XZ plane) or vertical (perpendicular to XZ). Surfaces that rise at an angle, are not allowed, although they can be approximated by using multiple objects. So, a flat-sided Egyptian pyramid would be illegal, but a South American step pyramid shape is allowed.
In terms of user interaction, this means that objects can only be rotated along their Y axis. Because objects (and the robots themselves) can move in 3D space and rotate along one axis, Robot PlayGround uses a 4D configuration space.
There are several ways to generate the configuration space for a robot and an environment. An initial attempt made use of a 2D configuration space calculation algorithm based on the edges of polygons, discretized over the y(height) and theta(rotation) parameters. This worked, but proved prohibitively expensive. In order to maintain the desired level of precision (chosen to be 1/2" of height and 2 degrees of rotation), the algorithm had to be called a great many times in order to generate the full 4D configuration space. The result was memory intensive and very time consuming - taking upwards of 30 seconds on an SGI Onyx. Clearly, another technique was needed.
The limitations placed on object geometry provided a cheap way out, one that probably should have been considered in the first place. Since all objects and robots are represented as solids with flat tops and bottoms and sides that rise straight up, the configuration space representation of obstacles (with a fixed theta) will be likewise. Basically, the configuration space representation of an obstacle is a shell enclosing that obstacle, designed to give the robot enough clearance to avoid touching it.
Since we know that the cross-section of any obstacle remains the same at any height, the configuration space algorithm just figures out those cross-sections, and the top and bottom values so that the robot will have sufficent vertical clearance. We discretize along the theta parameter, computing the configuration space for 180 separate theta values (instead of the original 180 theta values multiplied by 180 y values). The resulting algorithm takes a fraction of the memory, and executes in under a second. Also, it is bounded by the number of obstacles in the space, and does not depend on the size of the space.

When the user touches a robot with two fingers pointing, it toggles an information display which consists of two parts.
Using this part of the display, the user can see the actual constraints on robot motion. For example, if two blocks are separated by a narrow gap, the user can determine if the robot could actually fit between them. If the obstacle representations overlap, there is not room for the robot. If there is any gap, then the robot can squeeze through the space.
Initial use of Robot PlayGround has shown that a load/save feature to store object positions would be a very helpful feature. Setting up obstacles can be time consuming, especially in the CAVE Library's simulator mode.
Pains were taken to ensure that the pathfinding algorithm executed with the best possible speed, but it still creates a significant glitch in the displays when it happens. Fortunately, this only happens when the environment changes. But, if other strategies are implemented, they may be more time consuming. Ideally, the motion planning should be decoupled from the display process.
Finally, the current implementation has shared memory issues that may keep it from working properly on multiple screens, or a full C2 setup. This has not been tested.
The developer would also like to port the Robot PlayGround to a more advanced VR development environment, such as that provided by VR Juggler, when it becomes available.