/gnssFGO

This is the official repo of the project gnssFGO.

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

gnssFGO: an online and time-centric factor graph optimization for GNSS/Multi-sensor vehicle localization

Update 16.08.2024: End of Life of this repository in the rwth-irt account.

This repository will be archived due to administration reason.

It will be continuously maintained at https://github.com/hz658832/gnssFGO

Update 25.07.2024

  1. The docker is ready in the folder docker. More information, see README.md in the docker folder.
  2. A docker image can be pulled from
docker pull haomingac/gnssfgo:latest
  1. Using docker compose is recommended for visualization tools.
  2. There are bring-up launches available: e.g.,
ros2 launch online_fgo aachen_lc_all.launch.py
  1. Please download the dataset (see below) and change the bag path in the launch file. Or, you can set an env. variable
export BAG_PATH="path to bag"
export START_OFFSET="xx"
  1. There is a mapviz configuration file in the launch folder that can be loaded.

Video Demonstration (click the figure):

IMAGE ALT TEXT

This is the official implementation of gnssFGO using the general framework onlineFGO based on GTSAM, in which a general time-centric factor graph optimization with continuous-time trajectory representation using Gaussian process regression for online applications is implemented. The goal of this framework is to build a fundamental time-centric graph-optimization state estimator for online applications while doing research on:

  1. multi-sensor fusion to improve the robustness of vehicle localization in harsh environments
  2. Fusing both tightly coupled and loosely coupled GNSS observations
  3. Fusing lidar odometries
  4. Fusing visual odometries
  5. Fusing uwb
  6. etc.
  7. advanced inference for e.g., online sensor noise identification and hyper-parameter tuning (onging works)

Call for collaborations, contact: haoming.zhang@rwth-aachen.de


Dependencies (mostly as submodules):

  1. ros2
  2. irt_nav_common
  3. irt_gnss_preprocessing
  4. adapted GTSAM
  5. adapted LIO-SAM
  6. Eigen3
  7. novatel_oem7_msgs
  8. ublox_msgs
  9. ublox_serialization
  10. adapted mapviz (optional)

Papers using this package

[1] Haoming Zhang, Chih-Chun Chen, Heike Vallery and Timothy D. Barfoot, GNSS/Multi-Sensor Fusion Using Continuous-Time Factor Graph Optimization for Robust Localization, submitted to IEEE T-RO, arxiv, DOI: 10.48550/arXiv.2309.11134 (cannot be viewed in chrome due to large vector graphics)

[2] Haoming Zhang, Zhanxin Wang and Heike Vallery, Learning-based NLOS Detection and Uncertainty Prediction of GNSS Observations with Transformer-Enhanced LSTM Network, accepted at the IEEE ITSC2023, arxiv, DOI: 10.48550/arXiv.2309.00480 (cannot be viewed in chrome due to large vector graphics)

For more information and sample request, please contact haoming.zhang@rwth-aachen.de


How to start

  1. Download the datasets
  2. Install ros2 (recommend: rolling or humble)
  3. Clone this repo with submodules in your colcon workspace
git clone --recursive https://github.com/rwth-irt/gnssFGO.git
  1. compile
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

How to run

  1. When using the datasets, launch irt_gnss_preprocess
  • For data in AC:
ros2 launch irt_gnss_preprocessing gnss_preprocessor.launch.py
  • For the rest:
ros2 launch irt_gnss_preprocessing deloco_preprecessor.launch.py 
  1. Launch onlineFGO
  • For loosely coupled GNSS fusion AC:
ros2 launch online_fgo aachen_lc.launch.py
  • For tightly coupled GNSS fusion AC:
ros2 launch online_fgo aachen_tc.launch.py
  1. Play ros bag
ros2 bag play AC --clock --start-offset 60
  1. (optional) Visualization in Mapviz (adapted from the official version)
ros2 launch mapviz mapviz.launch.py
  1. (optinal) If LIOIntegrator is used
ros2 launch lio_sam fgorun.launch.py 

ToDos:

  1. Wiki
  2. Clean code base and move general utilities to irt_nav_common
  3. Fix bugs for GNSS carrier phase integration
  4. Implement visual odometry