Steam VR Setup - HipsterSloth/PSMoveSteamVRBridge GitHub Wiki

Using The PSMove SteamVR Driver

Install SteamVR

It is under "Tools" in everyone's Steam Library. steam://install/250820

Downloading pre-built PSMoveSteamVRBridge Installer

The easiest way to get started is to use a pre-built installer binaries from the Releases page.

Building PSMoveSteamVRBridge from source

If you build the project from source in Win10 using the instructions from Building from source, make sure you build the auto-generated "INSTALL" project in the PSMoveSteamVRBridge.sln. This will generate a win64/bin folder with all of the binaries and scripts in it you need to get started.

Shutdown Everything

  1. Close PSMoveService if it's running.
  2. Close SteamVR if it's running.
  3. Run process explorer and make sure there isn't a zombie vrserver.exe running

One Time Initial Setup

Run the installer. This should copy the PSMoveSteamVRBridge files into C:\Program Files (x86)\PSMoveSteamVRBridge and register the plugin with SteamVR.

You can verify the list on installed SteamVR plugins by running:

C:\Program Files (x86)\PSMoveSteamVRBridge\installer\SteamVR_ListAllDrivers.bat.

You should see something like the following listed in the output:

C:\PROGRA~2\PSMOVE~1\drivers\psmove.

Customize Plugin Settings

After you launch SteamVR with the plugin installed a set of configuration files should be generated in %appdata%/PSMoveSteamVRBridge. One for the plugin itself: PSMoveSteamVRBridgeConfig.json. And one for each controller, ex: psmove_DC_0C_2D_64_1A_0E.json. These config files replace the configuration done previously in steamvr.vrsettings.

In these config files you can setup the following:

  • Add virtual touch pad mappings.
  • Set controller model offsets.
  • Set controller filter for 3rd HMD controller.

Virtual Touchpad

The PSMove controller does not have a touch pad like the SteamVR controller has, just buttons. This is problematic for SteamVR games like Space Pirate Trainer or apps like TiltBrush where a touch pad is needed. There are two ways you can emulate a touch pad depending on your needs. You and either emulate pressing the corners of the touch pad or do continuous touch pad emulation

To map the four corners of the touchpad to buttons, you can add the following to the trackpad_mappings block in a controllers configuration file:

   "trackpad_mappings" : {
      "circle" : "touchpad_right",
      "cross" : "touchpad_left",
      "triangle" : "touchpad_up",
      "square" : "touchpad_down"
   }, 

or diagonals:

   "trackpad_mappings" : {
      "circle" : "touchpad_down-right",
      "cross" : "touchpad_down-left",
      "square" : "touchpad_up-left",
      "triangle" : "touchpad_up-right"
   },

Additionally, if you want to have continuous motion over the touchpad, rather than just snapping to the four corners, you can map the motion of the controller to motion on the touchpad when the touch pad button is held down. In order to do this, you first need to have a psmove button mapped to the "touchpad_press" or "touchpad_touch" button (the "move" button is the most common one to use). You can optionally set the "cm_per_touchpad_units" scale to set how much controller movement corresponds to how much touchpad movement:

{
        ...
	"cm_per_touchpad_units":            7.5,
	"trackpad_mappings":                {
		"move":     "touchpad_press"
	}
        ...
}

Or for touchpad operations like scrolling where it's touched but isn't pressed, use "touchpad_touch" to map the touch and press onto two separate buttons:

        ...
	"cm_per_touchpad_units":            7.5,
	"trackpad_mappings":                {
		"move":     "touchpad_touch",
                "triangle": "touchpad_press"
	}
        ...

Per-Game Input Bindings

Let's say you want to change your button layout per game. SteamVR now provides a tool for letting you customize bindings per game in it's "Controller Input Binding" tool.

To open the binding menu select "Devices > Controller Input Binding"

images/ControllerInputBinding.png

Pick a game and then try editing the psmove bindings

images/EditBindings.png

You should see a panel like this that will let you adjust per-game bindings:

images/PerGameBindings.png

There are legacy bindings used by default defined here:

C:\Program Files (x86)\PSMoveSteamVRBridge\drivers\psmove\resources\input\legacy_bindings_psmove.json

Controller Model Offsets

There are some game where you want to offset the controller position. This can happen in particular for games where you need one controller to get close to another controller. The most common case is to extend the controller position along the controllers +Y axis like so:

images/ControllerExtendY.png

The other case is extending the controller along the +Z axis like so:

images/ControllerExtendZ.jpg

These can be done with the psmove_extend_y and psmove_extend_z values in the psmove_settings section. Units are in meters.

        ...
	"extend_y_cm":                      0.0,
	"extend_z_cm":                      -7.5000005,
        ...

HMD Controller (3rd controller) filtering

