Giter Club home page Giter Club logo

ingvio's Introduction

InGVIO

An invariant filter for visual-inertial-raw GNSS fusion.

Paper: InGVIO: A Consistent Invariant Filter For Fast and High-Accuracy GNSS-Visual-Inertial Odometry

Paper Author: Changwu Liu, Chen Jiang and Haowen Wang

Paper Status: Manuscript submitted to RA-L for possible publication. Preprint version available on ArXiv.

Current Paper Link: https://arxiv.org/abs/2210.15145

InGVIO is an invariant filter approach for fusion of monocular/stereo camera, IMU and raw GNSS measurements including pseudo ranges and Doppler shifts. InGVIO is intrinsically consistent under conditional infinitesimal invariance of the GNSS-Visual-Inertial system. InGVIO has the following key features: (a) fast due to decoupled IMU propagation, key-frame marginalization strategy and no SLAM-features; (b) accurate due to intrinsic consistency maintenance; (c) better convergence properties than 'naive' EKF-based filters.

Moreover, we offer our fixed-wing datasets in the form of ROS Bags including stereo-visual, IMU and raw-GNSS measurements.

Fixed-Wing Dataset Link: https://cloud.tsinghua.edu.cn/d/38dd9d1a470944cda8fb password to extract: lcw18_thu_uav

Fixed-Wing Dataset Videos: The videos are uploaded to the link that stores the fixed-wing datasets.

The links to the datasets will be continuously updated. The config files for this dataset are contained in the InGVIO code configuration in path 'config/fw_zed2i_f9p'.

1. System Requirements

1.1 Support of C++ 14 Features

The compiler should at least support c++14 standards.

1.2 ROS-Noetic System

InGVIO is developed under ROS-Noetic with its default OpenCV4 library. However, InGVIO should be working on ROS-Melodic with OpenCV3. In the future, we may add support to ROS 2.

1.3 Eigen Library

Eigen is a fantastic matrix computation library. InGVIO is developed under Eigen3.3.7. Other Eigen 3 versions should be OK for InGVIO.

1.4 SuiteSparse Library

We use SuiteSparse Library for sparse QR-decomposition in visual updates.

1.5 gnss_comm Library

A wrapper for GNSS messages in ROS. See gnss_comm. The fantastic optimization-based work GVINS also relies on this library. We reserve a copy of gnss_comm in this repo.

2. Build InGVIO

Download or clone this repo to your ROS workspace.

cd ~/ws_catkin
catkin_make

Source the setup file to let ROS recognize the related launch files.

source devel/setup.bash

3. Run with Our Fixed-Wing Datasets

First download and unzip our fixed-wing dataset to your environment.

The 'fw_zed2i_f9p' folder contains the configuration files for fixed-wing datasets. To run InGVIO in your environment, the following should be conducted first.

Please adjust and modify the paths in 'config/fw_zed2i_f9p/ingvio_mono.yaml' and 'config/fw_zed2i_f9p/ingvio_stereo.yaml' to the case in your environment.

If you want to record the output topics, please set your output dir in 'ingvio/launch/ingvio_mono, stereo_fw_record.launch' files.

To run with monocular camera, please enter:

roslaunch ingvio_estimator ingvio_mono_fw.launch

For stereo-case, please enter:

roslaunch ingvio_estimator ingvio_stereo_fw.launch

To record the output topics, you can directly use our script file by:

roslaunch ingvio_estimator ingvio_mono_fw_record.launch
roslaunch ingvio_estimator ingvio_stereo_fw_record.launch

Rviz will be automatically launched. Run the ROS Bag to see the results:

rosbag play fw_easy.bag --pause

4. Run with GVINS Public Datasets

4.1 Configuration Settings

The GVINS datasets can be acquired from GitHub - HKUST-Aerial-Robotics/GVINS-Dataset. The config files for GVINS Datasets are already integrated in 'config/sportsfield'. It's valid for all 3 datasets provided by GVINS.

To run InGVIO in your environment, the following should be conducted first.

