lvjincheng 3 лет назад
Родитель
Сommit
9517fcf4e3

+ 1 - 0
Assets/BowArrow/Prefabs/Views/MagInterferenceTip/MagInterferenceTipView.cs

@@ -15,6 +15,7 @@ public class MagInterferenceTipView : MonoBehaviour, MenuBackInterface
     void OnDestroy()
     {
         PersistenHandler.ins?.menuBackCtr.views.Remove(this);
+        if (AimHandler.ins) AimHandler.ins.ApplyImpreciseMag();
     }
 
     public bool OnMenuBack() {

+ 1 - 0
Assets/BowArrow/Scripts/Bluetooth/AimHandler.cs

@@ -162,6 +162,7 @@ public class AimHandler : MonoBehaviour
     public void InitMag(string record) { m_axisHandler.InitMag(record); }
     public void ResetGyr() { m_axisHandler.ResetGyr(); }
     public void ResetMag() { m_axisHandler.ResetMag(); }
+    public void ApplyImpreciseMag() { m_axisHandler.ApplyImpreciseMag(); }
     public bool IsGyrCompleted() { return m_axisHandler.IsGyrCompleted(); }
     public bool IsMagCompleted() { return m_axisHandler.IsMagCompleted(); }
     public IEnumerator SaveGyr() { return m_axisHandler.SaveGyr(); }

+ 21 - 0
Assets/BowArrow/Scripts/Bluetooth/New/Axis9Handler.cs

@@ -79,10 +79,31 @@ public class Axis9Handler : AxisBaseHandler
     }
 
     public override void ResetMag() {
+        _SaveOldMag();
         _9Axis.Attitude.MagCalibrater = new o0.IMU.MagnetometerAutoCalibrater(0.001d);
         Debug.Log("地磁计校准结果主动重置!");
     }
 
+    
+    private string _oldEllipsoidFitting = "{\"Center\":[-3.0443925790756605,-3.6882526269162423,-0.9424965068421579],\"CorrectMatrixArray\":[[0.2584454016577151,0.00410177628600846,0.005727574526798527],[0.00410177628600846,0.2639115667519193,-0.03866026824619133],[0.005727574526798523,-0.03866026824619133,0.23912157876854007]],\"Radius\":[4.764270274783962,3.854047926765827,3.4233050788114037]}";
+    private double _oldVariance = 0.000362;
+    private void _SaveOldMag()
+    {
+        if (!_9Axis.Attitude.MagCalibrater.Complete) return;
+        _oldVariance = _9Axis.Attitude.MagCalibrater.Variance;
+        _oldEllipsoidFitting = attitudeJson.Stringify(_9Axis.Attitude.MagCalibrater.EllipsoidFitting);
+    }
+
+    //应用不精准地磁数据,为让客户不地磁校准成功也能动
+    public override void ApplyImpreciseMag()
+    {
+        if (_9Axis.Attitude.MagCalibrater.Complete) return;
+        _9Axis.Attitude.MagCalibrater.Lock = true;
+        _9Axis.Attitude.MagCalibrater.Init();
+        _9Axis.Attitude.MagCalibrater.EllipsoidFitting = attitudeJson.Parse<o0.IMU.EllipsoidFitting>(_oldEllipsoidFitting);
+        _9Axis.Attitude.MagCalibrater.Variance = _oldVariance;
+    }
+
     public override bool IsGyrCompleted() {
         return _9Axis.Attitude.GyrCalibrater.Count > 0;
     }

+ 1 - 0
Assets/BowArrow/Scripts/Bluetooth/New/AxisBaseHandler.cs

@@ -16,6 +16,7 @@ public abstract class AxisBaseHandler
     public virtual void InitMag(string record) {}
     public abstract void ResetGyr();
     public abstract void ResetMag();
+    public virtual void ApplyImpreciseMag() {}
     public abstract bool IsGyrCompleted();
     public abstract bool IsMagCompleted();
     public abstract IEnumerator SaveGyr();