Some people use a third psmove controller for head tracking (GearVR or Cardboard) in conjunction with FreePIE. In this instance you don't want SteamVR to use the controller used for the HMD since some games will arbitrarily pick a controller to use for a hand. If this is a case for you, you can use filter_virtual_hmd_serial in %appdata/PSMoveSteamVRBridgeConfig.json% to tell SteamVR to ignore a controller with a given serial number. The "serial number" is actually the Bluetooth MAC address of the controller. You can find the serial number for a given controller in the controller settings page

images/Controller_MAC_Address.jpg

You can then put this serial number into the steamvr.vrsettings block:

      ...
      "filter_virtual_hmd_serial" : "00:06:f7:92:03:a4"
      ...

Rumble Suppression

Sometimes you may want to turn off rumble (Typically for debugging purposes). This can be done with the "rumble_suppressed" flag:

      ...
      "rumble_suppressed" : true,
      ...

Throwing Power

Sometimes you may want to be able to throw objects further (or make it more difficult to throw objects). This can be done with the "linear_velocity_exponent" and "linear_velocity_multiplier" flags:

      ...
      "linear_velocity_exponent" : 0.0, 
      "linear_velocity_multiplier" : 1.0,
      ...

Example config files

Here is what my PSMoveSteamVRBridge.json and a sample controller file look like. Be sure to mind your commas. I strongly recommend pasting your settings file at JSONLint.com to make sure you didn't mess up the formatting. I put this in bold because I frequently mess this up myself.

PSMoveSteamVRBridgeConfig.json

{
	"is_valid":                              true,
	"version":                               1,
	"filter_virtual_hmd_serial":             "",
	"server_address":                        "localhost",
	"server_port":                           "9512",
	"auto_launch_psmove_service":            true,
	"use_installation_path":                 true,
	"has_calibrated_world_from_driver_pose": true,
	"world_from_driver_pose.orientation.w":  1.0,
	"world_from_driver_pose.orientation.x":  0.0,
	"world_from_driver_pose.orientation.y":  0.0,
	"world_from_driver_pose.orientation.z":  0.0,
	"world_from_driver_pose.position.x":     -0.43832564,
	"world_from_driver_pose.position.y":     -1.0446831,
	"world_from_driver_pose.position.z":     -0.23072098
}

psmove_DC_0C_2D_64_1A_0E.json (Your controller MAC address will be different)

{
	"is_valid":                         true,
	"version":                          1,
	"override_model":                   "",
	"delay_after_touchpad_press":       false,
	"cm_per_touchpad_units":            7.5000005,
	"linear_velocity_multiplier":       1.0,
	"linear_velocity_exponent":         0.0,
	"rumble_suppressed":                false,
	"extend_y_cm":                      0.0,
	"extend_z_cm":                      -7.5000005,
	"rotate_z_90":                      false,
	"calibration_offset_cm":            0.0,
	"disable_alignment_gesture":        false,
	"use_orientation_in_hmd_alignment": true,
	"trackpad_mappings":                {
		"ps":       "none",
		"move":     "touchpad_press",
		"triangle": "none",
		"square":   "none",
		"circle":   "none",
		"cross":    "none",
		"select":   "none",
		"start":    "none"
	}
}

Uninstalling the PSMove SteamVR drivers

You can completely uninstall PSMoveSteamVRBridge by running the uninstaller at: C:\Program Files (x86)\PSMoveSteamVRBridge\Uninstall PSMoveSteamVRBridge. This will leave all of the config files in %appdata%/PSMoveSteamVRBridge alone.

If you just want to disable the driver temporarily you can do the following:

  1. Stop SteamVR
  2. Run C:\Program Files (x86)\PSMoveSteamVRBridge\installer\SteamVR_UnregisterDrivers.bat
  3. Run SteamVR. The additional base station and controller icons in the SteamVR status window should now be gone.

To re-enable the driver:

  1. Stop SteamVR
  2. Run C:\Program Files (x86)\PSMoveSteamVRBridge\installer\SteamVR_RegisterDrivers.bat
  3. Run SteamVR. The additional base station and controller icons in the SteamVR status window should now be back.

Launching SteamVR

If all the setup worked correctly when you launch SteamVR you should see a tracking camera icon for each ps3eye camera attached and a controller icon for each controller attached in the SteamVR status window (minus one controller if you are filtering one out to use for HMD tracking).

images/SteamVRStatus.png

When you put on your headset you'll be greeted with a green instructional overlay asking you to hold the controller to your face and then press start+select. This will align the HMD and PSMove tracking spaces (hopefully). You'll only be asked this once since this alignment will be stored in PSMoveSteamVRBridge.json.

You can also redo the select+start alignment at any time. This can also be trigger by an associated PSNavi dpad_up if nothing is assigned to it in it's controller config file.

If the icons and instructional overlay didn't appear try installing the Visual C++ Redistributable for Visual Studio 2015 (probably the x64 version).

Orientation Re-centering

If you want to recent a controller that has drifted orientation, point the controller down the forward direction of the calibration mat (the -Z direction) and hold the select button for a quarter second. This can also be trigger by an associated PSNavi dpad_down if nothing is assigned to it in it's controller config file.