When recalibrating OpenSeeIKTarget due to a position outlier, keep the IK target's position and rotation as is instead of resetting it.

This commit is contained in:
Emiliana 2020-06-30 16:01:05 +02:00
parent 4e5ab5e25c
commit 892ba54ba8

View file

@ -147,6 +147,7 @@ public class OpenSeeIKTarget : MonoBehaviour
}
// Check for positional outliers
bool keep_offset = false;
if (gotAcceptedPosition) {
float distance = Vector3.Distance(t, lastAcceptedPosition);
if (distance > outlierThresholdDistance) {
@ -160,6 +161,7 @@ public class OpenSeeIKTarget : MonoBehaviour
lastAcceptedPosition = t;
skippedPosition = false;
calibrate = true;
keep_offset = true;
outlierCalibrations += 1;
}
}
@ -192,6 +194,11 @@ public class OpenSeeIKTarget : MonoBehaviour
dT = MirrorTranslation(dT);
lastMirror = mirrorMotion;
}
if (calibrate && keep_offset) {
dR = Quaternion.Inverse(Quaternion.Inverse(transform.localRotation) * Quaternion.Inverse(dR));
dT -= transform.localPosition;
Debug.Log("Kept location.");
}
calibrate = false;
if (mirrorMotion) {