mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 10:14:28 +02:00
Attempting to perform the transform between angular and linear acceleration.
This commit is contained in:
parent
1b8683cbc5
commit
90ef6a7cc0
1 changed files with 12 additions and 11 deletions
|
@ -238,18 +238,19 @@ void SerialInterface::readData(float deltaTime) {
|
||||||
glm::quat estimatedRotation = glm::quat(glm::radians(_estimatedRotation)) *
|
glm::quat estimatedRotation = glm::quat(glm::radians(_estimatedRotation)) *
|
||||||
glm::quat(glm::radians(deltaTime * _lastRotationRates));
|
glm::quat(glm::radians(deltaTime * _lastRotationRates));
|
||||||
|
|
||||||
|
// The acceleration matrix transforms angular to linear accelerations
|
||||||
|
const glm::vec3 PIVOT_OFFSET(0.0f, -0.02f, -0.01f);
|
||||||
|
const glm::vec3 PIVOT_VECTOR_NORMALIZED = glm::normalize(PIVOT_OFFSET);
|
||||||
|
const glm::vec3 PIVOT_SINES = glm::max(glm::vec3(EPSILON, EPSILON, EPSILON),
|
||||||
|
glm::sqrt(glm::vec3(1.0f, 1.0f, 1.0f) - PIVOT_OFFSET * PIVOT_OFFSET));
|
||||||
|
const glm::mat3 ACCELERATION_MATRIX(
|
||||||
|
0.0f, PIVOT_OFFSET.z / PIVOT_SINES.x, -PIVOT_OFFSET.y / PIVOT_SINES.x,
|
||||||
|
-PIVOT_OFFSET.z / PIVOT_SINES.y, 0.0f, PIVOT_OFFSET.x / PIVOT_SINES.y,
|
||||||
|
PIVOT_OFFSET.y / PIVOT_SINES.z, -PIVOT_OFFSET.x / PIVOT_SINES.z, 0.0f);
|
||||||
|
|
||||||
// Update acceleration estimate
|
// Update acceleration estimate
|
||||||
_estimatedAcceleration = _lastAcceleration - glm::inverse(estimatedRotation) * _gravity;
|
_estimatedAcceleration = _lastAcceleration - glm::inverse(estimatedRotation) * _gravity -
|
||||||
|
ACCELERATION_MATRIX * angularAcceleration;
|
||||||
static float ratioEstimate = 0.0f;
|
|
||||||
float angularAccelerationLength = glm::length(angularAcceleration);
|
|
||||||
float linearAccelerationLength = glm::length(estimatedAcceleration);
|
|
||||||
if (angularAccelerationLength > EPSILON && linearAccelerationLength > EPSILON) {
|
|
||||||
float ratio = linearAccelerationLength / angularAccelerationLength;
|
|
||||||
static float ratioEstimate = ratio;
|
|
||||||
ratioEstimate = ratioEstimate * 0.999 + ratio * 0.001;
|
|
||||||
printLog("%g %g\n", ratio, ratioEstimate);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update estimated position and velocity
|
// Update estimated position and velocity
|
||||||
float const DECAY_VELOCITY = 0.95f;
|
float const DECAY_VELOCITY = 0.95f;
|
||||||
|
|
Loading…
Reference in a new issue