In Virtual Reality (VR), rendering realistic forces is crucial for immersion, but traditional vibrotactile feedback fails to convey force sensations effectively. Studies of asymmetric vibrations that elicit pseudo forces show promise but are inherently tied to unwanted vibrations, reducing realism. Leveraging sensory attenuation to reduce the perceived intensity of self-generated vibrations during user movement, we present a novel algorithm that couples asymmetric vibrations with user motion, which mimics self-generated sensations. Our psychophysics study with 12 participants shows that motion-coupled asymmetric vibration attenuates the experience of vibration (equivalent to a \textasciitilde 30% reduction in vibration-amplitude) while preserving the experience of force, compared to continuous asymmetric vibrations (state-of-the-art). We demonstrate the effectiveness of our approach in VR through three scenarios: shooting arrows, lifting weights, and simulating haptic magnets. Results revealed that participants preferred forces elicited by motion-coupled asymmetric vibration for tasks like shooting arrows and lifting weights. This research highlights the potential of motion-coupled asymmetric vibrations, offers new insights into sensory attenuation, and advances force rendering in VR.
Download the code from the GitHub website or clone repo using your favorite git-client software or with the following command:
git clone https://github.com/sensint/Motion-Coupled-Asymmetric-Vibration.git
-
The processing code: CHI_25_Exp1.pde (processing/CHI_25_Exp1) can be run by selecting the appropriate serial port.
-
Further, the sequence of (stimuli)(intensity) needs to be provided to have the code run in sequence.
-
For the CHI_25_Exp1.ino (Firmware/ Teensy/ CHI_25_Exp1) code, the following letters enter through the serial monitor will play the corresponding stimuli at the corresponding amplitude: For instance, a1 will play the stimuli a with 70% of max amplitude. The stimuli are as follows:
- a: motion-coupled asymmetric vibration
- b: motion-decoupled asymmetric vibration
- c: continuous asymmetric vibration (user moves)
- d: continuous asymmetric vibration (user stationary)
The Intensity_Level refers to the three levels of intensity:
- 0: amplitude at 40% the maximum level
- 1: amplitude at 70% the maximum level
- 2: amplitude at 100% the maximum level
-
Each combination of a character and number would be played for 15 seconds by default.
-
Playing condition 'a' is a prerequisite for playing the conditions 'b', 'c', 'd'
- Open the Exp2_Unity directory in Unity version 2022.3.34f1 or higher.
- You should be able to see the different scenes (Bow-Arrow, Weights, Magnets). In each scene, you can choose the mapping type, vibration type.
- Key Press 'L' should toggle the visual On and Off.
- Upload the CHI_25_Exp2.ino (Firmware/Teensy/CHI_25_Exp2) code to the teensy 4.1 microcontroller.
- Changing things in Unity would reflect on the actuator once all the physical connections are made.
We provide the firmware for one build system - Teensyduino (based on Arduino IDE).
The firmware was tested with the following microcontrollers:
- Teensy 4.1
The easiest way to get up and running with the firmware is Teensyduino.
Download and install the Teensyduino software for your operating system. All needed libraries are included in the basic installation.
This project is based on the Teensy microcontroller and the PT8211 Audio Kit. For understanding the hardware and the underlying principles, please refer to Haptic Servos. The amplifier used for rendering pseudo forces was Visaton 2.2
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE.txt
for more information.
Sensorimotor Interaction Group - website - @sensintgroup
Project Link: https://github.com/sensint/Motion-Coupled-Asymmetric-Vibration
- Othneil Drew for Best-README-Template