Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 即使设备保持稳定,双积分后距离值的重大变化_C#_Xna_Accelerometer_Quaternions_Ms Media Foundation - Fatal编程技术网

C# 即使设备保持稳定,双积分后距离值的重大变化

C# 即使设备保持稳定,双积分后距离值的重大变化,c#,xna,accelerometer,quaternions,ms-media-foundation,C#,Xna,Accelerometer,Quaternions,Ms Media Foundation,我有一个带磁强计、加速计和陀螺仪的IMU。根据我创建的 void newValues() { //get values ... stopwatch.Stop(); t = (float)stopwatch.ElapsedMilliseconds / 1000; stopwatch.Restart(); Matrix3D m = Matrix3D.Identity; Microsoft.Xna.Framework.Quaternion q1 = Microsof

我有一个带磁强计、加速计和陀螺仪的IMU。根据我创建的

void newValues()
{    
  //get values
  ...
  stopwatch.Stop();
  t = (float)stopwatch.ElapsedMilliseconds / 1000;
  stopwatch.Restart();
  Matrix3D m = Matrix3D.Identity;
  Microsoft.Xna.Framework.Quaternion q1 = Microsoft.Xna.Framework.Quaternion.CreateFromYawPitchRoll(d,n,r);
  System.Windows.Media.Media3D.Quaternion q = new System.Windows.Media.Media3D.Quaternion(q1.X, q1.Y, q1.Z, q1.W);
  m.Rotate(q);
  Vector3D mVtR = new Vector3D(bx, by, bz);
  m.Transform(mVtR);
  float[] gravity = new float[] { 0, 0, -9.81F };

  bx = (float)mVtR.X - gravity[0];
  by = (float)mVtR.Y - gravity[1];
  bz = (float)mVtR.Z - gravity[2];

  sx += bx * t * t;
  sy += by * t * t;
  sz += bz * t * t;
}

b
加速度
d
n
r
偏航
俯仰
滚转
s
应该是
绝对位置
t
是输入新值之间的时间间隔。但是,即使imu稳定,绝对位置
s
也会发生显著变化。为什么会这样?

导致您的问题的一个可能因素可能是,您的重力向量假设为Z向上的世界系统,但XNA单位矩阵和XNA四元数都使用Y向上的世界系统。@SteveH所以您建议
float[]gravity=new float[]{0,0,9.81F}