GNSS-SI (GNSS-Stereo-Inertial) fuses, in a tightly-coupled manner, GNSS measurements into the stereo-inertial ORB-SLAM3 pipeline. For more information about ORB-SLAM3, just check its original README.
If you use this in some academic work, please cite the related publication:
J. Cremona, J. Civera, E. Kofman, T. Pire, GNSS-stereo-inertial SLAM for arable farming. Journal of Field Robotics, 2023. DOI: https://doi.org/10.1002/rob.22232
@article{cremona2023gnss,
author = {Cremona, Javier and Civera, Javier and Kofman, Ernesto and Pire, Taihú},
title = {GNSS-stereo-inertial SLAM for arable farming},
journal = {Journal of Field Robotics},
volume = {41},
number = {7},
pages = {2215-2225},
keywords = {agricultural robotics, GNSS-stereo-inertial SLAM, precision agriculture},
doi = {https://doi.org/10.1002/rob.22232},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/rob.22232},
eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1002/rob.22232}
}
You can find a version of this article on arXiv: Link
This work is licensed GPLv3 license. For a list of all code/library dependencies (and associated licenses), please see Dependencies.md.
Extracted from ORB-SLAM3 README.
We have tested the library in Ubuntu 20.04, but it should be easy to compile in other platforms. A powerful computer (e.g. i7) will ensure real-time performance and provide more stable and accurate results.
We use the new thread and chrono functionalities of C++11.
We use Pangolin for visualization and user interface. Dowload and install instructions can be found at: https://github.com/stevenlovegrove/Pangolin.
We use OpenCV to manipulate images and features. Dowload and install instructions can be found at: http://opencv.org. Tested with OpenCV 4.2.0 and 4.4.0.
Required by g2o (see below). Download and install instructions can be found at: http://eigen.tuxfamily.org. Required at least 3.1.0.
We use modified versions of the DBoW2 library to perform place recognition and g2o library to perform non-linear optimizations. Both modified libraries (which are BSD) are included in the Thirdparty folder.
Required to convert GNSS measurements (latitude, longitude, altitude) to local cartesian coordinates. See GeographicLib.
Required to calculate the alignment of the trajectory with the ground truth. Required Numpy module.
Tested with ROS Noetic under Ubuntu 20.04.
We provide a script build.sh
to build the Thirdparty libraries and our library. Please make sure you have installed all required dependencies (see section 2). Execute:
chmod +x build.sh
./build.sh
Tested with ROS Noetic and Ubuntu 20.04.
- Add the path including Examples/ROS/ORB_SLAM3 to the ROS_PACKAGE_PATH environment variable. Open .bashrc file:
gedit ~/.bashrc
and add at the end the following line. Replace PATH by the folder where you cloned gnss-stereo-inertial-fusion:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/gnss-stereo-inertial-fusion/Examples/ROS
- Execute
build_ros.sh
script:
chmod +x build_ros.sh
./build_ros.sh
A Dockerfile has been added to facilitate deployment and execution via Docker containers. Try running:
docker build --rm -t gnss_si:ros_noetic .
Run the system:
./run.sh -s <YAML_CONFIG_FILE> -l <LAUNCH_FILE> <ROSBAG_FILE>
To evaluate the system using the Rosario Dataset, just run:
./run.sh -s Examples/Stereo-Inertial/rosario_dataset/Rosario_3_0.yaml -l Examples/ROS/GNSS_SI/launch/rosario.launch sequence01.bag
Some new options were added with respect to ORB-SLAM3:
System.UseGlobalMeas
:1
to use GNSS measurements,0
to deactivate. Default:0
System.GPSSimulatedNoise
: you can add Gaussian noise to GNSS measurements. This value represents the std deviation of the zero-mean Gaussian distribution. The covariance matrix is defined as a diagonal matrix, and the elements in the diagonal aresigma = std_dev^2
. When this value is0
, the original measurement is used (with the original covariance matrix).System.t_b_g
: 3D vector, it represents the position of the GPS antenna in the body frame.
Example:
System.UseGlobalMeas: 1
System.GPSSimulatedNoise: 0.5
System.t_b_g: !!opencv-matrix
rows: 3
cols: 1
dt: f
data: [0.49183,
0.01953,
-0.33484]
Source code has been modified respect to the version used to make experiments for the paper. See CHANGELOG.