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:
parent
4e5ab5e25c
commit
892ba54ba8
1 changed files with 7 additions and 0 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue