rpng / MINS

An efficient and robust multisensor-aided inertial navigation system with online calibration that is capable of fusing IMU, camera, LiDAR, GPS/GNSS, and wheel sensors. Use cases: VINS/VIO, GPS-INS, LINS/LIO, multi-sensor fusion for localization and mapping (SLAM). This repository also provides multi-sensor simulation and data.
GNU General Public License v3.0
485 stars 80 forks source link

Any plan for supporting Zero Velocity Update ? #42

Open BearrGod opened 1 month ago

BearrGod commented 1 month ago

Hello everyone. Great work and system. I would like to ask if you plan on supporting zero velocity update soon.

WoosikLee2510 commented 1 month ago

I'm sorry, but I do not plan to add a zero-velocity update here. It can be useful when you do not have a good way to fix your estimate when the platform is static (e.g., VINS). However, fixing the estimate becomes very tedious if you have other sensors, such as LiDAR or wheel. Adding zero velocity, in this case, may easily make the system overconfident. If you would like to run VINS with zero velocity update, I high recommend OpenVINS

BearrGod commented 1 month ago

Thanks @WoosikLee2510 for the advice. My use case requires 3d mapping in a very smooth environment that lacks 3d features. So i wanted to remove the point cloud contribution to the EKF altogether but still do the mapping (with the help of icp ). I only have imu + 2cams + 1 lidar. I figured i might need ZVUP like OpenVINS , enven if it was an imu only based one. Do you have any pointers on how i should do this ?

WoosikLee2510 commented 1 month ago

I assume your LiDAR is not 360. Can it provide consistent position constraints while static? Then, I suggest to add ZUPT similar to OpenVINS. I think you can quite easily take the ZUPT part of OpenVINS and add it to MINS.

BearrGod commented 1 month ago

The lidar is a 360 lidar Livox Lidar mid-360. And despite my best efforts the estimator drifts away when there is no slam points. But since i am in a special environment, sometimes i can end up with no slam features at all , while being stationary. I'm currently simplifying the OpenVins ZVUP logic to be an im-uonly one, and then add an UpdaterZeroVelocity class to the SystemManager. I will keep you updated.

WoosikLee2510 commented 3 weeks ago

Thank you, @BearrGod. Just one more comment: when you add UpdaterZeroVelocity, the system should do either IMU propagation or UpdaterZeroVelocity to avoid reusing IMU measurements. Here is my pseudo code for how I would implement it.

// Time for propagation bool system_is_stationary = check_system_stationary(imu_measurements) if (system_is_stationary) UpdaterZeroVelocity else RegularIMUPropagation end