{"id":17274944,"url":"https://github.com/strasdat/scavislam","last_synced_at":"2025-04-07T10:28:14.908Z","repository":{"id":1975021,"uuid":"2906530","full_name":"strasdat/ScaViSLAM","owner":"strasdat","description":"This is a general and scalable framework for visual SLAM. It employs \"Double Window Optimization\" (DWO).","archived":false,"fork":false,"pushed_at":"2017-05-10T21:37:16.000Z","size":2969,"stargazers_count":337,"open_issues_count":39,"forks_count":133,"subscribers_count":64,"default_branch":"master","last_synced_at":"2025-03-31T09:05:09.816Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strasdat.png","metadata":{"files":{"readme":"README","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":"2011-12-03T19:08:50.000Z","updated_at":"2024-12-05T00:18:35.000Z","dependencies_parsed_at":"2022-09-09T09:41:27.202Z","dependency_job_id":null,"html_url":"https://github.com/strasdat/ScaViSLAM","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strasdat%2FScaViSLAM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strasdat%2FScaViSLAM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strasdat%2FScaViSLAM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strasdat%2FScaViSLAM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strasdat","download_url":"https://codeload.github.com/strasdat/ScaViSLAM/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247634856,"owners_count":20970617,"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-10-15T08:55:04.795Z","updated_at":"2025-04-07T10:28:14.889Z","avatar_url":"https://github.com/strasdat.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"***** ScaViSLAM *****\n\nThis is a general and scalable framework for visual SLAM. It employs \n\"Double Window Optimization\" (DWO) as described in our ICCV paper:\n\nH. Strasdat, A.J. Davison, J.M.M. Montiel, and K. Konolige\n\"Double Window Optimisation for Constant Time Visual SLAM\"\nProceedings of the IEEE International Conference on Computer Vision, 2011.\n\nCheck out the related videos: \nhttp://youtu.be/90Rw3qDuWrw\nhttp://youtu.be/89CNVQ5azsc\n\nAt the moment it supports calibrated stereo rigs, and RGB-D cameras.\nMonocular SLAM is NOT supported (yet).\n\n*** NOTES AND WARNINGS / READ FIRST ***\n\nThis library is a research-level software which is in development. \nThis is NOT a release version. For sure, features will be added, \nbugs will be fixed and the API will change in the future.\n\nEven thought the software is in principal designed to run cross-platform,\nit most likely will only work on a recent 64-bit linux (without the need\nof adaptations...). It was tested on Ubuntu 11.10 - 64 bit.\n\n(Note there might be problems on 32bit linux related to Eigen3.\n http://eigen.tuxfamily.org/dox/TopicUnalignedArrayAssert.html.\n I followed the guide describe on this website, but I have not tested it on \n 32-bit linux yet. Any bug reports/patches are welcome!)\n\nWARNING: There is a bug concerning Eigen3.0 and gcc/g++-4.4. Make sure you install Eigen3.1 as explained below. \n(see: http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2011/04/msg00013.html\n\u0026  http://comments.gmane.org/gmane.comp.lib.eigen/2046)\nDetailed instructions are listed below.\n\n\n*** INSTALLATION ***\n\nFirst download sample image sequences. This will take a while, so do it first.\n(These are already rectified stereo images from the New College dataset: \nhttp://www.robots.ox.ac.uk/NewCollegeData/)\n\n\u003e\u003e\ncd MY_DATA_DIRECTORY\nmkdir newcollege\ncd newcollege\nwget -nH --cut-dirs=4 -r -l2 --no-parent -A \"*.pnm\" http://pub1.willowgarage.com/~konolige/data/NewCollege/FullData/StereoImages_1225720041.455302_to_1225720118.251935 \nwget -nH --cut-dirs=4 -r -l2 --no-parent -A \"*.pnm\" http://pub1.willowgarage.com/~konolige/data/NewCollege/FullData/StereoImages_1225720118.301927_to_1225720193.248630\nwget -nH --cut-dirs=4 -r -l2 --no-parent -A \"*.pnm\" http://pub1.willowgarage.com/~konolige/data/NewCollege/FullData/StereoImages_1225720193.298630_to_1225720268.945303\n\u003c\u003c\n\nIf you want to download a larger portion of the data, see the index at\n\nhttp://pub1.willowgarage.com/~konolige/data/NewCollege/FullData/\n\nBefore we start with the installation, we need to perform some preparations.\nScaViSLAM comes with GPU support. Indeed, GPU support is the default option.\n(Each GPU method has a CPU equivalent. However those are not tested very much).\nThus, there is an optional dependency on CUDA 4.1 or higher.\n\nNext, install dependencies:\n\n\u003e\u003e\nsudo apt-get install libeigen3-dev libsuitesparse-dev freeglut3-dev libglu-dev libglew-dev libboost-all-dev\n\u003c\u003c\n\nImportant: Make sure libsuitesparse-dev is installed before you install g2o.\n\n(If you use an older linux version, you might have to install eigen3 manually\nfrom: http://eigen.tuxfamily.org)\n\n\nIn order to avoid version conflicts, I would very much recommend to install all  \nlibraries locally in your home directory and not system wide. So create \na sub-directory in your home, e.g. \n\n\u003e\u003e\nmkdir $HOME/svslocal \n\u003c\u003c\n\nNow checkout/clone the ScaViSLAM repository.\n\n\u003e\u003e\ncd MY_SOFTWARE_DIRECTORY\ngit clone git://github.com/strasdat/ScaViSLAM.git\n\u003c\u003c\n\nNow, enter the project directory\n\n\u003e\u003e\ncd ScaViSLAM\n\u003c\u003c\n\nand then create and enter the directory for EXTERNAL libraries:\n\n\u003e\u003e\nmkdir EXTERNAL\ncd EXTERNAL\n\u003c\u003c\n\nCheck out and install g2o:\n\n\u003e\u003e\ngit clone git://github.com/strasdat/g2o.git\ncd g2o\nmkdir svs_build\ncd svs_build\ncmake .. -DCMAKE_INSTALL_PREFIX:PATH=$HOME/svslocal\nmake -j4\nmake install\ncd ../..\n\u003c\u003c\n\nDownload and install opencv (version 2.4.2) inside EXTERNAL:\n\n\u003e\u003e\nwget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2\ntar xvf OpenCV-2.4.2.tar.bz2\ncd OpenCV-2.4.2\nmkdir svs_build\ncd svs_build\ncmake .. -DCMAKE_INSTALL_PREFIX:PATH=$HOME/svslocal\nmake -j4\nmake install\ncd ../..\n\u003c\u003c\n\nClone and install Pangolin inside EXTERNAL\n\n\u003e\u003e\ngit  clone git://github.com/strasdat/Pangolin.git\ncd Pangolin\nmkdir svs_build\ncd svs_build\ncmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX:PATH=$HOME/svslocal\nmake -j4\nmake install\ncd ../..\n\u003c\u003c\n\nClone and install Sophus in folder EXTERNAL\n\n\u003e\u003e\ngit clone git://github.com/strasdat/Sophus.git\ncd Sophus\ngit checkout a621ff\nmkdir svs_build\ncd svs_build\ncmake .. -DCMAKE_INSTALL_PREFIX:PATH=$HOME/svslocal\nmake -j4\nmake install\ncd ../..\n\u003c\u003c\n\nInstall VisionTools in folder EXTERNAL\n\n\u003e\u003e\ngit clone git://github.com/strasdat/VisionTools.git\ncd VisionTools\nmkdir svs_build\ncd svs_build\ncmake .. -DCMAKE_PREFIX_PATH:PATH=$HOME/svslocal -DCMAKE_INSTALL_PREFIX:PATH=$HOME/svslocal\nmake -j4\nmake install\n\u003c\u003c\n\nMove to main project folder \"ScaViSLAM\" and install ScaViSLAM:\n\n\u003e\u003e\ncd ../../../\nmkdir svs_build\ncd svs_build\ncmake .. -DCMAKE_PREFIX_PATH:PATH=$HOME/svslocal\nmake -j4\n\u003c\u003c\n\nIn case you would like to compile ScaViSLAM WITHOUT CUDA support, \nturn CUDA_SUPPORT to OFF in the CMakeLists.txt file.\n\nMake sure the \"New College\" data set is downloaded completely.\nThen add a sym-link inside \"ScaViSLAM/data\":\n\n\u003e\u003e\ncd ../data\nln -s PATH_TO_MY_DATA_DIRECTORY/newcollege/(subdirectory) newcollege\n\u003c\u003c\n\nWhere subdirectory contains the image sequence directory.  \nIf you want to run a longer sequence, consolidate the files into a\nsingle directory.\n\nRun ScaViSLAM on new college image sequence:\n\u003e\u003e\ncd ../svs_build\n./stereo_slam ../data/newcollege.cfg\n\u003c\u003c\n\n\n*** HOW TO USE A RGB-D CAMERA? ***\n\nFirst note, that the use of RGB-D cameras in ScaViSLAM is not very well tested and\nvery experimental! (ScaViSLAM is well tested in stereo-camera mode on the New College\nseqeunce.)\n\nAt the moment, only RGB-D cameras following the PrimeSense reference design\n(e.g. Ausus Xtion PRO LIVE) are supported.\nFirst, you need to install PCL (which includes OpenNI):\n\n\u003e\u003e\nsudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl\nsudo apt-get update\nsudo apt-get install libpcl-all\n\u003c\u003c\n\nReinstall ScaViSLAM with PCL support:\n\n\u003e\u003e\ncd MY_SOFTWARE_DIRECTORY\ncd /ScaViSLAM/\nmkdir svs_build_with_pcl\ncd svs_build_with_pcl\ncmake  -DPCL_SUPPORT=ON ..\nmake -j8\n\u003e\u003e\n\nTry out ScaViSLAM with your RGB-D camera life:\n\n\u003e\u003e\n./stereo_slam ../data/rgbd-Live.cfg\n\u003c\u003c\n\nDump RGB-D data to the hard disk (to ../data/out; create this directory or \nset an appropriate sym-link):\n\n\u003e\u003e\n./dump_rgbd ../data/rgbd_live.cfg \n\u003c\u003c\n\nFinally, you can process the saved image sequence by adapting the configuration \nfiles \"../data/rgbd_example.cfg\". Basically, you have to point\n\"framepipe.path_str\" to the saved images.\n\n\n*** WHAT ABOUT LIVE STEREO CAMERAS? ***\n\nThis is more tricky since we need to make sure that the image stream is \nrectified. Some adaptation in the code might be necessary...\n\n\n*** HOW TO CONTRIBUTE? ***\n\nYou are welcome to report bugs and request features at: \nhttps://github.com/strasdat/ScaViSLAM/issues.\nTo do so click on \"New Issue\", fill out the form and select the appropriate\nlabel (\"Bug\" or \"Feature Request\").\nPlease feel free to also browse through the \"ToDo\" and \"Future Features\" \nissues, so you can find out which features are planned to be included \nsoon (\"ToDo\") or eventually (\"Future Features\").\n\nThe best and easiest  way to contribute is to use the \"github\" way:\n - Register at github (for free).\n - Got to: \"https://github.com/strasdat/ScaViSLAM\"\n - Click on \"Fork\" to create a Fork of ScaViSLAM.\n - Commit and push changes into your Fork.\n - Click on \"Pull Request\" in order to ask me whether I would like to merge\n   the changes into the ScaViSLAM master branch.\n\n(If it is only a small change/bug fix, you could also simply send me\npatch etc.)\n\nIn order to maximize the likelihood that I will accept your pull request,\nplease read carefully through the coding style guide:\n\n\n*** CODING STYLE GUIDE ***\n\nThe coding style is largely influenced by the google c++ coding style guide:\nhttp://google-styleguide.googlecode.com/svn/trunk/cppguide.xml\n(Reading the document is insightful in any case, even if you don't agree with\n\"google's\" decision!)\n\nI am especially strict about the following rules:\n\n - \"When defining a function, parameter order is: inputs, then outputs.\"\n - \"All parameters passed by reference must be labeled const.\"\n   Thus, the following is NOT okay:\n   'void method(const Vector2d \u0026 in, Vector2d \u0026 out)'\n   Use this instead:\n   'void method(const Vector2d \u0026 in, Vector2d * out)'\n - \"Of the built-in C++ integer types, the only one used is int. If a program \n    needs a variable of a different size, use a precise-width integer type \n    from \u003cstdint.h\u003e, such as int16_t.\"\n - \"Use 0 for integers, 0.0 for reals, NULL for pointers, and '\\0' for chars.\"\n - \"We do not use C++ exceptions.\"\n - \"Use the specified order of declarations within a class: public: before \n    private:, methods before data members (variables), etc.\" \n - \"Use a struct only for passive objects that carry data; everything else \n    is a class.\"\n - \"Prefer small and focused functions.\"\n - \"Use only approved libraries and language extensions from C++11 (formerly \n    known as C++0x). Currently, none are approved.\"\n - \"We do not allow default function parameters, except in a few uncommon \n    situations...\"\n - \"Use prefix form (++i) of the increment and decrement operators with \n    iterators and other template objects.\"\n - \"We strongly recommend that you use const whenever it makes sense to do so.\"\n\nAt some points, I deviate from the C++ coding style guide:\n - 'Using namespace X;' is okay, but only within(!) the ScaViSLAM namespace.\n   Never pollute the general namespace '::'. \n   (However, do not use \"using namespace cv\" or 'using namespace pangolin'.) \n - I use 'boost::thread'.\n - In rare cases, it is okay to have public class members.\n - It is okay to use streams such as \"cout\", \"cerr\", \"stringstream\". (But \n   usually, I'd like to use \"cerr\" and friends only for debugging purposes...)\n\nI also deviate slightly from google's formatting. Therefore the following rule\nis the most important one:\n\n\"Use common sense and BE CONSISTENT.\n\nIf you are editing code, take a few minutes to look at the code around you and \ndetermine its style. If they use spaces around their if clauses, you should, \ntoo. If their comments have little boxes of stars around them, make your \ncomments have little boxes of stars around them too.\" \n\n(All cites in \"quotation marks\" are from the google coding style guide.)\n\nIf you would like to use automatic indentation, I recommend you to use\nthe QtCreator (2.4.0 or newer) for code editing. You can import the ScaViSLAM\ncode style using \"coding_style.xml\":\n * Open \"ScaViSLAM\" project in QtCreator.\n * Click on \"Projects\". (Select \"ScaViSLAM\" tap in case several projects are \n   open.)\n * Click on \"Editor Settings\". \n * Select \"Editor Settings: Custom\"\n * Click on \"Coding Style Settings--\u003eImport...\" and select \"coding_style.xml\".\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrasdat%2Fscavislam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrasdat%2Fscavislam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrasdat%2Fscavislam/lists"}