我有一个带磁力计,加速度计和陀螺仪的IMU。如何补偿加速度计的重力以获得c#中的linear_acceleration?
我发现这一点,每次收到新值时都会运行,但它需要一个重力传感器,我似乎没有
float alpha = 0.8F;
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * accelerometer[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * accelerometer[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * accelerometer[2];
// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = accelerometer[0] - gravity[0];
linear_acceleration[1] = accelerometer[1] - gravity[1];
linear_acceleration[2] = accelerometer[2] - gravity[2];
使用磁力计和/或陀螺仪可以获得重力吗?怎么样?
编辑:
根据我创建的Gravity Compensation in Accelerometer Data
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应该是绝对位置。但它不是。即使它稳定,它也会改变。