OKVIS
|
Welcome to OKVIS: Open Keyframe-based Visual-Inertial SLAM.
This is the Author's implementation of the [1] and [3] with more results in [2].
[1] Stefan Leutenegger, Simon Lynen, Michael Bosse, Roland Siegwart and Paul Timothy Furgale. Keyframe-based visual–inertial odometry using nonlinear optimization. The International Journal of Robotics Research, 2015.
[2] Stefan Leutenegger. Unmanned Solar Airplanes: Design and Algorithms for Efficient and Robust Autonomous Operation. Doctoral dissertation, 2014.
[3] Stefan Leutenegger, Paul Timothy Furgale, Vincent Rabaud, Margarita Chli, Kurt Konolige, Roland Siegwart. Keyframe-Based Visual-Inertial SLAM using Nonlinear Optimization. In Proceedings of Robotics: Science and Systems, 2013.
Note that the codebase that you are provided here is free of charge and without any warranty. This is bleeding edge research software.
Also note that the quaternion standard has been adapted to match Eigen/ROS, thus some related mathematical description in [1,2,3] will not match the implementation here.
If you publish work that relates to this software, please cite at least [1].
The 3-clause BSD license (see file LICENSE) applies.
This is a pure cmake project.
You will need to install the following dependencies,
sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
sudo apt-get install libboost-dev libboost-filesystem-dev
sudo apt-get install libopencv-dev
git clone https://github.com/ethz-asl/libvisensor.git cd libvisensor ./install_libvisensor.sh
then download and expand the archive:
wget https://www.doc.ic.ac.uk/~sleutene/software/okvis-1.1.3.zip unzip okvis-1.1.3.zip && rm okvis-1.1.3.zip
Or, if you were given bitbucket access, clone the repository:
git clone git@github.com:ethz-asl/okvis.git
or
git clone https://github.com/ethz-asl/okvis.git
To change the cmake build type for the whole project use:
mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. make -j8
NOTE: if you want to use the library, install the project (default or somewhere else), so the dependencies can be resolved.
make install
You will find a demo application in okvis_apps. It can process datasets in the ASL/ETH format.
In order to run a minimal working example, follow the steps below:
./okvis_app_synchronous path/to/okvis/config/config_fpga_p2_euroc.yaml path/to/MH_01_easy/mav0/
In terms of coordinate frames and notation,
The output of the okvis library is the pose T_WS as a position r_WS and quaternion q_WS, followed by the velocity in World frame v_W and gyro biases (b_g) as well as accelerometer biases (b_a). See the example application to get an idea on how to use the estimator and its outputs (callbacks returning states).
The config folder contains example configuration files. Please read the documentation of the individual parameters in the yaml file carefully. You have various options to trade-off accuracy and computational expense as well as to enable online calibration.
If you would like to run the software/library on your own hardware setup, be aware that good results (or results at all) may only be obtained with appropriate calibration of the
To perform a calibration yourself, we recommend the following:
git fetch origin pull/3/head:request3 git checkout request3
Here's a minimal example of your CMakeLists.txt to build a project using OKVIS.
cmake_minimum_required(VERSION 2.8) set(OKVIS_INSTALLATION <path/to/install>) # point to installation # require OpenCV find_package( OpenCV COMPONENTS core highgui imgproc features2d REQUIRED ) include_directories(BEFORE ${OpenCV_INCLUDE_DIRS}) # require okvis find_package( okvis 1.1 REQUIRED) include_directories(${OKVIS_INCLUDE_DIRS}) # require brisk find_package( brisk 2 REQUIRED) include_directories(${BRISK_INCLUDE_DIRS}) # require ceres list(APPEND CMAKE_PREFIX_PATH ${OKVIS_INSTALLATION}) find_package( Ceres REQUIRED ) include_directories(${CERES_INCLUDE_DIRS}) # require OpenGV find_package(opengv REQUIRED) # VISensor, if available list(APPEND CMAKE_MODULE_PATH ${OKVIS_INSTALLATION}/lib/CMake) find_package(VISensor) if(VISENSORDRIVER_FOUND) message(STATUS "Found libvisensor.") else() message(STATUS "libvisensor not found") endif() # now continue with your project-specific stuff...
The developpers will be happy to assist you or to consider bug reports / feature requests. But questions that can be answered reading this document will be ignored. Please contact s.leu. tene gger@ impe rial. ac.u k