Cargo-carrying Robot in a VR Environment


Com S 476/576 FINAL PROJECT - Spring 1998

Christopher Just


Project Description

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:

The Approach

It was decided that the first (and so far, only) batch of robots would use a randomized roadmap approach to pathfinding. Randomized roadmaps are particularly useful for finding multiple paths when the obstacle space remains constant, which explicitly is not the case here. However, the algorithm is relatively straightforward and lends itself to being displayed visually (that is, the ability to display both the roadmap and Cobst made the program more interactive and visually interesting).

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

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 Robots

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.

Configuration Space

Generating a 4D configuration space in which to plot paths can be time consuming. Luckily, a restriction imposed by the object interaction routines allows the configuration space to be computed very quickly.

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.

Path Planning

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:

  • They are closer than some maximum distance (here set at 3 feet), and
  • A straight line drawn between the points does not intersect Cobst.

    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.

    Results

    The current state of the project is functional, but imperfect. In particular, a great deal of time could be spent tuning the workings of the randomized roadmap algorithm. In particular, the current batch of robots tend to give up too easily, and to need too many iterations to find a result. The first step to solving this is to increase the initial number of points generated, but some experimentation is required to find a "good" general number.

    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:


    Additional Information


    Implementation Files

    Note: This program requires the CAVE library (which I don't have permission to distribute). It also requires the OpenGL Utility Toolkit (GLUT), available for free here.

    Source Code: