我有一个带磁力计,加速度计和陀螺仪的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应该是绝对位置 . 但事实并非如此 . 即使它稳定,它也会改变 .