|
@@ -57,6 +57,11 @@ public class o0MagneticCalibraterEllipsoidFitting//默认在无磁干扰环境
|
|
|
}
|
|
}
|
|
|
set
|
|
set
|
|
|
{
|
|
{
|
|
|
|
|
+ if (value == default)
|
|
|
|
|
+ {
|
|
|
|
|
+ _CorrectMatrix = null;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
_CorrectMatrix = CreateMatrix.Dense<double>(3,3);
|
|
_CorrectMatrix = CreateMatrix.Dense<double>(3,3);
|
|
|
for (var i = 0; i < 3; ++i)
|
|
for (var i = 0; i < 3; ++i)
|
|
|
for (var j = 0; j < 3; ++j)
|
|
for (var j = 0; j < 3; ++j)
|
|
@@ -244,7 +249,8 @@ public class o0MagneticCalibraterEllipsoidFitting//默认在无磁干扰环境
|
|
|
//MathNetV = (MathNetV * mat_Scale) * mat_Correct;
|
|
//MathNetV = (MathNetV * mat_Scale) * mat_Correct;
|
|
|
MathNetV = (MathNetV) * mat_Correct;
|
|
MathNetV = (MathNetV) * mat_Correct;
|
|
|
v = new Vector3((float)MathNetV[0], (float)MathNetV[1], (float)MathNetV[2]);
|
|
v = new Vector3((float)MathNetV[0], (float)MathNetV[1], (float)MathNetV[2]);
|
|
|
- if(Math.Abs(v.magnitude - AverageDistance) > 0.1* AverageDistance) {
|
|
|
|
|
|
|
+ if (Math.Abs(v.magnitude - AverageDistance) > 0.1 * AverageDistance)
|
|
|
|
|
+ {
|
|
|
BadRecords.Add(i);
|
|
BadRecords.Add(i);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -681,6 +687,10 @@ public class o09Axis
|
|
|
public float z;
|
|
public float z;
|
|
|
|
|
|
|
|
long TimeGapOld;
|
|
long TimeGapOld;
|
|
|
|
|
+ o0Aien.o0SigmoidIntegrationFilterVector3 AccFilter = new o0Aien.o0SigmoidIntegrationFilterVector3(0.2f,1);
|
|
|
|
|
+ o0Aien.o0SigmoidIntegrationFilterVector3 MagFilter = new o0Aien.o0SigmoidIntegrationFilterVector3(0.2f,1);
|
|
|
|
|
+ // o0Aien.o0SigmoidIntegrationFilterVector3 AccFilter = new o0Aien.o0SigmoidIntegrationFilterVector3(5.2f,5);
|
|
|
|
|
+ // o0Aien.o0SigmoidIntegrationFilterVector3 MagFilter = new o0Aien.o0SigmoidIntegrationFilterVector3(5.2f,5);
|
|
|
/////////////////////g degree/ms
|
|
/////////////////////g degree/ms
|
|
|
public Quaternion Update(Vector3 AccOld, Vector3 GyrOld, Vector3 MagOld, long TimeGapOld)
|
|
public Quaternion Update(Vector3 AccOld, Vector3 GyrOld, Vector3 MagOld, long TimeGapOld)
|
|
|
{
|
|
{
|
|
@@ -702,9 +712,20 @@ public class o09Axis
|
|
|
if (States.Count > 200)
|
|
if (States.Count > 200)
|
|
|
States.RemoveAt(0);
|
|
States.RemoveAt(0);
|
|
|
var state = States.Last();
|
|
var state = States.Last();
|
|
|
|
|
+ /*
|
|
|
state.Acc = Acc;
|
|
state.Acc = Acc;
|
|
|
state.Gyr = Gyr;
|
|
state.Gyr = Gyr;
|
|
|
- state.Mag = Mag;
|
|
|
|
|
|
|
+ state.Mag = Mag;/**/
|
|
|
|
|
+ state.Acc = Last.Acc;
|
|
|
|
|
+ AccFilter.Update(ref state.Acc, Acc);
|
|
|
|
|
+ // state.Acc = Vector3.Lerp(Acc, state.Acc,0.99);
|
|
|
|
|
+
|
|
|
|
|
+ state.Gyr = Gyr;
|
|
|
|
|
+ // state.Gyr = Quaternion.Lerp(ref state.Gyr, Gyr,0.01);
|
|
|
|
|
+
|
|
|
|
|
+ state.Mag = Last.Mag;
|
|
|
|
|
+ MagFilter.Update(ref state.Mag, Mag);
|
|
|
|
|
+ // state.Mag = Quaternion.Slerp(this.MagOld,state.Mag,0.99);
|
|
|
//Debug.Log(TimeGap);
|
|
//Debug.Log(TimeGap);
|
|
|
|
|
|
|
|
HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右 0.00000002331017
|
|
HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右 0.00000002331017
|
|
@@ -819,7 +840,8 @@ public class o09Axis
|
|
|
// state.Qua = Gyrwit.transform.localRotation;
|
|
// state.Qua = Gyrwit.transform.localRotation;
|
|
|
|
|
|
|
|
state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, Acc, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, Mag, (float)quaSecondRate);
|
|
state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, Acc, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, Mag, (float)quaSecondRate);
|
|
|
-
|
|
|
|
|
|
|
+ // state.Qua = Quaternion.Lerp(state.Qua, state.Qua,0.99);
|
|
|
|
|
+ // state.Qua = Quaternion.Slerp(state.Qua, state.Qua,0.99);
|
|
|
//Tester?[0].DrawLine(TimeGap / 200, new Color(1, 0, 0));
|
|
//Tester?[0].DrawLine(TimeGap / 200, new Color(1, 0, 0));
|
|
|
//Image1.DrawLine();
|
|
//Image1.DrawLine();
|
|
|
//Debug.Log((Gyr * TimeGap).magnitude);
|
|
//Debug.Log((Gyr * TimeGap).magnitude);
|