working on computing offsets

This commit is contained in:
Dante Ruiz 2017-05-03 00:25:41 +01:00
parent cf2507cc63
commit 8e2b25eacc
2 changed files with 27 additions and 10 deletions

View file

@ -22,6 +22,7 @@
#include <ui-plugins/PluginContainer.h>
#include <UserActivityLogger.h>
#include <OffscreenUi.h>
#include <GLMHelpers.h>
#include <controllers/UserInputMapper.h>
@ -46,6 +47,16 @@ const quint64 CALIBRATION_TIMELAPSE = 3000000;
const char* ViveControllerManager::NAME { "OpenVR" };
/*glm::mat4 computeDefualtHead(glm::mat4 centerOfEye, glm::mat4 jointHead) {
headOffset = glm::muliply(glm::inverse(centerOfEye), jointHead);
return glm::
}*/
glm::mat4 computeOffset(glm::mat4 defaultRefrence, glm::mat4 defaultJointMat, controller::Pose puckPose) {
qDebug() << "-------------> computing offset <-------------";
glm::mat4 puckMat = create
return mat4();
}
bool sortPucksYPosition(std::pair<uint32_t, controller::Pose> firstPuck, std::pair<uint32_t, controller::Pose> secondPuck) {
controller::Pose firstPose = firstPuck.second;
controller::Pose secondPose = secondPuck.second;
@ -203,11 +214,17 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde
void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibrationData& inputCalibration) {
quint64 currentTime = usecTimestampNow();
auto leftTrigger = _buttonPressedMap.find(controller::LT);
auto rightTrigger = _buttonPressedMap.find(controller::RT);
if ((leftTrigger != _buttonPressedMap.end()) && (rightTrigger != _buttonPressedMap.end())) {
if (!_calibrated) {
glm::mat4 controllerToAvatar = glm::inverse(inputCalibration.avatarMat) * inputCalibration.sensorToWorldMat;
glm::mat4 currentHead = inputCalibration.hmdSensorMat * controllerToAvatar;
glm::quat canceledRollAndPitch = cancelOutRollAndPitch(glmExtractRotation(currentHead));
glm::vec3 currentHeadPosition = extractTranslation(currentHead);
currentHead = createMatFromQuatAndPos(canceledRollAndPitch, currentHeadPosition);
glm::mat4 defaultRefrenceXform = currentHead * glm::inverse(inputCalibration.defaultHeadMat);
auto puckCount = _validTrackedObjects.size();
if (puckCount == 2) {
qDebug() << "-------------< configure feet <-------------";
@ -229,23 +246,27 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr
controller::Pose secondFootPose = secondFoot.second;
if (firstFootPose.translation.x > secondFootPose.translation.x) {
_jointToPuckMap[controller::LEFT_FOOT] = firstFoot.first;
_pucksOffset[firstFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultLeftFoot, firstFootPose);
_jointToPuckMap[controller::RIGHT_FOOT] = secondFoot.first;
_pucksOffset[secondFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultRightFoot, secondFootPose);
} else {
_jointToPuckMap[controller::LEFT_FOOT] = secondFoot.first;
_pucksOffset[secondFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultLeftFoot, secondFootPose);
_jointToPuckMap[controller::RIGHT_FOOT] = firstFoot.first;
_pucksOffset[firstFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultRightFoot, firstFootPose);
}
if (_config == Config::Feet) {
// done
} else if (_config == Config::FeetAndHips) {
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
_pucksOffset[_validTrackedObjects[2].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultHips, _validTrackedObjects[2].second);
} else if (_config == Config::FeetHipsAndChest) {
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
_pucksOffset[_validTrackedObjects[2].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultHips, _validTrackedObjects[2].second);
_jointToPuckMap[controller::SPINE2] = _validTrackedObjects[2].first;
}
computePucksOffset(inputCalibration);
_pucksOffset[_validTrackedObjects[3].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultSpine2, _validTrackedObjects[3].second);
}
_calibrated = true;
} else {
@ -256,9 +277,6 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr
}
}
void ViveControllerManager::InputDevice::computePucksOffset(const controller::InputCalibrationData& inputCalibration) {
}
void ViveControllerManager::InputDevice::handleHandController(float deltaTime, uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData, bool isLeftHand) {
if (_system->IsTrackedDeviceConnected(deviceIndex) &&

View file

@ -61,7 +61,6 @@ private:
bool triggerHapticPulse(float strength, float duration, controller::Hand hand) override;
void hapticsHelper(float deltaTime, bool leftHand);
void calibrate(const controller::InputCalibrationData& inputCalibration);
void computePucksOffset(const controller::InputCalibrationData& inputCalibration);
void handleHandController(float deltaTime, uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData, bool isLeftHand);
void handleTrackedObject(uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData);
void handleButtonEvent(float deltaTime, uint32_t button, bool pressed, bool touched, bool isLeftHand);
@ -99,7 +98,7 @@ private:
FilteredStick _filteredRightStick;
std::vector<std::pair<uint32_t, controller::Pose>> _validTrackedObjects;
std::map<uint32_t, const mat4> _pucksOffset;
std::map<uint32_t, glm::mat4> _pucksOffset;
std::map<int, uint32_t> _jointToPuckMap;
// perform an action when the InputDevice mutex is acquired.
using Locker = std::unique_lock<std::recursive_mutex>;