class
UpdaterZeroVelocityWill try to detect and then update using zero velocity assumption.
Contents
Consider the case that a VIO unit remains stationary for a period time. Typically this can cause issues in a monocular system without SLAM features since no features can be triangulated. Additional, if features could be triangulated (e.g. stereo) the quality can be poor and hurt performance. If we can detect the cases where we are stationary then we can leverage this to prevent the need to do feature update during this period. The main application would be using this on a wheeled vehicle which needs to stop (e.g. stop lights or parking).
Constructors, destructors, conversion operators

UpdaterZeroVelocity(UpdaterOptions& options,
Propagator::
NoiseManager & noises, Eigen::Vector3d gravity, double zupt_max_velocity, double zupt_noise_multiplier)  Default constructor for our zero velocity detector and updater.
Public functions
 void feed_imu(double timestamp, Eigen::Vector3d wm, Eigen::Vector3d am)
 Stores incoming inertial readings.
 auto try_update(State* state, double timestamp) > bool
 Will first detect if the system is zero velocity, then will update.
Protected variables
 UpdaterOptions _options
 Options used during update (chi2 multiplier)

Propagator::
NoiseManager _noises  Container for the imu noise values.
 Eigen::Matrix<double, 3, 1> _gravity
 Gravity vector.
 double _zupt_max_velocity
 Max velocity (m/s) that we should consider a zupt with.
 double _zupt_noise_multiplier
 Multiplier of our IMU noise matrix (default should be 1.0)
 std::map<int, double> chi_squared_table
 Chi squared 95th percentile table (lookup would be size of residual)

std::vector<Propagator::
IMUDATA > imu_data  Our history of IMU messages (time, angular, linear)
 double last_prop_time_offset
 Estimate for time offset at last propagation time.
Function documentation
ov_msckf::UpdaterZeroVelocity:: UpdaterZeroVelocity(UpdaterOptions& options,
Propagator::NoiseManager & noises,
Eigen::Vector3d gravity,
double zupt_max_velocity,
double zupt_noise_multiplier)
Default constructor for our zero velocity detector and updater.
Parameters  

options  Updater options (chi2 multiplier) 
noises  imu noise characteristics (continuous time) 
gravity  Global gravity of the system (normally [0,0,9.81]) 
zupt_max_velocity  Max velocity we should consider to do a update with 
zupt_noise_multiplier  Multiplier of our IMU noise matrix (default should be 1.0) 
void ov_msckf::UpdaterZeroVelocity:: feed_imu(double timestamp,
Eigen::Vector3d wm,
Eigen::Vector3d am)
Stores incoming inertial readings.
Parameters  

timestamp  Timestamp of imu reading 
wm  Gyro angular velocity reading 
am  Accelerometer linear acceleration reading 
bool ov_msckf::UpdaterZeroVelocity:: try_update(State* state,
double timestamp)
Will first detect if the system is zero velocity, then will update.
Parameters  

state  State of the filter 
timestamp  Next camera timestamp we want to see if we should propagate to. 
Returns  True if the system is currently at zero velocity 