Monado OpenXR Runtime
Shared code for @ref drv_vive and @ref drv_survive.

Shared functionality for HTC Vive and Valve Index driver and Lighthouse tracking using libsurvive drivers that supports the HTC Vive and Valve Index family of HMDs. More...

Collaboration diagram for Shared code for @ref drv_vive and @ref drv_survive.:

Files

file  vive_bindings.c
 Shared bindings structs for HTC Vive and Valve Index driver & Lighthouse tracking using libsurvive.
 
file  vive_bindings.h
 Shared bindings structs for HTC Vive and Valve Index driver & Lighthouse tracking using libsurvive.
 
file  vive_builder.c
 Builder helpers for Vive/Index devices.
 
file  vive_builder.h
 Builder helpers for Vive/Index devices.
 
file  vive_calibration.c
 Vive calibration getters.
 
file  vive_calibration.h
 Vive calibration getters.
 
file  vive_common.h
 Common things like defines for Vive and Index.
 
file  vive_config.c
 Vive json implementation.
 
file  vive_config.h
 vive json header
 
file  vive_poses.c
 Vive poses implementation.
 
file  vive_poses.h
 vive poses header
 
file  vive_tweaks.c
 Tweaks for various bits on Vive and Index headsets.
 
file  vive_tweaks.h
 Tweaks for various bits on Vive and Index headsets.
 

Data Structures

struct  index_camera
 A calibrated camera on an Index. More...
 
struct  lh_sensor
 A single lighthouse senosor point and normal, in IMU space. More...
 
struct  lh_model
 A lighthouse consisting of sensors. More...
 
struct  vive_config
 headset config. More...
 
struct  vive_controller_config
 Controller config. More...
 

Enumerations

enum  VIVE_VARIANT {
  VIVE_UNKNOWN = 0 , VIVE_VARIANT_VIVE , VIVE_VARIANT_PRO , VIVE_VARIANT_INDEX ,
  VIVE_VARIANT_PRO2
}
 Headset variant. More...
 
enum  VIVE_CONTROLLER_VARIANT {
  CONTROLLER_VIVE_WAND , CONTROLLER_INDEX_LEFT , CONTROLLER_INDEX_RIGHT , CONTROLLER_TRACKER_GEN1 ,
  CONTROLLER_TRACKER_GEN2 , CONTROLLER_TRACKER_GEN3 , CONTROLLER_TRACKER_TUNDRA , CONTROLLER_UNKNOWN
}
 Controller variant. More...
 

Functions

xrt_result_t vive_builder_estimate (struct xrt_prober *xp, bool have_6dof, bool have_hand_tracking, bool *out_valve_have_index, struct xrt_builder_estimate *out_estimate)
 Helper function to do an estimate of a system. More...
 
bool vive_get_stereo_camera_calibration (const struct vive_config *d, struct t_stereo_camera_calibration **calibration_ptr_to_ref, struct xrt_pose *out_head_in_left_camera)
 Get a t_stereo_camera_calibration and xrt_pose from left camera to head translation. More...
 
void vive_get_slam_cams_calib (const struct vive_config *d, struct t_slam_camera_calibration *out_calib0, struct t_slam_camera_calibration *out_calib1)
 Get a t_slam_camera_calibration one for each camera. More...
 
void vive_get_imu_calibration (const struct vive_config *d, struct t_imu_calibration *out_calib)
 Get a t_imu_calibration for the IMU. More...
 
void vive_get_slam_imu_calibration (const struct vive_config *d, struct t_slam_imu_calibration *out_calib)
 Get a t_slam_imu_calibration for the IMU. More...
 
bool vive_config_parse (struct vive_config *d, char *json_string, enum u_logging_level log_level)
 Parse a headset config. More...
 
void vive_config_teardown (struct vive_config *config)
 Free any allocated resources on this config. More...
 
bool vive_config_parse_controller (struct vive_controller_config *d, char *json_string, enum u_logging_level log_level)
 Parse a controller config. More...
 
void vive_tweak_fov (struct vive_config *config)
 Tweak the fov for the views on the given config, to make it better. More...
 

Detailed Description

Shared functionality for HTC Vive and Valve Index driver and Lighthouse tracking using libsurvive drivers that supports the HTC Vive and Valve Index family of HMDs.

Enumeration Type Documentation

◆ VIVE_CONTROLLER_VARIANT

#include <auxiliary/vive/vive_config.h>

Controller variant.

◆ VIVE_VARIANT

#include <auxiliary/vive/vive_config.h>

Headset variant.

Function Documentation

◆ vive_builder_estimate()

xrt_result_t vive_builder_estimate ( struct xrt_prober xp,
bool  have_6dof,
bool  have_hand_tracking,
bool *  out_valve_have_index,
struct xrt_builder_estimate out_estimate 
)

#include <auxiliary/vive/vive_builder.h>

Helper function to do an estimate of a system.

References U_LOG_E, xrt_prober::xrt_prober_lock_list(), XRT_STRUCT_INIT, and XRT_SUCCESS.

◆ vive_config_parse()

bool vive_config_parse ( struct vive_config d,
char *  json_string,
enum u_logging_level  log_level 
)

#include <auxiliary/vive/vive_config.h>

Parse a headset config.

◆ vive_config_parse_controller()

bool vive_config_parse_controller ( struct vive_controller_config d,
char *  json_string,
enum u_logging_level  log_level 
)

#include <auxiliary/vive/vive_config.h>

Parse a controller config.

◆ vive_config_teardown()

void vive_config_teardown ( struct vive_config config)

#include <auxiliary/vive/vive_config.h>

Free any allocated resources on this config.

◆ vive_get_imu_calibration()

void vive_get_imu_calibration ( const struct vive_config d,
struct t_imu_calibration out_calib 
)

◆ vive_get_slam_cams_calib()

void vive_get_slam_cams_calib ( const struct vive_config d,
struct t_slam_camera_calibration out_calib0,
struct t_slam_camera_calibration out_calib1 
)

#include <auxiliary/vive/vive_calibration.h>

Get a t_slam_camera_calibration one for each camera.

Get a t_slam_camera_calibration one for each camera.

Todo:
: Index factory calibration is weird and doesn't seem to have the proper extrinsics. Let's overwrite them with some extrinsics I got from doing a calibration on my own headset. These seem to work better than native values. (mateosss)

Referenced by valve_index_setup_visual_trackers().

◆ vive_get_slam_imu_calibration()

void vive_get_slam_imu_calibration ( const struct vive_config d,
struct t_slam_imu_calibration out_calib 
)

◆ vive_get_stereo_camera_calibration()

bool vive_get_stereo_camera_calibration ( const struct vive_config d,
struct t_stereo_camera_calibration **  calibration_ptr_to_ref,
struct xrt_pose out_head_in_left_camera 
)

#include <auxiliary/vive/vive_calibration.h>

Get a t_stereo_camera_calibration and xrt_pose from left camera to head translation.

References vive_config::valid.

Referenced by valve_index_setup_visual_trackers().

◆ vive_tweak_fov()

void vive_tweak_fov ( struct vive_config config)

#include <auxiliary/vive/vive_tweaks.h>

Tweak the fov for the views on the given config, to make it better.

References ARRAY_SIZE.