eqvio
1.1
|
This repository contains the implementation of EqVIO: An Equivariant Filter (EqF) for Visual Inertial Odometry (VIO).
sudo apt install libeigen3-dev
sudo apt install libyaml-cpp-dev
sudo apt install freeglut3-dev
sudo apt install doxygen
EqVIO is designed to be built as a cmake project rather than a ROS package. Assuming all prerequisites are installed and you are in the root folder of the repository, then you can follow these steps to build:
Note: on older machines, it may be better to use -j4
or even -j2
instead of -j8
. There are a number of flags that can be passed to cmake to influence the build process. The key flags related to eqvio are all prefixed EQVIO_*
. For example, if you wish to build the documentation yourself, you could use cmake .. -DEQVIO_BUILD_DOCS=1
instead of cmake ..
.
Some of the geometry functions use c++20 concepts. If you cannot install a c++20 compatible compiler, then your other option is to disable concepts with -DEQVIO_SUPPORT_CONCEPTS=0
. Note that this project still uses c++17 features, and there are no plans to create workarounds.
The build process will create an executable called eqvio_opt
in the build directory. To see the help, simply run ./build/eqvio_opt --help
. The required arguments are the dataset file/directory name, and the eqvio configuration file. There are also many optional arguments to adjust how the program runs. Different types of datasets are distinguished by providing a value to --mode
(see the datasetReader page). An example command is
This will create an output directory with a timestamp in the current directory, containing csv files with all the different states of eqvio. The --display
flag is required to create live animations of the VIO state estimate.
There are a few python scripts provided to help with running and evaluating datasets. These are meant for evaluation of EqVIO over common robotics datasets, particularly over the EuRoC and UZHFPV datasets. They can also be used for some other datasets compatible with EqVIO.
Suppose you want to run EqVIO over the EuRoC sequence V1_01_easy and analyse the results you could use:
This will first run EqVIO over the dataset and then analyse the results. Note that the --display
option is not used and the usual EqVIO commandline output is suppressed, so there is no output until the running and analysis are complete. The results are then saved to a new directory created in the dataset directory. In this case, ~/datasets/V1_01_easy/results/
. The results directory includes a range of useful and interesting figures and information:
If no groundtruth is available, then the plots are all still generated, except for the trajectory_error.pdf. The true trajectory is obviously not shown in this case, since it is not known.
The python scripts can also handle multiple sequences from the same dataset. Simply put the names of all the sequences you want to test in the command:
This will generate results for each dataset. These results can then be summarised into one file:
This generates a new file which collects all the most important results in one place for each dataset, such as position and attitude RMSE, mean processing time, and scale error.
The other way to run multiple datasets is to create a yaml file with information on the datasets you wish to analyse. An example is provided in scripts/euroc_sequences.yaml
. As shown, this also allows you to add information such as the desired dataset mode and start time. To run over all the EuRoC datasets and analyse the results: