Haptic Display: The Integration of Multisensory Information

INTRODUCTION

Webster's Ninth defines haptic as "relating to or based on the sense of touch." In considering the sense of touch, one usually implies the sensation of texture, as when one samples different fabrics by feeling them. However, haptic display can be broadened to include providing forces to the user, usually through an intermediate instument such as a joystick. For instance, you can gain textural information or sensations by rubbing a stick across a bricked surface. The integration of seeing the intervals of the brick and feeling the intervals as the stick strikes the mortar joints presents you with an integrated experience.

As infants begin to investigate their world, the visual and touch channels play a crucial role in world modeling. Studies have shown that when stimuli such as vision and touch do not coincide temporally, i.e., there is a latency in one of the modalities, the child often becomes disengaged and/or confused . The coherent stimulation of the visual and touch sensations presents the child with a sense of cause and effect, known as causality. This sense of causality engages the investigator and is the basis of cognitive engagement. The sense of causality is present throughout life. Simulation technology, which cannot present a sense of causality, disconcerts the user and subsequently disengages them. Such simulations that seek to be didactic are thus self defeating.

As advanced simulations integrate increasingly larger data sets, the use of high performance computing will assure tractable methods of investigating computational data. As these data combine information from multiple sources, it is important to research advanced interface technology and develop more intuitive methods for interaction with large and complex multimodal data sets. Advanced intuitive interfaces are needed to integrate these vast amounts of multisensory data into a single coherent simulation. These interfaces will facilitate exploration and interaction and will increase our understanding of complex data.

THE PROJECT

For this assignment, you will be working with an Immersion haptic feedback power joystick. This is a two degree-of-freedom joystick that has been equipped with independent servo motors and brakes on each axis.

The SERVO MOTORS enable you to provide a variable amount of force to the joystick, causing it to impart force to the user's hand. There are two servo motors; one on each of the X and Y axes. Using simple trigonometry, you can apply different levels of force to each axis to make the joystick push in any direction on the 2D plane. By varying the force level according to the joystick position, it is easy to simulate springs and other natural forces.

The BRAKES allow you to provide a variable amount of resistance along the X or Y axes, restricting the user from moving the joystick. This effect is good for simulating walls, obstacles, and textures. The various braking levels are not as precise as the force levels, however. You'll find that beyond a certain narrow range of brake levels, the joystick will simply lock up in a particular direction until you release the brake.

You can use the SERVO MOTORS and BRAKES simultaneously. By rapidly updating the force and brake levels, you can simulate a variety of interesting tactile effects.

TECHNICAL DETAILS

Screen resolution: 640x480, up to 64 colors

Platform: The haptic simulation is hosted on a dual PPro 200 MHz PC running the Linux operating system. Graphical display features for the simulation are provided through the X Window System. Haptic joystick capabilities: Force output levels: -2000 to 2000 on each axis, 0 = no force Brake levels: 0 (no brakes) to 2000 (maximum) on each axis You will be provided with complete source code for a demo program showing some example uses of the joystick. We recommend that you develop your project by modifying the demo program, as this will save you time and allow you to concentrate on the haptic feedback functions.

To develop your simulation, you will create two primary functions in C. These are called for you automatically by the graphical user interface.

void init_display(void)

This function draws the initial screen display at the start of the simulation and initializes any variables used by the simulation.

void update_joystick(int x, int y)

This function is where you'll put the actual simulation code to change the states of the joystick and display. This function is called repetitively by the graphical user interface, as quickly as possible. The variables "x" and "y" passed into this function provide you with the X,Y coordinates of the onscreen cursor. These coordinates range from 0...639 in X and 0...479 in Y. (0,0) is in the upper left corner of the display window.

Based on the values of X and Y, you should update the values of four global variables: force_x, force_y, brake_x, and brake_y. The user interface will use the new values to update the hardware controlling the joystick. As your simulation runs, the haptic update rate is displayed in a shell window. This measures the number of times per second the display and haptic device are being updated. For smooth simulations, you should try to achieve rates of 500 Hz or better. If the update rate falls below 200 Hz, you are probably doing too much drawing to the screen. You can improve the update rate by only redrawing the parts of the display that are absolutely necessary (typically the area surrounding the cursor).

The force variables may range from -2000 to 2000. Negative X is leftward s, and negative Y is downwards. Be careful not to apply substantial forces (in excess of 750+) unexpectedly. The user of the joystick may be taken by surprise and could lose control of the joystick, possibly resulting in damage. In general, your force functions will feel much nicer if you make them smooth, continuous functions that ramp up and down between 0 and the maximum force you wish to apply. For example, as you approach a wall, you could guide the user away by gradually increasing the amount of force based on the distance from the cursor to the wall. (In contrast, if you wait until they hit the wall to apply the force, the force will be very sudden and jarring, and if the user sits on the threshold, there will be an unpleasant buzzing effect as the force is turned on and off rapidly. An added problem with using sudden forces is that the onscreen cursor may have already passed through the triggering object before the force is applied, causing the user to lose the haptic feedback effect and become confused. Using gradual ramp-ups ensures that the user will always get some level of feedback.)

The brake variables may range from 0 to 2000. A level of 0 will permit the joystick to be moved freely in the given axis, while any level greater than 500 or so will cause the joystick to totally seize up. For friction effects, experiment with functions producing ranges of values between 0 and around 300. As with the force values, you should try to use smooth functions to ramp the brake levels up and down instead of changing the values suddenly.

The demo program provides examples of setting the drawing color and for drawing various geometric shapes. The C header file "gui.h" contains the function headers for all of the graphical functions available for your use in building your simulation. Your project advisor can assist if additional functions are required.

Project Ideas


PROJECT DETAILS

SI 1996


Dennis Sessanna and Mark Fontana are the OSC coordinators for the Haptic project. Dennis' office is in 420-11. Please contact one of the coordinators to set up appointment(s) for consultation.


For assistance, write si-contact@osc.edu or call 614-292-0890.