Please adjust and modify the paths in 'config/sports_field/ingvio_mono.yaml' and 'config/sports_field/ingvio_stereo.yaml' to the case in your environment.

If you want to record the output topics, please set your output dir in 'ingvio/launch/ingvio_mono, stereo_sf_record.launch' files.

To run with monocular camera, please enter:

roslaunch ingvio_estimator ingvio_mono_sf.launch

For stereo-case, please enter:

roslaunch ingvio_estimator ingvio_stereo_sf.launch

To record the output topics, you can directly use our script file by:

roslaunch ingvio_estimator ingvio_mono_sf_record.launch
roslaunch ingvio_estimator ingvio_stereo_sf_record.launch

Rviz will be automatically launched. Run the ROS Bag to see the results:

rosbag play sports_field.bag --pause
rosbag play complex_environment.bag --pause
rosbag play urban_driving.bag --pause

4.2 Parameter Tuning Hints

For sports_field.bag: Monocular/Stereo Case: max_pts_frame = 150/110, visual_noise = 0.12, gnss_chi2_test = false, imu_buffer_size = 3000.

For urban_driving.bag: Monocular/Stereo Case: max_pts_frame = 150/110, visual_noise = 0.12, gnss_chi2_test = true, imu_buffer_size = 3000. To avoid polluted GNSS measurements, a stronger version could be gnss_chi2_test = false, gnss_strong_reject = true.

For indoors_outdoors.bag: Monocular/Stereo Case: max_pts_frame = 150/110, visual_noise = 0.18, gnss_chi2_test = false, gnss_strong_reject = true.

Please modify or try other parameters if the above behave not well. Good parameters may be different under different environment settings.

5. Acknowledgements

The realization of the type-based index system in filter framework is inspired by OpenVINS. The author himself has learned lots of programming skills in SLAM by reading the codes of OpenVINS.

The gnss_comm provided by GVINS is a great wrapper in developing codes involving raw GNSS measurements in ROS.

6. License

This software is open-sourced under GPLv3 license. See GNU GPL v3.0 - GNU.

Please cite our paper if you use either our code or our fixed-wing datasets.

ingvio's People

Contributors

changwuliu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ingvio's Issues

Question about invariant and consistent

Hi, great job and thanks for your open source!

I would like to ask that what is the difference between invariant and consistent in the context of EKF?

Hope to hear from you!

Clarification on RTK

In the paper, at the end of section V, you make the following statement:

The meter-level difference of the estimated path of GVINS [23] or InGVIO to the RTK ground truth is attributed to the inaccuracy of the atmospherical propagation models of the pseudo range.

If I am not mistaken, GVINS and InGVIO are using only pseudo-range and pseudo-range rate / Doppler shift measurements and no phase-range measurements, which would require ambiguity resolution. Did you exclude phase-range measurements from the RTK ground truth computation? If not, I would expect the meter-level difference because of considering phase-range measurements in RTK and less about the atmospherical modeling. Of course, improving atmospherical modeling will improve the result, but probably not close the gap to RTK in my view.

The derivation was based which form of quaternion? JPL or Hamilton

Hello, I wanna know that your derivation of all equations was in form of JPL or Hamilton quaternion. Because you referred to OpenVINS and it is based on JPL quaternion. Was the state transition matrix F also derived in form of JPL? I am looking forward to your reply.

About using vins-fusion to test the fw-dataset.

Sorry to disturb you.Have you ever used vins-fusion to test your dataset only in mode stereo+imu or the global-fusion mode. I found that the drift is so big.Maybe my config yaml is not right.Hope that if you have tested before,you can solve my problem.Thanks.

Clarification on proposition 2

Thanks a lot for providing the code on github and the paper on arxiv. I am studying the paper carefully and got stuck in section B on conditional infinitesimal symmetries of GVIO. If I understand it correctly, proposition 2 addresses the dot product of the pseudo-range rate measurements. It derives the infinitesimal symmetry of the pseudo-range rate measurements. What about the norm of the pseudo-range measurements? Is the infinitesimal symmetry of pseudo-range given by the one of the rate?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.