The Force Belt is a device which uses haptic feedback to represent force data (currently latitudinal and longitudinal) output by simulators (auto racing or other).
Typically, force data is used to drive a motion simulator which physically moves the participant in such a way as to attempt to create the forces a person would experience in the real world.
Imagine driving in a car and hitting the gas really hard. The feeling of being "pushed into the seat" is the result of the force due to acceleration acting on your body. Now take the case of coming to a hard stop. The feeling of being pulled forward is a result of that same force but in the opposite direction. The amount of this feeling is proportional to the magnitude of the force (derived from how quickly you change speed/direction).
Clearly a belt with vibrators will not recreate physical forces (there is no acceleration or even movement). The idea is that the direction of the force is represented by which vibrators (out of 12) are active. The magnitude of the force is represented by how much they are vibrating.
The assumption is that this representation of force can be used (consciously or subconsciously) as a means to better understand the virtual world created by the simulator.
The prototype is comprised of a ring of 12 cell phone vibrators worn around the waist. An Arduino interfaces to the simulator over usb, processes the force data and drives the vibrators via a custom built circuit.
simulator -> telemetry interface -> telemetry processor -> force belt interface -> force belt
Parts / Components / Software
This should work with any simulator supported by x-sim. I happen to use iRacing.
Interface to simulator is via x-sim Force Sender. This application has plugins for various simulators and exposes the telemetry data in shared memory as well as over the network (I think).
Telemetry data is processed by x-sim Force Profiler. This application reads telemetry data, applies required transformations, and then sends processed data out to usb port. The prototype utilizes a small subset of the capabilities of Force Profiler. Configuration information used to drive the Force Belt Interface.
Force Belt Interface
Takes processed latitudinal/longitudinal force data off usb port, transforms it into a vector, maps vector to vibrator(s), interfaces to force belt.
In the prototype, the force belt is comprised of 12 vibrating motors arranged equal distance on a belt that is wrapped around the torso. The force is represented by the vibrator(s) activated and the magnitude of the "analog" (PWM) voltage applied. More information on the belt.
I normally go to the results section first when I read things like this but it always seems to be near the end...so here it is.
There was quite a bit of standalone testing done on the Arduino sketch that contains all the logic to drive the vibrators (a test file comprised of 10 or so sample lat/long force pairs when sent to the Arduino from a terminal program generated appropriate debugging output). Even so, when all the pieces were put together for the first time it all functioned. For about 10 minutes, this was satisfying enough.
However, the important part: does representing real world force as a vibration actually provide information as to what the virtual participant was going through?
With the initial configuration, there was not an immediate and clear benefit. Since that first use there have been a series of adjustments (software side only). For sure, there have been times where it did assist. I use the belt at all times with the simulator so need to do some with/without comparisons.
There is a lot of tweaking that can be done including altering the physical location/density of the vibrators in addition to general changes to the algorithm. I have never used a motion simulator so I cannot compare.
More to come.
Use of This Information
Feel free to use the information (approach, software, etc) in any way you like. If you come up with a variant please pass it along.
Driving stuff that requires more amperage than the Arduino PWM pin provides:
If you need to determine value of the resistor off the PWM pin:
Note: This was not used to calculator resistor in this prototype's circuit. The 1K Ohm resistor worked for this application (everyone is doing it).
Using haptic feedback to represent direction:
Using haptic feedback to represent distance: