mirror of
https://github.com/overte-org/overte.git
synced 2025-06-24 20:29:29 +02:00
working on computing offsets
This commit is contained in:
parent
cf2507cc63
commit
8e2b25eacc
2 changed files with 27 additions and 10 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include <ui-plugins/PluginContainer.h>
|
#include <ui-plugins/PluginContainer.h>
|
||||||
#include <UserActivityLogger.h>
|
#include <UserActivityLogger.h>
|
||||||
#include <OffscreenUi.h>
|
#include <OffscreenUi.h>
|
||||||
|
#include <GLMHelpers.h>
|
||||||
|
|
||||||
|
|
||||||
#include <controllers/UserInputMapper.h>
|
#include <controllers/UserInputMapper.h>
|
||||||
|
@ -46,6 +47,16 @@ const quint64 CALIBRATION_TIMELAPSE = 3000000;
|
||||||
|
|
||||||
const char* ViveControllerManager::NAME { "OpenVR" };
|
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) {
|
bool sortPucksYPosition(std::pair<uint32_t, controller::Pose> firstPuck, std::pair<uint32_t, controller::Pose> secondPuck) {
|
||||||
controller::Pose firstPose = firstPuck.second;
|
controller::Pose firstPose = firstPuck.second;
|
||||||
controller::Pose secondPose = secondPuck.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) {
|
void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibrationData& inputCalibration) {
|
||||||
quint64 currentTime = usecTimestampNow();
|
quint64 currentTime = usecTimestampNow();
|
||||||
|
|
||||||
auto leftTrigger = _buttonPressedMap.find(controller::LT);
|
auto leftTrigger = _buttonPressedMap.find(controller::LT);
|
||||||
auto rightTrigger = _buttonPressedMap.find(controller::RT);
|
auto rightTrigger = _buttonPressedMap.find(controller::RT);
|
||||||
if ((leftTrigger != _buttonPressedMap.end()) && (rightTrigger != _buttonPressedMap.end())) {
|
if ((leftTrigger != _buttonPressedMap.end()) && (rightTrigger != _buttonPressedMap.end())) {
|
||||||
if (!_calibrated) {
|
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();
|
auto puckCount = _validTrackedObjects.size();
|
||||||
if (puckCount == 2) {
|
if (puckCount == 2) {
|
||||||
qDebug() << "-------------< configure feet <-------------";
|
qDebug() << "-------------< configure feet <-------------";
|
||||||
|
@ -229,23 +246,27 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr
|
||||||
controller::Pose secondFootPose = secondFoot.second;
|
controller::Pose secondFootPose = secondFoot.second;
|
||||||
if (firstFootPose.translation.x > secondFootPose.translation.x) {
|
if (firstFootPose.translation.x > secondFootPose.translation.x) {
|
||||||
_jointToPuckMap[controller::LEFT_FOOT] = firstFoot.first;
|
_jointToPuckMap[controller::LEFT_FOOT] = firstFoot.first;
|
||||||
|
_pucksOffset[firstFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultLeftFoot, firstFootPose);
|
||||||
_jointToPuckMap[controller::RIGHT_FOOT] = secondFoot.first;
|
_jointToPuckMap[controller::RIGHT_FOOT] = secondFoot.first;
|
||||||
|
_pucksOffset[secondFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultRightFoot, secondFootPose);
|
||||||
} else {
|
} else {
|
||||||
_jointToPuckMap[controller::LEFT_FOOT] = secondFoot.first;
|
_jointToPuckMap[controller::LEFT_FOOT] = secondFoot.first;
|
||||||
|
_pucksOffset[secondFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultLeftFoot, secondFootPose);
|
||||||
_jointToPuckMap[controller::RIGHT_FOOT] = firstFoot.first;
|
_jointToPuckMap[controller::RIGHT_FOOT] = firstFoot.first;
|
||||||
|
_pucksOffset[firstFoot.first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultRightFoot, firstFootPose);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_config == Config::Feet) {
|
if (_config == Config::Feet) {
|
||||||
// done
|
// done
|
||||||
} else if (_config == Config::FeetAndHips) {
|
} else if (_config == Config::FeetAndHips) {
|
||||||
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
|
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
|
||||||
|
_pucksOffset[_validTrackedObjects[2].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultHips, _validTrackedObjects[2].second);
|
||||||
} else if (_config == Config::FeetHipsAndChest) {
|
} else if (_config == Config::FeetHipsAndChest) {
|
||||||
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
|
_jointToPuckMap[controller::HIPS] = _validTrackedObjects[2].first;
|
||||||
|
_pucksOffset[_validTrackedObjects[2].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultHips, _validTrackedObjects[2].second);
|
||||||
_jointToPuckMap[controller::SPINE2] = _validTrackedObjects[2].first;
|
_jointToPuckMap[controller::SPINE2] = _validTrackedObjects[2].first;
|
||||||
}
|
_pucksOffset[_validTrackedObjects[3].first] = computeOffset(defaultRefrenceXform, inputCalibration.defaultSpine2, _validTrackedObjects[3].second);
|
||||||
|
}
|
||||||
computePucksOffset(inputCalibration);
|
|
||||||
_calibrated = true;
|
_calibrated = true;
|
||||||
|
|
||||||
} else {
|
} 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) {
|
void ViveControllerManager::InputDevice::handleHandController(float deltaTime, uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData, bool isLeftHand) {
|
||||||
|
|
||||||
if (_system->IsTrackedDeviceConnected(deviceIndex) &&
|
if (_system->IsTrackedDeviceConnected(deviceIndex) &&
|
||||||
|
|
|
@ -61,7 +61,6 @@ private:
|
||||||
bool triggerHapticPulse(float strength, float duration, controller::Hand hand) override;
|
bool triggerHapticPulse(float strength, float duration, controller::Hand hand) override;
|
||||||
void hapticsHelper(float deltaTime, bool leftHand);
|
void hapticsHelper(float deltaTime, bool leftHand);
|
||||||
void calibrate(const controller::InputCalibrationData& inputCalibration);
|
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 handleHandController(float deltaTime, uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData, bool isLeftHand);
|
||||||
void handleTrackedObject(uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData);
|
void handleTrackedObject(uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData);
|
||||||
void handleButtonEvent(float deltaTime, uint32_t button, bool pressed, bool touched, bool isLeftHand);
|
void handleButtonEvent(float deltaTime, uint32_t button, bool pressed, bool touched, bool isLeftHand);
|
||||||
|
@ -99,7 +98,7 @@ private:
|
||||||
FilteredStick _filteredRightStick;
|
FilteredStick _filteredRightStick;
|
||||||
|
|
||||||
std::vector<std::pair<uint32_t, controller::Pose>> _validTrackedObjects;
|
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;
|
std::map<int, uint32_t> _jointToPuckMap;
|
||||||
// perform an action when the InputDevice mutex is acquired.
|
// perform an action when the InputDevice mutex is acquired.
|
||||||
using Locker = std::unique_lock<std::recursive_mutex>;
|
using Locker = std::unique_lock<std::recursive_mutex>;
|
||||||
|
|
Loading…
Reference in a new issue