From fc9bdfa45e8ad1e4eeefc272db077a25af542a82 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Mon, 25 Jun 2018 00:56:58 -0400 Subject: Add blacklisting of devices, as well as improve feedback algorithm for charlesrefine. --- src/poser_charlesrefine.c | 16 +++++++++------- src/survive.c | 1 + src/survive_vive.c | 12 +++++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/poser_charlesrefine.c b/src/poser_charlesrefine.c index 4e6e34f..a55bc97 100644 --- a/src/poser_charlesrefine.c +++ b/src/poser_charlesrefine.c @@ -20,7 +20,7 @@ #define HIT_QUALITY_BASELINE \ 0.0001 // Determines which hits to cull. Actually SQRT(baseline) if 0.0001, it is really 1cm -#define LIGHTCAP_DESCALE 0.5 //DO NOT EXCEED 0.7 +#define LIGHTCAP_DESCALE 0.2 //DO NOT EXCEED 0.7 #define CORRECT_LATERAL_POSITION_COEFFICIENT LIGHTCAP_DESCALE // Explodes if you exceed 1.0 (Normally 0.7 for snappy non-IMU response) #define CORRECT_TELESCOPTION_COEFFICIENT (10.f*LIGHTCAP_DESCALE) // Converges even as high as 10.0 and doesn't explode. (Normally 7.0 for non-IMU respone) @@ -85,16 +85,15 @@ void AdjustPosition( SurviveObject * so, LinmathPoint3d adjustment, int is_imu, add3d( dd->InteralPoseUsedForCalc.Pos, adjustment, dd->InteralPoseUsedForCalc.Pos); add3d( dd->mixed_output, adjustment, dd->mixed_output); - if( descale > 0.0001 ) + if( descale > 0.0001 ) //Coming from lightcap. { LinmathPoint3d backflow; - scale3d( backflow, adjustment, 1./descale ); + scale3d( backflow, adjustment, 1.0/descale ); CharlesPoserData *dd = so->PoserData; - //scale3d( dd->velocity_according_to_accelerometer, dd->velocity_according_to_accelerometer, 0.9 ); - - //XXX XXX XXX BIG TODO!!! If we are updating based on lightcap, we should back-adjust the acceleration. - //Also, figure out how to dampen velocity. + //XXX TODO figure out how to dampen velocity. add3d( dd->velocity_according_to_accelerometer, dd->velocity_according_to_accelerometer, backflow ); + scale3d( backflow, backflow, .001 ); + add3d( dd->average_accelerometer_up_vector_in_world_space, dd->average_accelerometer_up_vector_in_world_space, backflow ); } } @@ -149,6 +148,9 @@ int PoserCharlesRefine(SurviveObject *so, PoserData *pd) { AdjustRotation( so, applygyro, 1, 0 ); } + + printf( "ACCEL %f %f %f\n", PFTHREE( imuData->accel ) ); + { LinmathPoint3d rotated_out; quatrotatevector( rotated_out, dd->InteralPoseUsedForCalc.Rot, imuData->accel ); diff --git a/src/survive.c b/src/survive.c index 7ee1992..920b9ec 100644 --- a/src/survive.c +++ b/src/survive.c @@ -16,6 +16,7 @@ #define z_const const #endif +STATIC_CONFIG_ITEM( BLACKLIST_DEVS, "blacklist-devs", 's', "List any devs (or substrings of devs) to blacklist.", "-" ); STATIC_CONFIG_ITEM( CONFIG_FILE, "configfile", 's', "Default configuration file", "config.json" ); STATIC_CONFIG_ITEM( CONFIG_D_CALI, "disable-calibrate", 'i', "Enables or disables calibration", 0 ); STATIC_CONFIG_ITEM( CONFIG_F_CALI, "force-calibrate", 'i', "Forces calibration even if one exists.", 0 ); diff --git a/src/survive_vive.c b/src/survive_vive.c index 0c8f583..07bda58 100755 --- a/src/survive_vive.c +++ b/src/survive_vive.c @@ -501,12 +501,14 @@ int survive_usb_init( SurviveViveData * sv, SurviveObject * hmd, SurviveObject * libusb_free_device_list( devs, 1 ); #endif + const char * blacklist = survive_configs(ctx, "blacklist-devs", SC_GET, "-"); + //Add the drivers - this must happen BEFORE we actually attach interfaces. - if( sv->udev[USB_DEV_HMD_IMU_LH] ) { survive_add_object( ctx, hmd ); } - if( sv->udev[USB_DEV_WATCHMAN1] ) { survive_add_object( ctx, wm0 ); } - if( sv->udev[USB_DEV_WATCHMAN2] ) { survive_add_object( ctx, wm1 ); } - if( sv->udev[USB_DEV_TRACKER0] ) { survive_add_object( ctx, tr0 ); } - if( sv->udev[USB_DEV_W_WATCHMAN1] ) { survive_add_object( ctx, ww0 ); } + if( !strstr( blacklist, "HMD" ) && sv->udev[USB_DEV_HMD_IMU_LH] ) { survive_add_object( ctx, hmd ); } + if( !strstr( blacklist, "WM0" ) && sv->udev[USB_DEV_WATCHMAN1] ) { survive_add_object( ctx, wm0 ); } + if( !strstr( blacklist, "WM1" ) && sv->udev[USB_DEV_WATCHMAN2] ) { survive_add_object( ctx, wm1 ); } + if( !strstr( blacklist, "TR0" ) && sv->udev[USB_DEV_TRACKER0] ) { survive_add_object( ctx, tr0 ); } + if( !strstr( blacklist, "WW0" ) && sv->udev[USB_DEV_W_WATCHMAN1] ) { survive_add_object( ctx, ww0 ); } if( sv->udev[USB_DEV_HMD] && AttachInterface( sv, hmd, USB_IF_HMD, sv->udev[USB_DEV_HMD], 0x81, survive_data_cb, "Mainboard" ) ) { return -6; } if( sv->udev[USB_DEV_HMD_IMU_LH] && AttachInterface( sv, hmd, USB_IF_HMD_IMU_LH, sv->udev[USB_DEV_HMD_IMU_LH], 0x81, survive_data_cb, "Lighthouse" ) ) { return -7; } -- cgit v1.2.3