\section{Model Functions}
The mathematical description of the IMU are implemented in imu\_sensor.cpp. This code performs the following primary functions
\begin{itemize}
	\item \textbf{Spacecraft State Measurement}: The code provides measurements of the spacecraft state (angular and linear).
	\item \textbf{Bias Modeling}: The code adds instrument bias and bias random walk to the signals.
	\item \textbf{Noise Modeling}: The code calculates noise according to the Gauss Markov model if the user asks for it and provides a perturbation matrix.
	\item \textbf{Discretization}: The code discretizes the signal to emulate real digital instrumentation. The least significant bit (LSB, sensor resolution) can be set by the user.
	\item \textbf{Saturation}: The code bounds the output signal according to user-specified maximum and minimum saturation values.
	\item \textbf{Accelerometer Center of Mass Offset}: The code can handle accelerometer placement other than the center of mass of the spacecraft.
	\item \textbf{Scale Factor}: The code can apply a scale factor, different for each axis of acceleration and angular rate, to the measured value (truth + noise + bias). This is a linear scaling of the output.
	\item \textbf{Bias Random Walk Bounds}: The code bounds bias random walk per user-specified bounds.
	\item \textbf{Interface: Spacecraft States}: The code sends and receives spacecraft state information via the Basilisk messaging system.
\end{itemize}


\section{Model Assumptions and Limitations}
This code makes assumptions which are common to IMU modeling.
\begin{itemize}
	\item \textbf{Error Inputs}: Because the error models rely on user inputs, these inputs are the most likely source of error in IMU output. Instrument bias would have to be measured experimentally or an educated guess would have to be made. The Guass-Markov noise model has well-known assumptions and is generally accepted to be a good model for this application.
	\item \textbf{Error Integration}: Errors for integrated values (DV and PRV) are calculated as acceleration and angular velocity errors multiplied by the IMU time step.  If the IMU timestep matches the dynamics process rate, this is possibly a good assumption. However, if the IMU is run slower than the dynamics process, then the velocity errors may not be related to the instantaneous acceleration errors at the sampling time.
	
	\item \textbf{Integral Saturation}: Because the DV and PRV output values are calculated only at the IMU time step and not actually by integrating rates multiple times between calls, their saturation values are taken as the time integral of the rate saturation values. This misses some possibilities with varying accelerations between IMU time steps. Furthermore, the PRV is taken to be the integral of the angular rate over the time step. This should be a good approximation if the attitude of the spacecraft doesn't change "too much" over a relevant time step.
	
	\item \textbf{IMU Rate Limitation}: As with a real IMU, this model will only be run at a finite speed. It is limited in that it cannot correctly capture dynamics that are happening much faster than the IMU is called. 
\end{itemize}