SteamVR Knuckles Driver

SteamVR Knuckles Driver

Not enough ratings
Knuckles Cap Sense Overview
By Lawrence and 3 collaborators
Learn about the cap sense capabilities of the Knuckles Controllers and how to access them.
 
Rate  
Favorite
Favorited
Unfavorite
Cap Sense Capabilities
In addition to the capacitive trackpad, Knuckles controllers have capacitive sensors in different areas to help detect the state of the user's hands.

Button Surfaces
There are capacitive sensors under each physical button on the Knuckles controller. These can be used to determine where the user is resting their thumb or, in the case of the trigger, their index finger.

Capacitive sensors are placed under the following button surfaces:
  1. Trigger surface
  2. Outer Face button surface
  3. Inner Face button surface
  4. System button surface (not accessible by applications)

_

Grip Zones
There are also separate arrays of capacitive sensors in the grip which enable two new user inputs :
  1. A capacitive grip axis for grasp/ungrasp actions (Joystick Axis 2.x)
  2. Independent index, middle, ring, and pinky finger axes (Joystick Axes 3, 4)

Accessing Finger Curl Values
Each finger axis returns a curl value between zero and one, where zero indicates that the finger is pointing straight out and one indicates that the finger is fully curled around the controller.

The cap sense grip returns finger curl values. These can be accessed through SteamVR as joystick axes:
  • 3.x – Index curl
  • 3.y – Middle curl
  • 4.x – Ring curl
  • 4.y – Pinky curl

As an example, in Unity these values can be read as:

// Update raw finger curl values index_curl = vrcontroller.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis3).x; middle_curl = vrcontroller.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis3).y; ring_curl = vrcontroller.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis4).x; pinky_curl = vrcontroller.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis4).y;

For rendering finger motions to the user, it is recommended to perform some smoothing to keep the finger motions from looking too mechanical. For example:

// Update filtered curl values index_curl_filt = Mathf.Lerp(index_curl_filt, index_curl, 30.0f * Time.deltaTime); middle_curl_filt = Mathf.Lerp(middle_curl_filt, middle_curl, 30.0f * Time.deltaTime); ring_curl_filt = Mathf.Lerp(ring_curl_filt, ring_curl, 30.0f * Time.deltaTime); pinky_curl_filt = Mathf.Lerp(pinky_curl_filt, pinky_curl, 15.0f * Time.deltaTime);
_

The controller’s finger tracking algorithm will automatically calibrate to each user. This process will continue to improve over time, but if you are seeing finger tracking errors you can usually resolve them by fully closing then fully opening your hand, including your index finger, several times.

Cap Sense Grip
Cap sense grip (mapped as axis 2.x) combines the middle, ring, and pinky fingers into a single grip amount, ranging from gripping the handle (1) to fully released (0).

When the grip transitions between held and released, k_EButton_Axis2 button events are generated.

Finger Tracking Calibration
When the controller is powered on, finger tracking initializes to an uncalibrated state and will be very poor. You must perform a finger tracking calibration before finger tracking will behave correctly.

Note: The need for an explicit calibration procedure should be considered a temporary measure that will only be required for these dev-units.

To perform a calibration:
  1. Make sure your controller is cinched comfortably
  2. Close your hand around the controller for one second–don’t squeeze! Make sure your index finger is resting on the Trigger.
  3. Quickly open your hand and hold it open for one second.
  4. The last three calibration events are stored in the controller’s memory, and the median result is used for finger tracking. So, from a cold start, two good calibrations will fill the buffer and finger tracking should begin working.
_
A few other things to note:
  • You can trigger a recalibration at any time while the controller is on.
  • You can perform a calibration on a single controller by itself—you do not need to calibrate both controllers simultaneously.
  • If calibrating both controllers at once, one may calibrate before the other—this is normal. Keep trying with the remaining controller.
  • A recalibration may be necessary if you significantly change your grip or if a new user picks up the controllers.
  • Recalibrations will occur automatically over the course of a play session as you reach out to grab items, throw things, etc. This is both expected and necessary, as your skin capacitance will change over time. The intent is for the controller to adjust to these changes automatically after the initial calibration has been performed.
< >
5 Comments
Mildly Disturbing 24 Jun @ 1:13pm 
Oh my.. for developers this will be a game changer.
If you utilized the 5 fingers being tracked you can create a pretty amazing keyboard controller that would make it feasible to code while still within VR, it's so close i can taste it. Really hope that for the Unity package that comes with it, they'll provide a Vive input module that can interact with the UI systems right off the bat, and provide a polished interactions with text fields.

Wonderful idea of the controller holding the hand as well, I was blown away at the simplicity of that. Thanks for all the passionate and hard work; y'all Valve peeps are truly revolutionaries among the gaming community.
Miss MaVeN 22 Jun @ 1:13pm 
Take my money! Will preorder as soon as there is a wireless HMD bundled with these sweet controllers!
Tectonic VR - YORE VR 22 Jun @ 12:27pm 
Yea, this looks fantastic!
ForceKin 22 Jun @ 7:33am 
How do I get one of these dev kits?
Sanborn 22 Jun @ 6:17am 
This. Is. Magic.

I'll sell my Rift the day the order page goes up.