gnssFGO: an online and time-centric factor graph optimization for GNSS/Multi-sensor vehicle localization
It will be continuously maintained at https://github.com/hz658832/gnssFGO
- The docker is ready in the folder docker. More information, see README.md in the docker folder.
- A docker image can be pulled from
docker pull haomingac/gnssfgo:latest
- Using docker compose is recommended for visualization tools.
- There are bring-up launches available: e.g.,
ros2 launch online_fgo aachen_lc_all.launch.py
- 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"
- There is a mapviz configuration file in the launch folder that can be loaded.
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:
- multi-sensor fusion to improve the robustness of vehicle localization in harsh environments
- Fusing both tightly coupled and loosely coupled GNSS observations
- Fusing lidar odometries
- Fusing visual odometries
- Fusing uwb
- etc.
- advanced inference for e.g., online sensor noise identification and hyper-parameter tuning (onging works)
Call for collaborations, contact: haoming.zhang@rwth-aachen.de
- ros2
- irt_nav_common
- irt_gnss_preprocessing
- adapted GTSAM
- adapted LIO-SAM
- Eigen3
- novatel_oem7_msgs
- ublox_msgs
- ublox_serialization
- adapted mapviz (optional)
[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)
Data available at: https://rwth-aachen.sciebo.de/s/OCEZPLE9wFHv1pp
[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
- Download the datasets
- Install ros2 (recommend: rolling or humble)
- Clone this repo with submodules in your colcon workspace
git clone --recursive https://github.com/rwth-irt/gnssFGO.git
- compile
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
- 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
- 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
- Play ros bag
ros2 bag play AC --clock --start-offset 60
- (optional) Visualization in Mapviz (adapted from the official version)
ros2 launch mapviz mapviz.launch.py
- (optinal) If LIOIntegrator is used
ros2 launch lio_sam fgorun.launch.py
- Wiki
- Clean code base and move general utilities to irt_nav_common
- Fix bugs for GNSS carrier phase integration
- Implement visual odometry