a/vive: Add Vive Pro 2 support

This commit is contained in:
Pedro Santos 2023-07-21 16:16:23 +02:00 committed by Jakob Bornecrantz
parent f84353ded3
commit 9b0815bc82
3 changed files with 33 additions and 1 deletions

View file

@ -40,6 +40,7 @@ extern "C" {
#define VIVE_LIGHTHOUSE_FPGA_RX 0x2000
#define VIVE_PRO_MAINBOARD_PID 0x0309
#define VIVE_PRO2_MAINBOARD_PID 0x0342
#define VIVE_PRO_LHR_PID 0x2300
#define VIVE_WATCHMAN_DONGLE 0x2101

View file

@ -352,6 +352,12 @@ _calculate_fov(struct vive_config *d)
// eye relief knob adjusts this around [0.0255(near)-0.275(far)]
eye_to_screen_distance = 0.0255;
}
if (d->variant == VIVE_VARIANT_PRO2) {
lens_horizontal_separation = 0.055;
h_meters = 0.07;
// eye relief knob adjusts this around [0.0255(near)-0.275(far)]
eye_to_screen_distance = 0.0255;
}
double fov = 2 * atan2(w_meters - lens_horizontal_separation / 2.0, eye_to_screen_distance);
@ -432,6 +438,10 @@ vive_config_parse(struct vive_config *d, char *json_string, enum u_logging_level
strcmp(d->firmware.model_number, "VIVE_Pro MV") == 0) {
d->variant = VIVE_VARIANT_PRO;
VIVE_DEBUG(d, "Found HTC Vive Pro HMD");
} else if (strcmp(d->firmware.model_number, "Vive_Pro 2 MV") == 0 ||
strcmp(d->firmware.model_number, "VIVE_Pro 2 MV") == 0) {
d->variant = VIVE_VARIANT_PRO2;
VIVE_DEBUG(d, "Found HTC Vive Pro 2 HMD");
} else {
VIVE_ERROR(d, "Failed to parse Vive HMD variant!\n\tfirmware.model_[number|name]: '%s'",
d->firmware.model_number);
@ -475,6 +485,26 @@ vive_config_parse(struct vive_config *d, char *json_string, enum u_logging_level
const cJSON *cameras_json = u_json_get(json, "tracked_cameras");
_get_cameras(d, cameras_json);
} break;
case VIVE_VARIANT_PRO2: {
const cJSON *imu = cJSON_GetObjectItemCaseSensitive(json, "imu");
JSON_VEC3(imu, "acc_bias", &d->imu.acc_bias);
JSON_VEC3(imu, "acc_scale", &d->imu.acc_scale);
JSON_VEC3(imu, "gyro_bias", &d->imu.gyro_bias);
JSON_VEC3(imu, "gyro_scale", &d->imu.gyro_scale);
_get_lighthouse(d, json);
struct xrt_pose trackref_to_head;
struct xrt_pose imu_to_head;
math_pose_invert(&d->display.trackref, &trackref_to_head);
math_pose_transform(&trackref_to_head, &d->imu.trackref, &imu_to_head);
d->display.imuref = imu_to_head;
const cJSON *cameras_json = u_json_get(json, "tracked_cameras");
_get_cameras(d, cameras_json);
} break;
default:
VIVE_ERROR(d, "Unknown Vive variant.");
vive_config_teardown(d);

View file

@ -48,7 +48,8 @@ enum VIVE_VARIANT
VIVE_UNKNOWN = 0,
VIVE_VARIANT_VIVE,
VIVE_VARIANT_PRO,
VIVE_VARIANT_INDEX
VIVE_VARIANT_INDEX,
VIVE_VARIANT_PRO2,
};
/*!