{"id":13528619,"url":"https://github.com/ethz-asl/okvis","last_synced_at":"2025-05-16T06:04:27.049Z","repository":{"id":41384211,"uuid":"51096220","full_name":"ethz-asl/okvis","owner":"ethz-asl","description":"OKVIS: Open Keyframe-based Visual-Inertial SLAM.","archived":false,"fork":false,"pushed_at":"2021-08-24T10:19:14.000Z","size":5047,"stargazers_count":1295,"open_issues_count":66,"forks_count":539,"subscribers_count":82,"default_branch":"master","last_synced_at":"2025-05-16T06:04:01.900Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethz-asl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-04T18:30:39.000Z","updated_at":"2025-05-13T06:42:03.000Z","dependencies_parsed_at":"2022-07-17T02:00:41.789Z","dependency_job_id":null,"html_url":"https://github.com/ethz-asl/okvis","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fokvis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fokvis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fokvis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fokvis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethz-asl","download_url":"https://codeload.github.com/ethz-asl/okvis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478186,"owners_count":22077675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T07:00:21.899Z","updated_at":"2025-05-16T06:04:27.023Z","avatar_url":"https://github.com/ethz-asl.png","language":"C++","funding_links":[],"categories":["Multi-Sensor Fusion","OpenSource-SLAM","SLAM \u0026 State Estimation","3. Visual Inertial SLAM","Perception, Mapping \u0026 SLAM","四 视觉SLAM从入门到进阶","视觉SLAM","OpenSource SLAM (Simultaneous Localization And Mapping)"],"sub_categories":["3.3 Stereo","Code","UAV Trajectory Optimization for model completeness"],"readme":"README                        {#mainpage}\r\n======\r\n\r\nWelcome to OKVIS: Open Keyframe-based Visual-Inertial SLAM. \r\n\r\nThis is the Author's implementation of the [1] and [3] with more results in [2].\r\n\r\n[1] Stefan Leutenegger, Simon Lynen, Michael Bosse, Roland Siegwart and Paul \r\n    Timothy Furgale. Keyframe-based visual–inertial odometry using nonlinear \r\n    optimization. The International Journal of Robotics Research, 2015.\r\n\r\n[2] Stefan Leutenegger. Unmanned Solar Airplanes: Design and Algorithms for \r\n    Efficient and Robust Autonomous Operation. Doctoral dissertation, 2014.\r\n\r\n[3] Stefan Leutenegger, Paul Timothy Furgale, Vincent Rabaud, Margarita Chli, \r\n    Kurt Konolige, Roland Siegwart. Keyframe-Based Visual-Inertial SLAM using \r\n    Nonlinear Optimization. In Proceedings of Robotics: Science and Systems, \r\n    2013.\r\n\r\nNote that the codebase that you are provided here is free of charge and without \r\nany warranty. This is bleeding edge research software.\r\n\r\nAlso note that the quaternion standard has been adapted to match Eigen/ROS, \r\nthus some related mathematical description in [1,2,3] will not match the \r\nimplementation here.\r\n\r\nIf you publish work that relates to this software, please cite at least [1].\r\n\r\n### License ###\r\n\r\nThe 3-clause BSD license (see file LICENSE) applies.\r\n\r\n### How do I get set up? ###\r\n\r\nThis is a pure cmake project. \r\n\r\nYou will need to install the following dependencies,\r\n\r\n* CMake,\r\n\r\n        sudo apt-get install cmake\r\n\r\n* google-glog + gflags,\r\n\r\n        sudo apt-get install libgoogle-glog-dev\r\n   \r\n* BLAS \u0026 LAPACK,\r\n\r\n        sudo apt-get install libatlas-base-dev\r\n\r\n* Eigen3,\r\n\r\n        sudo apt-get install libeigen3-dev\r\n\r\n* SuiteSparse and CXSparse,\r\n\r\n        sudo apt-get install libsuitesparse-dev\r\n\r\n* Boost,\r\n\r\n        sudo apt-get install libboost-dev libboost-filesystem-dev\r\n\r\n* OpenCV 2.4-3.0: follow the instructions on http://opencv.org/ or install \r\n  via \r\n \r\n        sudo apt-get install libopencv-dev\r\n\r\n* Optional: use the the package with the Skybotix VI sensor.\r\n  Note that this requires a system install, not just as ROS package. Also note \r\n  that Skybotix OSX support is experimental (checkout the feature/osx branch).\r\n\r\n        git clone https://github.com/ethz-asl/libvisensor.git\r\n        cd libvisensor\r\n        ./install_libvisensor.sh\r\n\r\nthen download and expand the archive:\r\n\r\n    wget https://www.doc.ic.ac.uk/~sleutene/software/okvis-1.1.3.zip\r\n    unzip okvis-1.1.3.zip \u0026\u0026 rm okvis-1.1.3.zip\r\n\r\nOr, if you were given bitbucket access, clone the repository:\r\n\r\n    git clone git@github.com:ethz-asl/okvis.git\r\n\r\nor\r\n\r\n    git clone https://github.com/ethz-asl/okvis.git\r\n\r\n### Building the project ###\r\n\r\nTo change the cmake build type for the whole project use:\r\n\r\n    mkdir build \u0026\u0026 cd build\r\n    cmake -DCMAKE_BUILD_TYPE=Release ..\r\n    make -j8\r\n\r\nNOTE: if you want to use the library, install the project (default or somewhere\r\nelse), so the dependencies can be resolved. \r\n\r\n    make install\r\n    \r\n### Running the demo application ###\r\n\r\nYou will find a demo application in okvis_apps. It can process datasets in the \r\nASL/ETH format.\r\n\r\nIn order to run a minimal working example, follow the steps below:\r\n\r\n1. Download a dataset of your choice from \r\n   http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets. \r\n   Assuming you downloaded MH_01_easy/. \r\n   You will find a corresponding calibration / estimator configuration in the \r\n   config folder.\r\n\r\n2. Run the app as\r\n\r\n        ./okvis_app_synchronous path/to/okvis/config/config_fpga_p2_euroc.yaml path/to/MH_01_easy/mav0/\r\n\r\n### Outputs and frames\r\n\r\nIn terms of coordinate frames and notation, \r\n\r\n* W denotes the OKVIS World frame (z up), \r\n* C\\_i denotes the i-th camera frame \r\n* S denotes the IMU sensor frame\r\n* B denotes a (user-specified) body frame.\r\n\r\nThe output of the okvis library is the pose T\\_WS as a position r\\_WS and quaternion \r\nq\\_WS, followed by the velocity in World frame v\\_W and gyro biases (b_g) as well as \r\naccelerometer biases (b_a). See the example application to get an idea on how to\r\nuse the estimator and its outputs (callbacks returning states).\r\n\r\n### Configuration files ###\r\n\r\nThe config folder contains example configuration files. Please read the\r\ndocumentation of the individual parameters in the yaml file carefully. \r\nYou have various options to trade-off accuracy and computational expense as well \r\nas to enable online calibration.\r\n\r\n### HEALTH WARNING: calibration ###\r\n\r\nIf you would like to run the software/library on your own hardware setup, be \r\naware that good results (or results at all) may only be obtained with \r\nappropriate calibration of the \r\n\r\n* camera intrinsics,\r\n* camera extrinsics (poses relative to the IMU), \r\n* knowledge about the IMU noise parameters,\r\n* and ACCURATE TIME SYNCHRONISATION OF ALL SENSORS.\r\n\r\nTo perform a calibration yourself, we recommend the following:\r\n\r\n* Get Kalibr by following the instructions here \r\n  https://github.com/ethz-asl/kalibr/wiki/installation . If you decide to build \r\n  from source and you run ROS indigo checkout pull request 3:\r\n\r\n        git fetch origin pull/3/head:request3\r\n        git checkout request3\r\n\r\n* Follow https://github.com/ethz-asl/kalibr/wiki/multiple-camera-calibration to \r\n  calibrate intrinsic and extrinsic parameters of the cameras. If you receive an \r\n  error message that the tool was unable to make an initial guess on focal \r\n  length, make sure that your recorded dataset contains frames that have the \r\n  whole calibration target in view.\r\n\r\n* Follow https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration to get \r\n  estimates for the spatial parameters of the cameras with respect to the IMU.\r\n\r\n### Using the library\r\n\r\nHere's a minimal example of your CMakeLists.txt to build a project using\r\nOKVIS.\r\n\r\n    cmake_minimum_required(VERSION 2.8)\r\n    \r\n    set(OKVIS_INSTALLATION \u003cpath/to/install\u003e) # point to installation\r\n    \r\n    # require OpenCV\r\n    find_package( OpenCV COMPONENTS core highgui imgproc features2d REQUIRED )\r\n    include_directories(BEFORE ${OpenCV_INCLUDE_DIRS}) \r\n    \r\n    # require okvis\r\n    find_package( okvis 1.1 REQUIRED)\r\n    include_directories(${OKVIS_INCLUDE_DIRS})\r\n    \r\n    # require brisk\r\n    find_package( brisk 2 REQUIRED)\r\n    include_directories(${BRISK_INCLUDE_DIRS})\r\n    \r\n    # require ceres\r\n    list(APPEND CMAKE_PREFIX_PATH ${OKVIS_INSTALLATION})\r\n    find_package( Ceres REQUIRED )\r\n    include_directories(${CERES_INCLUDE_DIRS}) \r\n    \r\n    # require OpenGV\r\n    find_package(opengv REQUIRED)\r\n    \r\n    # VISensor, if available\r\n    list(APPEND CMAKE_MODULE_PATH ${OKVIS_INSTALLATION}/lib/CMake)\r\n    find_package(VISensor)\r\n    if(VISENSORDRIVER_FOUND)\r\n      message(STATUS \"Found libvisensor.\")\r\n    else()\r\n      message(STATUS \"libvisensor not found\")\r\n    endif()\r\n    \r\n    # now continue with your project-specific stuff...\r\n\r\n### Contribution guidelines ###\r\n\r\n* Contact s.leutenegger@imperial.ac.uk to request access to the bitbucket \r\n  repository.\r\n\r\n* Programming guidelines: please follow \r\n  https://github.com/ethz-asl/programming_guidelines/wiki/Cpp-Coding-Style-Guidelines .\r\n\t\r\n* Writing tests: please write unit tests (gtest).\r\n\r\n* Code review: please create a pull request for all changes proposed. The pull \r\n  request will be reviewed by an admin before merging.\r\n\r\n### Support ###\r\n\r\nThe developpers will be happy to assist you or to consider bug reports / feature \r\nrequests. But questions that can be answered reading this document will be \r\nignored. Please contact s.leutenegger@imperial.ac.uk.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethz-asl%2Fokvis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethz-asl%2Fokvis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethz-asl%2Fokvis/lists"}