Shared Haptics (SHWinG)

The Shared Haptics Working Group (SHWinG) is a group of haptics, simulation, and teleoperation people interested in streaming and distributed haptic rendering over networks.

Things I'm gonna put more of here real soon:

  • More background info
  • List of recommended readings (Gunter's paper, Diego's thesis, etc), refs
  • Notes from our meetings
  • Networking protocol information
  • Source code for hapticserver: Reference implementation is for the Immersion 3GM and/or LapIE.

    Version for Sensable PHANToM by Cynthia Bruyns

Hapticservers on the net (PLEASE talk to the person first!!)
Biocomp Center:,
UWisconson-Lacrosse: (Steve Senger)

Until I get a chance to write up things better, here's a list of issues that we talked about at the last meeting:

  • Streaming (forces, wave vars) versus distributed (geometry)
  • UDP/stateless implications
  • OutOfBand signalling- separate channel for stateful info?
  • multicasting
  • streaming video
  • conformance classes
  • protocol levels
  • implementation details: port #, packet lengths, timeouts
  • teleoperation support (symmetry)
  • upshift/downshift of protocol classes
  • initial handshaking/security
  • hardware id passed on handshake
  • multiple grippers
  • who connects to who? (connection initiation)
  • code sharing

Protocol classes

Here is information on the networking protocol for each of the protocol classes.

Initial Parameters/Handshaking:
For every protocol class, we are using TCP/IP port 9999 and sending 300 byte packets.

After connecting, the simulator side sends "haptic vX.Y", where X and Y denote the major and minor version numbers of the protocol class. If the hapticserver running on the machine supports that protocol class, it will respond with "ACK", otherwise "NAK". If "ACK"-nowledged, then the server will go into the protocol specified below.

At any time, to signal the end of the session, the simulator can send the line "quit", at which time the hapticserver will reset and await the next connection.

Class 1: Streaming Forces (version: 1.0)In this protocol class, the hapticserver is sending position and orientation information to the simulator as:

"px py pz m00 m01 m02 m10 m11 m12 m20 m21 m22 a"

Where (px,py,pz) are the x,y,z position of the device, m[][] are the elements of the rotation matrix, and a denotes whether the tool is active (button pressed, etc). Note that the hapticserver will only send this information if it has changed from the last time it was sent.

The simulator sends a force vector back to the hapticserver as:

"fx fy fz"

Where (fx,fy,fz) denotes the force vector in x,y,z. Note that the hapticserver may limit the maximum amount of force for safety reasons. This is a good thing.

Class 2: Streaming Wave Variables (version: 2.0)
(Gunter- do you have some input for here?)

Class 3: Caching Local Region Geometry (version: 3.0)
(Benjamin is currently working here)


Remis Balaniuk (Dept of CS, Stanford)

Craig Latimer (Dept of CS, MIT)

Kevin Montgomery (Biocomp Center, Stanford)

Gunter Niemeyer (Intuitive Surgical)

Diego Ruspini (Dept of CS, Stanford)

Ken Salisbury (Depts of CS and Med, Stanford)

Nicolas Turro (Dept of CS, Stanford)