Synthesis of strapdown Inertial Measurement Unit (IMU) readings is required for simulation of inertial navigation systems and related algorithms development. Here I want to describe the algorithm of IMU synthesis implemented in pyins, which is probably one of the most useful functions in the library.
Problem formulation The task is to compute strapdown IMU readings from a time series of position and attitude. The following points define the algorithm requirements:
Data is provided at known time points $t_k$, not necessary equispaced Position is given as a time series of latitude, longitude and altitude – $\varphi(t_k), \lambda(t_k), h(t_k)$ Attitude is given as a time series of roll, pitch and heading angles – $\gamma(t_k), \theta(t_k), \psi(t_k)$ The algorithm must account for Earth rotation and ellipticity and use realistic gravity model The algorithm must be able to compute rate and increment (integral) readings Preliminarily considerations We want to generate IMU from sampled trajectory points instead of some predefined continuous functions to have more flexibility and convenience. Figuring out and implementing appropriate continuous functions for position and attitude is difficult task on its own, which is better to be avoided.
...