aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/poser_charlesrefine.c16
-rw-r--r--src/survive.c1
-rwxr-xr-xsrc/survive_vive.c12
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; }