Last week I researched how to get state estimates from Inertial Measurement Unit (IMU). There are 12 states needs to be measured for a flying device: position, velocity, attitude and angular velocity in three-dimensional space. An IMU usually contains accelerometers and gyroscopes, sometimes also magnetometers and pressure sensors. Magnetometers are not suitable for indoor measurements since devices such as computer will introduce noise. Pressure sensors is helpful for height tracking. The easiest way to estimate the states is to use Extended Kalman Filter (EKF) estimate each states from IMU readings, and this method is currently used on crazyflie 2.0. However, since there are no direct measurements of x-y position from IMU, the estamate of position will be inaccurate for long term.
Madgwick Sensor Fusion Algorithm [1] can provide better estimation of orientation for the system. However, accurate x-y position data will still be unavailable.
[1] Sebastian O.H. Madgwick “An efficient orientation filter for inertial and inertial/magnetic sensor arrays”