mirror of
https://github.com/overte-org/overte.git
synced 2025-07-23 12:04:03 +02:00
Merge pull request #14531 from hyperlogic/feature/drop-after-delay-out-of-range-tracking
Added DropAfterDelay strategy to Vive Tracker Calibration Dialog
This commit is contained in:
commit
bc5166d1d8
3 changed files with 27 additions and 3 deletions
|
@ -873,7 +873,7 @@ Flickable {
|
||||||
|
|
||||||
editable: true
|
editable: true
|
||||||
colorScheme: hifi.colorSchemes.dark
|
colorScheme: hifi.colorSchemes.dark
|
||||||
model: ["None", "Freeze", "Drop"]
|
model: ["None", "Freeze", "Drop", "DropAfterDelay"]
|
||||||
label: ""
|
label: ""
|
||||||
|
|
||||||
onCurrentIndexChanged: {
|
onCurrentIndexChanged: {
|
||||||
|
|
|
@ -138,6 +138,8 @@ static QString outOfRangeDataStrategyToString(ViveControllerManager::OutOfRangeD
|
||||||
return "Freeze";
|
return "Freeze";
|
||||||
case ViveControllerManager::OutOfRangeDataStrategy::Drop:
|
case ViveControllerManager::OutOfRangeDataStrategy::Drop:
|
||||||
return "Drop";
|
return "Drop";
|
||||||
|
case ViveControllerManager::OutOfRangeDataStrategy::DropAfterDelay:
|
||||||
|
return "DropAfterDelay";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,6 +148,8 @@ static ViveControllerManager::OutOfRangeDataStrategy stringToOutOfRangeDataStrat
|
||||||
return ViveControllerManager::OutOfRangeDataStrategy::Drop;
|
return ViveControllerManager::OutOfRangeDataStrategy::Drop;
|
||||||
} else if (string == "Freeze") {
|
} else if (string == "Freeze") {
|
||||||
return ViveControllerManager::OutOfRangeDataStrategy::Freeze;
|
return ViveControllerManager::OutOfRangeDataStrategy::Freeze;
|
||||||
|
} else if (string == "DropAfterDelay") {
|
||||||
|
return ViveControllerManager::OutOfRangeDataStrategy::DropAfterDelay;
|
||||||
} else {
|
} else {
|
||||||
return ViveControllerManager::OutOfRangeDataStrategy::None;
|
return ViveControllerManager::OutOfRangeDataStrategy::None;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +306,7 @@ void ViveControllerManager::loadSettings() {
|
||||||
if (_inputDevice) {
|
if (_inputDevice) {
|
||||||
const double DEFAULT_ARM_CIRCUMFERENCE = 0.33;
|
const double DEFAULT_ARM_CIRCUMFERENCE = 0.33;
|
||||||
const double DEFAULT_SHOULDER_WIDTH = 0.48;
|
const double DEFAULT_SHOULDER_WIDTH = 0.48;
|
||||||
const QString DEFAULT_OUT_OF_RANGE_STRATEGY = "Drop";
|
const QString DEFAULT_OUT_OF_RANGE_STRATEGY = "DropAfterDelay";
|
||||||
_inputDevice->_armCircumference = settings.value("armCircumference", QVariant(DEFAULT_ARM_CIRCUMFERENCE)).toDouble();
|
_inputDevice->_armCircumference = settings.value("armCircumference", QVariant(DEFAULT_ARM_CIRCUMFERENCE)).toDouble();
|
||||||
_inputDevice->_shoulderWidth = settings.value("shoulderWidth", QVariant(DEFAULT_SHOULDER_WIDTH)).toDouble();
|
_inputDevice->_shoulderWidth = settings.value("shoulderWidth", QVariant(DEFAULT_SHOULDER_WIDTH)).toDouble();
|
||||||
_inputDevice->_outOfRangeDataStrategy = stringToOutOfRangeDataStrategy(settings.value("outOfRangeDataStrategy", QVariant(DEFAULT_OUT_OF_RANGE_STRATEGY)).toString());
|
_inputDevice->_outOfRangeDataStrategy = stringToOutOfRangeDataStrategy(settings.value("outOfRangeDataStrategy", QVariant(DEFAULT_OUT_OF_RANGE_STRATEGY)).toString());
|
||||||
|
@ -516,6 +520,7 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde
|
||||||
_nextSimPoseData.vrPoses[deviceIndex].bPoseIsValid &&
|
_nextSimPoseData.vrPoses[deviceIndex].bPoseIsValid &&
|
||||||
poseIndex <= controller::TRACKED_OBJECT_15) {
|
poseIndex <= controller::TRACKED_OBJECT_15) {
|
||||||
|
|
||||||
|
uint64_t now = usecTimestampNow();
|
||||||
controller::Pose pose;
|
controller::Pose pose;
|
||||||
switch (_outOfRangeDataStrategy) {
|
switch (_outOfRangeDataStrategy) {
|
||||||
case OutOfRangeDataStrategy::Drop:
|
case OutOfRangeDataStrategy::Drop:
|
||||||
|
@ -544,6 +549,22 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde
|
||||||
_nextSimPoseData.angularVelocities[deviceIndex] = _lastSimPoseData.angularVelocities[deviceIndex];
|
_nextSimPoseData.angularVelocities[deviceIndex] = _lastSimPoseData.angularVelocities[deviceIndex];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OutOfRangeDataStrategy::DropAfterDelay:
|
||||||
|
const uint64_t DROP_DELAY_TIME = 500 * USECS_PER_MSEC;
|
||||||
|
|
||||||
|
// All Running_OK results are valid.
|
||||||
|
if (_nextSimPoseData.vrPoses[deviceIndex].eTrackingResult == vr::TrackingResult_Running_OK) {
|
||||||
|
pose = buildPose(_nextSimPoseData.poses[deviceIndex], _nextSimPoseData.linearVelocities[deviceIndex], _nextSimPoseData.angularVelocities[deviceIndex]);
|
||||||
|
// update the timer
|
||||||
|
_simDataRunningOkTimestampMap[deviceIndex] = now;
|
||||||
|
} else if (now - _simDataRunningOkTimestampMap[deviceIndex] < DROP_DELAY_TIME) {
|
||||||
|
// report the pose, even though pose is out-of-range
|
||||||
|
pose = buildPose(_nextSimPoseData.poses[deviceIndex], _nextSimPoseData.linearVelocities[deviceIndex], _nextSimPoseData.angularVelocities[deviceIndex]);
|
||||||
|
} else {
|
||||||
|
// this pose has been out-of-range for too long.
|
||||||
|
pose.valid = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pose.valid) {
|
if (pose.valid) {
|
||||||
|
|
|
@ -63,7 +63,8 @@ public:
|
||||||
enum class OutOfRangeDataStrategy {
|
enum class OutOfRangeDataStrategy {
|
||||||
None,
|
None,
|
||||||
Freeze,
|
Freeze,
|
||||||
Drop
|
Drop,
|
||||||
|
DropAfterDelay
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -205,6 +206,8 @@ private:
|
||||||
|
|
||||||
bool _hmdTrackingEnabled { true };
|
bool _hmdTrackingEnabled { true };
|
||||||
|
|
||||||
|
std::map<uint32_t, uint64_t> _simDataRunningOkTimestampMap;
|
||||||
|
|
||||||
QString configToString(Config config);
|
QString configToString(Config config);
|
||||||
friend class ViveControllerManager;
|
friend class ViveControllerManager;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue