When you move through the world you get visual and vestibular signals about how you and the objects around you are moving. This setup allows you to manipulate those signals independently. This is an affordable way to have controlled movement of a person in an immersive audio visual environment using parts that are readily available like an office chair.
My advice for this whole chair system is to get the electronics and the motor working the way you want it to before putting anything together properly. Begin by connecting the Arduino board to the computer using a USB cable. Under the tools dropdown menu, select the port to which the Arduino board is attached.
Then select the appropriate board, followed by the processor. Make sure it matches the actual board and processor. Here, the sample Arduino code provided can be pasted.
Verify and save the Arduino code. Then, upload it to the Arduino board using the upload button. Plug in and turn on the electrical subsystem.
Then, flick the small toggle switch to a position where the small LED indicator light turns on, and turn the potentiometer dial to ensure that it controls the speed and direction of the chair. The chair speed and direction should vary with the potentiometer position. Next, open a new or existing Unity project.
To import the SteamVR plugin, first, make sure that you are signed in to your Unity account. Then, click on window and asset store to open the asset store in a web browser. Search for SteamVR.
Select SteamVR plugin, and click on, add to my assets. Back in Unity, select package manager under the window tab. Select my assets.
Then, click on import under SteamVR and follow the prompts to complete the import. Click on accept all to make the configurational changes and follow the prompts. Look for a new asset called SteamVR in the project window on the inspector screen.
Expand the SteamVR asset folder, followed by prefabs. Drag the camera rig asset into the hierarchy window to allow the use of the VR headset and controllers in the game. Remove the default main camera from the hierarchy or scene, as it will interfere with the SteamVR camera.
Next, search for the Ardity plugin using the same process used for SteamVR. Next, create the objects needed for the experiment. To do this click on game object and select 3D object.
For example, here is a plane called background that is positioned in the background of the camera view. The background can be locked into position relative to the head mounted display. To add functionality to the scene, click on the add component button in the inspector window and select new script.
Call the script, setup trial. The default code here should be replaced with the code in the provided setup trial file. It is the minimum code required to get the chair moving correctly.
Go back to Unity. The new setup trial script is now attached to the background object. Under the assets folder in the project window, open the Ardity folder, followed by the scripts folder.
Drag the serial controller script into the background game object in the hierarchy window. Scroll down the list of components in the inspector window to locate the serial controller script. Ensure that the port name and board rate match those for the Arduino program.
Drag the background object from the hierarchy window to the input box, next to the message listener in the inspector window. Click on add component at the bottom of the inspector window and select new script. Name, the new script chair controller.
The chair controller script provided can be pasted into this file. At a minimum, a function is needed that turns the user actions into a number between zero and 1, 023. Then, use the serial controller dot send serial message function to send the number to the Arduino, and save the script.
Back in Unity, drag the head mounted display object from the hierarchy window to the input box next to head. Then, drag the right controller object to the input box next to hand. Scroll down in the inspector window to find the setup trial script public variables.
According to the sample code input type, three is for the VR controller, and four is for the mouse control. Here, the VR controller is being selected. With the SteamVR app turned off, when you press the play button in Unity for the first time you'll get error messages related to SteamVR actions.
Follow the prompts to configure SteamVR actions. Close the settings window and deal with any other prompts from SteamVR. Finally, press the play button to begin the VR experience.
With these settings, the user is able to rotate the chair using the VR controller. A schematic representation of the observer's actions and the resulting chair and scene changes during the experiment is shown here. In the congruent condition, if the observer moves the controller to their left, the chair also moves leftwards and the visual background moves in the opposite direction, as if it were a stationary scene against which the person is rotating.
In the incongruent condition, the chair moves in the opposite direction making the chair motion incongruent with a visual background motion. Shown here is a screenshot of the stimulus area of the visual display. The small patterned patches stayed in place the whole time, but the patterns inside them moved as if each patch was a window into the larger moving object.
The patches lying on the ring comprised the target, and the other patches made up the background. In this example video, the target is moving vertically upwards and the background is moving to the right. The moving background creates an illusion of leftward of motion in the target, making it appear to move upwards, and to the left.
This illusory leftward motion is referred to as induced motion. The target ring had a radius of five degrees visual angle and the background area subtended 20 degrees by 20 degrees. The strength of the induced motion effect under the congruent and incongruent motion conditions is represented by the value of the parameter beta.
The representative image shows the mean beta values for each observer in the congruent and incongruent conditions. As would be expected, if observers assumed that the background motion was caused by their own motion through a still world, the average beta value for the congruent condition is close to one. Except for one observer, the beta value of all observers decreased in the incongruent chair motion condition.
This data indicates a decreased likelihood to view the visual background motion as being caused by the observer's physical motion. You want to make sure that your chair pulley and your motor pulley are aligned really well, And that the belt tension is good. A little bit of flex in the belt, but not much.
You can control the visual and auditory cues using the headset, and then separately you can have motor controlled or foot powered body motion. There's a lot to play with.