|
@@ -68,7 +68,7 @@ namespace o0.Bow
|
|
|
var (Gyr, Acc, Mag, TimeGap) = Attitude.Update(gyr1Byte, gyr2Byte, acc1Byte, acc2Byte, magByte, min, sec, ms1, ms2);
|
|
var (Gyr, Acc, Mag, TimeGap) = Attitude.Update(gyr1Byte, gyr2Byte, acc1Byte, acc2Byte, magByte, min, sec, ms1, ms2);
|
|
|
|
|
|
|
|
|
|
|
|
|
- var GyrOperator = Geometry.Quaternion.Euler((Gyr * TimeGap));
|
|
|
|
|
|
|
+ var GyrOperator = Geometry.Quaternion.Euler((Gyr * TimeGap).To<float>());
|
|
|
|
|
|
|
|
|
|
|
|
|
var Last = States.LastOrDefault() ?? new State();
|
|
var Last = States.LastOrDefault() ?? new State();
|
|
@@ -124,15 +124,15 @@ namespace o0.Bow
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- var GyrOperator = Geometry.Quaternion.Euler((Gyr * TimeGap));
|
|
|
|
|
|
|
+ var GyrOperator = Geometry.Quaternion.Euler((Gyr * TimeGap).To<float>());
|
|
|
var quaGyr = LastQuaternion * GyrOperator;
|
|
var quaGyr = LastQuaternion * GyrOperator;
|
|
|
|
|
|
|
|
|
|
|
|
|
//TestVector.Update9AxisRotation(GyrOperator, 1);
|
|
//TestVector.Update9AxisRotation(GyrOperator, 1);
|
|
|
//TestVector.SetAcc(Acc / 10, 1);
|
|
//TestVector.SetAcc(Acc / 10, 1);
|
|
|
//TestVector.SetMag(Mag, 1);
|
|
//TestVector.SetMag(Mag, 1);
|
|
|
- var accTest = Geometry.Quaternion.FromToRotation(Last.Acc, Acc).Inversed;
|
|
|
|
|
- var magTest = Geometry.Quaternion.FromToRotation(Last.Mag, Mag).Inversed;
|
|
|
|
|
|
|
+ var accTest = Geometry.Quaternion.FromToRotation(Last.Acc.To<float>(), Acc.To<float>()).Inversed;
|
|
|
|
|
+ var magTest = Geometry.Quaternion.FromToRotation(Last.Mag.To<float>(), Mag.To<float>()).Inversed;
|
|
|
//TestVector.Set9AxisRotation(Last.Qua, 3);
|
|
//TestVector.Set9AxisRotation(Last.Qua, 3);
|
|
|
|
|
|
|
|
double AccLengthToAngle = 5;//1倍引力差相当于多少度方差
|
|
double AccLengthToAngle = 5;//1倍引力差相当于多少度方差
|
|
@@ -163,7 +163,7 @@ namespace o0.Bow
|
|
|
if (double.IsNaN(state.Variance))
|
|
if (double.IsNaN(state.Variance))
|
|
|
state.Variance = 0.0000001;
|
|
state.Variance = 0.0000001;
|
|
|
|
|
|
|
|
- var quaAccMag = Geometry.Quaternion.FormQuaternion(AccIdentity, MagIdentity, state.Acc, state.Mag, (float)(AccVariance / (AccVariance + MagVariance)));
|
|
|
|
|
|
|
+ var quaAccMag = Geometry.Quaternion.FormQuaternion(AccIdentity.To<float>(), MagIdentity.To<float>(), state.Acc.To<float>(), state.Mag.To<float>(), (float)(AccVariance / (AccVariance + MagVariance)));
|
|
|
var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
|
|
var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
|
|
|
var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
|
|
var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
|
|
|
Geometry.Quaternion quaFirst = Geometry.Quaternion.SLerp(quaGyr, quaAccMag, (float)quaMinRate);
|
|
Geometry.Quaternion quaFirst = Geometry.Quaternion.SLerp(quaGyr, quaAccMag, (float)quaMinRate);
|
|
@@ -172,7 +172,7 @@ namespace o0.Bow
|
|
|
|
|
|
|
|
var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
|
|
var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
|
|
|
|
|
|
|
|
- state.Qua = AccVariance < MagVariance ? Geometry.Quaternion.FormQuaternion(quaFirst, AccIdentity, state.Acc, (float)quaSecondRate) : Geometry.Quaternion.FormQuaternion(quaFirst, MagIdentity, state.Mag, (float)quaSecondRate);
|
|
|
|
|
|
|
+ state.Qua = AccVariance < MagVariance ? Geometry.Quaternion.FormQuaternion(quaFirst, AccIdentity.To<float>(), state.Acc.To<float>(), (float)quaSecondRate) : Geometry.Quaternion.FormQuaternion(quaFirst, MagIdentity.To<float>(), state.Mag.To<float>(), (float)quaSecondRate);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|